目次
- 概要
- サンプル
- 内部の変更
- 未解決部分
- コメント
概要
Webサーバのログ解析ができるレベルを目標に作成しました。
たかがログ解析・されどログ解析で、結構な労力を必要としました(^^;)。
後述するように、
- 変数の初期化とrescue句の間の不整合
- パラメータ渡しメソッドの設計(V_code_ix, C++ で言えば operator())
の問題。
の2点に問題を抱えてのリリースとなってしまいました。これは ver0.10 で
解決する予定です。
以下、個別の変更点です:
- 文法・仕様の変更
- rescue句: 単文にも rescue句が書けるようになりました。
- organized panic は止め。
- 正規表現リテラルを複数の行にわたって記述できないようにしました。
- パッケージ
- import文の導入。
- Mathパッケージ導入。
Math 関連の free関数 (sin(x)など) の導入
real型/real8型のメンバー関数(real.sin など)に加え、free関数
も導入しました。
- Timeパッケージ導入。
- Netパッケージ導入。
- データ型
- 全般: size, put(file) メンバを追加。
- stdins(Perl の <> に相当)を導入。型名は files
- rex型(正規表現)にて、マッチ文字列を取り出せるようになりました。
matchednum, matched メンバの追加。
- これに伴い、substr型を導入。
- file型にて、書き込みモードで open できるようになりました。
- file型、size, put(...) 各メンバ追加。
- cstr型を廃止。定数文字列(cstr型)とstr型の間の不整合が解決。
- str型runtime を type/str_runtime.h に分離。
lib/atom.cpp への依存の関係で。
- list型、size, iter, num, shift, reverse, sort, put(file) 各メンバの追加。
- map型導入。map, map[T] が記述可能。
- char型、size, put(file) メンバ追加。
- int型、size, iter, put(file) メンバ追加。
- int.iter型、size メンバ追加。
- bool型、size, put(file) メンバ追加。
- 起動オプション
-de, -h, -help, --help
- Alan ソースがない場合、stdin から読むことができるようになる。
サンプル
Alan で書いた Webサーバのログ解析スクリプトは
こちらです。
内部の変更
- VM関連
- 0割算時の例外を正しく捕捉するようにした。
- ehcs[] スタックをダンプするオプション(-de)の追加。
- 新命令コード INITR 追加。
変数初期化時の rescue 句への対応には必要。
- 命令コード RAISE0 を廃止。organized panic 止めに伴い。
- class名 Object → Obj。
Object_XXX が長かったので短くした。
- O_CONST → O_LIT_N
const という響きが非常に紛らわしく、関数引数の
readonly 属性と間違えやすいので、別の名前にした
LIT_N = literal-named(名前つき定数)。
- 作業変数の allocation アルゴリズムの改善。
従来のべた置きから、単文での破棄・単文中でも可能であれば
再利用するようにした。
- 記号表(semant/sym_tbl*)のデータ構造変更。Package/import に対応できるように。
- jj: ins() メソッドのバグを修正。
未解決部分
v0.09 は以下の問題を抱えてのリリースです。
サンプル はこれらの地雷を回避しているので
問題なく動作するはずです:
- 変数の初期化とrescue句の間の不整合。
破棄子(term メンバ関数)が必要な変数(fileなど)の初期化時に
rescue句を設けると、実行時エラーとなります。
- パラメータ渡しメソッドの設計(V_code_ix, C++ で言えば operator())
の問題。実行時の例外発生時に問題が発生。
コメント
-
ログ解析スクリプトの正規表現の冗長さ (\d と書けず
[0-9] とする、など)を見るとまだまだだ、と思わざるを得ません。
が、Perl が \d といった記述をサポートしたのは 1.1
からなのですから。勝負はこれからです。
- DNS へのアクセスパッケージは書きましたが、
「パラメータ渡しメソッドの設計(V_code_ix, C++ で言えば operator())
の問題」発覚のために
今回 wwwstat.al には含めることができませんでした。残念!
- それ以外の部分、マッチした部分文字列の切り出しや
連想配列への格納などは、型あり言語と言えども、それなりの
簡単さで記述できるようになったと自画自賛しています(^^;)。
バグレポート・ご質問・ご意見などありましたら、
こちらからよろしくお願いします。
Top / Release Note