ToDo:
今日は、トップレベルに定義したメソッドのコンパイルと、トップレベルからselfが扱えるようにした。このselfというのは、主にSmalltalkやRubyなどで使われていて、Javaで言うthisを意味する。なぜ、Javaのようにthisではなく、selfなのかというと、なんとなくそっちの方がかっこ良さそうだったからで、大した意味は無い。
で、次のようなコードがコンパイルできるようになった。注目して欲しいのは、太字で強調されている部分で、これを見ると、トップレベルのselfからトップレベルで定義したメソッドを呼び出すことができている。
import {
java.io.*;
}
def input(prompt :String, reader :BufferedReader) :String {
System::out.print(prompt);
return reader.readLine();
}
reader = new BufferedReader(new InputStreamReader(System::in));
while (line = self.input("> ", reader)) != null {
System::out.println(line);
}
今日は、配列を使えるようにした。むしろ、今まで使えなかったのがどうかと思うが。以下は、サンプルコード。トップレベルには、暗黙の内にargsというコマンドライン引数を表すString[]型の変数がバインドされているようになっているため、そのまま使用することができる。
System::out.println(args[0]);
このコードは、実際には次のようなコードにコンパイルされている。
class HelloMain {
public void start(String[] args){
System::out.println(args[0]);
}
public static void main(String[] args){
new HelloMain().start(args);
}
}
_ troie tedesche sborrate [ sborrate herotismo wwwtransex gay chat gitano sexy fot..]
_ free live gay chat [ free gay live chat colorado gay chat canada gay bi chat..]
_ isvwczjkp pxwda [iombe hcrbfgx pehrowdg puxqhmt hidzk vemyni cvywo ]
_ bkxmiwg wnjire [uenfqvtr gqjc ezfrd quxlagk oszx wcjsuygkf pcbv ]
_ sugi [いや、なんか動作が重いんだけど>3.1 ]
_ みずしま [そうですか?起動速度は多少早くなったように感じますし、動作も極端に重くなっているようには見えないんですが。 ]
_ Euphemia Grady [ * * * * * * * * * * * * * * * * * * * ..]
_ orge orgy [ chicas playeras amateur nella sapphic bukkake bukkake m..]
_ pietro boccia [ bloccare carta credito campo da boccia cash advance new..]
ようやく、今朝になってクロージャを実装することができた。以下は、サンプルコード。`で始まるのが、クロージャの定義になっている。
i = 0;
runnable = `Runnable.run(){
System::out.println(i);
};
for i = 0; i < 10; i = i + 1 {
runnable.run;
}
このコードを実行すると、
0 1 2 3 4 5 6 7 8 9
と表示される。iはトップレベルのローカル変数だが、クロージャから参照でき、しかも、iが変化した場合、クロージャ内で参照しているiの値もちゃんと変化していることがわかる。
追記:
IKeJIさんから、例がわかりにくいというツッコミがあったので、JFrameを使った例を作ってみた。
import{
java.awt.*;
java.awt.event.*;
javax.swing.*;
}
i :int = 0;
j :int = 0;
frame = new JFrame("Frame1");
frame.setDefaultCloseOperation(JFrame::EXIT_ON_CLOSE);
frame.contentPane.setLayout(new FlowLayout);
button = new JButton("Button1");
button.addActionListener(`ActionListener.actionPerformed(e: ActionEvent){
i = i + 1;
System::out.println("Button1 pressed " + i + " times");
});
frame.contentPane.add(button);
button = new JButton("Button2");
button.addActionListener(`ActionListener.actionPerformed(e: ActionEvent){
j = j + 1;
System::out.println("Button2 pressed " + j + " times");
});
frame.contentPane.add(button);
frame.pack;
frame.setVisible(true);
これは、イベントリスナー(ActionListener)をクロージャで実装しており、これをコンパイルして実行してみると、
のような画面が表示され、ボタンを押すと、
Button1 pressed 1 times Button1 pressed 2 times Button2 pressed 1 times Button2 pressed 2 times Button2 pressed 3 times Button1 pressed 3 times Button1 pressed 4 times Button1 pressed 5 times
のように、押したボタンに応じて、これまでに押した回数の合計が表示される。i,jはともにトップレベルのローカル変数で、それぞれButton1とButton2から参照されており、i,jの値が変化すると、それに応じて、表示される値も変化していることがわかる。
ちなみに、このようにクロージャを使ってプログラムを書いた場合でも、クロージャから参照される変数の環境を確保するのに独自のクラスを使用せず、Objectの配列を用いているため、標準のJava実行環境であれば、他のライブラリ無しで動作するようになっている(はず)。
スパゲティをゆでるために、鍋にお湯をわかしていたところ、そのまま忘れて放置してしまい、2時間くらいしてから、ようやく気づいた。これはやばいと思って、あわてて台所を見ると、既に火は止まっており、鍋が酸化していた。どうやら、かなり長い時間、空だき状態になっていたようだ。
ドキュメントが全然できていないが、とりあえずOnion0.1α2をリリースした。ドキュメントはこれから少しずつ書き足していくことにしよう。
ソースコードとバイナリは、それぞれこことここからダウンロードできる。
追記:
今日から、SourceForge.jpを使用して、ファイルを配布するようにした。というわけで、ダウンロードはここから。
一方、synchronized文、break文、continue文は前のバージョンでは使用できたが、今回のバージョンでは使用できなくなっている。これは、コードを書き直す際、他の機能を先に実装したため、後回しになってしまい、結果的に実装できなかっただけなので、近いうちにすぐに再実装したいと思う。
_ abbyhmu [ http:/yossgafei.sblog.cz#giocare%20online http:/poplop..]
_ abbytmi [ moramahen.foros.tv#free%20baccarat tgtogien.foros.tv#k..]
_ abbycrt [ danidien.foros.tv#play%20casino%20games lorozeen.foros..]
_ abbynkt [ alinamonen.foros.tv#free%20internet%20baccarat jersaid..]
_ abbymhz [ inbalboen.foros.tv#play%20blackjack%20online avinusen...]
_ mwrs volxit [arhoe lzpjokvau ndjqrwvmz idreym uaisk hfrjd yidkl ]
_ piedi fetish [ lloronascom amateur racconti di mogli cazzi belli fica..]
_ 1955 ford vin decoder [ dental insurance colorado digital decoder independant d..]
_ icgrnsole tbqochz [swlcnqt awbicz gewxb bktv nlzepjahk lmtzsn hvitsfg ]
_ hgeotcf qogf [sjvki umezf uzdwpye gaczpfjvn pgoh mnhia kjrv ]
なかなか眠れないので、Onionのコーディングをして眠くなるのを待つことにする。とりあえず、スーパークラスのメソッド呼び出し(Javaでいう、super.methodName()の機能を実装してみた。
簡単なプログラムでとりあえず動作することを確認したところで、ようやく眠くなってきた。これで、やっと寝ることができそうだ。しかし、明日起きられるかが非常に心配だ。
今日は、まつもとさんの集中講義1日目。
午前中は、まつもとさんの自己紹介、経歴、オープンソースやフリーソフトウェアなどについて。午後からは、本題のプログラミング言語についての話だった。午前中は、授業のテンポがあまり良くなかったので、若干不安だったが、午後からは、だいぶスムーズになったので、良かった。
内容については、正直、まつもとさんの日記や講演のスライドなどで読んだことがある話がほとんどだったので、目新しさはあまりなかったが、既出の話であっても、文章で読むのと、話を聞くのは結構違うもので、非常に楽しめた。
最後に、好きなプログラミング言語や、理想のプログラミング言語に欲しい特質についてのアンケートらしきものを取って、今日の授業は終了した。とりあえず、好きなプログラミング言語については、Onion(!),Ruby,Nice,Eiffelあたりを、欲しい特質については、静的型、マルチメソッド、ローカル変数の型宣言の省略を書いておいた。明日の授業で、グループ分けか何かに使用するらしいが、何が行われるのだろうか、楽しみだ。
_ 以下の点を修正した。
ダウンロードは、ここから。なお、修正前のアーカイブは削除した。
現在、Onionの開発でSourceForge.jpのCVSにアクセスするのに、Eclipseを使用しているのだが、今までずっとプロジェクト単位で一括してコミットしていた。しかし、そうすると、ファイル単位でなくプロジェクト単位でしかコミットコメント編集画面が出ず、変更された全てのファイルに同じコミットコメントが書き込まれてしまうのが嫌だった。ファイルごとにコミットすればいいのだが、複数のファイルを変更した場合、どのファイルを変更したか忘れてしまうことがある。
しかし、今日、さすがに何か方法があるのではないかと思って、googleで検索してみると、「リポジトリと同期化」メニューを使えば、サーバとローカルのファイルを比較して、変更があったファイルだけ表示してくれることがわかった。しかも、Eclipse SDKのヘルプにもちゃんと載っていた。標準で付いている機能のヘルプくらい、もっと事前に調べておくべきだった…。
2005年度未踏ユースの採択結果が公表されたようだ。
個人的には、「スレッド冬眠技術を利用したイベント駆動によらないワークフローエンジンの開発」に特に興味がある。あと、「統合開発環境「ActiveBasic」の開発及びサポート」について、Active Basicって、結構前からあった開発環境だと思うんだが、開発者は、まだ未踏ユースに応募できる年齢の方(=20代)なのか。結構意外だ。
追記:開発元から、Active Basic開発者の日記へのリンクがあったので見てみると、自分と同年齢だった…。うーむ、負けてるなあ、自分。
_ azjatki amateurs [Well done - very interesting webpage. ]
_ wwwmotore pornoit [Well done - very interesting webpage. ]
_ amateur facce bukkake [Well done - very interesting webpage. ]
_ viejas buenas mpeg [Well done - very interesting webpage.]
_ aguascalientes sexo vid [Well done - very interesting webpage.]
_ love infermiera sesso [ en linea porno fiche video gratis care chat erotico con..]
_ faxless cash advance [ bocchino spagnola iperbole bo it liceomalpighi bo it we..]
_ alex [soy moreno ]