KMYsofts japanese開発を振り返る

INDEX
KJクン やあ!こんにちは!
僕はKJクンていいます。よろしくね〜。
KJクン KJクンって誰かって?
いろいろな日本語プログラミング言語ではマスコットがいるでしょ。
僕も、そのマスコット。(予定)
キャラはまだ決まっていないけれど、名前だけでもがんばるぞー!(?)
KJクン さて、早速KMYさんにインターピューしてみます。
KMYは、かみょーんのKaMYo-nをもじったものだそうだって。
僕を作ってくれた人だよ〜早く会いたいな〜。

どんな言語にしたかったか

KJクン KMYさん、こんにちは。このKJはどんな言語にしたかったのですか?
KMY こんにちは、僕は、もともとKJを、なでしこのコンパイラ版ということで、
全部なでしこと全く同じ文法にしたかったんです。
KJクン はぁ・・・
KMY なでしこの要望掲示板で、いくつか「なでしこをコンパイラにしてください」っていう
投稿があるのは知っていますか?
それを実現させようと思っていました。
KJクン はぁ・・・
KMY 今まて日本語でコンパイラのやつを何回も作ろうとしたけれと、
何回も挫折しました。
KJクン 何回ですか?
KMY そんなの普通数えません。

成功のきっかけ

KJクン でなわけで、何回も失敗したのになんで成功したのですか?
KMY やっぱり図書館で借りたあの本のおかけかなぁ・・・。
コンパイラ入門っていう本は知っていますか?
KJクン 知らないなあ・・・どんな本ですか?
KMY 本のイメージや注文とかは上に書いたリンクからできるんだけれと、
内容は、主に、コンパイラの作り方が書いてあったなぁ・・・。
で、僕はその中のアセンブリの作り方の部分のプログラムだけ移植しました。
KJクン 移植?ってことは、なでしこ以外の言語で書かれてたのですか
プログラム。
KMY なでしこは、全体的にはまだ余り知られていないので、
無理もありません。
ちなみに、C#でした。
C#は、僕は知りませんでした。
C#の文法とか、いろいろ記号があり過ぎでうるさいです。読めません。
KJクン そうすると、どうやって移植できたのですか?
KMY ・・・勘です。
KJクン ・・・・・・・・・・

このコンパイラは非常識です

KJクン 僕のプログラムを見ていたら、
ワイルドカードって言葉が沢山出てきましたか?
KMY はい、このコンパイラでは、
プログラムの識別を、ワイルドカードを使ってしているのですよ。
(ワイルドカードとは、指定したバターン(条件みたいなもの)にマッチ(一致)したかしないかで分岐することです。)
KJクン え!?じ、じゃあ、トークン分割じゃなかったの?
(トークンとは、プログラムの最小構成要素のことです。)
それじゃ、このコンパイラでは、
プログラムの識別にトークン分割をするというプログラム言語としての常識
守っていないのですか?
KMY はい。
KJクン なぜですか?
KMY トークン分割の仕方自体も分からないし、
移植にも失敗したからですし・・・
めんどくさいからです。
KJクン 手抜きですか?
KMY はい、そうです。
あと、KJには、コンパイル以外にも意外な機能があるのを知っていますか?
KJクン え、ちょっと待って・・・
(プログラムを読んでます・・・)
あ、こんなところで関連付けしてる!!
KMY コマンドラインに「/s」を指定すると、KJスクリプトの拡張子「.jp」と
インクルードスクリプトの拡張子「.ijf」を
メモ帳(notepad.exe)で関連付けをします。
KJクン なんでこんな機能まて付けるのですか?
KMY もともとjpとijfは、Windowsには登録されていないからです。
一発でメモ帳から起動できるように関連付けしたほうが
皆も使いやすくなると思いました。
KJクン ってことは、統合開発環境とかはないって事ですか?
KMY 恥ずかしながら、まだ作っていません。
製作時期は、バージョン3あたりが適当だと思っています。
KJクン 他にはどんな機能があるのですか?
KMY 0.5.6.1では、バージョン番号だけを表示する「/v」や、コンパイルだけをしたり、
ソースコードの整形をしたり・・・
KJクン しつもーん。ソースコードの整形って、何ですか。

