Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Nytril: A programming language and a markup language in one

2025年09月15日に「Reddit /r/programming」が公開したITニュース「Nytril: A programming language and a markup language in one」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Nytrilは、コード実行結果が直接ドキュメントになるプログラミング言語だ。読み取り専用関数、アフィニティ演算子、each演算子、スタイル継承機能「Revisions」など、効率的な文書作成を助ける独自の機能を持つ。

ITニュース解説

Nytrilは、プログラミング言語とマークアップ言語の機能を一つに統合した新しい言語だ。一般的なプログラミング言語が計算結果を「出力」命令で表示するのに対し、Nytrilではコードの実行結果が自動的にドキュメントの一部となるため、明示的な出力命令は不要だ。これにより、動的な計算結果を組み込んだ複雑なドキュメントを効率的に作成できる。

この言語にはいくつかの独自の概念がある。まず「グローバル関数と名前空間」について。Nytrilでは、特定のクラスに属さず、thisポインタを持たないグローバル関数を自由に定義できる。関数を整理し、名前の衝突を避けるために名前空間によるグループ分けも可能だ。

次に「読み取り専用グローバル関数」は、時間のかかる処理の結果を効率的に再利用するための仕組みだ。関数が「読み取り専用」とマークされると、プログラム内で最初に呼び出されたときに一度だけ実行され、その戻り値がキャッシュされる。二回目以降の呼び出しでは、再実行されずにキャッシュされた値が即座に返されるため、大規模なデータ取得などのパフォーマンスを向上させる。

Nytrilには「アフィニティ演算子」というユニークな構文が存在する。通常のプログラミング言語では二つの値の間には必ず演算子が必要だが、Nytrilでは値が隣り合って記述されていてもエラーにならず、「アフィニティ(親和性)」という見えない演算子が自動的に挿入される。実行時には、隣り合う値の型に親和性があれば対応する操作が実行される。例えば、"123" "abc"は文字列連結、3 metersは乗算のように解釈され、プログラマーは独自の型間親和性を定義して自然な構文を構築できる。

each演算子」は、配列の各要素に対して関数を適用する便利な機能だ。例えば、Square(each [1, 2, 3]);と書くことで、配列の各要素にSquare関数が適用され、結果として[1, 4, 9]という配列が得られる。複数の引数にeachを使うと多次元配列になり、他の演算子と組み合わせることで配列操作を簡潔に表現できる。

Nytrilの中心的な概念の一つが「リビジョン」だ。これは波括弧{}で囲まれたプロパティと要素の集合で、セミコロン;で区切られる。プロパティは名前: 値でドキュメントの見た目を、要素は式で内容を表現する。これらは実行時に計算され、ドキュメントの書式オブジェクトに要素を追加したり、プロパティを修正したりする役割を持つ。重要なのは、元のオブジェクトを直接変更せず、リビジョンと元のオブジェクトを組み合わせて新しい改訂済みオブジェクトを生成する点だ。これにより、CSS(Cascading Style Sheets)のように柔軟なスタイル継承や階層化が可能になる。例えば、Paragraph {1; "abc"; TextColor: Colors.Blue};は段落に内容を追加し色を指定する。要素の順序は重要だ。

リビジョンは配列とも密接に連携する。リビジョン内の要素が配列の場合、その配列自体ではなく、配列の個々の要素がすべてリビジョンに展開される。この特性とeach演算子を組み合わせることで、Paragraph { Square(each [1, 2, 3]); Separator: ", "; };のように反復コンテンツを簡潔に記述できる。さらに、リビジョン内ではif/elseによる条件分岐やforwhileなどのループ文も利用でき、プロパティや要素の動的な制御や反復的な追加が可能だ。

このようにNytrilは、プログラミングロジックとドキュメントの構造・スタイル定義を統合することで、動的なコンテンツを含む複雑なドキュメント作成のプロセスを大幅に効率化し、開発者がよりスムーズに作業を進められるように設計されている。

関連コンテンツ

関連IT用語