kuzha
えー。IE でやったら認証も何も要らずにアップロードできちゃった……。ということで kuzha 1.0 alpha 1 公開ですよ。 Google Code Archive - Long-term storage for Google Code Project Hosting. windows のひと、ダウンロードしたアーカイブ内の kuzha.bat …
kuzha1.0 alpha1 を google code hosting のダウンロードスペースに上げようとしたけど、認証でことごとく弾かれてアップロードできひん。 google のアカウントも google code のアカウントもダメ……ユーザ名とパスワード、何入れればいいんやろか…… orz
kz> "abc" puts; > abc kz> "abc" pp; > "abc" kz> "abc" dump; > "abc" { * this = "abc"; `+` = #fun(String.`+`); `<=` = #fun(String.`<=`); `<` = #fun(String.`<`); `==` = #fun(String.`==`); `>=` = #fun(String.`>=`); `>` = #fun(String.`>`); `^=…
結局こうなるようにしてみた。 kz> this puts; > 3 times:{|| parent.this puts; }; > LOBBY(0x1BEFAB0) LOBBY(0x1BEFAB0) LOBBY(0x1BEFAB0) LOBBY(0x1BEFAB0) parent と書いた場合、this.parent ではなく local.parent を見るようにした expr.this を受け入…
local.super が this と同じって言ったけど、local.superは書き換え可能だったりするのが困りもの。 kz> local.puts = &puts; > puts@this; puts@local.super; > local.super = "hoge"; > puts@this; puts@local.super; > LOBBY(0x1D5550D) LOBBY(0x1D5550D)…
kz> 3 times:{|| puts@this; }; > 3 3 3 kz> puts@this; > 3 times:{|| puts@local.parent.super; }; > LOBBY(0x1D5550D) LOBBY(0x1D5550D) LOBBY(0x1D5550D) LOBBY(0x1D5550D) kz> pp@local; > #bindings(0xC21495) { * super = LOBBY(0x1D5550D); }3 times…
なんとなく kuzha で挑戦。俺言語だしどう書くのほうにはポストできないなぁ……(^-^; プログラム juse: 'java.io.*' local; juse: 'java.net.*' local; url = jnew: URL 'http://ll.jus.or.jp/2008/blog/archives/38/trackback'; conn = url openConnection; …
Python で気になっていたループの else 節、よくよく考えてみれば C# で object foo; foreach(object bar in array) { if (bar == baz) { foo = bar; goto SKIP; } } foo = new Object(); SKIP: Console.WriteLine(foo); みたいなのがさくっと書けるのか。言…
x++ が x = x + 1; と等価なので、ローカルコンテキストに代入されちゃった例。 kz> x = 1; > 5 times:{|| x++ puts; }; > 1 1 1 1 1本来ならこうしたい。 kz> x = 1; > 5 times:{|| x++ puts; }; > 1 2 3 4 5 関数を渡された 5 オブジェクトが関数起動して…
これが、 for i in 1..100 do if i % 5 == 0 and i % 3 == 0 then "FizzBuzz" puts; elsif i % 3 == 0 then "Fizz" puts; elsif i % 5 == 0 then "Buzz" puts; else i puts; end endこうでも許容されるようにした。 for i in 1..100 do if i % 5 == 0 and i …
X / _ / X ゆの in Ruby - 冬通りに消え行く制服ガールは✖夢物語にリアルを求めない。 - subtech なんか感化されたので、空気読まずにゆの in 俺俺言語。 X = { s = "ひだまり"; `/` = fun x { if x == void then this.s += "スケッチ"; else this.s += "x36…
list = [1 2 3]; num = list.[1];. に加えて [ 〜 ] にすると配列参照するという仕掛けにしてみた。
eval 内からの global への書き込みは、シャドウイングすることにしました。 ku> global.foo = "abc"; > global.foo puts; > abc ku> eval: "global.foo puts; global.foo = 123; global.foo puts;"; > abc 123 ku> global.foo puts; > abc
ku> juse: "java.lang" local; > run = jnew: Runnable; > run.run = fun { > for i in 0..9 do > i puts; > Thread sleep: 1000; > end > }; > th = jnew: Thread run; > th start; > ku> 0 1 2 3 4 5 6 7 8 9非同期処理も可能そうです。
1千万超えたので中止させた。 間違いなく GC で回収されてるだろうと思う。
と思ってテストコードをぶん回し中。 juse: "java.lang" local; for i in $[0..] do eval: i + " puts;"; Thread sleep: 1; end何をしているかって言うと、ひたすら eval をぶん回している。 今の kuzha の実装だと、ソースコードは kuzha.code.CodeBlock ク…
ku> func = fun x { > x puts; > }; > local.func.before = fun x { > "before: " + x; > }; > local.func.after = fun x { > "after: " + x; > }; > ku> func: "Hello world"; > before: Hello world Hello world after: Hello worldってな機能を付けようか…
とりあえず SecureWrapper って名前のクラスを作った。で、色んなアクセス制限を考えると、ちょっとした SandBox オブジェクトが作れそうな気がする。結構有意義かもかも。 とりあえず、eval 関数での global オブジェクト保護に SecureWrapper を使うことを…
KuSecureObject っていうセキュアなオブジェクトを用意しようかなーとか考えていたりする。ある特定のコンテキストからの書き込みとか読み込みを制限できるような。 具体的には、ルートオブジェクトは読み書き自由だけど、exec コンテキスト内からは読み込み…
最終的にこんな感じに持っていきたいな。 juse: "java.lang.*" local; System.out println: "Hello world";juse: "java.awt.*" local; juse: "java.awt.event.*" local; window = jnew: Frame "kuzha window"; window setSize: 320 240; wls = jnew: WindowL…
ku> jclass: "java.lang.System", out, println: "Hello world"; > Hello worldよし、動いたヽ(≧∀≦)ノ
java.lang.System.out.println() の呼び出し ku> juse: "java.lang" local; > System.out println: "Hello world"; > Hello world java.awt.Frame を使ってみる ku> juse: "java.awt" local; > juse: "java.awt.event" local; > window = jnew: Frame "Sampl…
synchronized(this) { if (this.entry != null) return; this.entry = new HashMap<String, List<String>>(); } このコードって、new HashMap が行われるのって常に1回だけってのは保障されるのかなぁ……。</string,>
関数定義 現在の文法 void FunctionLiteral():{}{ ("\\" | "fun") FunctionArguments() ( "(" Expression() ")" | "{" StatementList() "}" ) } 新文法 void FunctionLiteral():{}{ "fun" FunctionArguments() ( "->" PrimitiveExpression() | "{" Statement…
メソッドミッシングに使う forward スロットを、特殊スロットへと格上げ 関数定義を ^ から \ に変更 \x y (x + y) みたいな感じに キーワード引数を | から # に変更 foo# a = 123; みたいな感じに 未評価参照 &var を削除 今後は local.var で代用 余った …
obj = {}; obj.foo.bar = "abc";こういうプログラムは、現行の kuzha では foo が void なので VoidOperationException を吐き出してきます。これを、bar スロットへ代入した時点で foo を自動生成するようにするかどうかの思案中。結構手間がかかるんだけど…
ku> neko01 = "tama"; > neko02 = "koma"; > ku> local pp; > #object: e39a3e { neko01 = "tama"; neko02 = "koma"; }んー。やっぱり集合リテラルは要らないかなぁ。
ku> test = ^{ name = "tama"; return local; }; > ku> test.name puts; > tama関数とかのローカルコンテキストをそのまま持ち出せます。
ku> for i = 9 to 0 step 2 do > i puts; > end > 9 7 5 3 1Delphi 風味。こうすると step も自然と書けます。 「 for i in 0..9 do 〜 end 」 とどっちが良いかなぁ。
ku> for i in 0..9 do > i puts; > end > 0 1 2 3 4 5 6 7 8 9とりあえず for 文では、in の後に 「式 ".." 式」 を書けるようにして対処してみた。