V言語はGo言語のようにシンプルさと高速な動作、保守性の高さを売りにしています。毎回いろいろなプログラミング言語を紹介する本連載ですが、今回は2019年に公開され、現在も活発な開発が続いているV言語について紹介します。

  • V言語でFizzBuzzのプログラムを実行したところ

V言語について

V言語は、2019年にアレクサンダー・メドヴェドニコフ(Alexander Medvednikov)氏によって開発されたプログラミング言語です。当初は、デスクトップ向けメッセージングクライアント「Volt」を開発するために作られました。

開発目標として「シンプル」「速度」「安全性」を掲げています。Go言語のようにシンプルな言語仕様が特徴です。そして、静的型付け言語であるため、C言語と同等の速度で動作させることができます。

なお、V言語のユニークな点ですが、V言語のコンパイラは、V言語のソースコードをC言語に変換するトランスパイラとして実装されています。そのため、C言語が動作する一般的な環境であれば、V言語を動かすことができます。そのため、V言語はC言語との相互運用性が高く、C言語のライブラリを利用するのも容易です。

Go言語と似ている

そして、V言語の文法はGo言語とよく似ています。Go言語のようにシンプルな構文を持ち、仕様が小さいため学習も容易です。デフォルトで変数の扱いが不変(immutable)となっており、保守性に配慮しています。そして、コンパイルサイズは、Go言語よりもずっと小さいものになります。

なお、Go言語ではガベージコレクション(GC)を採用しており、メモリ管理が自動化されています。これに対して、V言語ではガベージコレクションを利用せず、コンパイル時にメモリ管理が行われます。これによって実行時のオーバーヘッドを削減します。

このために、V言語ではLobsterという言語の手法を参考にして実装しているようです。これは、ヒープに確保されたメモリを静的な生存時間解析で自動管理するものです。開発者がメモリ管理の複雑な概念を意識することなく、Go言語のような感覚でプログラムを作成できます。

そして、Go言語では関数の戻り値として、エラーを返すスタイルが一般的ですが、V言語では、option型やresult型を採用しています。また、当初からジェネリクスをサポートしており、様々なデータ型が標準で用意されています。

加えて、vpmと呼ばれるV言語のためのパッケージマネージャーが用意されており、公開されているパッケージを手軽にインストールできるようにも工夫されています。

V言語をインストールしよう

それではV言語を実際にインストールして使ってみましょう。V言語をインストールするには、C言語のコンパイラが必要です。

Windowsの場合は、オープンソースのmingw-w64を公式サイト(https://www.mingw-w64.org/ )からダウンロードしてインストールするか、Microsoftの公式サイトから、Visual Studio(https://visualstudio.microsoft.com/ja/)をインストールする必要があります。ただし、ちょっと試したいだけならば、Windows上でLinuxを動かすWSL(Windows Subsystem for Linux)を利用するのが簡単です。

WSLを利用する場合、下記のコマンドを実行することでインストールできます。

# 必要なツールをインストール
sudo apt update
sudo apt install -y git build-essential
# v言語のリポジトリからソースコードを取得
git clone https://github.com/vlang/v
cd v
make

macOSの場合は、Xcodeのコマンドラインツールをインストールする必要があります。以下のコマンドを実行してください。

# Xcodeをインストール
xcode-select --install
# v言語のリポジトリからソースコードを取得
git clone https://github.com/vlang/v
cd v
make

すると、ディレクトリvにvという実行ファイルが作成されます。これが、V言語のコンパイラ兼パッケージマネージャーです。このディレクトリvにパスを通すことで、インストールが完了します。下記のコマンドを実行するとどのディレクトリからもvコマンドが使用できます。

sudo ./v symlink

V言語で一番簡単なプログラムを作ってみよう

V言語で一番簡単な格言を表示するだけのプログラムを作ってみましょう。下記のプログラムを「hello.v」という名前で保存します。

fn main() {
  println(
    "心ない発言は剣のように突き刺し\n" +
    "賢い人たちの舌は人を癒やす。")
}

このプログラムを見ると、メインプログラムはC言語やその他の言語のように、main関数から始まることが分かります。

プログラムをコンパイルして実行するには、ターミナル上で次のコマンドを実行します。

# コンパイル
v hello.v
# 実行
./hello

プログラムを実行すると次のように表示されます。

  • vをコンパイルして実行したところ

V言語でFizzBuzzを実行してみよう

本連載では、プログラムの雰囲気を掴むためにFizzBuzz問題を解くプログラムを紹介しています。FizzBuzz問題とは次のようなものです。

> 1から100までの数字を出力する際に、3の倍数の時「Fizz」、5の倍数の時「Buzz」、3と5の倍数の時「FizzBuzz」と表示するプログラムを作って下さい。

次に、V言語でFizzBuzzのプログラムを作ってみましょう。以下のプログラムを「fizzbuzz.v」という名前で保存しましょう。

fn main() {
  // 1から100まで繰り返す
  for i := 1; i <= 100; i++ {
    println(fizzbuzz(i))
  }
}
// FizzBuzzの結果を返す関数
fn fizzbuzz(n int) string {
  // Fizz/Buzzの判定
  is_fizz := n % 3 == 0
  is_buzz := n % 5 == 0
  // if文で順次判定していく
  if is_fizz && is_buzz {
    return "FizzBuzz"
  } else if is_fizz {
    return "Fizz"
  } else if is_buzz {
    return "Buzz"
  } else {
    return n.str()
  }
}

プログラムを実行するには、次のコマンドを実行します。

v fizzbuzz.v
./fizzbuzz

プログラムを実行すると次の画面のように表示されます。

  • FizzBuzzのプログラムをコンパイルして実行したところ

まとめ

以上、今回はV言語について紹介しました。Go言語と似た思想を持ち、実行速度も速く、言語仕様がシンプルなので気軽に始められるのが良いところです。言語仕様が小さいおかげで、インストールは、V言語のリポジトリを引っ張ってきたmakeコマンドを実行するだけという手軽さも好印象です。C言語のトランスパイラとして実装されていので、既存の資産と併用して使えるのも良いです。

ただし、原稿執筆時点でバージョンは0.4betaとなっています。まだまだ実践投入するのには速いのかもしれません。それでも、GitHubのリポジトリを見ると活発に開発が行われていますので、今後が楽しみです。

自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「実践力をアップする Pythonによるアルゴリズムの教科書(マイナビ出版)」「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。