「7つの言語 7つの世界」というタイトルで邦訳され2011年に出版された本がありましたが、その新版の「Seven More Languages in Seven Weeks」という本が今年の1月に出てました。(気づくまで4ヶ月かかった)
そのうち邦訳も出るでしょうが、どういう本か少し確認してみました。
Seven More Languages in Seven Weeks
(続 7つの言語 7つの世界)
旧7つの言語 7つの世界では、下記の7言語が扱われていました。
- Ruby
- io
- Prolog
- Scala
- Erlang
- Clojure
- Haskell
Ruby、Scala、Clojure、Haskellあたりは、私の周りでも使ってる人がけっこういます。関係無いですが、ioのsearchability(検索ビリティ)の低さはRの比じゃないと思う。
2010年11月出版の本で、当時、Rubyは既に十分に普及してましたが、それ以外の言語はそこまで来てなかったので、今見てみるとこの取り揃えはなかなかに役立つものだったと言えるのではないでしょうか。
今回の続編では以下の7言語が取り上げられます。
- Factor
- Lua
- Elm
- Elixir
- Julia
- minKanren
- Idris
うーん、知らない言語ばかりですね。LuaとJuliaはわかりますが、それ以外の言語は聞いたこともないです。
とりあえず勉強も兼ねて各言語の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の歓声が聴こえてきそうです。
長くなってきたので後半はまた明日。