✌️

V 言語で Hello, World

2022/04/05に公開

V 言語とは

https://vlang.io/
https://github.com/vlang/v

V 言語は最近出てきたプログラミング言語です。
公式サイトには

The V Programming Language
Simple, fast, safe, compiled. For developing maintainable software.

と書いてあります。
シンプルで速くて安全らしいです。

私の環境

OS: macOS 12.3 21E230 x86_64
デバイス: MacBook Pro 2019 13 インチ
CPU: Intel i7-8569U (8) @ 2.80GHz
メモリ: 16GB

インストール

ドキュメント
https://github.com/vlang/v/blob/master/doc/docs.md

現在(2022/04/05)時点では、ソースからビルドする方法しかないようです。
大人しくビルドします。
git と C コンパイラ(tccgccclang のどれか)、make が必要です。

Linux、macOS 系の場合

Terminal
git clone https://github.com/vlang/v
cd v
make

Windows の場合

Terminal
git clone https://github.com/vlang/v
cd v
make.bat -tcc

グローバルで v を使いたい場合は

Terminal
sudo ./v symlink

でどこでも v が使えるようになります。

v

v help でコマンドの説明が見れます。

Terminal
$ v help
V is a tool for managing V source code.

Usage:
   v [options] [command] [arguments]

Examples:
   v hello.v                 Compile the file `hello.v` and output it as `hello` or `hello.exe`.
   v run hello.v             Same as above but also run the produced executable immediately after compilation.
   v -cg run hello.v         Same as above, but make debugging easier (in case your program crashes).
   v -o h.c hello.v          Translate `hello.v` to `h.c`. Do not compile further.
   v -o - hello.v            Translate `hello.v` and output the C source code to stdout. Do not compile further.

   v watch hello.v           Re-does the same compilation, when a source code change is detected.
                             The program is only compiled, not run.
   v watch run hello.v       Re-runs the same `hello.v` file, when a source code change is detected.

V supports the following commands:
* New project scaffolding:
   new               Setup the file structure for a V project (in a sub folder).
   init              Setup the file structure for an already existing V project.

* Ordinary development:
   run               Compile and run a V program.
   test              Run all test files in the provided directory.
   fmt               Format the V code provided.
   vet               Report suspicious code constructs.
   doc               Generate the documentation for a V module.
   vlib-docs         Generate and open the documentation of all the vlib modules.
   repl              Run the REPL.
   watch             Re-compile/re-run a source file, each time it is changed.

* Installation/self updating:
   symlink           Create a symbolic link for V.
   up                Run the V self-updater.
   self [-prod]      Run the V self-compiler, use -prod to optimize compilation.
   version           Print the version text and exits.

* Module/package management:
   install           Install a module from VPM.
   remove            Remove a module that was installed from VPM.
   search            Search for a module from VPM.
   update            Update an installed module from VPM.
   upgrade           Upgrade all the outdated modules.
   list              List all installed modules.
   outdated          List installed modules that need updates.
   show              Display information about a module on vpm

* Others:
   doctor            Display some useful info about your system to help reporting bugs.
   translate         Translate C code to V (coming soon in 0.3).
   tracev            Produce a tracing version of the v compiler.
                     Use `tracev yourfile.v` when the compiler panics.
                     NB: `tracev` is much slower and more verbose than ordinary `v`

Use "v help <command>" for more information about a command, example: `v help build`, `v help build-c`, `v help build-native`
Use "v help other" to see less frequently used commands.
Use "v help topics" to see a list of all known help topics.

Note: Help is required to write more help topics.
Only build, new, init, doc, fmt, vet, run, test, watch, search, install, remove, update, bin2v, check-md are properly documented currently.
Terminal
v

で Python のように対話モードに入ることができます。

Terminal
$ v
 ____    ____
 \   \  /   /  |  Welcome to the V REPL (for help with V itself, type  exit , then run  v help ).
  \   \/   /   |  Note: the REPL is highly experimental. For best V experience, use a text editor,
   \      /    |  save your code in a  main.v  file and execute:  v run main.v
    \    /     |  V 0.2.4 0bd8fbc . Use  list  to see the accumulated program so far.
     \__/      |  Use Ctrl-C or  exit  to exit, or  help  to see other available commands.

四則演算はこんな感じになります。

Terminal
>>> 1 + 1
2
>>> 3 * 4
12
>>> 0.004 - 0.001
0.003
>>> 1 / 3
0
>>> 1.0 / 3.0
0.3333333

計算は普通にできるのですが、体感めちゃくちゃ遅いです。
足し算に 2 秒くらいかかってる気がします。
V 言語は一度 C にトランスパイルされるらしいので、多分毎回ビルド作業が挟まっているのだと思います。

Hello, World する

拡張機能

私は VS Code を使うので、拡張機能をインストールします。
シンタックスハイライトやスニペットが付いてきます。
残念ながら、現在(2022/04/05)はフォーマット機能は付いていないようです。
シンタックスエラーを指摘してくれなかったり、サジェストが弱かったりとあまり頼りにはできません...

https://marketplace.visualstudio.com/items?itemName=vlanguage.vscode-vlang

プロジェクト作成

先ほどインストールした v コマンドを使うと簡単にプロジェクトが作成できます。

Terminal
$ v new
Input your project name: hello_world
Input your project description:
Input your project version: (0.0.0)
Input your project license: (MIT)
Initialising ...
Complete!

npm init と似てますね。
実行すると、新たに hello_world という名前のディレクトリが作成されます。
これを VS Code で開きます。

おそらくこんな感じの構成になっていると思います。
(.gitignore がネストしているのは他の拡張機能のせいです。)

実行

すでに Hello, World を出力するプログラムはできているので、後は実行するだけです。

Terminal
$ v run ./hello_world.v
Hello World!

できました。

コードはこんな感じになっていると思います。

./hello_world.v
module main

fn main() {
	println('Hello World!')
}

Rust と Go を合わせた雰囲気です。

終わり

V 言語で Hello, World しました。
より詳細な仕様を知りたければ、公式ドキュメントを参照してください。
文字列や Array、for ループなどは独特な仕様があり面白いです。

https://github.com/vlang/v/blob/master/doc/docs.md

GitHubで編集を提案

Discussion