ソースを公開しています


高々10,000ステップのソースですが。
ソースも洗練されておりません。
しかも、コメントがほとんどありません、、、
それでも、もし興味があれば、ダウンロードして見て下さい。

最新のソースは、GitHub からでも取得が出来ます。
https://github.com/mitchan0321/toy

実行形式の作成は、ビルド方法をご参照ください。

  • 20120716
    • 多倍長整数が扱えるようになりました。
    • 多値代入が出来るよう、set コマンドの書式を拡張しました。

  • 20120610
    • コルーチン機能の実装(コルーチンでCスタックを使用する処理を書きました)。
    • データタイプを判断するためのコマンドを追加。
      • symbol?/nil?/list?/integer?/real?/string?/rquote?/block?/closure?/func?/object?/dict?/vector?
    • パーサに ':' マクロを追加。以下の様に使います(→が ':' マクロを使用した例):
      • [[[self] vars] len] + 1 → self : vars : len : + 1
    • スコープのデータ構造・処理を変更。これにより、Yコンビネータが正しく動くようになりました。
    • 64ビット環境での動作。Linux、FreeBSD での64ビットOSに対応しました。

  • 20110828
    • Hashクラス/Arrayクラスにかわるdict型、vector型を追加。
    • 辞書を取得するコマンド各種を追加
      • dict-local / dict-object / dict-func / dict-global / dict-class
    • eq?コマンド追加。
    • connectコマンド(TCPソケットのクライアント側)追加。
    • loopコマンド追加。
    • injectコマンド追加(Rubyからの輸入)。
    • String::int、String::real、String::number を追加(それぞれ数値に変換)。
    • Integer に real、<<、>>、||、&&、^^、~~ を追加(それぞれ、realに変換、左シフト、右シフト、ビット or、and、xor、not)。
    • 関数呼び出しのパラメータについて、基本的に遅延評価により呼び出すように変更。
    • hash.cのバグ修正。
    • String::fmt を追加。
    • memoiz 関数を作成する memoiz.toy をライブラリに追加。
  • 20091101
    • String::split メソッド。
    • goto コマンド。
  • 20090923
    • ローカル変数のスコープを抑止する begin コマンド。
    • 外部プロセスを起動する exec。
    • print/println と対になる read コマンド。
    • Block::<< メソッド。
    • オブジェクトのメソッド一覧を表示する flat コマンド。
  • 20090905
    • Fileクラスのコンストラクタ。
    • メソッドキャッシュ。Makefile に HAS_GCACHE を指定してください。
    • call コマンドのシンタックス変更。メソッドも呼べるように。
    • 最適化を少々。
  • 20090727
    • マニュアルをコマンドリファレンスまで作成。
    • コンストラクタの書式を変更。
    • Cのスタックを消費しつくすバグを修正。
    • デフォルトのインタプリタスタックサイズを変更(1024→4096*4)。
    • メモリ不足時の処理を変更。
  • 20090706
    • case コマンドのシンタックス変更。
    • cond コマンド追加。
    • lazy コマンド追加。
    • Object::string のバグフィックス。
    • Object::method? メソッド追加。メソッドをサーチします。
    • Hash::each メソッド追加。
    • unknown バグフィックス。
    • あと、マニュアル(途中ですが)追加。doc の下においてあります。
  • 20090517
    • 遅延評価もどきの機能を導入してみた。竹内(たらい回し)関数が一瞬で終わる! サンプルを参照ください。正直、これほど効果があるとは思わなかった。
  • 20090510
    • rubyに似たイテレータ構文を導入。
    • そのた色々変更。
  • 20090308
    • trace コマンドを追加。
    • exit コマンドを追加。
    • デフォルトのオプティマイズオプションを -O3 に変更。
    • イベントドリブンに実行する対話形式インタプリタを追加。lib/interp.toy で、toysh から "interp" として実行する。SysQueue を使って多重にイベントを扱う仕組み。
    • List:.. を追加。1 .. 100 で 1 から 100 までのリストを表します。
  • 20090301
    • msort (merge sort) のサンプルをライブラリに追加。
    • List::>> (shift), List::<< (unshift), List::->> (pop), List::<<- (push) を追加。
  • 20090222
    • lsort のバグ修正。
    • to_string_call にあった奇妙なバグを修正。
    • toysh で、result の出力文字数のリミットを設定。
  • 20090221
    • if 文のコンディションがブロック以外でも動くよう文法を拡張した。
    • List::flat、Array::list、String::>,>=,<,<= メソッドを追加。
    • setup.toy を整理し、$LIB_PATH 配下に配置した。
    • global.c へ各定数を分離した。
  • 20090219
    • unknown を実装。$LIB_PATH から自動的に 関数名 + ".toy" ファイルをロードし、実行します。
    • 全体的にイテレータのシンタックスを変更 var: x -> in: x にしてみた。Ruby 的なイテレータを実装すべきなんだろうな。
  • 20090215
    • List::eval メソッド追加。
    • sleep コマンド追加。
    • Block::>> メソッド追加(setup.toy 内)
    • setvar コマンド追加。これに伴い、defvar コマンドの動作を変更。
    • setup.toy ファイルのインストール先を変更(/usr/local/lib/toy)。
    • file コマンド追加。
    • exists? コマンド追加。
    • $HOME/.toyrc ファイル読み込み。
    • List::filter メソッド追加。
    • List::map メソッド追加。
  • 20080904
    • new コマンドの糖衣構文を追加。
    • キーワード引数の糖衣構文を追加。
    • Hash/Array のコンストラクタを作成。
  • 20080831
    • String::sub 部分文字列取得のメソッド追加。
    • String::=~ のバグ修正。
    • init メソッドでパラメータを渡せるように。
    • Object::string methods.c/commands.c 内部の ::string 呼び出しをオブジェクトのメソッド呼び出しに変更。
  • 20080824
    • 正規表現による文字列マッチングができるようになりました。
  • 20080823
    • 原始的な install を書きました。
    • pwd/cd/alias コマンドを書きました。
    • グローバル変数に ENV 変数をセットアップ。VERSION 文字列をセットアップ。
  • 20080822
    • sdirコマンド--スクリプトの一覧を返す関数--を追加。
    • List::append! のバグを修正。
  • 20080819
    • 論理演算コマンド ! (not) / and / or を追加。
    • load コマンド追加。stack-trace でも load したファイルのファイル名が出るようにした。
    • そのほか細々とした最適化(根本的な効果は非常に薄かった)。
  • 20080816
    • trap コマンドでシグナルを扱えるようになった。
    • stack-trace コマンドでその時点のスタックトレースを取得できる。
    • function/method でクロージャの変数を参照できるようになった。
  • 20080813
    • exception 発生時に、グローバル変数の '@stack-trace' にスタックトレースを出力するようになりました。仕様としては良くないですが、とりあえず実装してみたものです。
  • 20080808
    • print / println が、@out 変数、stdout 変数の File オブジェクトに出力するようになった。
    • argv をローカルからグローバルのスロットに移動し、ARGV に変更。
    • グローバルスロットの stdin / stdout / stderr を初期生成。
  • 20080805
    • File クラスの追加。
    • Array クラスの追加。
    • get マクロ (ex. [$objec get $key] → $obj,$key に展開。
    • 引数展開のアルゴリズムを改良。
  • 20080727
    • Hash の追加。
    • コンストラクタ(init メソッド) を呼べるように。
  • 20080726


















最終更新:2012年07月16日 18:44