HaskellとGoとRustを調べた
研究室で書いているプログラムはC言語だけど、文字を筆頭に配列の扱いがめんどうでなかなか書く気がおきない。それに、なにか新しいコンパイル言語を勉強してみたいのでHaskellとRUSTとGoを調べてみた。配列だけじゃなくてメモリ管理、並列化が簡単にかける言語がいいな。
Go
GoはCの代替のためにGoogleが開発した言語だ。ポインタを排除したり、GCを導入したり、オブジェクト指向だったりと、CからJavaやC#への移り変わりと似ている。Goではクラスや継承という概念はないがインターフェイスというものがあるらしい。
Goのインターフェイスは、C++でいえば、純粋仮想関数に似ているという。データメンバがなく、すべての関数が仮想関数であるようなクラスだ。Goでは、あるインターフェイスが定義するメソッドをすべて実装した型は、そのインターフェイスを実装しているものと見なされる。こうして個々のメソッドという実装をクラスという概念でまとめるよりも、より柔軟な型とメソッドの対応付けが可能になるのだという。[1]
ダックタイピングでプロトタイプ継承みたいな感じかな? オブジェクティブにかけたりGCしてくれるのはとても嬉しいけど、計算プログラムでのその恩恵とCから書き換えることの労力を比べるとCのままでいいんじゃないって思ってしまった。でも、Goルーチンは気になる。
参考文献
Rust
RustはMozillaが開発している言語。まだ開発途中で遅いらしい[2]。遅いのは残念ながらダメだ。文法はC++に酷似している。並列計算に力を入れているそうなのでそこのところをくわしく調べてみたい。
参考文献
Haskell
Haskellは1990年から開発が始まった純粋関数型プログラミング言語。Wiki読んで意味が分かったのは型推論と参照透過性と遅延評価ぐらい。モナドとかよくわからない。純粋関数型ということで関数を実行してもモナドを使わなければ副作用なしで返ってくる。数値計算プログラムは書きやすそう。手続き型プログラミング言語とはかなり書き方が違うみたいでおもしろそう。並列かとかは簡単にできるのかしら。返り値の使用時に値を評価する遅延評価ってのがどれくらい自分がする計算に効果を発揮するのか計測してみたい。ほかの言語とは毛色の違う言語なので勉強するのはおもしろそうだ。