トップ «前の日記(2016-08-14) 最新 次の日記(2016-08-20)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2016-08-17

_ プログラミングElixir

この日記の文脈でElixirというと、まず何よりもドニゼッティの愛の妙薬だが、ここではプログラミング言語の名前だ。

笹田さんと鳥井さんが翻訳されたデイブトーマス(どうしてもデイブはただのデブというフレーズを思い出してしまう)の『プログラミングElixir

Functional
|> Concurrent
|> Pragmatic
|> Fun
』をいただいた(初稿の校正読みに参加したからだ)ので紹介する。

第3言語としてお勧めして良いと思う(第1言語にはならないという意味ではない。ふつうのソフトウェア開発ではElixirを第1言語にすることはあまり無いだろうなぁという考えからで、第1言語にすることを選択できるのならすれば良いと思う。基盤はErlangなので実績的にも問題ないはずだ)。気に入ったのでおれは第3言語としてはElixirを使うつもりだ。

まず、全部は読んでいない。

『はじめに』、3部構成の半分を占める第1部『伝統的なプログラミング』は実際に手を動かして、練習問題も解きながら熟読した(ただし初稿)。

第2部『並行プログラミング』は書籍を頂いてから読んだ。半分は手を動かしながら、半分は単に読んだ。

第3部『より高度なElixir』は読んでいない。マクロ(マクロがある言語なんだよ!)、ビヘイビア、プロトコル(Objective-C用語の意味でのプロトコル。Java,C#ならpublicインターフェイスだ。なぜpublicを付けたかというと、モジュールスコープでのインターフェイス(Javaには無いけど)がビヘイビアだからだ)といったもの(と1文を書くために、読んでいないと書いた端から流し読みしてしまった)。

趣味の人は別とすれば、おれは3種類のプログラミング言語を覚えると良いと思っている。

第1は、仕事で使う主要言語だ。普通の世界ではなんらかのコンパイル言語となるだろう。たとえばおれの場合は、C(と古い使い方でのC++)、Java、C#、Objective-C、(コンパイル言語ではないが)JavaScriptだ(あと必要に応じてVBやCOBOLもあるがぐっと頻度は落ちる)。

第2は、それに対する補助言語だ。Unixであればシェル、sed、awk、find、grep、wc、cut、sort……となるのだろうが、Windowsメインの場合そうはいかないのでどうしてもプログラミング言語が必要となる。というわけでおれの場合はRubyがそれにあたる。解析、分析、ソース生成、ファイル大量操作といったありとあらゆる日常のさまざまな場面で頻繁に利用することになる。

余談だが、素人の職業プログラマーと、玄人の職業プログラマーの差は第2言語を持つか持たないかの違いだとおれは考えざるを得ない。

第3言語は第2言語に飽きたときにちょっと使う補完言語だ。これが微妙で、第2言語と異なり職業的にはなくても済むのだが、あったほうが間違いなく良い。楽しいし発想を転換するためのきっかけになる。発想転換のトリガーとしたいのだから、第1および第2とは完全に異なるほうが良い。というわけでPythonとかScheme(Gauche)とかいろいろ試したが、どれもいまいち違うなぁという感じだった。もっと全然違うほうが良い。かといってScala、Haskellといった本来第1言語クラスのやつだとちょっとヘヴィー過ぎて第2言語補完物とは成らなかった(ちなみにScalaは嫌いではない)。REPLをほいほい立ち上げられる言語が良い。この分類でいくとKotlinやSwiftは第1言語っぽいね。

Elixirは良い。まず軽い。すぐREPL(iex)が立ち上がる。

そしてシンプルだ。もう、すっかり(x, y)=>expとか(x, y)->{exp;}とか程度でなければ指を動かす気になれなくなっているので、これ重要(でもendと打つのは苦にならんけど)。

本当にこんなんで良いかまだ初心者過ぎてわからんのだが、ファイルxを1行ずつ処理(ここではプリント)するのはこんな感じだ。

File.stream!('x') |> Enum.each(fn(line) -> IO.write(line) end)   # File.stream! を覚えたので修正

本書はリファレンス的には使えない(最初からその点は放棄している)ので、Fileモジュールの説明すら出ていないが、それはWebでリファレンスを見られるのだから不要と考えているのだろう(ってことは日本語でなければだめな人はElixirを使えないね)。

そのかわり、プログラミング=フィルタリング変換(「プログラミングはデータの変換をするものだ」という最初の節題にしてあるくらいでした)ということを最初のあたりでこってり説教される。確かにLINQばかり書いていると、えらく納得感があるのだった。

あと、第13章のGithubからイシューリストを読み込んで一覧表示するプロジェクトの作成方法の説明は良い。こういうのはプラグデイブの面目躍如だ。

プログラミングElixir(Dave Thomas/笹田耕一/鳥井 雪)

_ プログラミングElixir追記

あと、読んでいて思ったというか、Githubのイッシュー眺めて感じたのだけど、コンピュータ科学の先生(笹谷さん笹田さん(ひどい間違いごめんなさい))と、日本語にこだわりのある技術者(鳥井さん)というコンビは、なかなか最強。

本日のツッコミ(全2件) [ツッコミを入れる]
_ technohippy (2016-08-17 15:15)

笹谷さん → 笹田さん<br>でしょうか?

_ ささだ (2016-08-17 15:23)

filtering じゃなくて、transforming(変換と訳出)ですね。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え