Haskell勉強会

関数型プログラミングの学習日記

Erlang VM上で動く言語

OracleがJavaのサポートを有償化しました。(困惑)

そこで、JavaJava VM上で動く言語を使わないで、大規模なWebサービスのバックエンドを開発するには、どんなプログラミング言語やツールを使えば良いか?を考えてみました。

 

 

希望条件

  1. 関数型で書きたい。
  2. コンパイルして、バイナリ―で高速に動作する。
  3. 簡単にスケールできる。
  4. なるべく簡単に使いたい。(重要)

 

1番目の条件で、いきなり関数型プログラミング言語に絞られちゃうわけですが、LispSchemeOCamlHaskellErlang、Elixir、…など、パッと思いつく言語の中から選ぶとなると、やっぱErlang/OTP」という超強力な兄貴が目につくわけですねw

 

Erlang - Wikipedia

Erlang(アーラン)は、コンピュータにおいて汎用的な用途に使うことができる並行処理指向のプログラミング言語および実行環境。

 

www.erlang.org

 

プログラミングErlang

プログラミングErlang

 

 

Erlangプログラミング

Erlangプログラミング

 

 

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!

 

 

Erlang(1983年~)なら、Java(1995年~)よりも高負荷に耐える強固なシステムを作れるでしょう。

 

f:id:hamamuratakuo:20181109163955j:plain
(左:Oracle、右:Erlangのイメージでw)

 

Erlangが使える人は、Javaの代わりにErlangを使えば良いと思いました。

(完)

 

 

 


 

 

 

…それで話が済むなら苦労しないけど、

「でも、Erlang(元はProlog)は癖があって、ちょっとキツい><」という場合もあるでしょう。→自分

Erlang VMは使いたいけど、Erlangは書きたくない」という矛盾する要望を叶える選択肢もあるにはあるんだなコレが!→Erlang VM上で動く言語も候補に加えればOK

そこで、4番目の条件(簡単)を満たすべく、Erlang VM上で動く言語を調べてみました。

 

Erlang VM上で動く言語

Erlang VM上で動く言語 - Google 検索 (約 4,110 件)

→いろいろヒットします。

 

Erlang VM 上で動く言語の紹介

 

 

Ruby風のElixir

エリクサーは、Ruby風の文法でかける言語です。

Phoenix」というWebフレームワークもあるので、Erlang VM+Elixir+PhoenixでWebサイトを作ればOK?

 

Elixir (プログラミング言語) - Wikipedia

Elixir (エリクサー) は並行処理の機能や関数型といった特徴を持つ、Erlang仮想マシン (BEAM) 上で動作するコンピュータプログラミング言語である。

 

elixir-lang.org

 

phoenixframework.org

 

haskell.hatenablog.com

 

プログラミングElixir

プログラミングElixir

 

 

Elixir/Phoenix 初級1: はじめの一歩 (OIAX BOOKS)

Elixir/Phoenix 初級1: はじめの一歩 (OIAX BOOKS)

 

 

Elixir/Phoenix 初級2: データベースとクエリ構造体 (OIAX BOOKS)

Elixir/Phoenix 初級2: データベースとクエリ構造体 (OIAX BOOKS)

 

 

Elixir/Phoenix 初級3: フォーム構造体とチェンジセット (OIAX BOOKS)

Elixir/Phoenix 初級3: フォーム構造体とチェンジセット (OIAX BOOKS)

 

 

Elixir関係は、日本語の資料も充実しているので、調査/試行の手間が省けますね。

 

Elixirが登場する前には、「Reia」という言語もありました。

Reia Programming Language

Reia is a Ruby-like scripting language for the Erlang virtual machine.

 

 

Python風のMochi 2、Manju

Python風の言語を開発している方もいるようです。

 

pycon.jp

Python風言語をErlangのASTに変換する言語処理系『Mochi 2』

* Mochi 2は既に公開しているManjuとは異なる方法でクラスとインスタンスを実現しており、別リポジトリとして公開予定です。

 

github.com

Manju is a simple object oriented, dynamically typed, functional language that runs on the Erlang virtual machine (BEAM).

 

PythonユーザーがErlangを学ぶための豆知識も紹介されていました。

 

i2y.hatenablog.com

 

PythonプログラマのためのErlang入門 | TRIVIAL TECHNOLOGIES 4 @ats のイクメン日記

 

