オープニング
マジックナンバー 82/341
割り算で11が並ぶ17byte
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
Tora
- C++ impl
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"; };
ループに括弧いらない。
@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