2015年04月28日

7つの言語 7つの世界の新刊 (その2)

昨日の続き。新しく出版された「7つの言語 7つの世界」、Seven More Languages in Seven Weeksに出てくる言語を見ていきます。

出てくるのは下記の7言語。

  1. Factor
  2. Lua
  3. Elm
  4. Elixir
  5. Julia
  6. miniKanren
  7. Idris

Luaは紹介するまでもなく有名なので割愛して、昨日はFactor、Elm、Elixirをさらっと見てみました。

今日はJulia、miniKanren、Idrisの3言語。

Julia

Juliaは私自身好んで使っているの言語なのでまともに紹介ができそうです。

統計向けの言語で、RやPythonでデータ分析をしているような人が使います。Python+NumPyを使っている人には「for文書いても速度が出る言語」と言えば、食いつく人もいるでしょうか。いないでしょうか。

下記のような数学的な表記に近い関数の定義の仕方ができるあたりは、数学好きな人からは好かれそうです。(コードはWikipediaより引用)

p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y

動的言語ですが型の定義がしっかりしており、関数の引数に型を指定することができます。(コードは公式サイトから引用)

f(x::Number, y::Number) = 2x - y;
p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y

PythonやRよりも言語自体の処理速度は相当速いのですが(CやFortranで書かれたライブラリが後ろで動いている場合は、そっちの方がJuliaより速くなる)、DataFrame周りがまだ弱いので、もう一息ライブラリの充実が欲しいところです。

miniKanren

こちらはlogic programmingという分類に入る言語のようです。

logic programmingの代表格はPrologになります。と書くとなんとなくイメージが付きますね。下記は公式サイトの説明文。

The core miniKanren language is very simple, with only three logical operators and one interface operator.

miniKanrenはたった3つの論理オペレータと1つのインターフェースオペレータを持つ、簡易な言語です。

中略

miniKanren has been implemented in a growing number of host languages, including Scheme, Racket, Clojure, Haskell, Python, JavaScript, Scala, Ruby, OCaml, and PHP, among many other languages.

miniKanrenは多くのホスト言語で実装されています。Scheme, Racket, Clojure, Haskell, Python, JavaScript, Scala, Ruby, OCaml, PHP等々。

多くの言語で実装されているので、誰でも気軽に試すことができそうです。ちなみにソースコードは下記のような感じ。

(run 2 (q)
  (fresh (w x y)
    (conde
      ((== `(,x ,w ,x) q)
       (== y w))
      ((== `(,w ,x ,w) q)
       (== y w)))))

Idris

IdrisはDependent type(日本語だと依存型)を特徴とする関数型言語です。たとえば一般的にリストを引数に渡す場合、中身の型はコンパイラでチェックできる言語が多いですが、長さについてまではチェックできません。その辺りも定義することができるとか。

とりあえずHello Worldあたりを見てみましょう。

module Main
 
main : IO ()
main = putStrLn "Hello, World!"

公式サイトの説明からなんとなく意味が取りやすそうな例文。

foo : Int -> Int
foo x = case isLT of
            Yes => x*2
            No => x*4
    where
       data MyLT = Yes | No

       isLT : MyLT
       isLT = if x < 20 then Yes else No

いろいろDependent typeに関する文書を読んではみたのですが、何ができるのか、どこまでできるのかがわからなかった。もう少し流行ってきた感がでてきたらちゃんと勉強しよう。

まとめ

ということで6言語を見てみましたが、stack-orientedのFactor、functional reactive programmingのElm、分散処理に向いたElixir、統計向けのJulia、logic programmingのminiKanren、dependent typeのIdrisと、これらの言語が流行る(*´ω`*)かどうかは別としてそれぞれ特徴的で、習得することで新しい概念を獲得することができそうです。

個人的にはElixirが気になっています。

posted by newsit at 07:00| programming