Erlang for Python Programmers http://openbookproject.net//py4fun/erlang/erlang.html

 

 

Luaライブラリーのluerl

Lua(ルア)は、Nginxの拡張モジュールとかで使われている軽量なスクリプト言語です。→C/C++を補完するツールですね。

Lua - Wikipedia

 

Erlang VM上で動くLuaのライブラリー「luerl」が紹介されてました。

 

medium.com

 

github.com

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を手軽に利用できるのでは?

 

http://efene.org/

Efene is an alternative syntax for the Erlang Programming Language focusing on simplicity, consistency, ease of use and programmer UX.

Efeneの公式サイトは、ドキュメントも整備されてました。イイかんじです!

 

github.com

 

hex.pm

 

 

Lisp風のLFE(Lisp Flavoured Erlang

LispErlangの魔合体!?…「どーすんだ、これw」みたいなラスボス的な組合せですが、S式(括弧の嵐)が大好きなLisperはLFEで決まり?

 

 

www.infoq.com

 

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で記述されたミドルウェアとライブラリのコレクションである。

 

qiita.com

 

Erlangの文法は大嫌いだけどErlang VMの機能は慣れてるLispで使いたい」という強い要望と意思を持った人でないと使っていけないかな…と思いました。

 

Lispハッカーはスゴイな!(=どこにでも進出して、自分達の色で染めていくw)

Java VM上で動くClojureを使ってた人なら、Erlang VM上で動くLFEでもOKでしょう。

 

 

OCaml風のAlpaca

Lispがアリなら、OCamlHaskellもアリでしょw」と思ったら、本当にありやがりました!

 

 

「Alpaca」と命名されたML風の言語が、Erlang VM上で動くそうです。

 

github.com

 

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)

 

(参考)

qiita.com

 

仕組みとしてはalpaca-langというErlangVM上で動作するML風Erlangを参考にしました。 

 

 

Coq風なVerlang

Coqは「定理証明支援システム」で、プログラムの動作を検証するためにも使える仕組みです。

OCamlが行けるなら、Coqも行けるのでは?」と思ったらありました。

 

qiita.com

 

Coq には Extraction という、Coq のコードを別の言語に変換する機能があり、この機能によってコードを検証済みの部品として実際のプログラムに使えるようになっています。標準では OCaml, Haskell, Scheme への変換が可能になっています。

この記事では、Verlang という、Coq の Extraction 対象に Erlang のコア言語である Core Erlang を加えるパッチ (つまり Coq2Erlang 的なもの) について紹介したいと思います。

 

github.com

 

(参考)Coqとは?

Coqの説明は難しいので、詳細は検索して下さい。m(__)m

 

Coq - Wikipedia

Coqは証明支援システムの一つ。Coqの核はプログラミング言語Gallinaを用いる。

 

employment.en-japan.com

 

qiita.com

 

qiita.com

 

定理証明支援とは数学の定理を自動で証明することではなく、ステップバイステップでコンピュータに命令を送り、数学の定理を証明するのを助けるシステムである。

Coq パッケージマネージャー ocamlと同じopam

 

証明支援には半自動と全自動があるみたいです。

 

自動定理証明 - Wikipedia

自動定理証明(英: automated theorem proving, ATP)とは、自動推論 (AR) の中でも最も成功している分野であり、コンピュータプログラムによって数学的定理に対する証明を発見すること。ベースとなる論理によって、定理の妥当性を決定する問題は簡単なものから不可能なものまで様々である。

 

産業への応用

産業分野での応用例としては、LSIの設計とその検証が挙げられ、モデル的手法とともに使われている。Pentium FDIV バグ 以来、FPUの設計は極めて厳密に行われている。AMDインテルはプロセッサの設計検証に自動定理証明を使っている。

 

 

Haskell風のcodec-beam

HaskellでもErlang VM上で動くコードを書けます。

「てか、Haskell使えるなら、Erlangぐらい使えるだろ?Erlangを直接使えよ!」という声も聞こえてきそうですが、Erlang VMの人気があるからですね?

 

hackage.haskell.org

 

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.

 

github.com

 

 

以上、Erlang VM上で動くプログラミング言語の調査結果でした。

他にもあったら、是非教えて下さい。m(__)m

 

Erlangのエコシステムを参考にして、JavaJava VMの代替を検討してみたいと思います。