ソースコードの整形とは

KMY KJを開発する時、
次第にソースコードの整形が必要だと思うようになりました。
KJクン それはなぜですか?
KMY それは、ファイルのインクルードをする時に、
とうしても1つのプログラムだけだと、
ファイルを開いてその内容を変換するのが難しくなってしまいました。
なぜかっていうと・・・
KJクン プログラムの識別には反復を使っているから!
KMY そうです。(セリフとられた・・・)
なでしこでの反復は、反復の中で反復をしたらえらーになっちゃうんです。
KJクン 試してみたけれど、エラーにはなりませんでした。
KMY そんな短いプログラムではエラーにはなりません。
なでしこがインタープリタ言語である以上、プログラムがある程度の長さになるとびりびりするんです。
KJクン はぁ・・・
KMY ですから、ソースコードの整形の必要性に迫られました。
KJクン なぜ実行ファイルを分けたのですか?
KMY さっき言った理由で、なんとなく2回も反復したらエラーになりそうだと思ったからです。
KJクン はぁ・・・インタープリタって怖いですね。
KMY でも、コンパイラも、作りにくいと言う難点があります。
KJクン しつもーん。コンパイラ入門って本には
サンプルコンパイラがありますでしょ。
じゃあ、どうやって、その本に書いていないこともできたのですか?

ExitProcessよ、感謝します

KMY このコンパイラは、ExitProcess関数がなければなかったと思います。
KJクン ExitProcessって、Win32APIの、プログラムの最後に必ずつけるやつですか?
KMY はい。そのおかげで、コンパイラを拡張することが出来ました。
KJクン とういうことですか?
KMY KJが、スクリプトをMASMというアセンブリに変換して、機械語はMASMで作られる
ということは知っていますね?
KJクン はい、知っています。
KMY そのMASMで、Win32APIを呼び出すinvokeについて、
コンパイラ入門では説明がありました。
そこで、僕は、invokeでWin32APIが呼び出せるなら、他のWin32APIも呼び出せるはずだと確信したんです。
KJクン それで?
KMY いろいろ試してみて、Win32APIを使うにはプロトタイプ宣言が必要だとわかり、
色々真似てみましたがなかなかMessageBoxA関数(メッセージボックスを表示)が呼び出せませんでした。
KJクン はぁ・・・
KMY それで、「MASM 講座」で検索してみたら、
「Win32 MASM プログラミング入門」っていうページがヒットしました。
KJクン それにはどんな事が書いてあるのですか?
KMY Win32APIの呼び出し方だけですが、MASMについて詳しく書いていました。
講座は、分かりやすかったです。
で、開設を飛ばしてソースのプログラムをみてみたら、プロトタイプ宣言の仕方がようやく分かりました。
KJクン はぁ・・・それで、この本に書いていなかったメッセージボックスの呼び出しが出来たのですね。
KMY はい。その他にも、以下のサイトを参考にして、ごつごつ開発しております。お暇な方は検索して見てくださいね。
  • WinAPI Database for VB Programmer
  • MASM32の遊び方
  • ML エラー メッセージ (MASM)
  • フリーソフト「ActiveBasic」付属のヘルプ

振り返り for 更新履歴

