標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

gmnlisp v0.7.10 と lispect 0.6.0 を公開しました

きっかけとしては自作のコマンドラインの自動化ツール Lispectプルリクエストをいただいたことです。

内容としては、ユーザのGoアプリケーション内からコマンドラインの自動化ができるよう、単体実行ファイル形式だけでなく、ライブラリパッケージとして使えるようにするという提案でした。残念ながらパッケージ構造などについて、自分の方針とやや異なっていたため直接のマージはできなかったのですが、ニーズ自体はよく理解できるものであったため、自分のやり方で再実装させていただきました(コード自体はマージしませんでしたが、プルリクエストしてくださった方の貢献は大変意義深いものでしたので、README に謝辞を明記させていただきました)

さて、プルリクエストをいただいたということは、実際に使ってくださっている方がいるということで、一気にプレッシャーが高まります。つまり、そろそろ互換性を意識しないといけないと。

前からの懸案として、ISLisp の規格として、シンボルの英大文字・小文字の区別をしないという仕様があるのに対して、LispectARGVPROGRAM-NAMEEXECUTABLE-NAMEMATCH といった英大文字だけからなるシステム変数を用意している点がありました。将来的に英大文字・小文字の区別をなくすとなると、その際、argvprogram-nameexecutable-namematch と等価となり、ユーザ変数とシステム変数を区別する特徴がなくなります。これらは早めに対応しておいた方が傷が小さくて済みます。

まず、ISLisp 言語エンジン gmnlisp 側への対応を行いました。

半年ぶりの更新ですが、あいかわらず ISLisp の規格準拠を進めていました。今回の更新で、検証プログラムのスコアが、OK = 11040, NG = 5371 から OK = 11533, NG = 4878 と500点分改善しています。そして、その上で思い切って英大文字・小文字の区別を撤廃する対応に踏み切りました

import している gmnlisp を v0.7.10 へアップデートした上で、グローバル変数の名称変更を行いました。新しい名前は *argv**program-name**executable-name*、および *match* となります。以前の名前は非推奨となるものの、互換性のため、当面のあいだは引き続き使用可能としました。


Lispect 自体の機能は完成しているので、今後のアップデートは gmnlispISLisp 準拠度の向上がメインになると思います。ISLisp 対応でのネックは情報の少なさで、いつも JIS の読みやすいとはいえない規格書などをなんとか読み解いていました。規格書というのは入門書ではないので、なかなかの苦行です。

ですが、ChatGPT が意外と ISLisp に詳しいということが判明しました。彼(ChatGPT)に聞けば、英語圏にしか存在しないような情報を含め、いろいろと日本語で教示してくれます。無論、100%間違いがないと保証されるものではありませんが、幸い ISLisp には処理系が ISLisp の規格に準拠できているのかを検証するプログラムが公開されています。これによって、自分の認識の妥当性が担保できるのではないかと考えています。

いや、まじでえらい時代になったもんですね。