日本語トランスコンパイラ言語 Re:Mind という自作言語の企画趣旨


# はじめに
この投稿では「日本語トランスコンパイラ言語 Re:Mind（リマインド）」という自作トランスコンパイラ言語の企画の趣旨についてまとめています。

※この記事には実装的な情報は含まれません。自作言語の詳細仕様も未策定のため、仕様的な情報も含まれません。
# 「日本語トランスコンパイラ言語」とは
日本語をベースとしたプログラミング言語をソース言語として、実行コードやアセンブラまたは中間コードを出力するコンパイル言語ではなく、他の既存プログラミング言語のソースコードを出力するトランスレータ言語またはトランスコンパイル言語
## イメージ
日本語プログラミング言語のソーステキスト→C＃のソーステキスト
日本語プログラミング言語のソーステキスト→Javaのソーステキスト
日本語プログラミング言語のソーステキスト→TypeScriptのソーステキスト
日本語プログラミング言語のソーステキスト→他の日本語プログラミング言語のソーステキスト
※各ターゲット言語機能はモジュール化されていて、ターゲット言語の対応バージョン、対応言語仕様範囲、対応ターゲット言語の種類も機能拡張できるとなおよい
## 利用シーン
markdownで内部設計書を起こす際に、ロジック的にごちゃごちゃしているのをまとめるときにすべてフロー図ではちょっとめんどうなので、テキストでロジックを表現しようとする。

筆者は日本語プログラミング言語経験者なので、日本語でロジック仕様を書くのに抵抗はない。

日本語でロジックが表現されたmarkdownはVSCodeで開いていて、デスクトップにはC#やJavaで書かれたバックエンド、TypeScriptで書かれたフロントエンドのプロジェクトが立ち上がっていて、日本語で書かれたロジック原稿を翻意しながら各プログラミング言語のソースコードを書いている。

このとき、VSCodeエクステンションのCodeRunnerみたいな感じで、範囲指定した日本語ロジックがおとなりのVSCodeエディタの指定位置にターゲット言語のソースコードに変換して貼り付けられると便利かも？

あるいはVSCode自動化タスクで書いてるひとも知らないうちにターゲット言語の実行形式までビルドされているとか。
## Wikipediaの「日本語プログラミング言語」の「活用しづらい」について考える
[日本語プログラミング言語 - フリー百科事典『ウィキペディア（Wikipedia）』](https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)からの引用「その一方で、日本語プログラミング言語には、シンタックスなどの業界統一規格がなく、ほかの既存言語の資産（業界標準のオープンソースライブラリなど）を活用しづらいとの批判もある。」

この文の「活用しづらい」の理由の前半は、続くかっこ書きで「これに関してはおそらく他の既存言語でも全く変わることなく」と否定していますが、後半の方（ほかの既存言語の資産を活用しづらい）も、ある言語のフレームワークが採用されると別言語の追加は特殊な例（ランタイム共通言語とか相互運用環境が整っているとか）を除いて、難しいのは変わらない。

