kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Onion

そういえばOnionにもあるClass Delegation

先日、Kotiln勉強会というものに行って来ました。まあ、自分の発表は拙作kollectionライブラリの発表という割とどうでもいいものでしたが、それはそうとKotlinエバンジェリストたろーさんがClass Delegationという機能について紹介していました。 speakerdec…

FantomのImplicit CastsとOnionの黒歴史(にしたい)自動ダウンキャスト

Onionには以前自動ダウンキャストという今となっては黒歴史にしたい機能が入っていたことがあった*1。どういう機能かというと、たとえば、Object型の変数oをダウンキャストしてString型の変数sに入れたいとする。Javaだと以下のような感じだ。 Object o = ..…

無名関数リテラルの追加

Onion開発再開しつつある日記といいつつ、めったにOnionのことが話題に上ることが無い日記だが、先月は久しぶりにOnionをいじってたので、それについてちょっと書いてみる。今回の主な変更は無名関数リテラルの追加。今までも、Javaの無名クラスみたいな機能…

Groovy(やgcc拡張)の?:演算子をOnionに追加してみた

Groovyには、?:という演算子があって、たとえば、 x ?: y という式があった場合、 x != null ? x : y と同じような働きをする(xの評価が2回行われない事を除いて)。で、これと同じ働きをする演算子をOnionにも追加してみた。使い方はGroovyのそれとほぼ同じ…

Onionのバグ修正

module宣言を使ったとき、たとえば、 module foo.bar; class A { @b: B; } class B {}みたいなときに、@b: BのB型が見つからないというコンパイルエラーが出ていたのを修正。Onionを自分でもっとまともに使ってたらとっくに気付いてたバグだなあ。module宣言…

Onionで作るPEGパーザコンビネータ

せっかくなので、OnionでもPEGパーザコンビネータ書いてみた。しかし、自分で作った言語なのに、文法忘れてて文法定義ファイル見直してみたり、コンパイラが例外吐いて落ちたりして、コンパイラの不具合を避けてプログラムを書くために頭を悩ませるはめに…。…

Onionのバグ修正その2

abstract classでabstractなメソッド宣言があったとき、例えば、 abstract class A { public: def foo; }のとき、コンパイラがNullPointerExceptionを吐いて落ちていた問題を修正. (interfaceのメソッド宣言では起きていない)。クラスのabstractなメソッドに…

宣言と初期化と代入と

Onionの仕様についてつらつらと考えていたら、自動ダウンキャスト以上になんかよろしくなさそうな箇所に気付いてしまった。というか、もっと早くに気付いとけよという代物だけど。Onionは静的型付け言語で、ローカル変数も(他の静的型付け言語同様に)静的に…

自動ダウンキャストの削除

なんかモチベーションが上がってきたので、久しぶりにOnionのソースコードをいじっている。まず真っ先に手をつけたのは自動ダウンキャストの削除。自動ダウンキャストというのは、その名の通り、自動的にダウンキャストを挿入する機能で、例えば、Java風のコ…