VLとは
vvvv 上で動作する、VL というビジュアルプログラミング言語の開発が進んでいます。
https://vvvv.org/documentation/vl
VLの動画群を作っていこうと思いますが、テキストでもまとめていければと思い、理解途中ですがまとめていきます。
公式の主張と僕の所感が混ざっているので注意してください。
VL には vvvv にはない用語が結構あるので、用語解説も一緒に書こうと思いましたが長くなるので別投稿で書きます。
VLに興味ある人が見るとよい資料(どちらも公式)
- The Gray Book
- vvvv の girlpower/VL
背景
- とても複雑なプロジェクトでも vvvv が使われるようになっていきました。vvvvのキャパを超えるくらいに。
- それに伴い色々要望が出てきてそれを叶えたい
VL のターゲット層
- テキストコードよりもビジュアルコードを好む人
- インタラクティブなプロトタイピングプログラミングを好む人(編集/コンパイル/エラー修正/コンパイル/実行、みたいな)
- データフローでオブジェクト指向で関数型スタイルのプログラミング言語を求めている人
- 最終的にはVVVVユーザのみんなにVLに親しんでほしいと思っている
VLの特徴
-
VLは vvvv と独立した言語である
- VL で作ったノードや型を vvvv で使えますが、VL と vvvv は独立した言語です。
- vvvv の世界と、VL の世界をきちんと分けて考える必要があります。
-
静的型付けのビジュアルプログラミング言語
- 型推論してくれます
- まだ慣れていないだけでノウハウを貯めていけば恐らく解決しますが、意図しない型推論が起きたりして少しハマる事がたまにあります。
-
プログラミング言語であり、開発環境でもある
- Smalltalkのような感じをイメージするかもしれませんが、どちらかというと「VL」という言葉の指す物が、という意味合いです。
- コンパイルと実行を動的にできる
-
Nugetsが使えます
- Nugets とはパッケージマネージャで、これはライブラリのパッケージを管理して、インストールとかできるもの
-
vvvvで使用できるノードとデータタイプのライブラリとも捉えられる
- ノード群(パッケージ)をVLで作成し、vvvvで使えます
- 一つのパッチに(vvvv でも使用できる)複数のノードを定義できます。
- vvvv からシームレスに使用でき、vvvv に似ている所が多い
-
.NETのライブラリが使えます
- vvvv の時には vvvv の世界で使えるようにラップしていましたが、VLでは何もせずそのままノード群として使えるようになります。
- 巨大なプロジェクトでの可読性や保守性をサポートする仕組みがあります
-
ループが書ける
- vvvv はそのパラダイム上ループは自然な形では書けません。複数フレーム使用するか、Spectralノードを使用、C#で書く、などする必要がありました。
-
ステート(状態)を持つことができる
- vvvv は基本的にステートレスなので、前のフレームを FrameDelay で取ったり、S+H的なノード、QueueやParticleをストアとして扱いましたが、VLでは自然な形でステートを持てます
- VLではステートレスなパッチとステートフルなパッチを厳格に分けれます
-
VL上で自分で型を定義できる
- 例えば、Particle型みたいなのが、pos/vec/color/age、を持っている、みたいなのが定義できます。vvvvではC#で型を作るか、各値をzipしてunzipしてみたいな事をしていましたが自然な形で書くことができるようになります。
-
Genericsをサポートしています
- 例えば+というノードがあったとして、一つ定義したら String でも int でも適用できます。
- ただ、それをvvvvの世界には持っていく事はできません
-
VL の世界では、Spread と int が区別されます
- vvvv ではノードは基本的に全て Spreadable で、暗黙的に Spread 化され int は1要素だけの Spread と見るのが基本でした
- 将来的には vvvv のその概念を持ってくるかはまだ考え中
-
非同期に入力が取れます
- デバイスからの入力など。
- vvvv は完全にフレームベースドでした。
-
スレッドを分けれます
- vvvv ではC#書かないとマルチスレッドができませんでした。
- データフロー言語とマルチスレッドは相性がいいと思います。
感触
少しずつ慣れてきたという段階でまだ理解が浅いですが、言語としての正統進化だと感じます。
C#でノードを作ることがほぼ無くなると思います。
vvvv のフレームベースドで全てのノードは1フレームに1度しか評価されず、lazyな評価で下から辿っていく、という特徴は大きな制限にもなりますが利点も非常に多く、それに比べると VL ではバグが入り込む余地が当然増えるなどはあります。が、その辺りをきちんと認識しつつ、vvvv と適切に組み合わせたりVL自体の工夫によりいいとこ取りができそうだなと思っています。