kmizu:面白い質問だと思います。学生時代に私もちょっとそのアイデアについて考えたことがありましたが、特に実装は考えずに今まで放置していました。 実際問題として、システムハンガリアンを強制する実装自体は難しくないです。たとえば、::に特別な意味を持たせるとして、 int::count = 100 // countはint型である とあったら、 int count = 100 のように内部的に処理してしまうことは苦もなく可能でしょう。しかし、型名が長くなってくるケースでは毎回型名を書かされるのは煩わしくなってきそうという感触もあるので、機械的にシステムハンガリアンを強制されるのがいいかは多少微妙なところがありそうです。 ただ、別の観点から考えた時にはシステムハンガリアンの強制(というか命名から型を決定する)というアイデアは有効ではないかと思うことがあります。たとえば、「Int型である以上に何か意味がある名前付けが不可能である」ような引数やローカル変数は実務的にしばしば遭遇することがあります。 int add(int a, int b) { return a + b; } のような関数に対して、左辺(lhs)であるとか右辺(rhs)であるとかつける意味があるのかやや微妙ですし、そういうときに int add(aInt, bInt) { return aInt + bInt; } のように書けたらなあと思ったことはあります。ここまで考えてみるとどうも、 * 変数名に特別な意味が与えられないので、型を埋め込んでしまいたいケース(int::nなど) * 型名を埋め込むのは冗長になるので避けたいケース(int::countなど) の二つのケースがありそうな気がします。前者の場合について、型名を書かない場合に変数名から勝手に型を補うという形で実現するのは案外ありかもしれません。 といっても、プログラミング言語設計に関する問題は「書いてみないと便利かわからない」ことも多いものなので、実際に有用かは何とも言えませんが。もし自作の言語を作られているのだったら、一度試しにアイデアを組み込んでみるのも楽しいものですし、一興ではないかと思います。(Read more)
yosuke_furukawa:面白そうですね。 自分は JavaScript を主戦場としているエンジニアなので、それになぞらえて考えると、プリミティブな型を変数名につけることができ、それが勝手に WASM になって JS よりも安定した性能を出せるとかになると面白いかもと思いました。 例えば let i32foo = 10; と書いたら、 int 32 bit の変数として勝手に認識されて、 WASM でコンパイルされて動き、やろうと思えば単なる JS としても動作するとかで両者で透過的に動くみたいなアイデアは有り得そうですね。まぁただ変数名が長くなりそうなのと、 TypeScript みたいな型を明示する方がいま主流なので流行るかと言われると微妙ですが、アイデアとしては面白そうかもと思いました。(Read more)