Skip to content

Releases: hymkor/gmnlisp

v0.7.2

28 Jul 17:59
Compare
Choose a tag to compare
  • Fix: (aref): the number and range of parameters were not checked
  • Fix: (create-string): the range of parameter was not checked
  • Fix: (string-append) was nil, but should be ""
  • Implement <end-of-stream>
  • Fix: (format) paniced when base number is less than 2 or greater than 36.
  • Prevent signal handlers from going into infinite loop

The ISLisp verification program now runs without crashing or hang-up until the final test.
The current score is TP Result: OK = 7889, NG = 8522


  • (aref): パラメータの個数チェック・範囲チェックをしていなかった不具合を修正
  • (create-string): パラメータの範囲チェック漏れを修正
  • (string-append)"" ではなく nil になっていた
  • <end-of-stream> を実装
  • (format) で基数が2未満になったり36を超過した時に panic にならないようにした
  • シグナルハンドラーが無限ループしないようにした

ISLisp の検証プログラムが最後のテストまで落ちたりハングアップすることなく走るようになった。
現在のスコアは TP Result: OK = 7889, NG = 8522

v0.7.1

22 Jul 18:32
Compare
Choose a tag to compare

Modifying for ISLisp verification program

  • Fix: (equal USER-DEFINED-CLASS-OBJECT...) was always false.
  • Implement (assure), (the), (max), (min), (eval), (arithmetic-error-operands), (arithmetic-error-operation), <program-error>, and arity-error
  • On any built-in-class CLASS, both (subclassp CLASS <built-in-class>) and (subclassp CLASS <object>) are t
  • Macros within functions are now expanded when the function is defined (previously it was always done when the function was called).
  • Implement (expand-defun) which displays the definition of the function
  • Fix the problem each element of array literal should not be evaluated, but it was
  • Fix crashed when print cons whose car-part is nil
  • Fix the result of (for) was sometimes nil
  • Remove Eval() from requirements of Node interface, and let user's program use the receiver itself instead if Eval() does not exist
  • Remove PrintTo() and GoString() from the requirements of Node interface, and let user's program call String() if they do not exist
  • Fix: not handled where quote(') occurs immediately before unquote(,)
  • Enable to call ((lambda ...) ...)
  • Fix: the result to evalute (1 2) was <domain-error>, now it is <undefined-function>
  • Raise <error> when the parameters of (lambda) are duplicated now.
  • Fix: (instancep (create <domain-error>) <program-error> was false
  • The word starting with & is treated same as :
  • Fix: function defined at (flet) could call itself recursively
  • (defun),(defgeneric) can not re-define the special operator like if
  • Fix: (return-from nil ...) failes
  • (return-from NOT-EXIST-BLOCK) raises <control-error>
  • (throw NOT-EXIST-TAG) raises <control-error>
  • (go) raises <controle-error>
  • When (go), (throw) or (return-from) is called on CLEANUP-FORM of (unwind-protect FORM (go) ..), raise <control-error>
  • Implement <strage-exhausted>
  • (create <array>) without arugments raises an error now
  • Fix: (create-array ()...) crashed
  • (read) can throw <parse-error> now
  • Implement BigInt minimally to read integer overflow with int65
  • Implement <number> as the base class for <integer> and <float>
  • Fix: (create-array) crashed when one argument

  • (equal) でユーザ定義クラスのオジェクトの比較が常に不一致になる問題を修正
  • (assure), (the), (max), (min), (eval), (arithmetic-error-operation), (arithmetic-error-operands), <program-error>, arity-error を実装
  • 任意の組み込みクラス CLASS において (subclassp CLASS <built-in-class>) , (subclassp CLASS <object>) がともに t になるようにした
  • 関数内のマクロは関数定義時に展開するようにした(今まで常に呼び出し時に行っていた)
  • (defun) 定義内容を表示する (expand-defun) を実装
  • 配列リテラルを評価した時に各要素全てを再評価すべきではなかった点を修正
  • cons を表示する時、car 成分が nil だとクラッシュする不具合を修正
  • (for) の結果が nil になってしまう場合がある不具合を修正
  • Node interface の要件から Eval() を外し、存在しなければ利用側でレシーバーそのものを使うようにさせた
  • Node interface の要件から PrintTo(), GoString() を外し、存在しなければ利用側で String() を使わせるようにした
  • ' (quote) の直後に , (unquote) が来るケースをうまく読み込めない不具合を修正
  • ((lambda ...) ) という呼び出しを出来るようにした
  • (1 2) の評価結果が <domain-error> だったのを <undefined-function> に修正した
  • lambda のパラメーター名が重複していたら <error> を発生させるようにした
  • (instancep (create <domain-error>) <program-error> が false になっていたのを修正
  • & で始まる単語は : と同様に扱うようにした
  • (flet) の中の関数が自分自身を再帰呼び出しできてしまう不具合を修正
  • (defun),(defgeneric) で if などの特殊演算子を上書きできないようにした
  • (return-from nil ...) がエラーになってしまう不具合を修正
  • 存在しないblock名に return-from しようとした時、<control-error> にするようにした
  • 存在しないtag名にthrow しようとした時、<control-error> にするようにした
  • 存在しないtag名に go しようとした時、<controle-error> にするようにした
  • (unwind-protect) の CLEANUP-FORM で (go) などを使おうとしたら、<control-error> にするようにした。
  • <storage-exhausted> を実装
  • 引数なしの (create <array>) をエラーとするようにした
  • (create-array ()...) がクラッシュしてしまう不具合を修正
  • (read)<parse-error> を投げるようにした
  • int64 を越える整数を読み取れるように BigInt 型を必要最小限に実装した
  • <integer>floatのベースクラスとなる<number> を実装
  • (create-array) の引数が1個の時にクラッシュする不具合を修正

v0.7.0

27 Jun 04:22
Compare
Choose a tag to compare

Changes on v0.7.0 (English)

  • Implement the type function reference
    • (lambda), (function) and #' return not a function itself, but a reference to a function now
    • (funcall), (map*), and (apply) require not a function but a reference, and raise an error when a function itself is given
  • Split the namespace for functions and that of variables
  • Implement the error class <undefined-function>, methods: (undefined-entity-name),(undefined-entity-namespace)
  • (function) returns error when a macro,special form is given as a parameter (On ISO, the consequence is undefined)

v0.7.0 での変更点 (日本語)

  • 関数への参照型を実装した
    • (lambda), (function), #' は関数それ自体ではなく、関数への参照を返すようにした
    • (funcall), (map*), (apply) は関数ではなく参照を要求し、関数自体が与えられた時はエラーを起すようにした。
  • 関数の名前空間と変数の名前空間を分離した
  • エラー型: <undefined-function>, メソッド: (undefined-entity-name),(undefined-entity-namespace) を実装
  • (function) ではマクロ・特殊形式・定義形式の場合はエラーとした(ISO規格では結果未定義)

v0.6.0

25 Jun 14:27
Compare
Choose a tag to compare

Changes on v0.6.0 (English)

Fixed bugs

  • Fix: KEY on (case KEYFORM ((KEY*) FORM*)*) was evaluated though it should not
  • Fix: (apply) would double evalute the last argument

Generic functions

  • Implement (defgeneric), (defmethod), and (generic-function-p)

Objects

  • Implement (class-of), (instancep), (class), (subclassp),
    and (initialize-object),
  • (create) can create the instance of not only user-defined class,
    but also embeded-types
  • (defclass): support :boundp for slot-definition

Condition system

  • A conditiones can be implemented with a class now
  • Implement (with-handler), (signal-condition), (continue-condition),
    (error), (cerror), (report-condition), and <simple-error>

Now, all of errors have not been changed to condition object

Properties operations

  • Implement (property), (set-property), and (remove-property)

Miscellaneous

  • Implement (sqrt) and (with-standard-input)
  • (defconstant) is defined as alias of (defglobal) temporally

v0.6.0 での変更点 (日本語)

不具合修正

  • (case KEYFORM ((KEY*) FORM*)... で KEY* は評価されるべきではないのに、評価されていた不具合を修正
  • (apply) が最後の引数を二重に評価していた不具合を修正

包括関数対応

  • (defgeneric), (defmethod), (generic-function-p) を実装

クラス関連機能

  • (class-of), (instancep), (class), (subclassp), (initialize-object) を実装
  • (create) でユーザクラスだけでなく、システムクラスのインスタンスを作れるようにした
  • (defclass) のスロット定義の :boundp をサポート

例外処理機能

  • 例外状態をクラスで実装できるようにした。
  • (with-handler), (signal-condition), (continue-condition), (error),
    (cerror), (report-condition), <simple-error> を実装

今のところ、既存のエラー処理はまだ全て Condition オブジェクト化できていません

プロパティ操作

  • (property), (set-property), (remove-property) を実装

その他

  • (sqrt), (with-standard-input) を実装
  • (defconstant) を実装。ただし、現状は (defglobal) の別名

v0.5.0

13 Jun 15:56
Compare
Choose a tag to compare
  • Support exponential representation of floating point real numbers
  • Add integer formats: #b.., #o.., and #x..
  • Implement (ignore-errors FORMS...)
  • Implement (defclass) and (create)
  • gmnlisp.exe: go-multiline-ny v0.12.1 → v0.15.0 - improving history

  • 浮動小数点型実数の指数表現をサポート
  • 整数のフォーマット #b.., #o.., および #x.. を追加
  • (ignore-errors FORMS...) を実装
  • (defclass), (create) を実装
  • gmnlisp.exe: go-multiline-ny v0.12.1 → v0.15.0 - ヒストリ機能を改善

v0.4.1

01 Oct 07:33
Compare
Choose a tag to compare
  • gmnlisp.exe: Use reverse(ESC[7m) and underline(ESC[4m) for SKK conversion
  • gmnlisp.exe: Fix: SKK failed to start when user-jisyo did not exist

  • gmnlisp.exe: SKK変換時に反転(ESC[7m)や下線(ESC[4m)を使うようにした
  • gmnlisp.exe: ユーザ辞書が存在しない場合、SKK起動に失敗する不具合を修正

v0.4.0

30 Sep 04:43
Compare
Choose a tag to compare
  • gmnlisp.exe: support multi-line editing by go-multiline-ny
    • Use PageUp, Ctrl-UP or ALT-P to fetch history because UP and Ctrl-P work for moving cursor up.
  • gmnlisp.exe: support Japanese input method editor SKK by go-readline-skk
    To use SKK,
    • (Windows): set "GOREADLINESKK=(system-jisyo-paths..);user=(user-jisyo-path)"
      for example set "GOREADLINESKK=~/Share/Etc/SKK-JISYO.*;user=~/.go-skk-jisyo"
    • (Linux): export "GOREADLINESKK=(system-jisyo-paths..):user=(user-jisyo-path)"

  • gmnlisp.exe: go-multiline-ny で複数行編集をサポート
    • ↑ や C-p はカーソル上移動になるため、ヒストリ参照は PageUp, Ctrl-↑ , ALT-P にかわります
  • gmnlisp.exe: SKK (go-readline-skk) での日本語入力をサポート
    SKKを使用するには
    • (Windows): set "GOREADLINESKK=(system-jisyo-paths..);user=(user-jisyo-path)"
      for example set "GOREADLINESKK=~/Share/Etc/SKK-JISYO.*;user=~/.go-skk-jisyo"
    • (Linux): export "GOREADLINESKK=(system-jisyo-paths..):user=(user-jisyo-path)"

gmnlisp-v0 4 0-demo

v0.3.1

11 Sep 12:42
Compare
Choose a tag to compare
  • Add tool type and functions for golang applications
    • type Dynamics and its methods
    • (*World) NewDynamics and (*World) Dynamic
    • Add test code for (dynamic...)

This update is for use as library.


  • Go言語向けのツール用の型と関数を追加しました。
    • Dynamics とメソッド群を追加
    • メソッド (*World) NewDynamics and (*World) Dynamic
    • (dynamic...) 向けテストコード追加

今回の更新はライブラリとしての更新となります。

v0.3.0

29 Jul 13:36
Compare
Choose a tag to compare
  • Support the symbol whose name is enclosed by vertical-bars (Specification of ISLisp)
  • Changed display format of stack trace
  • Implement (*World) Range(Symbol,Node) to provide an iterator of each variable.
  • Implement (gmn:dump-session) to print all variables' names and values.
  • Support following cases of tail recursion optimization:
    • (defun X () .. (X) )
    • (defun X () .. (progn (X)) )
    • (defun X () .. (if .. (X) (X)))
    • (defun X () .. (let (..) .. (X)))
    • (defun X () .. (let* (..) .. (X)))
    • (defun X () .. (cond ... (t (X))))
  • Fix: (format): the sequence "~X" (X is an upper case letter) did not work
  • Remove the sub packages: "pkg/auto" and "pkg/common"

  • 縦棒で囲んだ名前のシンボル名をサポート(ISLisp の仕様)
  • スタックトレースの表示フォーマットを変更
  • 変数名イタレーターを提供する (*World) Range(Symbol,Node) を実装
  • 全変数の名前と値を表示する (gmn:dump-session) を実装
  • 次のケースでの末尾再帰最適化をサポート
    • (defun X () .. (X) )
    • (defun X () .. (progn (X)) )
    • (defun X () .. (if .. (X) (X)))
    • (defun X () .. (let (..) .. (X)))
    • (defun X () .. (let* (..) .. (X)))
    • (defun X () .. (cond ... (t (X))))
  • (format): シーケンス "~X" (X は英大文字) が機能しなかったのを修正
  • サブパッケージ "pkg/auto" と "pkg/common" を削除

v0.2.1

29 Jan 10:53
Compare
Choose a tag to compare
  • Support (format FD "~N%")
  • Rename Go-function: HasValue to IsSome
  • Rename Go-function: IsNull to IsNone
  • Implement
    • (char<) (char>) (char=) (char<=) (char>=) (char/=)
    • (characterp)
    • (create-list)
    • (char-index)
    • (basic-array-p) (basic-array*-p) (general-array*-p)
  • Remove (arrayp)
  • Fix: the problem (equal (list t nil nil) '(t nil nil)) was nil
    • t was the symbol containing True. t is now the reserved word meaning True.

  • (format FD "~N%") をサポート
  • Go関数 HasValueIsSome へ改名
  • Go関数 IsNullIsNone へ改名
  • 以下を実装
    • (char<) (char>) (char=) (char<=) (char>=) (char/=)
    • (characterp)
    • (create-list)
    • (char-index)
    • (basic-array-p) (basic-array*-p) (general-array*-p)
  • (arrayp) を削除
  • (equal (list t nil nil) '(t nil nil)) が nil になる問題を修正
    • t が真値を保持するシンボルだったが、真値を表す予約語とした