Onion
先日、Kotiln勉強会というものに行って来ました。まあ、自分の発表は拙作kollectionライブラリの発表という割とどうでもいいものでしたが、それはそうとKotlinエバンジェリストたろーさんがClass Delegationという機能について紹介していました。 speakerdec…
Onionには以前自動ダウンキャストという今となっては黒歴史にしたい機能が入っていたことがあった*1。どういう機能かというと、たとえば、Object型の変数oをダウンキャストしてString型の変数sに入れたいとする。Javaだと以下のような感じだ。 Object o = ..…
Onion開発再開しつつある日記といいつつ、めったにOnionのことが話題に上ることが無い日記だが、先月は久しぶりにOnionをいじってたので、それについてちょっと書いてみる。今回の主な変更は無名関数リテラルの追加。今までも、Javaの無名クラスみたいな機能…
Groovyには、?:という演算子があって、たとえば、 x ?: y という式があった場合、 x != null ? x : y と同じような働きをする(xの評価が2回行われない事を除いて)。で、これと同じ働きをする演算子をOnionにも追加してみた。使い方はGroovyのそれとほぼ同じ…
module宣言を使ったとき、たとえば、 module foo.bar; class A { @b: B; } class B {}みたいなときに、@b: BのB型が見つからないというコンパイルエラーが出ていたのを修正。Onionを自分でもっとまともに使ってたらとっくに気付いてたバグだなあ。module宣言…
せっかくなので、OnionでもPEGパーザコンビネータ書いてみた。しかし、自分で作った言語なのに、文法忘れてて文法定義ファイル見直してみたり、コンパイラが例外吐いて落ちたりして、コンパイラの不具合を避けてプログラムを書くために頭を悩ませるはめに…。…
abstract classでabstractなメソッド宣言があったとき、例えば、 abstract class A { public: def foo; }のとき、コンパイラがNullPointerExceptionを吐いて落ちていた問題を修正. (interfaceのメソッド宣言では起きていない)。クラスのabstractなメソッドに…
Onionの仕様についてつらつらと考えていたら、自動ダウンキャスト以上になんかよろしくなさそうな箇所に気付いてしまった。というか、もっと早くに気付いとけよという代物だけど。Onionは静的型付け言語で、ローカル変数も(他の静的型付け言語同様に)静的に…
なんかモチベーションが上がってきたので、久しぶりにOnionのソースコードをいじっている。まず真っ先に手をつけたのは自動ダウンキャストの削除。自動ダウンキャストというのは、その名の通り、自動的にダウンキャストを挿入する機能で、例えば、Java風のコ…