「。」はセミコロンとして対応

司会者:では、パネルディスカッションを始めたいと思います。YouTube上でもいいですし、現地にいらっしゃる方が直接でもいいので、なにかご質問がある方はいらっしゃいますでしょうか。

質問者1:発表ありがとうございました。とても興味深い内容でした。コードのところで「。」をたくさん使っていたのがすごく印象的だったのですが、それはCとかでのセミコロンの役割をしているんですか?

永田直希氏(以下、永田):本当にそのとおりで、「。」が完全にセミコロンとして対応しています。小さいのですが、これがないとエラーが出ます。

質問者1:あれはやはり必要なんですね。

永田:必要です。

質問者1:あと、インデントは?

永田:「ここから」と「ここまで」が実質括弧{}の役割をしていて、一応インデントはなくても動きます。

質問者1:とても興味を持ったので、触ってみたいと思います。

永田:ありがとうございます。ぜひ。

司会者:さっそくユーザーができましたね。

永田:すごくうれしいです(笑)。

セマンティック解析の不可逆について

質問者2:今日は発表をありがとうございました。自分はコンパイラの門外漢なので常識的な話になってしまうかもしれないのですが、先ほどのセマンティック解析のところだけ、なぜ非可逆のプロセスなのかなと思いました。

永田:すごく難しいな。最初のメンバー紹介でお話ししたとおり、2人で(開発を)やっていて、僕がWebサイトの方を担当して、彼がコンパイラの方を担当しているので、実は僕もあまりそこに詳しくなく、的確なお答えができるかわかりませんが……。

抽象構文木というのは意味を持っていなくて、ただ「プログラムの構造がこういうものである」というものでしかありません。一方で、中間言語は実際に「コンピューターに対してどういうことをしろ」という命令なんですよね。だからそこの間で、中間言語は実際にプログラムがどう書かれているかなんて気にしません。

そこは、完全な非可逆というわけではなくて、この実行ファイルからソースコードまで戻す逆アセンブラと呼ばれているものもあります。

例えば、変数名なんて中間言語では別に気にしないので、ここで情報が全部失われるんですね。なので、それを復元することは絶対にできないです。そういう意味での不可逆になります。

質問者2:ありがとうございました。

司会者:ありがとうございます。

Lazeの強みは多言語対応であること

質問者3:すごくおもしろい話をしていただいてありがとうございます。

ちょっとこれは完全に興味で聞くのですが、同じ日本語で書けるプログラミング言語に「なでしこ」があると思います。「こっちのほうがもっと教育的に良いだろう」みたいな、意識して作った部分があれば聞きたいなと思いました。

永田:教育的という意味では、少し微妙ですが、なでしこと一番違う点は、やはり「多言語対応」というところだと思っています。なでしこは日本語のプログラミング言語ですが、Lazeは多言語対応です。日本語でも書けて、英語でも書けて、ほかの言語でも書けるかもしれないという感じなので、そこを強みにして、なにかおもしろいシステムを作っていければなと試行錯誤している途中です。

質問者3:ありがとうございます。

3DシェーダーはC++で作成

質問者4:メチャクチャすごすぎて、びっくりしています。

(会場笑)

質問者4:まず、プログラミング言語を作ったというのもすごいんですけど、ちょっと今触ってみていて、ウェブサイトがめっちゃかなり凝ってる。最初に1点、文字を打つと補完が出てくる。しかも、日本語で。こういうところはけっこう後回しになるので、そこに気合いを入れているのがすごいなと思いました。

僕がもう1個今見つけてすごいと思ったのは、普通の手続き型プログラミングだけじゃなくて、3DサンプルのWebGLというんですか、なんかそうカメラの3D制御のやつ、なにかクレイジーだなと思って、この意思決定誰がどういう感じでやったんですか? 3Dのやつ入れようとか、エディタもすごく細かいところまで凝っていて、妥協を感じられないのですごいと思いました。

永田:妥協を感じられないと言うほど妥協をしていないわけではないのですが……(笑)。でも、ありがとうございます。

まず、エディタ部分に関しては、正直言われたほどメッチャがんばってはいません。こういうエディタのオープンソースやライブラリがあって、それをそのまま流用して使うと、勝手にいい感じになるという感じで、世の中がんばっているなぁという感じです。

しかも、「Visual Studio Code」のエディタ部分だけを取り出したようなOSSなので、開発元マイクロソフトなんですね。

質問者4:雰囲気が似ていると。

永田:似ているというより、たぶん同じだと思います。

(会場笑)

質問者4:WebGLは、どう実装したんですか?

永田:WebGLは、成田君(Laze Project Teamの成田創真氏)がものづくりや、自分でいろいろイチから作るのが大好きで、もちろん3Dライブラリはいろいろ世の中にあふれてますが、それを使わずに、最初にC++で、自分で3Dシェーダーを全部書きました。

例えば、光があったら光が当たってどこが照らされるのかなというのを計算して、実際に描画するところを全部自分で書いてやっていた時期があります。その次に彼は、そこで夢として「自分で作った言語で3Dを動かせたら感動だよな」と語っていました。その時は「うんそうだね」という感じでしたが、本当にそれをやってやったみたいなのがあります。

質問者4:ありがとうございました。

永田:ありがとうございます。

開発に費やした時間は今までで1,000時間くらい

質問者2:今の話を聞いて、気になったことが新しく出てきました。3Dうんぬんの話もあって、現在進行形ではあると思うのですが、制作にかけた時間って、だいたいどれぐらいですか?

永田:開発に費やした時間という意味では、ちょっとわからないな……ワンチャン1,000時間くらいいっているかもしれません。

質問者2:何ヶ月ぐらいですか。

永田:期間的に言えば、2021年1月ぐらいに成田君が開発を始めて、たぶん3月に僕が入って、そこからずっと2人で一緒にやっていました。それ以来、断続的に開発を続けています。今、僕は高3なので、高1の冬からやっていることになりますね。

司会者:おー、すごい。

質問者2:ありがとうございました。

ほかのプログラミング言語では文法ファイルは作らない

質問者5:すみません。少し初心者質問になっちゃうんですが。

永田:初心者質問、怖っ(笑)。

質問者5:本当に学会の初心者質問(笑)。

(会場笑)

質問者5:パーサーでプログラムをASTに変換できると思うのですが、それってほかの言語でも同様ですか。

永田:ほかの言語というのは、ほかのプログラミング言語ですか。

質問者5:そうです。

永田:ほかのプログラミング言語では、こんな文法ファイルは普通作りません。だって文法が変わらないじゃないですか。なので、パーサーの中に埋め込んでいくのが普通です。

だからこういう文法ファイルは作らないです。

質問者5:だから(Lazeは)文法ファイルがあることによって変換可能になるということですか?

その文法の定義ができるところを別の場所に切り出して、パーサーはそれを読み込んで、実際のパースができるようなものを備えるという感じになるので、そこが違います。

質問者5:わかりました。ありがとうございます。

司会者:ありがとうございます。すごいですね。僕も質問を用意していましたが、みなさんがすごすぎて「なんも言えねぇや」と思って。

(会場笑)

盾・Tシャツ・靴下・ステッカー…副賞で貰えたもの

司会者:少しImagine Cupについて聞きたいのですが、副賞があるじゃないですか。例えば何が貰えるんですか?

永田:一応、盾を貰って、あとTシャツも貰いました。着てこようと思ったんですが、寒そうかなと思ってやめました(笑)。あと、靴下も貰いましたね。ステッカーもたくさん貰いました。ライトも貰って、袋ももらいました。そんな感じでいっぱい貰いました。

その中で、Tシャツはけっこううれしかったです。キュッと口が閉まるタイプの袋に全部入って送られてきました。それは今学校でも使っていて、愛用品です。

司会者:ぜひImagine Cupに出て、こういった貴重なものを手に入れましょう。

永田:出ましょう。ぜひ出てください。円安の今がチャンスです(笑)。

(会場笑)

司会者:賞金もその時より、たぶん僕の時より(今は)2倍くらいに増えてますからね。

(会場笑)

次回イベントのお知らせ

司会者:では、時間になりましたので、少しお知らせがあります。

実は今この講演をしている間に、イベントのページが1個増えまして、12月5日月曜日の7時から、このImagine Cupのプレイベントを行います。申し込み方法やImagine Cupについて、また永田さんと、今度は開発の成田さんにも来てもらって、もっと具体的にお話を聞いていきます。

そこでもいろいろLazeのことを聞きますし、Imagine Cupについてより詳しくやるので、ぜひみなさんお申し込みください。こちらも学生さん、社会人の方もお待ちしております。

本当にすごく貴重なお話をしてくれて、うれしかったです。

永田:ありがとうございます。

(会場拍手)