この出版物では、エンタープライズJavaからErlangに移行した経験を説明したいと思いました。
最初の近似としてのアーランのダイビング
最近、私はより多くの人々が関数型プログラミングに関心を呼び起こしていることに気付き始めました。 この開発の方向にいる多くの人々は純粋に学問的な関心を持ち、より適切な手段で問題を解決しようとする人もいれば、新しいプロジェクトで単にこれに遭遇する人もいます。
かなり長い時間のJava / Python開発の後、私は活動範囲を根本的に変えることに決め、Erlangを発見しました。
マルチスレッドJavaヘルパーの後、Erlangは、マルチスレッドプログラミングの問題を解決するためのより正確でリソース集約度の低いモデル、つまりアクターモデルを提案しました。
もちろん、このモデルにはマイナス面とプラス面がありますが、機能的パラダイムと副作用の欠如(または制御)は互いに補完し合っています。
「実際の」マルチスレッドが比較的最近、2006年にErlangで導入されたことは注目に値しますが。 Erlang VM内にSMP(Symmetrical Multi Processor)を実装した後。
![](https://habrastorage.org/files/21f/249/741/21f249741f664ba6b0bea8270529c64a.jpg)
この実装の日付は2008年です。残念ながら、最新の実装の説明は見つかりませんでしたが、ほとんどの場合、すべてのスケジューラの共有キューを残しました。
つまり、SMPサポートにより、各スレッド内で動作する1〜1024のプロセススケジューラを使用できます。 スケジューラは、ErlangプロセスとIOタスクを共通のキューから取り出します。 SMPでは、すべての共有データ構造がロックによって保護されています。 タスクキューは、このような構造の一例です。 この実装は2008年に説明されました。開発者は、一般的なタスクキューから各スケジューラのキューに移動することを既に計画していました。
ビルドおよび展開ツール
あらゆるライセンスの下で必要なものがほぼすべて揃っている、充実したエンタープライズJavaの世界から移行する場合は、それについて考えるだけでよく、すでにオープンソースのどこかにあります。 Erlangの世界には、必要なツール、ライブラリ、統合技術、記事、マニュアルがたくさんあるという事実に直面しました。
残念ながら、Erlangにはプロジェクトやライブラリを保存するための集中管理された場所がないため、事実上githubは、Erlangプロジェクトが公開されるまさにそのプラットフォームになりました。
Erlang開発者の仕事のリストをよく理解しておくことをお勧めします。
プラットフォームを展開してプロジェクトを構築するための自動化ツールから始めましょう。
カール
このスクリプトがなければ、Erlangの異なるバージョンでアプリケーションをテストすることは非常に困難です。 ソースから必要なErlangビルドをアセンブルし、グローバルリストに追加し、必要なディレクトリにアセンブルされたビルドをインストールできます。その後、ビルドを切り替えるのが非常に便利です。
典型的なユースケース
可能なリリースのリストを取得します。
$ kerlリストリリース
erlang.orgから利用可能なリリースを取得しています...
R10B-0 R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1
R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02 R13B03 R13B04 R14A R14B R14B01 R14B02
「./kerl update release」を実行して、erlang.orgからこのリストを更新します
R10B-0 R10B-2 R10B-3 R10B-4 R10B-5 R10B-6 R10B-7 R10B-8 R10B-9 R11B-0 R11B-1
R11B-2 R11B-3 R11B-4 R11B-5 R12B-0 R12B-1 R12B-2 R12B-3 R12B-4 R12B-5 R13A
R13B R13B01 R13B02 R13B03 R13B04 R14A R14B R14B01 R14B02
「./kerl update release」を実行して、erlang.orgからこのリストを更新します
選択したリリースをビルドとして収集します。
$ kerl build R14B02 r14b02
otp_src_R14B02.tar.gzを/home/evax/.kerl/archivesにダウンロードしています
(カールが進む...)
アーカイブチェックサムの検証...
(カールが進む...)
チェックサム検証済み(229fb8f193b09ac04a57a9d7794349b7)
ソースコードの抽出
Erlang / OTP R14B02(r14b02)を構築しています。お待ちください...
Erlang / OTP R14B02が正常に構築されました
(カールが進む...)
アーカイブチェックサムの検証...
(カールが進む...)
チェックサム検証済み(229fb8f193b09ac04a57a9d7794349b7)
ソースコードの抽出
Erlang / OTP R14B02(r14b02)を構築しています。お待ちください...
Erlang / OTP R14B02が正常に構築されました
ディレクトリにアセンブルされたビルドをインストールします。
$ kerl install r14b02 / path / to / install / dir /
/ path / to / install / dirにErlang / OTP R14B02(r14b02)をインストールしています...
次のコマンドを実行して、このインストールをアクティブ化できます。
。 /パス/ to / install / dir / activate
後で、インストールを入力したままにすることができます。
kerl_deactivate
次のコマンドを実行して、このインストールをアクティブ化できます。
。 /パス/ to / install / dir / activate
後で、インストールを入力したままにすることができます。
kerl_deactivate
システムにインストールされているビルドのリストを確認します。
$ kerlステータス
利用可能なビルド:
R14B02、r14b02
R14B02、r14b02_hipe
-利用可能なインストール:
r14b02 /パス/ to / install / dir
-現在アクティブなインストール:
現在アクティブなインストールは次のとおりです。
/パス/ to / install / dir
R14B02、r14b02
R14B02、r14b02_hipe
-利用可能なインストール:
r14b02 /パス/ to / install / dir
-現在アクティブなインストール:
現在アクティブなインストールは次のとおりです。
/パス/ to / install / dir
鉄筋
このユーティリティは、バージョン管理システムからもアセンブリ、コンパイル、および依存関係の管理を実行します。
鉄筋の使用に関するいくつかの記事と非常に優れたドキュメントがあります。
典型的なユースケース
私は主なコマンドを実行するだけです:
confファイルに記述されているすべての依存関係を取得します
$ rebar get-deps
依存関係の更新
$ rebar update-deps
プロジェクトを組み立てる
$鉄筋のコンパイル
リリースを生成
$ rebar generate
ビルドアーティファクトをクリアする
$鉄筋がきれい
Erlangでプロジェクトを操作するとき、このツールが長い間標準になっていることは注目に値します。 エリクソンに標準のOTPに導入してもらいたいです。
IDEツールまたはワードプロセッサ
事実上、EmacsはErlangの主要な開発ツールと考えられています。
Emacsのファンには、開発を簡素化してスピードアップするための膨大な数のプラグインと拡張機能がありますが、このアプローチはすべての人に適しているわけではありません。
短い検索の後、いくつかのプラグインが見つかりました。
日食
![](https://habrastorage.org/files/0ce/bad/549/0cebad549f964ee4bf851c835ddce169.jpg)
プロジェクトは開発中であり、現時点では達成できました(リストは完全ではありません):
- 透析器のサポート
- ラングラーのサポート
- etopサポート
- eunitサポート
- デバッガーのサポート(リモート)
また、かなり便利なリファクタリングと検索もあります。
Sergey Ignatovによって作成されたIntelliJ IDEAおよびErlangプラグイン。
![](https://habrastorage.org/files/f58/903/55c/f5890355c72a450887d28185a5a7178b.jpg)
- ナビゲーション
- 自動補完
- 鉄筋のサポート(!)
- eunitサポート
- 透析器のサポート
- ラングラーのサポート
- デバッガーのサポート
また、Erlangで開発する際に使用するツールは何ですか?