2015年04月27日

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

「7つの言語 7つの世界」というタイトルで邦訳され2011年に出版された本がありましたが、その新版の「Seven More Languages in Seven Weeks」という本が今年の1月に出てました。(気づくまで4ヶ月かかった)

そのうち邦訳も出るでしょうが、どういう本か少し確認してみました。

Seven More Languages in Seven Weeks
(続 7つの言語 7つの世界)

旧7つの言語 7つの世界では、下記の7言語が扱われていました。

  1. Ruby
  2. io
  3. Prolog
  4. Scala
  5. Erlang
  6. Clojure
  7. Haskell

Ruby、Scala、Clojure、Haskellあたりは、私の周りでも使ってる人がけっこういます。関係無いですが、ioのsearchability(検索ビリティ)の低さはRの比じゃないと思う。

2010年11月出版の本で、当時、Rubyは既に十分に普及してましたが、それ以外の言語はそこまで来てなかったので、今見てみるとこの取り揃えはなかなかに役立つものだったと言えるのではないでしょうか。

今回の続編では以下の7言語が取り上げられます。

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

うーん、知らない言語ばかりですね。LuaJuliaはわかりますが、それ以外の言語は聞いたこともないです。

とりあえず勉強も兼ねて各言語のdescription的なものをさっと見てみます。Luaは十分に有名なので割愛して、他の6つを。

Factor

何はなくとも公式ページのサンプルコードを見てみましょうか。見ればなんとなく伝わるものがある言語です。

USING: accessors smtp ;

<email>
    "john@foobar.com" >>from
    { "jane@foobar.com" } >>to
    "Up for lunch?" >>subject
    "At Tracy's." >>body
send-email

こちらはWikipediaに載っているサンプルコード。

: make-html ( string -- xml )
   dup
   <XML
       <html>
           <head><title><-></title></head>
           <body><h1><-></h1></body>
       </html>
   XML> ;

hello worldを "hello world" print と書いたりするような後置で記述する言語で、stack-orientedという分類になるそうです。

面白そう。

Elm

現状はコンパイルしてHTML, CSS, JavaScriptを出力するのがメインのお仕事の言語。

Functional Reactive Programmingと銘打たれた言語で、Functionalの名前の通り関数型ですが、イベント処理とかが書きやすそうなリアクティブプログラミングが採用されています。リアクティブという言葉はだいぶ前からあったような気がしますが、最近、目にする回数が増えている気がします。

下記は公式サイトのExamplesにあったマウスのポジションを表示するコードです。

import Graphics.Element (..)
import Signal (Signal, map)
import Mouse
import Text (asText)


main : Signal Element
main =
  map asText Mouse.position

サンプルコードが動いているのを見ると、なかなかにリアクティブな感じがします。

下記はWikipediaにあったパターンマッチのサンプルコード。

-- It is possible to inspect these types with case-expressions.
depth : Tree a -> Int
depth tree =
    case tree of
        Empty -> 0
        Node value left right ->
            1 + max (depth left) (depth right)

イベント処理とかはすごく書きやすそうです。

Elixir

Erlang VM上で動く分散システム用の言語のようです。下記はWikipediaの説明。

Elixir is a dynamic, functional language designed for building scalable and maintainable applications.

Elixirは動的な関数型の言語で、スケーラブルでメンテナンスが容易なアプリケーション構築の為に作られました。

Elixir leverages the Erlang VM

ElixirはErlang VM上で動作します。

ということで、用途もコードもErlangに似ているようです。加えてメタプログラミングやマクロなども利用できるようです。下記は公式サイトのサンプルコード。

parent = self()

# Spawns an Elixir process (not an operating system one!)
spawn_link(fn ->
  send parent, {:msg, "hello world"}
end)

# Block until the message is received
receive do
  {:msg, contents} -> IO.puts contents
end

短いコードの合間からErlangが透けて見えますね。VMの歓声が聴こえてきそうです。

長くなってきたので後半はまた明日。

タグ:programming
posted by newsit at 07:00| programming