1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Similarity、言語開発の苦悩

はじめに

Similarityは、C/C++代替を目指して開発しているシステムプログラミング言語です。

しかし、言語開発というものは、単純にコードを書けば完成するものではありません。

むしろ大変なのは、その前段階。

「どんな言語にするのか」
「何を正しい設計とするのか」

を決めることでした。

今回は、Similarity開発で経験した苦悩について書きます。


その1:独自性が強いため、参考にできるものが少ない

Similarityは、既存言語の単純な派生ではありません。

そのため、設計時に参考にできるものが少ないという問題がありました。

もちろん、

  • C/C++の性能
  • Rustの安全性
  • Lispの構造的な美しさ

など、参考にしたものはあります。

しかし、Similarityの中心となる、

カテゴリ[操作{引数}]

という構造は、自分で意味を定義していく必要がありました。

「この設計で本当に良いのか?」

という判断を、何度も自分自身で行う必要があります。

正解が書かれた本があるわけではありません。

そこが言語設計の難しさであり、面白さでもあります。


その2:修正するのが本当に大変

言語設計では、小さな変更が大きな修正になります。

例えば、普通のプログラムなら変数名を変更する程度で済むことでも、言語では、

  • 文法
  • パーサ
  • AST
  • コンパイラ
  • ドキュメント
  • サンプルコード

など、多くの場所に影響します。

「少し変えたい」

が、

「全部確認し直し」

になります。

言語設計、怖い。


その3:設計だけで4ヶ月以上

Similarityでは、実装より前の設計段階に4ヶ月以上費やしました。

「早くコードを書けばいいのでは?」

と思うかもしれません。

しかし、言語は後から簡単に変更できません。

最初に決めた文法や思想が、その後のすべての基礎になります。

だからこそ、

「書ける言語」

ではなく、

「長く使える言語」

を目指して、時間をかけて設計しました。


その4:美しさと実用性のバランス

言語設計では、綺麗な設計だけを追求すればいいわけではありません。

美しい構造でも、使いにくければ意味がありません。

逆に、便利な機能を追加しすぎれば、曖昧さが増えてしまいます。

Similarityでは、

  • 明確さ
  • 安全性
  • 性能
  • 書きやすさ

のバランスを探しています。

そして、この調整が非常に難しいです。

「もっと美しくできるのでは?」

「でも実用性は?」

という悩みが常にあります。


その5:判断力が鈍っているとマジで死ぬ

これは本当に言いたい。

言語設計中の判断力低下、危険です。

なぜなら、その時にした小さな判断が、数ヶ月後の自分を苦しめるからです。

「まあ、これでいいか」

その一瞬の妥協。

それが後々、

「なんで当時の自分はこれでOK出したんだ……」

になります。

例えば、

True[]

当時の自分:

「Trueも子要素持つし、[]でいいか!」

現在の自分:

「いや待て……Trueってカテゴリなのか?
処理ブロックなら{}の方が自然では?」

結果:

修正。

また、

+{sum:i}

当時の自分:

「名前と値の関係っぽいし、:でいいかな」

現在の自分:

「いや、これ引数だよな?
,の方が明示的では?」

結果:

修正。

そうです。

言語設計は過去の自分との戦いです。

しかも厄介なのが、当時の判断も完全な間違いではないことです。

その時点では、その設計にも理由がありました。

しかし、設計が進むほど新しい問題が見えてきます。

そして気付く。

「これ、直すの大変じゃん……」

と。

まあ、何敗もしています。

※n敗目


おわりに

Similarityはまだ開発途中です。

しかし、言語開発で一番難しいのは、コードを書くことではなく、

「何を正しい設計とするか決めること」

だと感じています。

これからも試行錯誤しながら、Similarityを進化させていきます。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?