プログラミング言語のシンタックスとして自然日本語の文法が強制されても、それに馴染みのない開発ユーザーからすると、[逆に書き手としては負担になる](https://qiita.com/mylifewithviolin/items/d15fdf16c6a66bdcf5b1)というのも一理あるとは思いますが、日本語プログラミング言語がSI現場でなかなか一般的に採用されるにいたらない主たる原因はそこではなく、データベースの利用環境をはじめとしてフレームワークとして開発環境が提供できるほどの規模感がないことではないかと考えております。

現在のシステム開発はフレームワーク込みでの採用が少なくないので、ライブラリの規模や採用実績がないとなかなか採用されにくいのが現実であると思われます。

そこで、トランスコンパイラ言語であるならば、設計フェーズと初期実装フェーズに関与できる余地が現実解として広がる気がします。みなさんは、どう思われますか？

# 「日本語プログラミング言語」か「日本語トランスコンパイラ言語」か
ここでいう「日本語プログラミング言語」を日本語を基調としたソースコード構文を、独自のランタイムコードにコンパイルするコンパイラ言語またはインタプリタ言語と仮に定義します。「日本語トランスコンパイラ言語」は一般的に「日本語プログラミング言語」に包含されると思いますが、ここでいう「日本語トランスコンパイラ言語」は日本語を基調とした構文をソース言語として、他のプログラミング言語のソースコードへ変換するトランスコンパイラ言語と定義します。

独自のランタイムコードにコンパイルする「日本語プログラミング言語」は、英語圏で開発された既存のプログラミング言語のランタイムコードと必ずしも相互運用性に高いわけではなく、システム開発プロジェクトの開発言語として一枚岩的に採用されるか、採用されないかとなり、英語圏で開発された既存のプログラミング言語同士、あるいは同一プログラミング言語でのフレームワーク違いで熾烈な競合を繰り広げており、その中に採用されていくハードルはかなり高くなっているものと推察されます。

「日本語プログラミング言語」にとっては苦渋の選択ではありますが、システム開発現場での部分的導入、あるいは設計フェーズでの部分的導入でまず実績をつくるという観点から、英語圏で開発された既存のプログラミング言語に変換する「日本語トランスコンパイラ言語」に勝機と商機があるのではないかと考えています。

# 言語名「Re:Mind（リマインド）」の由来
## 「日本語プログラミング言語 Mind（マインド）」との関係
言語の仕様や実装として直接は関係ないのですが、筆者は現存する最古の実用的な日本語コンパイラ言語「Mind（マインド）」のユーザー会の会員です。
そのため、自作言語のネーミングに「Mind（マインド）」の文字を含めたいと思い、コンパイラ開発元のスクリプツ・ラボ様のご許可をいただいております。
## Mindを思いだすReMind
「Mind（マインド）」ファミリーには以前、アセンブラとのリンク機能がついた「PureMind」というバージョンがあったので、それの１文字違いで「CureMind」という名称を考えておりました。しかし、こちらは医療用に同名のアプリが存在しているようでしたのでやめておきました。Mindのことを思いださせるという意味でのReMindもいいかなということでRe:Mindとしてみました。
# 当座の目標
「Re:Mind（リマインド）」の[基本構文案を策定](https://qiita.com/mylifewithviolin/items/9214582528edcbd606ad)する。
各ターゲット言語の基本構文を出力できるようにする。

https://qiita.com/mylifewithviolin/items/9214582528edcbd606ad
# 具体的には
とりあえずコンパイラ作ったことないので、ネット上でよくヒットして前半部分は説明もたいへん詳しい[低レイヤを知りたい人のためのCコンパイラ作成入門](https://www.sigbus.info/compilerbook)の前半部分をC#で書いてみます。
# おわりに
この企画を実現・設計・実装していくには、スキル上の課題や未獲得の知見など多数あることが予想されます。Qiita様の場をお借りして、獲得したスキルや知見の共有、いたらない点のご支援をいただければと考えています。

この企画の主旨をさまざまなご意見をもとに考察する記事を投稿しております。[^1] [^2] [^3] [^4]

# 参考リンク
https://www.sigbus.info/compilerbook

https://qiita.com/ruiu/items/4d471216b71ab48d8b74

https://qiita.com/killy/items/ccec1fbb81c4432757f5


[^1]: Qiita [「日本語プログラミング言語は 日本人にとって可読性が高いが、 なぜあまり普及していないのか」という学生さんの卒論に感銘をうけたお話](https://qiita.com/mylifewithviolin/items/d15fdf16c6a66bdcf5b1)　参照
[^2]: Qiita [「『プログラミング＝英語』という状況は正しくない。多言語でコードを書ける世界が求められている」という言語学者さんの記事に感銘をうけた話](https://qiita.com/mylifewithviolin/items/d545792ce594d45ed4cb)　参照
[^3]: Qiita [「なぜ、自然な日本語をめざさないのか」という開発者さんの記事に感銘をうけた話](https://qiita.com/mylifewithviolin/items/afe058c3be2c5b69626c)　参照
[^4]: Qiita [「日本語プログラミング言語は必要か」という大学教授さんの記事に感銘をうけた話](https://qiita.com/mylifewithviolin/items/2b9a4cba5b475af84f20)　参照