はじめに

この文書について

この文書はプログラミング言語「パステルステッチ」の言語仕様を規定するものです。

この文書は解説書ではありません。簡潔ではあるが不親切に書かれています。特に不親切なのは、定義される前に使用される用語があるということです。その用語がパステルステッチ独自の概念または用法である場合は、この文書のいずれかの場所 (用語が使用された場所よりも前であることも後であることもある) で定義が示されます。そうでない用語、すなわち、既存のプログラミング言語または計算機科学の用語を援用したものについては、この文書では定義されません。また、この文書では、パステルステッチのインタープリターがどのように動作すべきかを規定しますが、その挙動を用いてどのようなプログラムを書くことができるのか、また、そもそもなぜそのような仕様になっているのか、説明しません。

パステルステッチ

パステルステッチの最大の特長は、既存のプログラムをほとんど変更することなしに、既存のプログラムの末尾に新たなコードを付け加えるだけで、プログラムの機能を変更することができる、ということです。これはプログラムの柔軟な運用を可能にします。例えば、プログラムを共通部分と拡張部分に分けて配布することができ、拡張部分は自由に選択して組み合わせることができます。また、ユーザー自身がプログラムの末尾にコードを追加して、機能を独自に追加または変更することができます。このようなスタイルは、既存のプログラミング言語と分散型バージョン管理システムを組み合わせて運用することでも実現できますが、バージョン管理システムによる自動的なマージがしばしば失敗することなどを考えると、プログラミング言語のレベルで対応する方が確実です。

第 2 の特長は「コンティニュエーション」と呼ばれる強力な制御構造を持つことです。コンティニュエーションを持つプログラミング言語は少なくありませんが、パステルステッチのコンティニュエーションは、単純な文法で多様な応用が可能です。特に、パステルステッチを組み込み言語 (後述) として用いるとき効果を発揮します。コンティニュエーションを使うと、パステルステッチとホスト言語の間を自由に行き来することができます。すなわち、パステルステッチの実行を中断してホスト言語に戻ったり、ホスト言語でパステルステッチのコンティニュエーションを実行することでパステルステッチの実行を再開したりすることができます。

パステルステッチの想定される用途は「組み込み言語」です。すなわち、他のプログラミング言語 (ここでは「ホスト言語」と呼びます) で作られたプログラムにパステルステッチのインタープリターを内蔵することで、パステルステッチを利用します。

組み込み言語として代表的なものに Lua があります。また、JavaScript はウェブブラウザの組み込み言語として知られています。独自の組み込み言語を内蔵しているソフトウェアには Emacs、TeX などがあります。

このうちパステルステッチは TeX の組み込み言語に影響を受けています。これは、パステルステッチが TeX の組み込み言語に似ているという意味ではありません。組み込み言語を用いて不特定多数のユーザーが「マクロパッケージ」を追加していくことでソフトウェアが成長していく、というエコシステムが TeX の価値を高めています。パステルステッチはこのエコシステムを一つの理想としています。既存のプログラムの末尾に新たなコードを付け加えることでプログラムの機能を変更するというパステルステッチの機能は、このようなエコシステムのもとで効果を発揮することを意図しています。

Lua は優秀で汎用的な組み込み言語であり、パステルステッチと直接に競合します。先述の TeX は独自の組み込み言語に加えて Lua を搭載するようになりました。Lua はシンプルで高速な組み込み言語であり、このうちシンプルであるという点と組み込み言語であるという点はパステルステッチと共通します。ただし、パステルステッチは原理的に高速になれない言語であるように思われます。

パステルステッチは組み込みプログラミング言語の世界に分裂をもたらすのでしょうか。私がパステルステッチの開発に携わるのは、そうでないことを確信しているからです。パステルステッチはあまりに特殊で奇妙なので、分裂をもたらすというよりは、単に新しい選択肢を付け加えるだけであるように思います。

これまで説明した特長の他に、パステルステッチには、明確に利点であるとは言えない変わった点があります。パステルステッチは既存のプログラミング言語が暗黙のうちに共有している慣習のうちのいくつかを無視しています。たとえば、ブロックの初めと終わりはブレースではありませんし、文字列の初めと終わりはダブルクォーテーションではありません。パステルステッチの文の終わりは改行ですが (これは多数のプログラミング言語で採用されています)、行をまたいで文を継続するには、改行のに行継続の記号を置きます。比較演算子は左向きの < と ≤ はありますが右向きの > と ≥ はありません。見た目の問題ではなく、プログラミング言語の機能として奇妙なのは、変数への代入を持たず、かわりに記憶装置への書き込みを利用することです。

パステルステッチは既存のプログラミング言語の慣習にとらわれない方針です。だからと言って、奇妙なだけで実用性のない特徴を導入することはありません。パステルステッチの目標は Lua, JavaScript, Emacs Lisp と競合することであり、Brainfuck や INTERCAL を目指しているわけではありません。

名称について

パステルステッチの日本語での正式な名称は「パステルステッチ」であり、英語での正式な名称は “Pastel Stitch” です。他の言語では、英語または日本語の名称をそのまま用いても構いませんし、音訳または意訳のいずれを用いても構いません。

「パステルステッチ」という名称に特に意味または由来はありません。また、パステルステッチの機能または特長を反映しているわけではありません。