【注目】最新プログラミング言語 2014『LiveScript, Julia, Elixir』
[ PR ]
プログラミング言語の変化
プログラミング言語は「生き物」なので、年々変化していきます。
例えばここ数年は、
- CoffeeScript
- TypeScript
- Dart
などのJavaScriptを強化する動きがあったり、
- Scala
- Clojure
のように関数型言語が再認識されたりしました。
特に大きな動きだったのが、Node.jsで、JavaScriptの立ち位置を大きく変化させるきっかけになりましたね。
それをきっかけにノンブロッキングIOという言葉も注目されました。
2014年注目のプログラミング言語
昨年から大きく注目されている言語は、以下の3つです。
Julia
特徴
Juliaは、科学分野の専門的な計算のために作られた、非常に高速で高性能なスクリプト言語です。
今までの専門分野で使われていたのは、C言語やFortranなどの非常に低レベルな言語か、MatlabやMathematicaなどの高価なソフトウェアでした。
C言語やFortranは開発が非常に手間がかかるため、そのためにJuliaが開発されたそうです。
しかしその汎用性と高速さから、新しいスクリプト言語として注目されています。
性能
公式サイトにベンチマークが載っていたので転載します。
Fortranと比べても遜色ないくらい高速で、Go言語やV8を凌駕しています。
コード例
Mandelblot
function mandel(z)
c = z
maxiter = 80
for n = 1:maxiter
if abs(z) > 2
return n-1
end
z = z^2 + c
end
return maxiter
end
function randmatstat(t)
n = 5
v = zeros(t)
w = zeros(t)
for i = 1:t
a = randn(n,n)
b = randn(n,n)
c = randn(n,n)
d = randn(n,n)
P = [a b c d]
Q = [a b; c d]
v[i] = trace((P.'*P)^4)
w[i] = trace((Q.'*Q)^4)
end
std(v)/mean(v), std(w)/mean(w)
end
並列処理
nheads = @parallel (+) for i=1:100000000
int(randbool())
end
マクロ
macro assert(ex)
:($ex ? nothing : error("Assertion failed: ", $(string(ex))))
end
@assert 1==0
// 1==0 ? nothing : error("Assertion failed: ", "1==0")
コメント
普通に高性能ですね! これで高速だというのだから使わない手はありませんね。
ちなみに、Windowsのサポートがまだ不十分だそうで、そのあたりは今後を期待したいですね。
LiveScript
特徴
LiveScriptは、前述のCoffeeScriptのようなメタJavaScriptと呼ばれるものです。
じゃあ何が違うのかというと、関数型言語のプログラミングスタイルができ、よりコードを部品として再利用可能にするための改善が多くなされているそうです。
コード例
tail(リストの1番目を除いたリストを返す)
tail = ([head, ...rest]) -> rest
tail [1, 2, 3] # => [2, 3]
カリー化(部分関数を返す)
add = (left, right) --> left + right
add1 = add 1
add1 2
コメント
かなり関数型言語と呼べる特徴を多く持っていますが、Scalaと同じで代入やループ、クラスもちゃんと使えます。
ただし現状では、末尾再帰最適化と呼ばれる、再帰をループに自動変換する機構ができていないらしく、まだ完全に関数型スタイルで書くことはできないようです。(issues:#78)
しかしかなり将来性が期待できるんじゃないかと思います。
JavaScriptでイミュータブルとかできたら胸アツですね!
Elixir
特徴
Elixirは、並列処理言語で有名なErlangのErlangVMをターゲットとしたスクリプト言語です。
Erlang自体は一癖あってかなり書きづらいですが、Rubyの影響を受けて、かなり書きやすくなっているようです。
コード例
Hello, world!
defmodule Hello do
IO.puts "Defining the function world"
def world do
IO.puts "Hello World"
end
IO.puts "Function world defined"
end
Hello.world
メタプログラミング、DSL
defmodule MathTest do
use ExUnit.Case
test "can add two numbers" do
assert 1 + 1 == 2
end
end
ラムダ式とmap
Enum.map([1,2,3], fn(x) -> x * 2 end)
コメント
一見するとなんだかRubyそっくりで親しみが持てますね。
これで並列処理が書けるなら、是非Elixirを勉強したくなります。
それにしても、日本発のRubyは相当な影響力があるんですね。
まとめ
年々新しい言語が増えていって、だんだんと改善されていっています。
「将来的にプログラマはいらない」なんて言われてきましたが、プログラマの専門分野がシフトするだけになるような気がします。
2014の間にどんな言語が出てくるか、楽しみですね。
秀和システム
売り上げランキング: 1,380