3年半ぶり、そして、リブート後初となる東京開催のYAPC
2019年1月26日、東京にYAPCが返ってきました。3年半ぶり、そして、リブート後・新体制初となる東京開催です。今回から4回にわたって、筆者と編集部がピックアップしたセッションの様子をお届けします。
イベント当日。朝一のセッションから多数の参加者が集まりました
弾さんと対話しながら型を学ぶ
3FのRoom 1で最初に登壇されたのは、Perl界のご意見番とも言えるDan Kogaiこと小飼弾さん。「 肩のこらない型の話」と題して、最近、軽量プログラミング言語においてよく話題となる、型についてお話されました。
身振り手振りでプレゼンをする弾さん
そもそも、型とはどのようなものなのでしょうか。"YAPCASIA"という文字列は64個の0と1の列で表現されますが、このデータは数字としてもメモリ内のある場所を指し示すアドレスとしても解釈することができます。このような、さまざまな解釈ができるデータを、文字列であると決めているのが型と言えます。
Perlにも型がありますが、Perlの変数は真偽値や整数値、浮動小数点数、文字列などさまざまな値を同時に保持しており、利用時にどの型の値が使われるかが決まります。弾さんはこのことを「遅延型決定」という言葉で表現し、Perl5の著しい特徴であるとしました。
そして、型の未来について、Perl6のsubsetにおける値の制限や、Swiftなどの言語で採用されている型推論を取り上げました。Perl6のsubsetによって値を制限すると、たとえば3で割り切れる整数のような型が作れます。現在は動的な型チェックしかできないそうですが、静的にチェックできるようになると型の表現力が広がりそうです。また、型推論を用いると静的型付けと動的型付けの両方の利点が得られると期待できますが、コンパイル速度が遅くなってしまうのが弱点のようです。
実際にターミナルから型の挙動を確認したり、聴衆にクイズを出したりしながら進行した、とてもライブ感のあるトークでした。
Perl経験者向けのGoのわかりやすい解説
ちょうどRoom 1でYAPC座談会が開催されているころ、ホールでは@xaicronさんによる「Perl to Go」というトークが行われました。Go言語はスクリプト言語しか馴染みのないエンジニアにもとっつきやすい言語であり、Perlの利用者の間でも人気があります。@xaicronさんも半年前からGo言語でWebアプリケーションを書いており、その実体験を元にGo言語について紹介しました。
一番大きな会場「ホール」で発表を行ったxaicron氏
近年、Webアプリケーションはコンテナ上で動作することが多くなりました。@xaicronさんはGo言語の利点として、スクリプト言語よりもメモリ効率・実行効率のどちらも良く、少ないリソースでも十分にパフォーマンスが出せることを挙げました。また、コマンドラインツールを作る場合に、Go言語はクロスコンパイルが容易でバイナリの配布がしやすいため、開発者と利用者の双方にメリットがあるとしました。
一方で、Go言語にはPerlにはない難しい特徴があります。その1つとして、$GOPATHの存在が挙げられます。Go言語では$GOPATHで指定されたディレクトリの下で作業しなければならず、他の言語の経験者には馴染みにくいと言えます。
また、ライブラリのバージョンを管理する難しさにも触れられました。@xaicronさんもライブラリの扱いには苦戦し、数日間ハマったそう。しかし、これらの諸問題はまもなくリリースされるであろうgo modコマンドによって改善されることが期待できそうです。
その後、Goの基本的な文法について、Perlの経験者向けに解説されました。Go言語の変数の命名規則、varや:=による変数定義、スライス、関数の定義方法など、時折Perlとの違いも交えて述べられていました。エラー処理については例外がないことが特徴であり、panicやrecoverといった例外処理と類似した機能はあるものの、利用は推奨されません。エラーは関数の戻り値と一緒に返すことが多く、Go言語の関数が複数の値を返せることをうまく使った仕様であると言えそうです。
deferについては、Perlエンジニアには馴染みのあるScope::Guard の機能を提供するもの、Goroutinに関してはAnyEvent やCoro を使ったことがあればイメージしやすいでしょう。このようなPerlでの例えが多く用いられ、普段からPerlを使っている著者にはわかりやすい内容でした。
YAPCでは定番になっているオリジナルトートバック。今回のデザインはこちら