Erlang VM上で動く言語
OracleがJavaのサポートを有償化しました。(困惑)
そこで、JavaやJava VM上で動く言語を使わないで、大規模なWebサービスのバックエンドを開発するには、どんなプログラミング言語やツールを使えば良いか?を考えてみました。
- 希望条件
- Erlang VM上で動く言語
- Ruby風のElixir
- Python風のMochi 2、Manju
- Luaライブラリーのluerl
- JavaScript風のEfene
- Lisp風のLFE(Lisp Flavoured Erlang)
- OCaml風のAlpaca
- Coq風なVerlang
- Haskell風のcodec-beam
希望条件
- 関数型で書きたい。
- コンパイルして、バイナリ―で高速に動作する。
- 簡単にスケールできる。
- なるべく簡単に使いたい。(重要)
1番目の条件で、いきなり関数型プログラミング言語に絞られちゃうわけですが、Lisp、Scheme、OCaml、Haskell、Erlang、Elixir、…など、パッと思いつく言語の中から選ぶとなると、やっぱ「Erlang/OTP」という超強力な兄貴が目につくわけですねw
Erlang(アーラン)は、コンピュータにおいて汎用的な用途に使うことができる並行処理指向のプログラミング言語および実行環境。
- 作者: Joe Armstrong,榊原一矢
- 出版社/メーカー: オーム社
- 発売日: 2008/02/23
- メディア: 単行本(ソフトカバー)
- 購入: 8人 クリック: 284回
- この商品を含むブログ (97件) を見る
- 作者: Francesco Cesarini,Simon Thompson,佐藤嘉一
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/07/26
- メディア: 大型本
- クリック: 29回
- この商品を含むブログ (13件) を見る
Erlang(1983年~)なら、Java(1995年~)よりも高負荷に耐える強固なシステムを作れるでしょう。
Erlangが使える人は、Javaの代わりにErlangを使えば良いと思いました。
…それで話が済むなら苦労しないけど、
「でも、Erlang(元はProlog)は癖があって、ちょっとキツい><」という場合もあるでしょう。→自分
「Erlang VMは使いたいけど、Erlangは書きたくない」という矛盾する要望を叶える選択肢もあるにはあるんだなコレが!→Erlang VM上で動く言語も候補に加えればOK
そこで、4番目の条件(簡単)を満たすべく、Erlang VM上で動く言語を調べてみました。
Erlang VM上で動く言語
Erlang VM上で動く言語 - Google 検索 (約 4,110 件)
→いろいろヒットします。
Ruby風のElixir
エリクサーは、Ruby風の文法でかける言語です。
「Phoenix」というWebフレームワークもあるので、Erlang VM+Elixir+PhoenixでWebサイトを作ればOK?
Elixir (プログラミング言語) - Wikipedia
Elixir (エリクサー) は並行処理の機能や関数型といった特徴を持つ、Erlangの仮想マシン (BEAM) 上で動作するコンピュータプログラミング言語である。
Elixir/Phoenix 初級1: はじめの一歩 (OIAX BOOKS)
- 作者: 黒田努
- 出版社/メーカー: オイアクス
- 発売日: 2017/11/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Elixir/Phoenix 初級2: データベースとクエリ構造体 (OIAX BOOKS)
- 作者: 黒田努
- 出版社/メーカー: オイアクス
- 発売日: 2017/04/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Elixir/Phoenix 初級3: フォーム構造体とチェンジセット (OIAX BOOKS)
- 作者: 黒田努
- 出版社/メーカー: オイアクス
- 発売日: 2018/04/04
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Elixir関係は、日本語の資料も充実しているので、調査/試行の手間が省けますね。
Elixirが登場する前には、「Reia」という言語もありました。
Reia is a Ruby-like scripting language for the Erlang virtual machine.
Python風のMochi 2、Manju
Python風の言語を開発している方もいるようです。
Python風言語をErlangのASTに変換する言語処理系『Mochi 2』
* Mochi 2は既に公開しているManjuとは異なる方法でクラスとインスタンスを実現しており、別リポジトリとして公開予定です。
Manju is a simple object oriented, dynamically typed, functional language that runs on the Erlang virtual machine (BEAM).
PythonユーザーがErlangを学ぶための豆知識も紹介されていました。
PythonプログラマのためのErlang入門 | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記
Erlang for Python Programmers http://openbookproject.net//py4fun/erlang/erlang.html
Luaライブラリーのluerl
Lua(ルア)は、Nginxの拡張モジュールとかで使われている軽量なスクリプト言語です。→C/C++を補完するツールですね。
Erlang VM上で動くLuaのライブラリー「luerl」が紹介されてました。
Luerl is an implementation of standard Lua 5.2 written in Erlang/OTP.
LuaでもErlang VM上で動くプログラムを書けるんですね!
JavaScript風のEfene
JavaScriptは関数型でも書けるから、Efeneの文法も慣れやすそう。
TypeScriptのようなAltJSもたくさん出て来てるし、JavaScriptのエコシステムにどっぷり浸かってる人なら、JS気分でErlang VMを手軽に利用できるのでは?
Efene is an alternative syntax for the Erlang Programming Language focusing on simplicity, consistency, ease of use and programmer UX.
Efeneの公式サイトは、ドキュメントも整備されてました。イイかんじです!
Lisp風のLFE(Lisp Flavoured Erlang)
LispとErlangの魔合体!?…「どーすんだ、これw」みたいなラスボス的な組合せですが、S式(括弧の嵐)が大好きなLisperはLFEで決まり?
- Lisp Flavoured Erlang 公式サイト http://lfe.io/
8年の開発期間を経て,Erlang仮想マシン(BEAM)上でLisp言語をサポートするLisp Flavoured Erlang(LFE)がバージョン1.0の安定版に到達した。開発者のRobert Virding氏は,Erlangの初期開発者のひとりでもある。
LFEはLisp-2,すなわちCommon Lispタイプの,Erlangコンパイラのフロントエンドだ。マクロベースのメタプログラミングを可能にし,再帰と高階関数の利用をサポートする。また,Erlangの哲学を継承することにより,メッセージパッシングアクタモデルを採用し,“シェア・ナッシング”パラダイムをプログラマに求めるとともに,完全なパターンマッチングも提供している。Erlangと100%の互換性を持つコードを生成するLFEは,Open Telecom Platform (OTP)を使用した標準的なErlangおよびアプリケーションとのシームレスな共存も可能である。OTPは,高可用性,コンカレント,スケーラブルなアーキテクチャを備えた開発を可能にすることを目的に,Erlangで記述されたミドルウェアとライブラリのコレクションである。
「Erlangの文法は大嫌いだけどErlang VMの機能は慣れてるLispで使いたい」という強い要望と意思を持った人でないと使っていけないかな…と思いました。
Lispハッカーはスゴイな!(=どこにでも進出して、自分達の色で染めていくw)
Java VM上で動くClojureを使ってた人なら、Erlang VM上で動くLFEでもOKでしょう。
OCaml風のAlpaca
「Lispがアリなら、OCamlやHaskellもアリでしょw」と思ったら、本当にありやがりました!
Erlang VM上で動く静的型システムを備えたOCaml風関数型言語の処理系があるらしいことを知った。アルパカ言語というらしい。これすごいんちゃうか。#alpaca_lang #erlang #ocaml #type #アルパカhttps://t.co/KSHatd9sBe
— Yoshihiro503 (@yoshihiro503) May 11, 2017
「Alpaca」と命名されたML風の言語が、Erlang VM上で動くそうです。
Alpaca is a statically typed, strict/eagerly evaluated, functional programming language for the Erlang virtual machine (BEAM).
At present it relies on type inference but does provide a way to add type specifications to top-level function and value bindings. It was formerly known as ML-flavoured Erlang (MLFE).
(参考)
仕組みとしてはalpaca-langというErlangVM上で動作するML風Erlangを参考にしました。
Coq風なVerlang
Coqは「定理証明支援システム」で、プログラムの動作を検証するためにも使える仕組みです。
「OCamlが行けるなら、Coqも行けるのでは?」と思ったらありました。
Coq には Extraction という、Coq のコードを別の言語に変換する機能があり、この機能によってコードを検証済みの部品として実際のプログラムに使えるようになっています。標準では OCaml, Haskell, Scheme への変換が可能になっています。
この記事では、Verlang という、Coq の Extraction 対象に Erlang のコア言語である Core Erlang を加えるパッチ (つまり Coq2Erlang 的なもの) について紹介したいと思います。
(参考)Coqとは?
Coqの説明は難しいので、詳細は検索して下さい。m(__)m
Coqは証明支援システムの一つ。Coqの核はプログラミング言語Gallinaを用いる。
定理証明支援とは数学の定理を自動で証明することではなく、ステップバイステップでコンピュータに命令を送り、数学の定理を証明するのを助けるシステムである。
Coq パッケージマネージャー ocamlと同じopam
証明支援には半自動と全自動があるみたいです。
自動定理証明(英: automated theorem proving, ATP)とは、自動推論 (AR) の中でも最も成功している分野であり、コンピュータプログラムによって数学的定理に対する証明を発見すること。ベースとなる論理によって、定理の妥当性を決定する問題は簡単なものから不可能なものまで様々である。
産業への応用
産業分野での応用例としては、LSIの設計とその検証が挙げられ、モデル的手法とともに使われている。Pentium FDIV バグ 以来、FPUの設計は極めて厳密に行われている。AMDやインテルはプロセッサの設計検証に自動定理証明を使っている。
Haskell風のcodec-beam
HaskellでもErlang VM上で動くコードを書けます。
「てか、Haskell使えるなら、Erlangぐらい使えるだろ?Erlangを直接使えよ!」という声も聞こえてきそうですが、Erlang VMの人気があるからですね?
Erlang VM byte code assembler for implementing compile-to-beam languages.
The goal is to a provide delightful API for generating BEAM instructions from pure Haskell.
以上、Erlang VM上で動くプログラミング言語の調査結果でした。
他にもあったら、是非教えて下さい。m(__)m