無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

わたしがほんとうにほしかったGolangはVだった

昨日、Vという開発言語の話が流れてきました www.pavlog.tokyo Golangを超えるググらビリティの悪いやつですね。

リリースされたばっかりの言語らしく。公式を見る限りドキュメントはしっかりそろっているので言語仕様はなんとなく読むことができました。 vlang.io

Golangっぽいなにかです。基本的な仕様はGolangに近しいですね。mutあたりはrustで見た記憶があります。
言語仕様を見る限りgoroutineもどうやら対応されているらしく、go {func}で実行できるようです。いいっすね。

個人的に気になっているやつはGenericsと、Access modifiers。enumも標準サポートいいぞぉ。
Golangでもできなくはないんですが、GenericsはDI的にオブジェクト突っ込み分けしないとできないし、Accessコントロールは先頭が小文字かどうかで決まるし、enumは結局constだしで、微妙に面倒くさかったんですよね(´・ω・`)
言語仕様シンプルなのはGolangのすごくいいところなんですが、稀に回り道している感が否めないときがありました。

さて、さっそくこいつを触って見るんですが、冒頭のの記事と同じようにビルドで死ぬ始末(ヽ´ω`) エラー内容見てみると、どうやらビルド内部でパスが固定されてるみたいっす。

/home/shinoyu//code/v/ not found. Run:
git clone https://github.com/vlang/v ~/code/v

Makefileを見ても特に変な記述はないんですよね。
https://github.com/vlang/v/blob/master/compiler/Makefile

しかたないので、githubに書いてある通りに、固定でパスを切って対応してやります。

git clone https://github.com/vlang/v ~/code/v
cd ~/code/v/compiler
make

はい通るー。固定か、うーん。まあいいか(´・ω・`)

できあがったものは./vで実行できます。が、いちいちパス指定するのは面倒なので、公式の仰せのとおりに/usr/local/bin以下にシンボリックリンク貼ってやります。
sudo ln -s ~/code/v/compiler/v /usr/local/bin/v これでいちいちパス指定しなくてもvだけで実行することができます。

実行するとREPLが動きますね。

V 0.1.0
Use Ctrl-D to exit
For now you have to use println() to print values, this will be fixed soon

>>> println('hello')
hello

はい。REPLだと今はprintlnしか動かないらしいっす(´・ω・`)ざんねん

ファイルに書いてそれを呼ぶ形式だとちゃんと機能します。とりあえずなにか動かしたい場合はv/exmapleの下にあるやつを実行すればOK。

v run example/news_fetcher.v
============running news_fetcher==============================
[20275705, 20273125, 20272346, 20274679, 20275051, 20275097, 20276070, 20274475, 20275684, 20270309, 20274035, 20275225, 20270990, 20275929, 20270840, 20273446, 20274666, 20275238, 20268368, 20269376, 20273936, 20270800, 20264911, 20268974, 20271322, 20270805, 20273228, 20271779, 20271821, 20272557, 20270969, 20272692, 20269293, 20266566, 20270467, 20264999, 20260863, 20267790, 20265155, 20269626, 20263561, 20260741, 20260292, 20264987, 20254057, 20261823, 20266932, 20262031, 20264848, 20266641, 20270728, 20266606, 20268203, 20268935, 20272074, 20269057, 20267629, 20265751, 20266031, 20261529, 20271043, 20266450, 20266878, 20266463, 20265625, 20265031, 20272082, 20262695, 20267599, 20265632, 20268040, 20265141, 20262253, 20262176, 20264602, 20259850, 20269041, 20257990, 20268436, 20259862, 20263089, 20264943, 2026275

取り急ぎ最低限動かすところまで持っていったのでここまで。
次回はGolangでほしかったものがどこまで対応されているか書きたいと思います。(`・ω・´)