ElestrovicとSimilarity ― C/C++代替を目指す新しい言語開発
はじめまして。Success Blue、奇曲宮夢(ききょくみゆ)です。
今回は、Elestrovicで開発しているプログラミング言語「Similarity」について紹介します。
この記事では、Similarityが何を目指しているのか、なぜこのような設計になったのか、そして現在どこまで開発が進んでいるのかを書いていきます。
Elestrovicとは
まず、「Elestrovicって何?」という話から始めます。
Elestrovicは、次世代のソフトウェア開発基盤を研究・開発するための技術開発ブランドです。
現在、その最初のプロジェクトとして、C/C++代替を目指すシステムプログラミング言語「Similarity」を開発しています。
現代のソフトウェア開発では、便利さや柔軟性のために多くの機能が追加されてきました。
しかし、その一方で、
- 暗黙的な挙動
- 複雑な依存関係
- 意図しない動作
- 問題発生時の原因特定の難しさ
といった問題も発生しています。
もちろん、複雑なものを完全になくすことはできません。
しかし、「何が起きているのか分からない状態」は減らせると考えました。
Elestrovicでは、明確で安全なソフトウェア開発環境を目指し、そのための技術を研究・開発しています。
Similarityとは
Similarityは、C/C++を代替できるシステムプログラミング言語を目標として開発しています。
目標は単純に「新しい書き方」を作ることではありません。
C/C++が持つ、
- 高い性能
- 低レイヤへのアクセス
- 予測可能な動作
といった強みを維持しながら、開発時の曖昧さを減らすことを目指しています。
Similarityのキャッチコピーは、
No GC.
No guessing.
No C/C++.
です。
これはSimilarityが目指す方向性を表しています。
- GCに依存しない、予測可能な実行
- 推測に頼らない、明示的な設計
- C/C++とは異なる新しい選択肢
を意味します。
なお、「No C/C++」はC/C++を否定するという意味ではありません。
C/C++が長年支えてきた性能や制御性を尊重しながら、それとは異なる設計による選択肢を作ることを目指しています。
Similarityの設計思想
Similarityの中心となる考え方は、
「曖昧さを減らすこと」
です。
プログラムを書く上で、すべての複雑さをなくすことはできません。
しかし、何が起きているのかを明確にし、問題が発生した時に原因を追いやすくすることはできます。
そのためSimilarityでは、構造を統一し、意味を明示する設計を採用しています。
Similarityの文法
Similarityの基本構造は、
カテゴリ[操作{引数}]
です。
この形式を基本として、言語の要素を統一しています。
例えば条件分岐:
If[
check{lesseq(n:1)},
True[
return(n)
],
False[
...
]
]
Similarityでは、Ifは単なる予約語ではありません。
「条件を確認し、その結果によって子要素を選択する存在」として扱います。
そのため、Ifには、
- 条件確認
- Trueの場合
- Falseの場合
という意味を持った構造があります。
なぜこの形なのか
多くのプログラミング言語では、機能ごとに異なる構文が存在します。
例えば、
- if文
- for文
- 関数定義
- 変数宣言
などです。
Similarityでは、これらを一つの構造に統一することで、
- コンパイラが解析しやすい
- 人間が意味を追いやすい
- 問題が発生した場所を特定しやすい
という方向を目指しています。
構造は固定します。
しかし、その中で組み合わせる要素は自由です。
実装状況
現在、Similarityでは以下の機能を実装しています。
- Lexer
- Parser
- Type Check
- Pointer
- Array
- Struct
- Async/Await
- CAI IR
- CAI Converter
- ELF生成
また、独自バックエンドによる実行環境の構築も進めています。
これから
今後は、
- 標準ライブラリの拡張
- C互換レイヤー
- より高度な最適化
- 開発環境の整備
などを進めていく予定です。
Similarityは、単に新しい構文を作るためのプロジェクトではありません。
「プログラムを書く」という行為から、不必要な曖昧さを減らす。
そのための言語を目指しています。
まだ開発途中ですが、これからも進捗を公開していきます。