Catyの変更や拡張
http://d.hatena.ne.jp/m-hiyama-memo/20121231/1356927784 から後の2012年後半の変更拡張:
- file:writeに--mkdirオプションを追加
- pv, item, nth, xjson:get に --safe, --default オプション
- 特殊コマンドもオプションの構文チェック
- アプリケーション修飾を '::' に
- sreifモジュールを実装して追加
- リンク宣言(links の内部)にもアノテーションが書ける
- case分岐でのエラーをTypeErrorからCaseUnmatchedに変更
- 状態記述の仕様変更 #844
- 変数参照に、? と ?=を導入
- json:merge をunbiased版に
- コマンドパラメータに限って %? を導入
- 型パラメータをコマンドのボディ内でも可視とする #502
- call/forward のターゲットをモジュール修飾不要に
- call/forwardなしでも再帰コマンドが書けるようになった
- templateモジュールを導入
- forwardでスクリプトファイルも実行可能に
- Wikiプラグイン記法を導入 #869
- CatyScriptの型引数に型表現を書けるようになった pass<[string, {*:string}?]> とか
- validateこまんどを型パラメータ方式に変更
- リクエストディスパッチャが排他でない場合にエラーとするよう修正
- begin/repeat の導入
- cyclic dependency チェック
- CDパスの曖昧さ解決 #882
- 例外機構を実装
- モジュールをまたぐ再帰の問題をmodule宣言のrelated節で解決
- 単独のtryブロック #905
- neverコマンド
- Never例外
- throwコマンド
- signalコマンド
- throws句にnotをサポート not throws Exc
- mos:fullpathを実装
- unclose構文を実装 #937
- 型 UncloseInput を定義
- FIT内のマクロの参照を%%に変更
- uncloseに--clearオプションを追加 #933
- 例外処理に、--wallオプション #938
- runawayシグナルのサポート #945
- env利用の有料化
- instances構文を追加 #965
- アクション起動時に環境変数ACTIONの追加
- wsgiモジュールを追加
- GETの入力はnullに
- OS_PLATFORM環境変数を追加
- gen:sampleの引数を型名ではなく型表現に変更 #984
- gen:sampleに--modオプションを追加、モジュール指定ができる
- mos:fullpath の仕様を他のコマンドでも使用するように(一部は)した
- @[interactive] アノテーション
- xjson:univ-prettyコマンドを追加
- json:prettyの扱える範囲を標準的なJSONの範囲に制限
- (ほとんど)すべてのメタオブジェクトに位置情報(location)を埋め込む
- validateに--modオプションを追加
- testモジュールを廃止
- マルチプロファイルは廃止予定
- on demandモジュールを実現
- force-load特殊コマンドを実装
- override-publicアノテーション #1096
- inspect:where-isを追加
- override("
")アノテーションを追加。任意のモジュールを上書き可能。#1090 - branch文を実装、まだ不十分
- fill
コマンドを追加 - no-auto-fillアノテーションを追加、このアノテーションの指定されたコマンドはデフォルト値の自動補完がされない。
- gv:drawに--time, --timefileオプションを追加
- browserモジュールを追加
- array-to-object に --multi オプション #1106
- kyesコマンドを追加
- InvalidInput --> BadInput
- レイフィケーションStateSummaryにforWhom項目
- 任意のファイルからの force-load #1114
- flattenコマンドを追加 #1139
- file:mkdir にも --mkdir オプション
- gen:sampleをypicalアノテーションに対応
- narrowコマンドを追加。
- reject-non-jsonコマンドを追加
- open/close演算子をサポート
- extract演算子をサポート
- execコマンドを一部機能のみ実装
- UncloseConflict->SetEnvConflictにリネーム
- envに--toplevelオプションを追加
- call, forwardに--appオプションを追加
- takeに--objオプションを追加
- CatyFITにおける例外種別をサポート #963
- sreif:list-annotationsとshow-annotationを実装
- gen:sampleをwith/withoutアノテーションに対応
- annotations名前空間の追加に伴い、レイフィケーションデータのアノテーション情報を"anno"にリネーム
- インボーカーの動詞とメソッドの識別方法を変えた #1174
- open演算子に型パラメータを追加
- CatyEnviron型を定義
- PackageNotFound例外型を追加。
- アノテーション構文サポート #1187
- フラグメントの構文を変更({#ID ... } or (#ID ...))
- 任意のコマンド/アクションに reads, updates, uses が書ける #1194
- extract型演算も Ignore Tag Once
- サーバーモードでも-uオプションを有効化
- Catyアーカイバー
- Catyインストーラー
- Catyアンインストーラー
- Catyチェッカー
- cambの構文サポート #1224
- init-appとremove-appを実装
- hconからのinit-app, remove-appが可能に
- nit-appをアプリケーションインスタンスの生成のみに限定、これまので同コマンドはsetup-appに移行
- caty-archiverに--ignore-missingオプションを追加
- caty-archiverのフィルターファイルにオプショナルなファイルの指定を追加(行頭に?)
- viva:drawに--node=facilityを追加
- マニフェストのdeprecatedサポート #1270
- 特殊コマンドの名前 #1273
- mailモジュールを追加
- facilityとentityの構文を変えた #1357
- 型エラー(妥当性の違反)を分類した例外を追加
- python/app-manifest.xjsonに基づいて標準モジュールを読み込むように変更
- load-mods(l)の引数仕様を拡張 #1389
- 空式の導入
2012-12-31時点での課題と予定:
- 特殊コマンドのヘルプの自動化
- CatyScript構文のオンラインヘルプ
- 変数参照構文の拡張
- 別名とポート束縛
- クラス演算とクラス表現
- 順序付きオブジェクト(ordered object)データ
- CDパス解釈の明確化
- 三値論理とsetoid
- Catyのクロージャの明確化
- case構文とユニオン型
- スキーマ属性の整理と拡張
- フィルターのプラグイン化
- フォーマット(サブセットタイプ)のプラグイン化
以下に、http://d.hatena.ne.jp/m-hiyama-memo/20121231/1356927784 までを再掲。
http://d.hatena.ne.jp/m-hiyama-memo/20120229/1330491076 から後の2012年前半の変更拡張:
- debug:fuserコマンドを追加(Linux用)
- cpl (Classical Propositional Logic) モジュールを追加、暫定的
- gv:draw に --format=plaindot を追加
- Caty起動時オプション --app に追加
- callコマンドで.catyファイルの呼び出しを可能に
- 文字列化コマンド to-string を追加
- deprecatedログを追加
- os:platform コマンド追加
- 古いexecを廃止
- 型パラメータのデフォルト指定構文を導入、
など - hconをコンソールから起動可能に
- 型ケース構文を導入 case
- 手続き的cond構文を導入
- オブジェクトに対するeachの仕様を変更 #397 、each --obj の導入 #398
- takeに--indfオプションで三値論理対応
- takeに--objオプションでオブジェクト出力対応 #430
- file:list の機能拡張 glob対応、末尾スラッシュの解釈、--recオプション
- 定数定義constを導入
- Caty起動オプションに --goodbye オプションを追加
- catyをアプリケーション名として予約
- inspectモジュールを追加 #460
- Catyにクラスシステムを導入
- helpアプリケーション、とりあえず動くレベル
- テンプレートの区切り記号のクォーティングとして、<<, >>、{{, }} などを導入
- helpアプリケーションにhelpモジュール追加
- CDパス(ColonDotパス)仕様を導入
- Caty起動オプション --force-app を追加
- state宣言の構文拡張、asとbaseobjectを追加、#528
- docコメントを構造化、最初の一行を特別扱い #533
- 各種テンプレート変数より_接頭辞を削除(例: _CONTEXT --> CONTEXT)
- パッケージメタデータファイル pkg-manifest.xjson を導入
- Catyの標準モジュールも.casmから読むように修正
- Catyコマンドラインで、同一名称の複数のオプションを許す
- public.casmを廃止(モジュールの@[register-public]で代替)
- call で任意のファイルを呼べるようにした
- Web処理に三層のレイヤーアーキテクチャを導入
- バイナリリテラル b"..." を導入
- binモジュールを追加
- webioモジュールを追加
- 環境変数の追加:QUERY_STRING, SERVER_SOFTWARE, SERVER_MODULE
- pv, item, nth に --safeオプションを追加。
- ext-content-typeコマンドを追加
- アプリケーションごとにlibを持たせた、#639
- class構文を導入
- classのrefers節、構文だけ対応
- runtime.casmを追加、暫定的不完全
- setenv, unsetenv特殊コマンドを追加
- FITのabandon -> suspend と変更
- XJSONパスで末尾の'?'をサポート
- neqコマンドを追加
http://d.hatena.ne.jp/m-hiyama-memo/20120229/1330491076 再掲:
- text:verify-chars追加
- start.logにロギング
- _OPTS, _ARGV変数
- dribbleファイル機能
- smarty-mxの実装 https://bitbucket.org/project_caty/dev/issue/17/smarty-mx
- list:tightenを実装
- object-to-array, array-to-objectを実装
- テンプレートで仮想プロパティをサポート
- list:range コマンド追加
- smarty=smarty-mx とした
- ハイフン1個オプションを廃止
- path:matchesコマンド、テスト不十分
- パス式アクセスに$記法を導入(実装方式はけっこうヒドイ)
- ハイパーリンク記述を開始 https://bitbucket.org/project_caty/dev/issue/63/
- httpコンソール
- viva:draw
- gen-data -> gen:sampleに変更
- リソースのヘルプを追加
- viva:draw-action
- 環境変数LANGUAGEを追加。主にi18nメッセージの言語選択に使われる。
- viva:draw-actionに --loneオプション
- caraとcasmの統合
- call, forwardを追加。コマンド宣言にsignals節追加
- start{...}を追加、参考:https://bitbucket.org/project_caty/dev/issue/114/
- sleepを追加。
- キーボード割り込みでREPの中断、Windowsではまともに動かない。
- gen:urlを実装
- <?caty-* の出現位置の制限を先頭200文字→先頭10行に変更
- viva:draw/draw-action に --if-modified オプション
- vivaの描画フォーマットにsvgeを追加
- Literate形式のモジュール
- Wikiにignoreプラグイン
- caraにもlit形式
- h, hc, ht, hrをコンソールに出力するよう修正(helpはこれまで通り)
- schemata@this, actions@this を readonly で公開する。
- patternスキーマ属性
- userrole宣言、ユースケースのアクター概念を入れた(最小限)
- 不明なuserroleに疑問符
- --node=userrole の描画
- Catyの名前文字の日本語対応
- file:listでschemataやactionsを見られるように
- globalをアプリケーションとして扱えるように
- -マークで、別にどっちでもいいよトリガー
- globalのWebアクセス禁止(Webからは存在しない扱い)
- lexicalキーワードをsyntax宣言で使用可能に
- portのナンチャッテ実装
- ポートが束縛される機構/タイミングによりポートノードの色を変える
- 不明なノードのSVG出力時、classにunknownを追加
- 新CSSセレクターライブラリ
- filter:json フィルターコマンド
- filter:javascript フィルターコマンド
- with, withoutアノテーションを実装
- gv:drawを実装
- コマンドがエラーになったときに、スクリプトでの位置を同時に出力
- setモジュールを暫定的に追加
http://d.hatena.ne.jp/m-hiyama-memo/20120227/1330299117 再掲
- osモジュールにコマンド追加
- json:fix-on-selection
- json:fix-on-selection に、インライン・インクルード機能としての $embed
- pidファイル機能
- server status を server だけで参照可能。
- OSシグナル SIGTERM, SIGQUITに対応。Windowsでは不十分。
- キーボード割り込みをシグナルハンドラで対応するよう変更。Windowsでは不十分。
- isarray, isobjectフィルターを追加
- smarty3のfunctionを実装。
- その他 SmartyMinEx(smarty-mx)
- モジュールにアノテーションを付けられる。
- chcker.casm と checker:check-files、 まだ不十分。
http://d.hatena.ne.jp/m-hiyama-memo/20110623/1308807276 再掲
- when-otherwiseのワイルドカード
- PATH_INFO環境変数
- 環境変数が直接参照可能に。
- app.logとloggingモジュールを追加。
- osモジュール os:exec-scriptコマンドを追加。
- rc-once/*.caty による一回実行起動時スクリプト
- 複数候補から選択した値の解決 json:fix-on-selectionコマンド、$selection, $embed。
- モジュール循環依存性の検出
- 型コンパイル方式を少しずつ改善
- make-exception, throw-if-can。throw-if-canは今バグっている。
- pathモジュール
- when, eachにオプションが(構文上は)可能となる。
- gen-dataの改善、@[typical]アノテーション
- デーモンモードでのシグナル(SIGTERM, SIGHUPなど)に対応
- SIGHUPではリスタートする。
- PIDファイルをちゃんと消す。
- システム情報の公開性を少し高めた。
- 疑似タグのプロパティ名に文字列が使える。
- 疑似タグでundefinedが使える。
予定:
- 型の包含性判定
- データセットのサポート
http://d.hatena.ne.jp/m-hiyama-memo/20110506/1304662541 再掲。
- 変数生成 '>'
- 変数参照 '%'
- パイプラインの一時的終了 ';'
- eachによる変数スコープ(つうかエクステント)
- casmでスクリプトコマンド定義
- kindのナンチャッテ第一段階。
- バッグ型
- actions/*.cara
- 新しいスキーマ属性 maxProperties, minProperties, propNameFormat, tight。(remarkは以前から。)
- XJSONパス、XJSON get/put、パートはまだだが。
- ignore-tag-onceルール、pv, item, nth とXJSONパス
- 疑似タグ構文 '@?' '(' (name|string) ':' スカラーリテラル ')'
- 任意のタグ '@*'
- 任意の明示的タグ '@*!'
- 型名タグ '@&'
- undefined型と#'undefined
- @[register-public]
- CatyBNFのナンチャッテ実装: ::=, :=, = が使える。
- /*{{{, }}}*/ コメント
- debug特殊コマンド
- --no-ambient, --no-appオプション
- select-action, select-script, trace-dispatchコマンド
- スキーマ記述用のPythonファイルの分離
- *.caraにfiletypeを書ける
- 例外型の定義(exception宣言)
- deferred型
- お尻スラッシュ問題に対して、マニフェストに "missingSlash" 追加。
- _global.xjsonに "addrsAllowed", "addrsDenied"
- スタックトレースのWebへの出力
- throws only
- 総称コマンドの実行時具体化
- 国際化フレームワーク
- フィルターのコマンド化
- deprecatedアノテーションの処理
- defaultアノテーションの処理
- moduleにdocコメント
- 配列型の項目名
- HTTPメソッドトンネリング
- CatyFITのjudge欄
- ハッシュ記法
- timeメタコマンド
- CatyFITにignore-spaceオプション
予定:
- __integerスキーマ属性
- whenにotherwiseワイルドカード
- 複数プロファイル
- オブジェクトのeach
- ユニオン型のワイルドカード
- importと名前の本籍追跡
- tag-onlyデータ
- コマンドオーバーロード(優先度低し)
- テンプレートの elseif
中途半端または未着手: