Help us understand the problem. What is going on with this article?

良さげなクロスプラットフォーム開発言語《v》のメモ(Go,Nim,Rustと少し比較)

GoとNimは趣味でそれなりに触って、Rustは仕事にならない限り触らないことにしている自分が、v言語をチラ見してみたのでメモを残しておく。 バージョン0.1台とまだまだ若い言語なので参考程度に。
v言語:
https://vlang.io/

cf.なるほど。
Rustを業務で1年使ってみてわかったこと

v言語を三行で

  • v言語はGoをリスペクトしてる型あり言語。もともとvはGoで書かれていた。
  • Nimと同様にC言語をバックエンドとしてバイナリ化する。vは、Nim並みにコンパイルは早くバイナリサイズは小さく。
  • Rustとは異なり言語仕様はシンプルに。モダンなところはRustにも学ぶ(関数定義はfuncではなくfnだし...)。

v言語の使い所、思ったところを三行で

  • 公式サイトとしては、v言語をクロスプラットフォームなクライアント側のアプリ作りに使って欲しい模様。出自からも当座はクライアント側一択か。
  • 実用するには、C/C++(/objective-C)との相性の良さが、「実績として」活かされるようになることが必要か。
  • サーバ側とのやり取りはjsonで行うのが基本か。近い将来のモダンな開発としてはサーバ側はGraphQLでインターフェイスを切るといったところになるのだろう。

どこぞの猛者がネットワークゲームのクライアントとしてv言語を採用してくださったりすると、v言語が広まるのだろうか。

見た目。学習コストが低そうで好感あり。

GoっぽいがRustっぽくもあるのだろう。が、Rustを良く知らないので、とりあえず、Scalaを日常的に書いている人間としては違和感が少なくて良かった。まぁ、vはモダンな見た目の言語ということ。チラ見しておこう。

#公式サイトに行くと、web上でv言語のサンプルを実行することができる。web上での実行は若い言語では望ましい機能だね。

①文字列の扱い

name := 'Bob'
println('Hello, $name!')  // `$` is used for string interpolation
println(name.len)

bobby := name + 'by' // + is used to concatenate strings
println(bobby) // "Bobby" 

println(bobby[1..3]) // "ob" 
mut s := 'hello '
s += 'world' // `+=` is used to append to a string
println(s) // "hello world" 

やはりGoっぽい。文字列をmutableで扱う場合にはmutで明示するというあたりは今風で良い(scala/kotlin等のval/var相当)。

出典:
https://vlang.io/docs#strings

②パターンマッチ

s := match number {
    1    { 'one' }
    2    { 'two' }
    else { 
        println('this works too')
        'many' 
    }
}

出典:
https://vlang.io/docs#match

scalaのmatch(以下)と近しい。

val s = number match  {
    case 1 =>   'one'
    case 2 =>   'two'
    case _ => { 
        println('this works too')
        'many' 
    }
}

③高階関数

かなりGoっぽいね。

fn sqr(n int) int {
        return n * n
}

fn run(value int, op fn(int) int) int {
        return op(value)
}

fn main()  {
        println(run(5, sqr)) // "25"
}

出典:
https://vlang.io/docs#highfns

参考
Go言語で高階関数を書いて遊んでみた

④インターフェイス

こちらもGoっぽい。ただ、コンパイルが通らなかった。まぁ、若い言語ですから ;-)

struct Dog {}
struct Cat {}

fn (d Dog) speak() string {
    return 'woof'
}

fn (c Cat) speak() string {
    return 'meow' 
}

interface Speaker {
    speak() string
}

fn perform(s Speaker) {
    println(s.speak())
}

dog := Dog{}
cat := Cat{}
perform(dog) // "woof" 
perform(cat) // "meow" 

出典:
https://vlang.io/docs#interfaces

参考
Goのinterfaceがわからない人へ

⑤テスト手法

hello.vをテストする際には、hello_test.vを用意してね、とのこと。

hello.v
fn hello() string {
    return 'Hello world'
}
hello_test.v
fn test_hello() {
    assert hello() == 'Hello world'
}

まぁ、実際に開発する段になってから考えるところだろうけど、IDEがサポートしてくれたら使いやすいのかも。

感想

Swift/Kotlinが結局クロスプラットフォーム開発用途には不十分と思われるので、ニッチなクロスプラットフォーム開発用途ではv言語ありかも。nimとの比較は気が向いた時にでも。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした