Solod(So)プログラミング言語を紹介します。Solodは、Go言語のサブセットをC11形式にトランスコンパイルしたもので、GCC、Clang、zig ccコンパイラでのコンパイルに適しています。SolodとGo、Tinygoの主な違いは、ガベージコレクタ、自動メモリ割り当て、参照カウントを用いない手動メモリ管理を採用している点です。SolodのトランスパイラはGo言語で記述され、BSDライセンスで配布されています。Linux、macOS、Windows上で動作します。
この言語は、構造体、メソッド、インターフェース、スライス、複数の値を返す関数(例:結果+エラーコード)、ジェネリクス、および遅延呼び出し(defer)をサポートしています。簡潔さを保つため、チャネル、コルーチン、クロージャはサポートしていません。Solodの開発では、Go言語をサポートする既存のLSPサーバー、リンター、統合開発環境、コードエディタ、および「go test」ツールチェーンを利用できます。
Solodで記述されたコードはCアプリケーションと統合でき(CからSolod関数を呼び出し、その逆も可能)、ランタイムは不要です。主な応用分野としては、C言語と同様の機能を持ちながらGoスタイルの構文と型チェックを備えたシステムプログラミングが挙げられます。Solodは、GoライブラリをCプロジェクトで使用するために移植する際にも利用できます。strings、io、bytes、mem、slicesなどのGoパッケージがC言語に移植されています。移植されたGoライブラリに加え、Solodプログラムは標準Cライブラリであるlibcのバインディングも使用できます。
デフォルトでは、すべてのメモリはスタックに割り当てられますが、標準ライブラリの Alloc / Free 関数を使用すればヒープへの割り当ても可能です。ガベージ コレクションと参照カウントは使用されませんが、Solod は型チェック機能と、配列の範囲外にアクセスした際のクラッシュ機能を提供します。ダングリング ポインタの戻り値やメモリの誤解放はチェックされません。メモリの問題を検出する主な方法として、最新のコンパイラでは AddressSanitizer (-fsanitize=address) の使用が推奨されています。
パフォーマンスの面では、Solodで記述されたコンパイル済みプログラムは、一般的にGoプログラムよりも高速です。たとえば、Byteパッケージの関数は、メモリ消費量が同じでも1.5倍高速です。バイトバッファ操作は、読み取りが1.3倍、書き込みが2~4倍高速です。Mapパッケージでは、整数キーの取得は3.4倍高速ですが、キーの変更は1.6倍遅くなります。文字列キーの取得はGoと同等ですが、変更は1.5倍遅くなります。整数の解析とフォーマットは2倍高速で、浮動小数点解析は1.5~1.2倍高速です。文字列関数は1.3倍高速で、文字列の作成はメモリ消費量が10~20%削減され、2~4倍高速になります。
出所: オープンネット.ru
