投稿

だらだらと

だらだらと

A first look at WebAssembly performance

http://www.stefankrause.net/wp/?p=405

WebAssemblyとJavaScript実装との性能比較。

結果としては、速いこともあれば遅いこともある。
一年前ははっきりと遅かったのだから進歩していると解釈できるのかな?

パフォーマンスが同等であればわざわざ手を出すほどでもないかと思いつつも、
バイナリサイズがコンパクトであることを考えると現段階でも優位性が高いといえなくもないか。

駄文

駄文を書きたくなったのでテキトーに。

映画なんかで逃亡者が走っているのを見ると、小さい頃の夢を思い出してしまう。

当時は警察官になるのが夢だった。

この夢はすぐに諦めることになった。親から「太っていると犯人を捕まえられない」と指摘されたのだ。親は冗談だったかもしれないが、小学生にもなっていない子供にはそこまでは気づけない。

警察官になるのを諦め、同時に運動能力を必要とするものすべてを諦めてしまう。そして、勉学に希望を見出して精を出し始める。

鈍い小学生が成績トップになるのは簡単なことではなくて3年もかかってしまった。

皮肉なことに3年の月日は小学生の体を変えてしまうのには十分な期間だった。

身長が急激に伸び、肥満体型からスレンダーに変化した。足は長くなるし、筋肉も急速に発達した。その結果、運動能力でもトップクラスになってしまうのだった。

続きは、、、予定していない。

ぺちこん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はオフサイドルールがある割には表現力が高くて、ごちゃごちゃしがちなのでしょうか?

テーブルごとの容量確認

autovacuumされてる?

deadが多い、減らない場合はautovacuumされていないかもしれません。