by shigemk2

当面は技術的なことしか書かない

プログラミング言語処理系を自作してわかったこと #lldecade

f:id:shigemk2:20131208215433j:plain

オープニング

マジックナンバー 82/341
割り算で11が並ぶ17byte

マインスイーパ正規表現を利用して自動で解く
37秒

Readable Perl 6

2004 Perl6 ?

Perl5 場当たり的な拡張

Neko Operator 範囲演算子
Damian

Rakudo Star
Parrot

# Perl5
$obj->method();
# Perl6
$obj.method();

配列とハッシュのアクセス方法が変更

文字列の連結は.から~に。
if文の括弧を省略可能に

Perl6 Essentionals

Perl6 の実装方針
Parrotベースに

Designing Perl6

人月の神話(Second System Syndrome)
2度目にデザインするシステムは失敗作になりやすい

next Perl5プログラミング言語Toraの設計と実装

現状のPerl6では遅くて使い物にならない
It's too slow.

自分が考えた最強のPerl5の子孫を考えてみた

いろいろなライブラリのforkを作ってみた

Catalysit
HTTP::Engine
Plack

forkは世界を良くすることもある

「ぼくの考えた最強のPerl」をどんどんリリースすうのはよい。

Perl5の問題点は?
学習コストが高い
ふくざつなシヨウ(コードが読みづらい)
You can't ポート

Perl5 - ふくざつさ + Perl6-ish syntax.
Perl5に0.5くらいのエッセンスを足したやつ

けしたこと

  • context
  • @ary, %hash
  • ;

たしたこと

  • autoboxing
  • Moose的なものの組み込み
  • ハックしやすいVM
  • 組み込みライブラリの実装しやすさ

のこしたこと

  • $(気にくわない人も多いけど、必要な感じがしたため)

Two Implementations

Tora

nana
Translator for Perl5

language specs

my $num = 1;
my $num = 1.234;
my $join2 = ['aaa', 'bbb', 'ccc'].join(' ');

my $hash;
$hash = {a => 1, b => 2};
$values = $hash.values();
$hash[a]

my $t = Time.now();
$t.year();

$my $i = 0;
while $i < 5 {
  $i++;
}
for $fields -> $field {
  ...
}
# ラムダ
$array.grep(-> $x { $x.match(/cat/) })
my ($err, $orig) = try {
  die "FAIL";
};

ループに括弧いらない。

Tora と Nana の続きはYAPCにて。

@tokuhirom
Perl7はまだまだ

lv5 世界で最も仕様に忠実なECMAScript言語処理系

背景

  • JSの発展はめざましい
  • JavaScriptには仕様が存在する(!!)

ECMAScript 5.1th 現状仕様準拠していない部分が多い

何があっても仕様準拠を第一に掲げるengine

独自実装をやらずに、仕様を直しにいく。

必要な場合にのみレジスタを割り当てる

breaker
低コストでそこそこ価値のある解析を行う

IC

shibuya ES.next

ECMAScript parser infrastructure

esprima harmony branch
ES.next を parse することを目標に実装を行っている

ES.next engine を仕様変更しながら実装していく

仕様に書いてある通りに実装していく

型みたいなものは入ってこない
今までのコードも問題なく動く(互換性にはかなり気を遣ってる)

@Constellation

2013に6が勧告

型安全なJavaScript処理系JSXを作ってみた

JSX

JSの問題

  • 遅い(スマホ向けゲームだと)
  • デバッグに時間がかかる(プロパティ名のまちがいも実行時のときにしかエラーを吐かない)
  • 読みにくい(様々な「クラスや「華麗な」コーディングテクニック)

JavaScriptよりも速く、開発効率も高いものを目指す

  • 静的型言語
  • 式と文はJavaScrpt + 型指定
    • 開発者がとっつきやすいように
    • JSの変換におけるオーバーヘッドを最小化
  • 静的なクラス構造

なぜ真言語なのか?
ActionScript3(ウェブブラウザで動かない)

Dart JavaScriptへ変換するオーバーヘッドが発生
型がオリジナル
Cefeescript 静的ではない

JSXの最適化

Box2D ベンチマーク

アフィン変換

冗長?

リーダブルコード

コードの相互参照が増えるのでコード数が増えれば読ににくくなるので
効率も下がる

エディタによる補完

コード編集とリーディングの支援
テストフレームワーク

ライブラリサポート(ライブラリがじないからしようもない

より速くより簡単で、より安全なJavaScriptの方言
開発環境の一部として言語を設計、編集

会社に必要のないものは実装できない
当分0.xx

mruby

メモリが少ない環境での使用に耐える軽量ruby

GCをオプショナルに…一時的に止めることは可能

githubでアカウントがある人はどんどんpull requestしていけばいいと思うよ。

ブロック引数もブロックローカル
コンパイラはツーパス

2.0に20年かかってる
バージョンなんて飾りです。