国際会議

Code BEAM STO 2019 参加報告

国際会議

ペパボ研究所客員研究員の力武健次(りきたけ・けんじ)です。この記事では2019年5月16日〜17日にスウェーデンのストックホルムで行われたCode BEAM STO 2019の参加報告をします。(文中敬称略)

Code BEAM STO 2019

Code BEAMは、Erlang Solutionsが開催する、Erlang、Elixir、その他Erlangの仮想マシンBEAM上で動く言語、システム、アプリケーションに関するカンファレンスの総称です。ストックホルムで開かれているCode BEAM STOは、1994年に最初にErlang User Conferenceとして開かれて以来の歴史があります。

力武は2016年のErlang User Conference、2018年のCode BEAM STO 2018に参加しており、今回は3度目の参加となります。

Code BEAM関連カンファレンスの概要については、以下の関連記事があります。ぜひご参照ください。

今年の力武の発表内容: BEAMのプログラミングパラダイム

一般にカンファレンスに参加することの意義は

  • 会場で雑談を含む各種議論ができて親睦を深められること
  • 最新のトピックスに関する発表が聞けること
  • 自分の発表に対する忌憚なきコメントをもらえること

の3つだと力武は考えています。Code BEAM STOへの参加も例外ではありません。

今年は力武がかねてから気にしていた「ErlangやElixirらしさ」に関して掘り下げた発表を行うことにしました。具体的にはErlangやElixirが持つ一度定義した変数の再代入や再束縛の禁止や制限、一度作成されたデータ構造の改変禁止、そして常にディープコピー(ポインタ等の参照を使わず、データ構造をすべてコピーすること)を行う言語仕様の背後にあるプログラミングパラダイムの考察を行いました。タイトルは”The BEAM Programming Paradigm”としました。

当日の発表では、関数型やオブジェクト指向といったより大きなパラダイムの分類に関係なく、Common LISPやC++、C#といった言語を例にして、ErlangやElixirとはまったく異なるプログラミングパラダイムが世の中では主流であること、そしてErlangやElixirはデフォルトモードを変えることでそれらの主流な言語とあえて違う道を進んでいることにその根源的な価値があることを強調しました。実は会議のキーノートの1つもプログラミングパラダイムに関するもので、話題が重なってしまい大いに恐縮したのですが、参加者の方々には概ね好意的な反応をしていただき、なんとか無事発表を終えることができました。

今回の発表に対し、「純粋関数型言語では副作用を許容していないが、変数等への破壊的代入が行える言語は関数型とはいえないのではないか」という質問がありました。発表の場では副作用はいくつかの局面において有用である旨回答しました。しかし、このことについてのより詳細な説明としては、現実には副作用をまったく排除した状態では入出力すら不可能になるため、どんな言語でも何らかの形で副作用を取り入れざるを得ないと力武は考えています。ErlangやElixirであれば、入出力機能はBEAMに備わった基本関数(BIF)で実現していますし、これはディープコピーなどの制約とは矛盾していません。ともあれ、昨年同様にこのような核心を付いた指摘が来るのは、カンファレンスの楽しみでもあります。

発表動画

発表スライド

Code BEAM STO 2019のハイライト

今年も昨年同様にCode BEAM STO 2019の録画ビデオはYouTubeのプレイリストとして公開されています。以下にいくつか紹介します。

OTP Teamの開発を統括しているKenneth LundinによるErlang/OTPの現状に関する発表では、5月14日にリリースされたOTP 22.0までの機能の実装状況、そして来年リリース予定のOTP 23.0までのロードマップが示されました。OTP 22.0までに実装された新規機能の中で重要なものとしては、atomicscounterspersistent_termといった複数プロセス間の情報共有をロックなしでBEAMとして高速に行うものが挙げられます。また、OTP 23.0に向けて、クラウド、コンテナ、マイクロサービスといった運用により使いやすくするための改良も行う旨が表明されました。信頼性を維持しつつ、BEAMの性能を上げていく努力には頭が下がるばかりです。

今回はElixir Core Teamからは開発のリーダーであるJosé ValimからElixirの開発の現状についての発表がありました。このブログ記事を執筆している時点ではまだビデオは公開されていませんが、当日の様子を力武がメモしたツイートからかいつまんで紹介します。

  • 2019年1月にリリースしたv1.8には800人以上のコントリビュータ、8500以上のhex.pmでのパッケージ、5億以上のダウンロードがあった
  • (2019年6月にリリースされた)v1.9では、Releasesがサポートされる。これは必要なライブラリ等をまとめて特定のディレクトリ配下で実行できるもの。
  • v1.9にて課題となっていた新規機能の開発が完了した。v1.10以降は、6ヶ月に一度ずつ新しいバージョンのリリースを続ける。(バージョン番号をv2とするような)メジャーリリースの予定はない。今後もErlang/OTPへの開発成果のフィードバックを続けていく。

キーノートとしては3つの発表がありました。プログラミング言語Ozの開発者であり、プログラミングパラダイムに関する専門家であるPeter Van Royによる発表では、現実世界との接点にのみ命令型プログラミングを用い、あとは純粋関数型プログラミングを用いることで、分散システムにおける時間の前後関係の問題を現実的に解くやり方の提案がありました。

またMadeleine Malmstenのプログラミング教育の題材としてErlangを使った事例紹介では、プログラミング言語の概念よりも、何ができてどうやればいいかに対して生徒が興味を強く持つこと、そして何よりも楽しめるかどうかが学習の成否を左右することが紹介されました。

そしてElixir上のGUIフレームワークScenicの開発者であるBoyd Multererからは一般的にはオブジェクト指向で実装されるGUIをどのようにElixirのプロセスとして実装したかに関する発表がありました。ユーザインターフェースをプロセス間メッセージパッシングで実装している様子にはとても興味深いものがありました。

