2007-06-01から1ヶ月間の記事一覧

追記 Ruby1.9で試しました

Ruby (ruby 1.9.0 (2007-06-30 patchlevel 0) [i386-cygwin]): 4.391秒 Ruby 1.9めっちゃ速い!

インスタンス変数

Xtalの仮想マシンの内部実装では、インスタンス変数へのアクセスは名前(文字列)ではなく、番号(整数)でアクセスする実装です。 Vec: class{ _x; // 0番目 _y; // 1番目 _z; // 2番目 _w; // 3番目 initialize: method(){ _x = 0; // 0番目のインスタンス変数…

演算代入演算子の再定義

a += b;とは a = a.op_add_assign(b);のシンタックスシュガーです。よって、 += 演算子をオーバーロードしたいクラスにop_add_assignメソッドを定義すれぱOKとなります。aがimmutableなオブジェクトの場合、op_add_assignはop_addと同じ関数となるでしょう。…

演算子の再定義

a + bとは a.op_add(b)のシンタックスシュガーです。よって、+ 演算子をオーバーロードしたいクラスにop_addメソッドを定義すればOKとなります。

funとmethodの違い

Xtalでは関数生成を「fun」、そしてメソッドの生成を「method」で行います。 JavaScript等では、普通の関数生成もメソッドの生成も全て同じ「function」でおこないます。 Xtalが分かれている理由、それは「this」の扱いのためです。「fun」で関数を作った場…

インスタンス変数へのダイレクト代入

コレ前も書いたかな?次のバージョンくらいから使えるようになる機能です。こんな感じのモノを書いたことはないでしょうか? struct Enemy{ float x; float y; float velx; float vely; float power; float life; Enemy(float ax, float ay, float avelx = 0…

前回の

前回のエントリが長すぎる上に、他の人が読んだら意味不明だろうなぁ、という感じになっててちょっと悲しくなりました。きっと引越し疲れの所為でしょう。

Xtalの昔の多値の説明と、何故それを止めたのかの理由

Xtalは昔は「多値と配列は違うもの。余った多値は完全に切り捨てる」という実装で、多値を配列に纏める記法 (a,*b = 1,2,3)」、「配列を多値に展開する記法 (a,b = ary.values)」が存在していました。 つまり、「a,b = 1,2,3」は「a=1, b=2」であり、「a = 1…

Xtalの多値と多重代入まとめ

多値と配列は同じである 多重代入のルールと、ブロックパラメータへの代入のルールは同じである 右辺の多値の最後の要素が多値(配列)なら、それは展開される 左辺の値の数が多い場合は、余った左辺をnullで埋る*1 右辺の値の数が多い場合は、余った右辺の値…

Xtalの多値3

http://www.rubyist.net/~matz/20070611.html#p05 Xtalの多値について。Xtalでは多値と配列では(効率以外は)同じ意味を持つようにしたのだそうだ。「じゃあ多値要らないじゃん」という印象も持つが、純粋に最適化手法としてとらえれば良いのだろう、 はい、…

ループ内のfirst, lastの件

http://d.hatena.ne.jp/xtalco/comment?date=20070616#c http://d.hatena.ne.jp/nokturnalmortum/20070618ご意見ありがとうございます。lastの提供はいろいろ問題があるので、firstの提供だけにしようと思います。 擬似変数はいいかもしれないですね。イテレ…

gccで -O3でSegmentation Faultの件

all_src.hを使わずに、ちゃんとcpp毎にコンパイルしてリンクすれば-O3でも出なくなりました。 all_src.hはやっぱちょっとムリがあるか。

ループでよくあるといえば

「最初の要素の反復のとき」、「最後の要素の反復のとき」に特別な処理をしたい、というのがよくあると思うんです。 これを構文でサポートしたいと考えてるんですが、いい形が見つかりません。else節をつけるかのように、first節やlast節をつけられるとか it…

次の要素と前回の要素を伴った反復

eachで回してるときの次の要素がほしい - Greenbear Diary (2007-06-12) http://mono.kmc.gr.jp/~yhara/d/?date=20070612#p04Xtalでは外部イテレータでの反復となるので、割とこういうのも楽に書けるように出来ます。 // 前回の値を伴うイテレータを返す Ite…

引越し中

15日から数日は引越し中です。

cygwin gcc 3.4.4で 2

この際、警告はどんなものでも全部消しておこうと思い、-O4 -Wallを付けてコンパイルして、出てきたのを修正していました。最後に lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_uninitialized.h:82 : warning: '__cur' might be used uninitialized i…

cygwin gcc 3.4.4で

cygwin gcc 3.4.4でO2でコンパイルすると、めちゃくちゃ実行が遅くてビックリしました。ありがちなフィボナッチ数のベンチが、VC7でコンパイルした実行ファイルの8倍くらい遅く実行されます。O3でコンパイルすると、Segmentation faultになり、もっとビック…

need_result 2

まじかんと雑記 http://magicant.txt-nifty.com/main/2007/06/re_need_result_.html 他の言語にはなさそうな機能だという点では興味深いが、実際にこれが役に立つかどうかは甚だ疑問。 役に立つ場面が多ければ、他の言語にも実装されるもんですからね。 他の…

Xtalの多値2

多重代入で、左辺の数が右辺の値の数より小さい場合、最後の左辺の変数に、配列として纏められ代入されます。 foo: fun(){ return 0, 1, 2, 3, 4; } a, b: foo(); a.p; //=> 0 b.p; //=> [1, 2, 3, 4] 左辺の最後に , (カンマ) を余計につけると、配列として…

0.9.5.3

バージョン番号修正 VC以外でコンパイルがでる書き方をしていたので修正 トップレベルでインスタンス変数を参照する記述をすると、Xtalソースのコンパイル時に落ちるバグを修正 warningレベルを厳しくしたときに出る警告を出ないように修正 (未だ全体の4分…

need_result

// (2007/6/12) 間違えて、この日の日記を一回消してしまいました。 最近実験的に追加した機能で「need_result」というものがあります。意味ですが、これは「関数呼び出し元が、戻り値を必要としているかどうか」をtrueかfalseかで返す擬似変数です。例で示…

今の多値の仕様と、Rubyの多値の仕様の比較

現在の実装では、「呼び出し側が必要とする戻り値の数」よりも関数が返す多値が多い場合、余った部分を配列に纏めるようになっています。 values: fun(){ return 0, 1, 2; } // 多値を返すことと、配列を返すことは意味的には等しいので次のように定義できる…

昔の多値の仕様

以前の実装では、多値を返す関数呼び出しは、多重代入で受取らないと、他の値は全て切り捨てられていました。 関数呼び出しの際、「呼び出し側が必要とする戻り値の数」がこっそり渡されていて、それ以上の値は単に切り捨てる実装になっていたわけです。 foo…

Xtalの多値

多値の仕様が段々カッキリしてきました。

0.9.5.1

http://code.google.com/p/xtal-language/downloads/list 各ソースに xtal_ のプリフィックスを付加 インスタンス変数のプリフィックスを @ から _ に変更。既にクラスを記述されてる方は、 @ を _ に置換してください。 多重代入周りを改善。 メモリの二重…

インスタンス変数の書式変更

これまでインスタンス変数の書式は、Rubyのように@を前置する方法を採用していました。 これを、_ (アンダーバー) を前置する書式に変更しようと思っています。理由として、 ・主なターゲットと想定しているC++/Java等の言語出身者は、インスタンス変数の目…

引数

Xtalは関数呼び出しの際、引数の数が少なかったり、逆に多かったりするとエラーとなります。 foo: fun(a, b){} foo(); //=> throw ArgumentError foo(0, 1, 2); //=> throw ArgumentError foo(3, 4); //=> OK JavaScript等はエラーにならないことを利用して…

サンプルゲーム

サンプルゲームを作りました。 http://code.google.com/p/xtal-language/downloads/list のsample gamesをダウンロードしてください。 Xtalを組み込み、SDLやOpenGLの関数をXtalで使えるようにして、Xtalで実際にゲームを記述しています。 オブジェクトをnew…

0.9.5.0

0.9.5.0としてソースをダウンロードできるようにしました。 http://code.google.com/p/xtal-language/downloads/list ・クラスのメンバの可触性追加 ・アクセッサ簡易定義方法変更 ・スレッドを使用する設定にしていると、実行速度が途方も無く遅くなるバグ…

インスタンス変数とアクセッサ

上の可触性の定義とあわせて楽なアクセッサ定義の方法を追加しました。 Foo: class{ + @foo; // インスタンス変数の定義の前に可触性を表す記号をつけると、 // 自動的に アクセッサが作られます。 // + foo: method(){ return @foo; } // + set_foo: method…