プログラミング言語 Cipher
Cipherのエッセンスとは:
- 数学に近付けることにより強力な記述力を持った文法をもち、それがなじみのあるC言語に似た文法と両立
- 健全で強力なマクロ、lispのマクロ能力とC言語風の文法の両立
- 無名の関数を使った抽象化
- ポインタや参照をなくする事により危険な副作用によるバグを低減
- 手続き型言語が直列度を最大化する記述を強要するのに対して、Cipherは並列度を最大化する記述をencourageする
あんまりそう見えないだろうけど、
作っている私の気持ちとしてはCの後継言語を作る事が目標です。
Cをよく知っている人は分かっている通り、C言語がマシン語に対して提供する抽象化層は意外と薄い物です。CipherはそのCからもう一段だけ抽象化を提供することを目的とします。その抽象化とはメモリ管理の抽象化とプログラム自体と関数を第一級データとする事、そして継続の提供です。
まだ達成されていないけど、目標としては:
- オブジェクト指向、パッケージシステムなどの機能はプログラマが自由に変更できる事(プログラム可能なプログラミング言語である事。パーサやリファクタリングエディタ自体もcipherで書かれていて変更できる事)
- プログラムを読む/書くプログラムが書きやすい言語である事
- 第一の実装はインタープリタであるが、コンパイル可能な言語仕様である事
cipherバイナリ(MacOS 8 or more):なにが起きるか保証できないけど。
cipherプログラムの例
cipherの文法と、言語の特徴そして設計目標
('03年頃に書いたものだから少し変わっちゃったところもある。)
cipherについてのT.M.の日記をgoogle検索
ソースコード
- app.cp
- イベントループとイベントの分岐とI/O。
言語そのものとは関係ない。
- appSpeci.c
- ターミナルみたいなもの。イベントハンドラが入っている。
- app.h
- app.cとappSpeci.cの共通ヘッダ。
ターミナルの動作やOS依存の定数などが入る
- tokenizer.c
- 手書きのトークナイザ
- parser.c
- 手書きの再帰降下パーサ。出力は構文木。
- eval.c,
eval.h
- 評価器。構文木を実行するタイプ。
- ciph.h
- 全体で使われるデータ構造と関数を定義
- value.c,
value.h
- データ構造の生成と破壊、コピーと四則演算
- lib.c
- ライブラリ関数群
- list.c,
list.h
- リスト操作関数群
- vector.c,
vector.h
- 集合型(リスト、配列、double配列)に対する操作関数群
現状の実装はMacOS 8(classic)のアプリになっていて、
シェルと言語が一つのバイナリになっています。
しかし、言語仕様自体はシェルとは関係ありません。
シェルからインタプリタへはinterpret(char* str)でインタープリタからシェルへはmyPrintf(fmt, ...)という非常に細いインターフェイスでつながっているのみです。
拡張子は.cですが、何となくC++です。
クラスなどC++らしい機能は使っていません。
コンパイラはCodeWarrior 9です。
最上 嗣生
|
Home |
e-mailはmogami@brain.riken.jpヘ