V 言語学習ノート
目次 :
[[toc]]です。
はじめに:vlang、未来の言語
フロントエンド、バックエンド、ビッグデータ、ブロックチェーン、人工知能など、社会のあらゆるシーンに浸透しているvlang(ブラング)。他のプログラミング言語を打ち負かし、2050年に世界を統一する。世界の共通語になり、人類は伝説の「バベルの塔」を再建し、飛躍的な技術の進歩を遂げることができたのだ・・・・・・。
--- 人民日報2050号より引用
序文
V语言
, ハッカーのためのプログラミング言語「Vlang」。
rustやzigは良いが、厳しすぎるし、アカデミックすぎる。
Vはどちらかというと、javascriptのようなクイックスタート言語に近く、あまり構造化されておらず、すぐに始められ、もちろんスピードも速いです。
Vのホームページに書かれている誇大広告の多くはまだ定着しておらず(CからVに自動的に移行するなど)、多くの人から偽のプロパガンダと呼ばれている、例えば:
まずプロパガンダに走り、それを実現するのが正しい戦略であり、人間は想像力の共同体である。
多くの人は見るから信じるのであって、信じるから見るという人もいる。
共産主義を信じる人は少数派かもしれないが、本当に信じている人は必ずいるし、星の火は草原の火を起こすことができるのと同じである。共産党がなければ、新しい中国もない。
コンピュータ数学者はVを少し軽薄に感じるかもしれませんが、ハッカーはこの言語を好きになると思います。
考えることは行動すること、あえて考えること、あえてやってみること、それがアートと数学の違いかもしれませんね。プログラミング言語は芸術か数学か?それが永遠の課題です。
私が考えるVの一番の特徴は、言語設計とプログラム開発の境界を曖昧にしたことだと思います。
自分でコンパイルして、3秒か5秒で再コンパイルすれば、コードはクリアになります。
Vの作者は、 Vコードのディレクトリ構造で 書き込みを行う:
コンパイラとvlibのコードは、できるだけシンプルで読みやすいものになるように心がけました。
Vの目標のひとつは、さまざまなレベルのコンパイラ開発者に開かれたものであることです。コンパイラは、一部の人にしか理解できない魔法の詰まったブラックボックスである必要はないのです。
Vコンパイラはモジュール化されており、他のアプリケーションで使用することができます。場所は、
cmd/v/
、vlib/v/
。Vコンパイラで作業するときに最も重要で便利なコマンドは、
v self
です。Vコンパイラをリビルドします。コンパイラの構造は非常にシンプルで、3つのステップで構成されています。
ASTのパース/生成 (
v.parser
) => 型のチェック (v.checker
) => C/JavaScript/機械語コードの生成 (v.gen
)
と思うかもしれません。
レキサーやパーサーを除けば、コアコードは数千行に過ぎません。作者がマーケティングを頑張ったとしか言いようがないし、公式サイトもかなりそれっぽい。
でも、このシンプルさがVのいいところだと思うんです。
Vを、コンパイラを持つ伝統的なポンコツプログラミング言語で、天下無双の無名本だと思わないでください。
Vueのように、参入障壁が低く、誰もが参加できるWebフロントエンドフレームワークとお考えください。
問題があれば、変えればいいだけです。
自分でやれば、たくさん食べられますよ。
美しい新世界は、ただ座って待っているものではなく、働く人たちが手を動かして創り出すものです。
v self
自分でコンパイルする
Vは v self
を使って簡単に自分でコンパイルすることができます。私の2015年版のAppleのノートパソコンでは、1回のコンパイルに5.63秒かかっています。
ソースコードとしてインストールすることをお勧めします。
git clone git@github.com:vlang/v.git
make
sudo ./v symlink
何か思いついたことがあれば、コンパイラや標準ライブラリのソースコードを直接改変してください。
その後、 v self
、自分でコンパイルしてください。要件がまとまったら、コミットして正式なソースコードにマージしてください。
今日、私はVを学んだばかりで、言語改善の提案として3つのマージリクエスト(1,2, 3)を立ち上げました: インターフェースに対するサポートのオプションの明示的宣言です。
私は英語が苦手なのですが、 DeepLの 翻訳機を使えば、中国語から英語に簡単に変換できるので、海外の友人と深いコミュニケーションをとることができます。
V スクリプトの作成
v init
プロジェクトを初期化した後、コンパイルスクリプトが必要です。
Vはbashの代わりにこのスクリプトを書くために使うことができます。
私のコンパイルスクリプトは以下の通りです。
#!/usr/bin/env -S v run
import v.vmod
fn sh(cmd string){
println("❯ $cmd")
print(execute_or_exit(cmd).output)
}
vm := vmod.decode( @VMOD_FILE ) or { panic(err) }
name := vm.name
sh('v -autofree -prod ${name}.v')
suffix := $if windows { '.exe' } $else { '' }
src := name + suffix
bin := join_path_single('bin',src)
mkdir('bin') or {}
mv(src, bin)?
println(' '+bin)
ファイルの変更を監視し、自動的にランを再開
スクリプトを一度書いて実行し、変更を監視して自動的に再起動させるのが私の習慣です。
vには、これを実現するために、 v watch run xx.v
。
./dev.sh
を使いやすくするために、以下のようなスクリプトを作成しました。
#!/usr/bin/env bash
DIR=$(dirname $(realpath "$0"))
cd $DIR
set -ex
NAME=$(cat v.mod|grep name|awk -F\' '{print $2}')
SH="v watch run $NAME.v"
exec $SH \
-i '.git' \
-i 'bin' \
-c -s --before "printf \"\e[90m❯ ${SH}\e[0m\n\""
プロジェクトのテンプレートは、 rmw-link/rmw-v-templateを参照してください。