投稿

2016の投稿を表示しています

ぺちこん2016

仕事でPHPを使うことが多いし、もっと興味をもってみるかということで行ってみた。 ので、雑感をまとめておく。 HHVM/Hackの話 「素のPHPを実行するだけでも高速化のメリットがある」 というのはもう無理があるんじゃなかろうか。ベンチマークは所詮ベンチマークとはいえ、PHP7と比較して大差があるわけじゃない。それなのに環境を変えるリスクを背負えるはずもないし。 「async/await」 例としてでたクルクルSQLについては、言語的にはリクエストを投げまくる点は変わらず、その点は他のレイヤーで解決するべき問題とばっさり。他言語だってそうだし、そんなもんってノリなのかな? 「型はしっかり書け」 ごめんなさい。もっと推論してやさしくしてください。型チェックはありがたいけど、JavaやGoみたいになっていくなら普通にそっちを使いますわ。 「コンバーター?切り替えオプションあるから地道に手で変換するべし」 ほら、これだって推論器が強ければ、作業も楽になるし。 てか、不完全でもコンバーターあれば実際問題としては全然状況ちがうんでは。 IPv6の話 IPv6には繋がらないけど審査は通ったから「IPv6対応」事案には、会場爆笑。 PHP ASTの話 ASTを引っこ抜けるライブラリは、今のところ実行前のASTをコピーしてるだけ。後の質疑応答で実はそうではなくて同じものとか、一体どっちや? 発表資料などはtwitterを検索するといくつかヒットする。 運営側でとりまとめてくれると楽なんだけど、2015のサイトをみても無いし、今年もないんだろうなぁ。

個人プロジェクトの今後

Haskell, OCaml版を無事に実装し終えて、今後のことについて迷っている。 今考えられる個人プロジェクトは、大まかには2つである。 1. lisp 処理系 2. サーバー まず、lisp 処理系について掘り下げてみる。 こちらについては、多言語実装と高速化、多機能化の3つを挙げることができる。 多言語実装では、いかに挙げる言語での実装を目標としている。 * lisp, scheme * sml * elixir * rust * c * c++ まだまだ挙げようと思えば挙げられるが、有益な経験を得られると思えるものみに絞った。 多言語実装を通して、その言語に慣れ親しむのが主な目的である。 このプロジェクトに取り組む前は、動的手続き型言語(Ruby, JavaScript)でのみ 実装できただけであったため、その後に続くGo, Haskell, OCamlは得るものが多かった。 しかし、静的型づけ、関数型と歩を進めたあとでは、そのあとに続く言語での 得られるものは少ないのではないかという不安がある。 ただし、lisp自体の習熟は、なぜlispの生産性が高いと言えるのかをよく理解できていないため、 プロジェクトを進める価値はまだ十分にあると言えそうである。 以上の不安から、浅い部分で経験を積むのではなく、深いところに踏み込んでいくことを考えている。 その候補としては、処理系の高速化や多機能化が挙げられる。 高速化に関しては、ゼロ知識のため他のプロジェクトを読むのが主な作業になるだろう。 そこで得られた知見を自分のプロジェクトなり他人のプロジェクトなりにコミットして、 ベンチマークの成績を挙げられれば、わかりやすい励みになると思われる。 多機能化については、Peter Norvig実装から脱却して、ひとつのOSSプロジェクトへと成長させる ことを意味している。ここでは、what's new に答えられるかどうかがプロジェクトの真価を 問われる部分かと思われるが、まずは既存の仕様を理解し忠実に実装するという点を目標としたい。 自分のレベルから考えて、それだけでも十分高度な目標であろう。 次に、サーバーについて考えてみる。 こちらについては、フレームワークの構築とサーバーそのものの実

Lispy実装を追加

だいぶ前のことになりますが、Peter Norvig 先生の Lispy を参考に別言語での再実装していました。 kawakami-o3/yaLispy 最近、新たに Go, Haskell, OCaml での実装を追加しました。 Go雑感 先に実装していたRubyやJavaScript版とほぼ同様に実装できているものの、 Cell型の定義にいろいろ含まれていて冗長に感じます。 Cライクの言語実装でよく見かける定義ですが、もっといいアイデアはないものか。 Haskell雑感 Go実装の前に取り組んだ時はいろいろわからず苦労していましたが、 型の取り扱いに慣れてくると割とすんなり実装できてしまいました。 唯一、構文解析でリスト構造を生成する関数で手間取りました。 相互再帰している構文解析器、これももう少しシンプルに実装できないものか。 OCaml雑感 Haskellの実装後に取り組んだこともあり、つまづくところはほぼなく完了しました。 Haskell版のソースと見比べると若干整って見えます。 Haskellはオフサイドルールがある割には表現力が高くて、ごちゃごちゃしがちなのでしょうか?