Releases: hymkor/gmnlisp
Releases · hymkor/gmnlisp
v0.7.2
- Fix:
(aref)
: the number and range of parameters were not checked - Fix:
(create-string)
: the range of parameter was not checked - Fix:
(string-append)
wasnil
, 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
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>
, andarity-error
- On any built-in-class CLASS, both
(subclassp CLASS <built-in-class>)
and(subclassp CLASS <object>)
aret
- 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 likeif
- 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
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
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
- 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
v0.4.0
- 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 exampleset "GOREADLINESKK=~/Share/Etc/SKK-JISYO.*;user=~/.go-skk-jisyo"
- (Linux):
export "GOREADLINESKK=(system-jisyo-paths..):user=(user-jisyo-path)"
- (Windows):
- 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 exampleset "GOREADLINESKK=~/Share/Etc/SKK-JISYO.*;user=~/.go-skk-jisyo"
- (Linux):
export "GOREADLINESKK=(system-jisyo-paths..):user=(user-jisyo-path)"
- (Windows):
v0.3.1
- Add tool type and functions for golang applications
- type
Dynamics
and its methods (*World) NewDynamics
and(*World) Dynamic
- Add test code for
(dynamic...)
- type
This update is for use as library.
- Go言語向けのツール用の型と関数を追加しました。
- 型
Dynamics
とメソッド群を追加 - メソッド
(*World) NewDynamics
and(*World) Dynamic
(dynamic...)
向けテストコード追加
- 型
今回の更新はライブラリとしての更新となります。
v0.3.0
- 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
- Support
(format FD "~N%")
- Rename Go-function:
HasValue
toIsSome
- Rename Go-function:
IsNull
toIsNone
- 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 nilt
was the symbol containing True.t
is now the reserved word meaning True.
(format FD "~N%")
をサポート- Go関数
HasValue
をIsSome
へ改名 - Go関数
IsNull
をIsNone
へ改名 - 以下を実装
(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
が真値を保持するシンボルだったが、真値を表す予約語とした