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 | はい。その他にも、以下のサイトを参考にして、ごつごつ開発しております。お暇な方は検索して見てくださいね。
|
振り返り 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クン | あ、なんか押し付けられたような気が・・・ |
おしまい・・・ |