HaskellとGoとRustを調べた

研究室で書いているプログラムはC言語だけど、文字を筆頭に配列の扱いがめんどうでなかなか書く気がおきない。それに、なにか新しいコンパイル言語を勉強してみたいのでHaskellとRUSTとGoを調べてみた。配列だけじゃなくてメモリ管理、並列化が簡単にかける言語がいいな。

Go

GoはCの代替のためにGoogleが開発した言語だ。ポインタを排除したり、GCを導入したり、オブジェクト指向だったりと、CからJavaC#への移り変わりと似ている。Goではクラスや継承という概念はないがインターフェイスというものがあるらしい。

Goのインターフェイスは、C++でいえば、純粋仮想関数に似ているという。データメンバがなく、すべての関数が仮想関数であるようなクラスだ。Goでは、あるインターフェイスが定義するメソッドをすべて実装した型は、そのインターフェイスを実装しているものと見なされる。こうして個々のメソッドという実装をクラスという概念でまとめるよりも、より柔軟な型とメソッドの対応付けが可能になるのだという。[1]

ダックタイピングでプロトタイプ継承みたいな感じかな? オブジェクティブにかけたりGCしてくれるのはとても嬉しいけど、計算プログラムでのその恩恵とCから書き換えることの労力を比べるとCのままでいいんじゃないって思ってしまった。でも、Goルーチンは気になる。

参考文献

  1. グーグル、C/C++に代わる新言語「Go」をOSSで公開 - @IT
  2. 【翻訳】Go言語がダメな理由 | POSTD
  3. 動的言語だけやってた僕が、38日間Go言語を書いて学んだこと - Qiita

Rust

RustはMozillaが開発している言語。まだ開発途中で遅いらしい[2]。遅いのは残念ながらダメだ。文法はC++に酷似している。並列計算に力を入れているそうなのでそこのところをくわしく調べてみたい。

参考文献

  1. 今さらRust試してみた(ついでにGo言語と少し比較) - Blank File
  2. Rust触ってみたらかなり良かった話 | ブログ :: Web notes.log

Haskell

Haskellは1990年から開発が始まった純粋関数型プログラミング言語。Wiki読んで意味が分かったのは型推論と参照透過性と遅延評価ぐらい。モナドとかよくわからない。純粋関数型ということで関数を実行してもモナドを使わなければ副作用なしで返ってくる。数値計算プログラムは書きやすそう。手続き型プログラミング言語とはかなり書き方が違うみたいでおもしろそう。並列かとかは簡単にできるのかしら。返り値の使用時に値を評価する遅延評価ってのがどれくらい自分がする計算に効果を発揮するのか計測してみたい。ほかの言語とは毛色の違う言語なので勉強するのはおもしろそうだ。

参考文献

  1. 本物のプログラマはHaskellを使う - 第1回 関数型プログラミングの世界へようこそ:ITpro
  2. Haskell - Mac OSX 10.9 (marvericks) に GHC 7.8.2 をインストールする方法 - Qiita
  3. タプル - Wikipedia
  4. Haskell - Wikipedia
  5. 参照透過性 - Wikipedia