キーノート以外でも多くの興味深い発表がありました。OTP Teamのセキュリティ実装担当者であるIngela Anderton AndinによるErlang/OTPのTLS実装に関する互換性に関する発表では、互換性とセキュリティのプロトコル仕様というしばしば相反する実装上の要請に関する難しい選択、そしてHeartbleedなどさまざまな脆弱性についてErlang/OTPのTLS独自実装がどのように対応してきたかが語られました。

またErlang/OTPやElixirが直接動く組み込みボードGRiSPの2号機GRiSP 2を開発しているPeer StritzingerとAdam Lindbergによる分散Erlangノード間のプロトコルに関する発表では、現在標準となっているTCPを使ったノード間通信ではないUDPによるプロトコル、そしてイーサネットの遅延や遅延のバラツキの上限を抑えることを目指したTime-Sensitive Networkをどのように応用していくかの提案がありました。

EricssonにおけるErlangの開発に最初からかかわり、かつて同社の研究所であったCSlabにて研究の指導にあたったBjarne Däckerの発表では、1980年代から1990年代まで通信用交換機の制御システムがどのように開発されていたか、そしてCHILL、Ada、EriPascalなどの言語が使われていった中で、結果としてPrologからErlangに発展していった歴史についての紹介が行われました。Erlangは特定のプログラミングパラダイムありきで開発されたのではなく、現実の並行システムの問題を解くために形作られていったことを、この発表からは伺うことができます。

Erlang Ecosystem Foundation (EEF)

今年の3月に米国サンフランシスコで開かれたCode BEAM SF 2019にて、Erlang/OTPやElixir、そしてその他BEAM関連システムを使うユーザ企業や個人の間の連携推進を目的とした非営利団体Erlang Ecosystem Foundation (EEF)が立ち上がりました。この団体の目的はそれまで特定の企業を中心として動いてきたErlang/OTPやElixirなどのエコシステムを広げていく広報や技術開発などの活動について、より広く参加者を募り、かつこれらの活動に供出できる資金を集めていくことを目的にしています。

Code BEAM STO 2019でもEEFの設立に関する発表および参加者に対する協力要請が行われました。このブログ記事を執筆している時点ではまだビデオは公開されていませんが、紹介内容についてはCode BEAM SF 2019でのEEF設立紹介の発表にまとめられていますので、興味のある方はぜひご覧になってみてください。

EEFにはフェロー(Fellow)として功績者を称える制度が定款(Bylaws)に設けられていますが、Code BEAM STO 2019ではCSLabでのErlang開発者であったBjarne Däcker, Joe Armstrong, Robert Virding, Mike Williamsの4名がフェローに選ばれたことが報告され、表彰されました。

なお、大変残念なことに、Erlangの作者であり設計者であったJoe Armstrongは2019年4月20日に68歳で急逝するというとても悲しい出来事がありました。このことについては力武個人のNoteの記事に所感をまとめています

ストックホルムへの旅程と雑感

日本からスウェーデンには航空機の直行便がありません。今回は移動時間の短縮のため、フィンランドのヘルシンキ経由で移動することにしました。ドイツ経由だった昨年までの移動に比べると、途中の待ち時間を含めて片道実質20時間から15時間程度へと大幅な時間短縮を実現することができました。

今年5月のストックホルムはとても寒く月初には最高気温10℃を割る状況だったため、大量の使い捨てカイロを持っていくなどの対策を行いました。幸い会議の開催時には最高気温は18℃程度まで回復しており、極端な寒さを感じずに過ごせたのは幸運でした。

スウェーデン語にはLagom är bäst(「ラゴム・エア・ベスト」と発音、「多くもなく少なくもないちょうど良いぐらいの量が一番適量」という意味)ということわざがあります。ErlangはまさにこのLagomの精神で作られているソフトウェアであることを力武は感じています。そしてそれはストックホルム全体に流れているピリピリしていない落ちついた雰囲気でもあると、今回の発表のための旅行で改めて感じることができました。

おわりに

すでに力武がErlangを学び始めてから11年が経過しています。6月に東京で開催されたErlang & Elixir Fest 2019では、任天堂の渡邊大洋氏によるErlang/OTPとejabberdを活用したNintendo Switch(TM)向けプッシュ通知システム「NPNS」の開発事例の報告が行われ、Erlang/OTPが単なる大規模並行システムにとどまらず、運用管理上も実行時の設定やプログラムの変更そして各種性能のモニタリングが容易な優れたシステムであることが日本国内でも広く知られるようになりました。また、国内でもfukuoka.extokyo.exなど、Elixirを主とした各種関連コミュニティが活発に活動しています。

しかし、Erlang/OTPやElixir、そしてBEAMを使うことに効果のあるような並行処理プログラミングを対象とするシステムは、複雑かつ大規模であるため、理解が容易であるとは言えない状況が続いています。EEFの主要メンバーであるFréd Hébertは、自らのブログ記事 “Ten Years of Erlang”の中で、Erlangが得意としてきた分野がEjabberdやRabbitMQなどユーザは多いもののコントリビュートできる人達が少ないものであることを挙げており、「システムを使う」のではなく「システムを作り上げる」という本質的に難しい問題を解くための道具であるErlangは時間をかけて学ぶ必要があることを書いています。力武もその通りであると感じています。

力武の所感としては、昨年に続き、Erlang/OTPやElixirを使って何をするのか、どう使っていけばいいのかを考えて紹介していくことが大事であるというのを今年も改めて感じました。


【PR】パートナー積極採用中!

ペパボ研究所では、新しいパートナーを求めています。詳細については、当研究所のトップページをご覧ください。