Lessons: Advanced

Taking our knowledge to the next level, these lessons get cover the advanced topics of Elixir and the BEAM.

並行性(コンカレンシー)に関するElixirの抽象化を見てきましたが、さらなる制御が必要になることもあります。そうした時のために、Elixirに組み込まれているOTPの振る舞いに目を向けます。

このレッスンではGenServerという重要な要素に焦点を当てます。

スーパバイザは、他のプロセスを監視するという一つの目的に特化したプロセスです。 子プロセスが失敗した際に自動的に再起動させることによって、耐障害性の高いアプリケーションを作ることを可能にします。

Elixirアプリは、単体のホストや複数のホストにまたがって分散された(distributed)一連の異なるノードで実行することができます。 Elixirは、このレッスンで概説するいくつかの異なるメカニズムを通して、それらのノード間で通信をすることが可能です。

メタプログラミングとはコード自体にコードを記述させる機能です。Elixirでは、メタプログラミング機能によりニーズに合わせて言語を拡張し、動的にコードを変更することができます。Elixirが内部でどのように表現されるかを見ることから始めましょう。次にそれを修正する方法を学び、そして最終的に拡張するためにこの知識を使用してみましょう。

注意事項: メタプログラミングはトリッキーで、どうしても必要な場合にのみ使用してください。過度の使用は、ほぼ確実に、理解及びデバッグすることが困難な複雑なコードにつながります。

プロジェクトが大きく、本当に大きくなることが時々あります。Mixビルドツールはプロジェクトの成長に合わせて、コードを複数のアプリケーションに分割してElixirプロジェクトをより管理しやすくする方法を提供します。

このレッスンでは @spec@type の文法について学びます。最初の @spec はツールによって解析できるドキュメントを書くための文法をより完全にするものです。二番目の @type はコードをより読みやすく理解しやすいものにする手助けをしてくれます。

前の章では仕様と型について学びました。この章では、その仕様を実装するようにモジュールに要求する方法を学びます。Elixirでは、この機能はビヘイビア(振る舞い)と呼ばれます。

このレッスンではプロトコルがどんなものなのか、そしてElixirでどのように使うのかを見ていきます。