2014-02-17

【注目】最新プログラミング言語 2014『LiveScript, Julia, Elixir』

2014-language.jpg

[ PR ]


プログラミング言語の変化

プログラミング言語は「生き物」なので、年々変化していきます。

例えばここ数年は、

  • CoffeeScript
  • TypeScript
  • Dart

などのJavaScriptを強化する動きがあったり、

  • Scala
  • Clojure

のように関数型言語が再認識されたりしました。

特に大きな動きだったのが、Node.jsで、JavaScriptの立ち位置を大きく変化させるきっかけになりましたね。

それをきっかけにノンブロッキングIOという言葉も注目されました。

2014年注目のプログラミング言語

昨年から大きく注目されている言語は、以下の3つです。

Julia

julia-lang.png

特徴

Juliaは、科学分野の専門的な計算のために作られた、非常に高速で高性能なスクリプト言語です。

今までの専門分野で使われていたのは、C言語やFortranなどの非常に低レベルな言語か、MatlabやMathematicaなどの高価なソフトウェアでした。

C言語やFortranは開発が非常に手間がかかるため、そのためにJuliaが開発されたそうです。

しかしその汎用性と高速さから、新しいスクリプト言語として注目されています。

性能

公式サイトにベンチマークが載っていたので転載します。

julia-benchmark-2.png

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-lang.png

特徴

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-lang.png

特徴

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の間にどんな言語が出てくるか、楽しみですね。

コメントはTwitterアカウントにお願いします。

RECENT POSTS


[ PR ]

.