プログラミング言語のエキスパートの皆様のための覚書き
歴史
Wolfram言語は,何よりもまず,Mathematicaのために開発された記号言語が30年以上に渡り進化してきたものです.しかし,それだけではありません.Wolfram|Alphaの知識,知識表現,自然言語入力機能の他,Wolfram Cloudで生成される新しい記号配備メカニズムも加わった,単なる記号言語をはるかに超えるものなのです.
理論的基盤
Wolfram言語は早い時期から,記号システムに関する基本的な考え方に基づいた,計算のための汎用言語として構想されました.
最初のキラーアプリ:数学
Wolfram言語の概念は,まずMathematicaで,非常に困難な数学計算の分野に適用され,30年以上に渡って大きな成功を収め続けています.
存在する前から数百万人のユーザ
Wolfram言語は,Mathematicaに含まれたその前身から数えて30年以上の間,世界有数の研究者や多数の学生等を含む,何百万人ものユーザに利用されています.
ハードウェアを超える
Wolfram言語は最初から,その時代のハードウェアの限界に妥協することなく,基本理念に従うよう設計されています(全てが記号的,無限精度等).
ノートブックでのプログラミングという考え
すでに,前身のMathematicaで30年以上も前から使われていたWolfram言語では,出力を返す実行コードと出版品質のタイプセットを組み合せた,インタラクティブなノートブックドキュメントの中でプログラムが作成できます.
記号プログラミングの重要性を学ぶ
データ構造,コード断片,グラフィックス,ドキュメント,インターフェース....30年以上に渡る開発期間中に,Wolfram言語は記号プログラミングを適用する方法を次々に発見しました.
Wolfram|Alpha:現実世界を取り込む
Wolfram|Alphaはさまざまな現実世界の知識を計算可能にしました.これをWolfram言語に統合すると,形式的な構造だけでなく現実世界についても扱えるようになります.
数十億行のコード
世界中のソフトウェアシステムの内部に,Wolfram言語のコードが何十億行も含まれています.Wolfram|AlphaおよびWolfram言語自身には数千万行含まれています.
いつまでも使用可能な言語
Wolfram言語は巧みに設計されているので,1988年の初代Mathematica 1.0の時代に遡っても互換性があります.
30年間,時代に先駆ける
Wolfram言語よって,多くの新しいプログラミングアイディアが生まれてきました.その中には,この30年の間に開発された言語に影響を与えたものもありますが,多くはWolfram言語にしか含まれていません.
今話題の先進技術にも対応
Wolfram言語は古くも新しくもあります.長い歴史がありながら,新しいアイディアもたくさん含まれています.一般的なプログラミング言語の先進技術にうまく対応する特性も多くありますし,他の言語では馴染みのない特性も多数あります.
Wolfram言語は...
(これだけではありません)
知識ベース
Wolfram言語は,中心となる基本理念の一つとして,アルゴリズムおよび世界に関する広範な知識を組み込んでいます.
記号的
Wolfram言語では,コード,データ,画像,ドキュメント,インターフェース,プログラム等のすべてが記号式です.
インタラクティブ
Wolfram言語のコードは,ユーザとシステムの間でドキュメントベースのREPL(Read-Eval-Print-Loop)ダイアログとしてインタラクティブに実行できます.
関数型
記号的特性を持つWolfram言語は,一般化された変換に基づく関数型プログラミングの拡張型をサポートします.
高水準
知識ベースという特性と最大限の自動化という基本理念を持つWolfram言語は,世界で最も高水準な言語であるといえます.
宣言型
Wolfram言語は,指定された高水準の目標を達成するために高度に自動化されたスーパー関数を使って,宣言的概念の究極の形を組み込んでいます.
動力内臓
Wolfram言語は動力装置を含んでいるようなものです.Wolfram言語には一貫性のあるアルゴリズムと知識が組み込まれており,すぐに相互実行ができるよう設定されています.
同図像性を持つ
Wolfram言語では,その記号的特性により,基本的に「コード=データ」です.
パターン指向
記号式の高度なパターンマッチングは,Wolfram言語の主要機能です.
メタプログラミングが可能
記号的特性を持つWolfram言語は,マクロだけでなく,言語すべてのパワーも使って,コードを直ちに操作することができます.
簡潔
すべての組込み機能および注意深く選ばれたプリミティブによって,Wolfram言語のプログラムは短くても大きな結果をもたらします.
式ベース
Wolfram言語ではデータやコード等のすべてが,値を持つ木構造の記号式として表現されます.
リフレクション
Wolfram言語の記号特性により,完全なイントロスペクションが可能です.
ポリモーフィズム
パターンマッチを使って関数を指定すると,Wolfram言語はすぐに非常に多様な動作を表します.
動的型付き
Wolfram言語ではすべてが記号式であり,すべての記号式にはその動作を自動的に定義する頭部が含まれています.
作用型
Wolfram言語では,プログラムは記号的変換の列をイミュータブルな記号式に適用するものと考えることができます.
連結型
Wolfram言語は記号的なので,意味をなす部分の連結として迅速にプログラムを構築することができます.
DRY原則が守りやすい
Wolfram言語の関数型記号的パラダイムにおいてコードが自由に分解できるため,Wolfram言語はDRYで(繰返しを避けて)簡単にプログラムが書けるようになっています.
ドメイン固有言語に対応
Wolfram言語の記号的特性によって,言語内でドメイン固有言語を簡単に作成することができます.しかもその多くはすでに組み込まれています(正規表現,グラフィックス,インターフェース,配備等).
知識表現
幅広い組込み知識と記号構造を備えたWolfram言語は,知識を表現し,それを計算可能にするのに非常に適しています.
意味的
Wolframには現実世界の実体や構造の表現が幅広く組み込まれています.
数学的
Wolfram言語は,世界で最も幅広く奥深い数学計算が組込みでカバーされています.
任意精度が可能
Wolfram言語では,どのような精度,あるいはどのような長さの数でも使えます.
記号的で数値的
Wolfram言語は記号計算と数値計算の両方を深くサポートしており,アルゴリズムの多くはこれらのアプローチを組み合せます.
クエリが可能
Wolfram言語では,データはすべて記号式で表現されるので,高水準の関数構造を使って一貫したクエリが使えます.
オブジェクト指向
Wolfram言語は,従来のオブジェクト指向型プログラミングに替わるパワフルな記号型プログラミングをサポートします.
リアクティブ
Wolfram言語は関数型リアクティブプログラミングを実装し,複雑な動的ユーザインターフェースの構築を宣言的にサポートします.
多重ディスパッチ
Wolfram言語の記号パターンマッチングでは,関数のどの引数にでも,式のどの部分にでも即時にディスパッチが可能です.
表現力豊か
Wolfram言語の注意深い設計と幅広い組み込み機能によって,計算についての考えを言語で明確に表すことが簡単にできます.
可読
名前と構造を注意深く選ぶことに重点を置いてきたため,Wolfram言語は非常に読みやすくなっています.
ドキュメント中心
Wolfram言語では,コードはASCIIテキストに限らず,豊かなノートブックで作成することができます.
文芸的
Wolfram言語では,実行可能なプログラムを,高度に構造化されたノートブックとして書くことができます.
スクリプト作成可能
Wolfram言語は,さまざまな環境および言語での外部操作のスクリプトを作成するために使うことができます.
自然言語
Wolfram|Alphaと同じテクノロジーの上に構築されたWolfram言語では,プログラムの一部として,また機能において,自然言語入力が使えます.
JITコンパイル
Wolfram言語は,自身のバーチャルマシンにシームレスにジャストインタイムコンパイルを使い,性能を最適化してインタプリートされた操作もコンパイルされた操作も最高のものをもたらします.
並列化可能
Wolfram言語には,複数の個別マシンにも,異機種環境の場合もあるネットワークにも対応できる,並列計算機能が組み込まれています.
クラウドベース
Wolfram言語はローカルで実行できるだけでなく,クラウドでも実行でき,多数の形式のクラウドベースの計算をサポートします.
クライアント-サーバ指向
Wolfram言語のインタラクティブインターフェースはWSTP (Wolfram Symbolic Transfer Protocol)記号プロトコルを介して,1つあるいは複数の計算カーネルと通信できるよう設定されています.
プラットフォームに依存しない
Wolfram言語はローカルでもクラウドでも,すべての標準的なコンピュータプラットフォーム上で同じです.
ホットスワップ可能
Wolfram言語はインタプリタ型言語であり,その配備は記号的なので,どの実行段階でもコードを調べ,デバッグし,変更することができます.
FFIが利用可能
Wolfram言語には,さまざまなレベルで動作する他言語関数インターフェース(Foreign Function Interface)への充実したサポートが含まれています.
相互運用可能
Wolfram言語には,他の言語や何百もの形式のデータとインタラクトする機能が組み込まれています.
安全
Wolfram言語はポインタやメモリ割当て等の低レベル構造を提示しないので,大きなバグを避けることができます.
永続的
Wolfram言語はコード,データ,グラフィックス,インターフェース等すべてを記号式として表現するので,永続性記憶装置のためにすぐにシリアライズすることができます.
モンキーパッチが可能
Wolfram言語には,ほとんどすべての操作を再定義するための一貫したメカニズムが備わっています.
イミュータブル
Wolfram言語では,すべてがそれ自身の値を表す記号式です.ある特定の関数にだけ,式を「その場」で変更することによる副作用があります.
安定
Wolfram言語は,30年以上に渡りほとんど完全に下位互換性を維持してきたMathematicaの,互換性のある言語の進化形です.