KJクン さて、振り返りましょう。更新履歴で、って言うコーナー(?)ですが、
KMY 更新履歴について、疑問に思った事があれば、遠慮なく指摘してください。
KJクン はい、お言葉に甘えて一番下から・・・およ!
0.0.2.1の、コマンドラインに対応、ってのはとういうことですか。
KMY はい、恥ずかしながら、最初は起動したら「test.jp」のファイルをコンパイルするということになってたんです。
KJクン ・・思えば、コマンドラインって便利ですね。便利なのに、
今はコマンドライン自体を知らないプログラマーも増えているんですよね。
KMY はい。自分に誇りを持っているプログラマーなら、最低限コマンドラインを知っていないとおかしいですよね。
KJクン そんなもんですか、はぁ・・・。
ぢ、ぢ、ぢ、ぢ・・・0.1.2.3の「エラー」って、まさか、今まてエラー出してなかったんですか?
KMY はい。これまては、常にノーエラーでアセンブラを起動していたので、
しょちゅうエラーばかり出てました。アセンブルで。
KJクン 怖いですね・・・。アセンブリって何でも出来ちゃいますから、
その前に危険なプログラムのアセンブルを阻止しなければいけないんですね。
KMY それでも、変数の名前に2バイト文字を使った時とか、結局エラーがサボートされたのは一部の箇所だけです。
そのまま0.1.3.3で初版をベクターにリリースしました。
KJクン うわ・・・罪ですね。
で、0.0.0.1は23日に作ったんでしょ。0.1.3.3は27日です。
たったの4日でリリースしたのですか?速すぎです。
KMY うん・・・そのまま、その一部の箇所のノーエラーは、今に至ります。
KJクン えーーー!!!それじゃ、危険なプログラムが・・・
KMY 結局、最終的なエラー確認は、MASMに任せっきりなんです。
KJクン えええーー早くそっちもサボートしてよ!
ん・・・・・・命令の区切りをトークン分割に・・・でも、さっきワイルドカードって言ったでしょう。
なぜ?
KMY トークン分割は、なでしこの命令を使ったものであって、
しかもなでしこのバグで数字がなくなってしまいます。だから最終的にはワイルドカードで行く事にしました。
KJクン あれ、コメント機能の安定化って・・・
KMY それは、トークン分割の副産物ですので。
KJクン はぁ・・・
0.1.3.4じゃ、空っぽの行があるだけでエラー?ふむふむ・・・
KMY 太字にはしていないのですが、0.1.4.4より特殊変数が使えるようになりました。
KJクン うわ、特殊変数って確か、メッセージに埋め込む変数の事ですか?
KMY でも、本物のプログラムの中で定義された変数の内容は、今でも表示することはできません。
KJクン うわ、改良の余地2つ目ですね・・・。
で、0.2.4.4のWindowsアプリケーションの作成って、確かこの後・・・
KMY 一旦なくなります。
KJクン !?なんかこの更新履歴を見ていると、訳の分からないものばかり出てきますね。
KMY それだけコンパイラ作りが難しいということです。
KJクン え?それってとういうことですか?
KMY インタプリタの場合、プログラムに間違いのある場合開発言語が教えてくれますが、
コンパイラでは、作成したプログラムの間違いはWindowsが直接「起こりました」だけ通知するのです。
もちろんその前にアセンブリが指摘してくれる場合もありますが、
アセンブル細かいはふるいに通しただけでもっと細かいものがあると指摘してくれないのです。
KJクン はぁ・・・で、どこでしたっけ・・・あ、0.3.4.4の「変数を実装」
この書き方って、まさか・・・
KMY はい、それまて変数と言うものはなかったのです。
そして、このバージョンがSourceForgeにリリースした最初のバージョンなんです。
KJクン SourceForgeって、オープンソースで有名な・・・
KMY でも、KJでは、SourceForgeではなくベクターサーバーにソースを置いているんです。
CSVが使いつらいですからね。
他に質問はありますか?あ、0.3.5.4の「\a」はベルって言う意味ですから。
KJクン はいはーい!!0.3.5.4のバージョンアップの仕様って?
KMY はいはい、それ以前のバージョンアップとそれ以降のバージョンアップの仕方を見比べてみてください。
違和感がしますでしょう。
それまては上の数字が増えてもそれ以下の数字が0にならなかったんです!
KJクン はぁ・・・
0.3.7.0で、Windowsアプリケーションが作れなくなったのですね。理由は書いてある通りですね。
JPスクリプトをC++にしたのですか?なんかすごいですね〜。
KMY 0.4.0.0で追加されたGUIコンパイラと一緒にごとごとく無くなりますか。
KJクン 0.4.1.1で演算が出来るようになったのですか。
たいじたものですね〜。
さて、0.4.2.0では条件分岐も出来るし、あとは繰り返しだし、・・・あ。
0.4.2.1でフリー版のMASMに対応って、それまては有料のMASMを使っていたんですか?
KMY それが、フリーで開発環境が提供されているC++コードを作るjs2c.exe作成の一番の理由です。
でも、そのうち、VisualStudioのアセンブラの名前がMASMだと知って、
しかも単独で無料で配布されているとも知って、
そっちを使えないかと試みたんです。
そして、それがKJ開発の第一の難関だったんです。
KJクン 成功してよかったですね。・・・あれ?
実際に対応できたのは0.4.2.2からですか?
KMY はい、MASMの名前が一緒なのでそっちに引っ張られました。
KJクン はぁ・・・。0.4.3.1で、普通の演算子ですね。それまては「AにBを足してCに入れる」とかなんとか、
演算らしくないことで演算してましたしね。
うーん・・・おっ!!0.5.0.0のこのメッセージは・・・
KMY はい、繰り返しも実装して、さっき言った「コンパイラ入門」の全過程を攻略することが出来ました。
そして、その数日後、コンパイラ入門の本は図書館に返却しましたが、
今でも時時本屋さんで見かけます。
KJクン 図書館って・・・出会いと別れの修羅場ですね・・・。
KMY あ、それ、今言おうとしてたのに!
KJクン すいません。で、このあとは順調ですね。
KMY 0.5.4.0のソースコード整形プログラムonesjp.exeと同時にインクルードを実装しました。
KJクン お、目的が透けていてます。で、0.5.4.1のアンケートってとういうことですか?
KMY こちらでやらせていただきました。その結果、「インストーラではなくして欲しい」っていう要望が多かったです。
それだけ、レジストリ操作を嫌うユーザーが多いと言う裏付けだったんです。
KJクン と同時にコンパイルのたびにアセンブラがないとコンパイルできなくなり、
関連付けもできるようになったんですね。
KMY その後、拡張の余波はファイルにも及びます。読み込みは結局のところできませんでしたが、
書き込みは0.5.5.0で実装しました。
KJクン ふむふむ、KJをインストーラじゃなくした代償は大きいですね。
0.5.4.5で手動インストールする羽目になりますし。
それでもレジストリだけは嫌ってニーズのためですね。
・・・・・・・・・・最後に気になるのは、0.5.6.0の、jsbuildをバッチ化あたりでしょうか。
KMY はい、onesjp.exeに「条件分岐」が追加され、
しかも同時にjsbuild.exeも呼び出せるonesjp.exeの需要が増えて、
KJコンパイルの合言葉「jsbuild」がなくなるかと心配した
からです。
こうした結果、常にonesjp.exeを通すようになって、jsbuild.exeは現在のbuild.exeになりました。
KJクン onesjp.exeでは、同時にコメントの除去も行うんですね。
ですから、build.exeで、コメントの除去の必要がなくなって、
KMY コメント除去はonesjp.exeのみになります。
KJクン onesjpってむこいですね・・・。
jsbuildをバッチにしてしまいますから。
KMY その分、いい物が作れたと思っています。

「コンパイラ入門」をお読みになった方へのメッセージ

KJクン 「コンパイラ入門」を読んで、ここまて成功した人は
現在KMYさんしか確認できていないという状況ですが、
他の読者は拡張に失敗してやめている可能性があります。
そんな方方へメッセージをお願いします。
KMY はい、まず第一に考えて欲しい事は、とにかくできることを増やそうと思わないで、
大事なところからこつこつとできるようにして
欲しいと思います。
KJクン それだけ・・・ですか。
KMY はい・・・。
KJクン ・・・・・・・・・・・。

おわりに

KJクン 最後になりましたが、終わりに言うことはございません?
KMY あります。実は、KMYsofts japaneseのプログラミング言語ロゴを決めたんです。
KJクン はぁ・・・見せてください!
KMY 非常に単純ですが・・・こんなのです。↓
KJクン ヴっ・・・・・見るんじゃなかった・・・
KMY ・・・はい、とうそ、とうそ、遠慮しないてとうそ、ご遠慮なく。
では、さよなら、バスの時間が・・・(ビュッ)
KJクン あ、なんか押し付けられたような気が・・・

おしまい・・・


INDEX