
2026/02/26 2:48
「オム プログラミング 言語」
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Omは、演算子・区切り文字・オペランドという3つのプレフィックススタイル構文要素のみを使用し、すべてのデータ値をオペランドとして扱うミニマリストな結合型プログラミング言語です。パナモルフィックで従来のデータ型を排除することで、内部表現が統一され、任意の入力に対して操作が機能します。インタープリターはBOMなしのUTF‑8テキストを有効なプログラムとして受け付け、「en_US.UTF-8」ロケールをデフォルトとし、完全にUnicode互換です。
現在は概念実証段階であり、数値演算やファイルI/Oなど多くのコア機能が欠如しており、設計はバージョン 1.0 以前に進化する見込みです。本プロジェクトはEclipse Public License v1.0 の下でヘッダーオンリーC++ライブラリとして配布され、任意の C++ または Objective‑C++ アプリケーションに埋め込むことができます。
ソースコードはGitHub上にあり、開発者は
で取得し、CMake を使ってビルドします。プラットフォームツール(Xcode/Visual Studio/Cygwin/Ubuntu)と ICU4C および Boost ライブラリが必要です。ドキュメントは Doxygen と Graphviz により生成されます。インタープリター実行ファイル (git clone) は最初のアンバランスな中括弧までUTF‑8入力を読み取り、出力を stdout に書き込みます。テストはOm.Interpreterを通じて実行されます。組み込み操作にはOm.Test、copy、drop、choose/quote、dequote(push/pop)、および<-があり、新しい操作はdefine名前空間に C++ クラスを実装することで追加できます。Om::Language::Operation再帰は先読みプレフィックス評価と非再帰的評価器のおかげで効率的で、スタックオーバーフローの心配なく深い再帰が可能です。貢献の道筋としては、操作やプログラムを追加すること、問題を報告すること、または資金提供があります。開発はモダンなポータブル C++ と Sparist コーディング標準に従いますが、まだバージョン互換性の保証はありません。言語は Joy や他の結合型言語から大きく影響を受けており、将来の機能拡張のために最小限で拡張可能な基盤を提供することを目指しています。
本文
はじめに
Om言語は、極めてシンプルでコンカタネーティブ(連結型)かつホモイコニック(自己記述的)のプログラミングおよびアルゴリズム表記言語です。特徴は以下の通りです。
- 最小構文 – 要素が3種類のみ。
- プレフィックス記法 – 関数は残りのプログラム自体を操作します。
- パンモルフィック型付け – データ型を持たないプログラミング。
また、解析が容易なデータ転送フォーマットとしても機能し、Unicode正規化済みです。すべてのUTF‑8テキスト(BOMなし)は有効なOmプログラムとなります。
C++ライブラリとして実装されており、任意のC++またはObjective‑C++プロジェクトへ埋め込み可能で、新しいデータ型や操作を追加することもできます。
現状
- 概念検証 – 完成していない。数値、ファイル等、多くのコア機能が欠如しています。
- 変動中 – 1.0リリース前に大きな変更が予想されます。
ライセンス
Eclipse Public License v1.0
詳細は Eclipse Public License FAQ をご覧ください。
はじめ方
ダウンロード
| ソース | 方法 |
|---|---|
| 開発版 | またはアーカイブファイル |
| リリース | GitHub タグページのアーカイブファイル |
依存関係
| カテゴリ | 必須プログラム | 備考 |
|---|---|---|
| ビルド | CMake, Graphviz, Doxygen | 順序: Graphviz → Doxygen → CMake |
| Xcode (macOS) | ||
| Visual Studio + Cygwin (Windows) | bash, GNU make, ar, ranlib | |
Ubuntu | | |
| ライブラリ | ICU4C, Boost | 生成スクリプトが自動で外部依存をダウンロードします。上書きしたい場合は を使用してください。 |
ビルド
-
ビルドディレクトリ(例:
)を用意します。builds/ -
適切な生成スクリプトを実行します。
# Unix 系 OS ./generate.sh <project-name> [CMake オプション] # Windows (Visual Studio コマンドライン) generate.bat <project-name> [CMake オプション]スクリプトは外部依存を
にインストールします。builds/<dependency>/downloads/<MD5>/build/<platform>/install -
生成されたプロジェクトを IDE または
でビルドしてください。cmake --build
ターゲット
| ターゲット | パス | 説明 |
|---|---|---|
| Om.Interpreter | | 標準入力からUTF‑8を読み込み、標準出力へ書き込みます。オプションでロケール(デフォルトは )を指定できます。 |
| Om.Test | | すべての単体テストを実行します( の一部)。 |
| Om.Documentation | | HTML と XML ドキュメントを生成します。 |
ライブラリの使い方
をインクルードパスに追加します。code/- 必要なヘッダーをインクルード;
はすべての操作を含みます。om.hpp - 使用前に
を呼び出します。Om::Language::System::Initialize("<locale>")
を作成し、必要ならカスタムオペレータ―プログラムマッピングを追加してからOm::Language::Environment
でプログラムを評価します。Evaluate()
言語概要
構文
Om プログラムは operator(演算子)、separator(区切り)、operand(オペランド) の3つの要素からなるシーケンスです。
- Operator – 任意の文字列(バッククォートで区切りや波括弧をエスケープ可能)。
- Separator – 空白またはその他定義されたデリミタ。
- Operand –
で囲まれたテキスト;中にネストされたオペレーター、セパレータ、オペランドが入ることがあります。{}
評価モデル
- 関数は プレフィックス連結型:各関数はプログラムの残りを消費し、新しいプログラムを返します。
- Identity – すべての項目をそのまま渡します。
- Constant – 定義済み項目をプッシュし、残りの入力を続けます。
- Operation – オペランドを処理;不足している場合は自身を再度発行します。
セパレータは評価時に無視されますが、出力項目間には一貫したフォーマットとして再挿入されます。
プログラム例
| プログラム | 説明 |
|---|---|
| 演算子 “Hello,” とセパレータ空白、演算子 “world!” を含むオペランド。 |
| を生成します。 |
| が残ります。 |
| を生成します。 |
高度な操作
- define – 新しい演算子―プログラムマッピングを作成します。
- rearrange – オペランド名をバインドして適用スタイル(fold 例で使用)にします。
- normalize – 文字列の NFKD 正規化を強制します。
貢献
- GitHub 上でリポジトリをフォークします。
- Adding Operations / Adding Programs のガイドラインに従い、C++ で新しい操作やプログラムを実装します。
- 生成スクリプトを実行してプロジェクトファイルを更新します。
- プルリクエストを送信してください。
その他の貢献方法:
- バグ報告・機能要望
- 資金援助やスポンサーシップ(プロジェクトページに連絡先があります)
開発メモ
- 現在は Sparist C++ コーディングスタンダードに準拠したモダンで移植性の高い C++ で書かれています。
- 初期段階なので、バージョン互換性の保証はありません。
- 静的解析ツール:HFCCA (Python)、CLOC (Perl) を利用しています。