aya5 - versionup |
文 version 5 履歴 |
construction 240 changed src : manifest.h, sysfunc.h, sysfunc.cpp, localvariable.cpp, globalvariable.cpp, makefile.posix ■ FATTRIB ファイル/ディレクトリの属性を取得する。 ■ 若干の高速化(協力 : C.Ponapalt氏) ■ POSIX版のmakefile最新化(by Phonohawk氏) construction 238 changed src : manifest.h, misc.cpp ■ シングルクォート文字列が正しい値として認識されない場合がある問題を修正 今度こそfixと思いたい。 construction 237 changed src : manifest.h, misc.cpp ■ シングルクォート文字列内に存在する//、/**/をコメントと誤認識する問題を修正 construction 236 changed src : manifest.h, parser1.cpp, function.cpp ■ 一部の文法エラーをパーサが見逃す不具合を修正 ■ DLLが壊れていた? らしいのでリビルド construction 235 changed src : manifest.h, parser0.h, parser0.cpp ■ シングルクォート文字列が正しい値として認識されない場合がある問題を修正 construction 234 changed src : aya5.cpp, basis.cpp, duplevinfo.cpp, function.cpp, manifest.h, messages.h, misc.h, misc.cpp, logexencode.cpp, parser0.cpp, selecter.h, selecter.cpp, sysfunc.h, sysfunc.cpp appended src : mt19937ar.h, mt19937ar.cpp ■ array 出力候補をすべて結合した汎用配列を関数の返値とする。 ■ parallel制御 値の前にparallelと書くと、値が汎用配列だった場合その要素のそれぞれが出力候補値になる。 foo0 { ("A","B","C") "地球" } foo1 { parallel ("A","B","C") "地球" } foo0の出力は、("A", "B", "C") もしくは "地球"。 foo1の出力は、"A"、"B"、"A"、"地球" のいずれか。 汎用配列以外にparallelを使っても意味がない。書かないのと同じ。たとえば下の2つの記述は等価。 parallel STRLEN("earth") STRLEN("earth") arrayとparallelを利用することにより、関数の出力候補と汎用配列を相互に変換することができる。 さまざまな応用が考えられる。たとえば以下の非常に簡潔な関数cyclicは、汎用配列から記述順に要素値を取り出す。 cyclic : sequential { parallel _argv } ■ SPLIT 文字列を分割して汎用配列として返す。RE_SPLITで代用可能だが、正規表現を使わない分だけ高速。 第3引数に最大分割数を指定できる。 _array = SPLIT("A//B//C//D//E"," //", 3) _arrayは ("A", "B", "C//D//E") となる。 分割数0ですべて分割する(省略でも同じ)。1とすると分割しないのでただの文字列代入となる。 ■ ASIN / ACOS / ATAN arc sin、arc cos、arc tan。引数はradian。 ■ 'シングルクォート文字列' Perlのそれと同じ。シングルクォーテーションで囲まれた文字列は、全体が単純に文字列として解釈される。展開はされない。 name = "バレリー" _name0 = "こんにちは、%(name)さん。" _name1 = 'こんにちは、%(name)さん。' _name0は「こんにちは、バレリーさん。」。 _name1では%の展開は実行されないため、そのまま「こんにちは、%(name)さん。"」という文字列となる。 ■ 乱数発生器をMersenne Twisterへ置き換え。 RAND、および関数出力の択一等でバラケ具合が改善されている(はずである)。 Mersenne Twister (http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html) ■ Linux/gcc-3.3でコンパイルした際の不具合を修正(2) 修正漏れがありました。 ▲ 若干修正 construction 232 changed src : basis.h, basis.cpp, manifest.h, selecter.h, selecter.cpp, sysfunc.h, sysfunc.cpp ■ void 出力のみ抑止。 以下の関数increment_iはfooとi++を実行するだけで、結果は何も返しません。 実行中の文の設定を返します。 GETSETTING(0) バージョン文字列 GETSETTING(1) 文字コード(を示す数値) GETSETTING(2) 文のルートパス ■ Linux/gcc-3.3でコンパイルした際の不具合を修正 shy氏からの報告によります。感謝致します。 ▲ OnGhostLoad / OnGhostUnload これらの関数をゴースト辞書で定義できます。以下のタイミングで実行されます。 初期化処理などを行う際に利用してください。 OnGhostLoad ゴースト起動が完了し、OnFirstBoot/OnBootが呼ばれる直前 OnGhostUnload ゴーストの終了トークが完了し、終了処理が始まる直前 ▲そのほか細々としたメンテナンス construction 231 changed src : messages.h, misc.h, misc.cpp, sysfunc.h, sysfunc.cpp, value.h, value.cpp ■ RE_REPLACEが誤った置換を行なうことがある問題を修正 ■ GETDELIM 指定された変数に設定されている簡易配列のデリミタ文字列を取得。 ■配列拡張 序数を範囲で指定できるようになりました。簡易/汎用配列を問わず利用できます。取得、代入とも可能です。 範囲は汎用配列で指定します。たとえば i[a,b] は「iの要素a〜b」を表します。 jは ("さくら","せりこ","奈留","奎子","美耳") 、 kは ("奎子","美耳") となります。 範囲外は無視されます。 n = (1,2,3,4) n[-2,1] *= 5 nは (5,10,3,4) です。 対象が簡易配列の場合でも書式は同じです。 name = "さくら,せりこ,奈留,まゆら,毒子,美耳" i = name[1,3] name[3,4] = "奎子" j = name iは "せりこ,奈留,まゆら" 、jは "さくら,せりこ,奈留,奎子,美耳" です。 デリミタ指定も可能です。範囲指定のすぐ後ろに続けて指定します。 animal = "くま!うさぎ!ねこ!いぬ!わに" i = animal[0,2,"!"] animal[2,4,"!"] = "ぶた" j = animal iは "くま!うさぎ!ねこ" 、jは "くま!うさぎ!ぶた" です。 construction 228 changed src : sysfunc.cpp ■ ARRAYSIZEに単一の数値を与えると0を返す問題を修正 construction 227 changed src : function.cpp ■ forループからbreak/returnで脱出する際、仕様外の挙動を示す問題を修正 construction 226 changed src : sysfunc.h, sysfunc.cpp ブンo(´・ω・`)oブン ■ ASEARCHEX すべて見つけるASEARCH。返値は汎用配列。見つからなかった場合は空。 construction 225 changed src : sysfunc.h, sysfunc.cpp え〜あい。さん対策 ■ RE_GREPが正しい結果を返さない場合がある問題を修正 ■ ASEARCH 汎用配列から値を検索。第一引数にキー値を、第二引数以降に汎用配列を指定(簡易配列は不可)。 序数が返る。見つからなかった場合は-1。 例1 例2 nyaoh = ASEARCH("猫", "キリン", "猿", "ぞう", "猫", "兎") nyaohには 3 が格納されます。 アルゴリズムは先頭から逐次比較する単純な線形探索ですので、処理に要する時間は配列サイズに比例して増大します。 ▲ 解析するリクエスト行の上限を設定できる機能を追加(by C.Ponapalt氏) REQUEST_LINES_LIMITに最大行数を指定します。デフォルトでは0になっており、この場合はすべての行を 解析します。 たとえば10とすると10行しか解析しなくなります(ただしイベントIDは重要なので常に取得します)。 そのぶん動作が高速になりますが、情報の取りこぼしも発生することになります。 あなたのゴーストで必要としている情報を落とさない範囲で設定するようにしてください。 construction 224 ■ Unix環境でFCOPYが正常に動作しない問題等の修正(by Phonohawk氏) ■ 誤った文法の正規表現を処理させると落ちる問題を修正 …できてるといいのですが ▲ LIB.PROTOCOLとLIB.STATUSCODEが正しい値を返さない問題を修正 ▲ SAORI GET Versionを実行していなかった問題を修正 なんということでしょう construction 222 ■ 一部のシステム関数でファイルの絶対パス指定が不可能だった問題を修正 対象はFOPEN、FCLOSE、FREAD、FWRITE、FWRITE2、LOADLIB、UNLOADLIB、REQUESTLIB。 ■ GETTICKCOUNT拡張 GETTICKCOUNT(1)でいままで捨てていた最上位ビットを返す 文の整数はsigned int(32bit)、一方GETTICKCOUNTの返値はunsigned longなので、正数を格納しようとすると 1bit溢れます。GETTICKCOUNT(1)はこの「溢れて捨てられた」ビットを返します。 わかりにくいですね。あまり気にしなくていいです。 ▲ systemuphour、systemupminute、systemupsecondが扱える時間の上限を倍に拡張 construction 221 ■ POSIX版(by Phonohawk氏)の修正箇所取り込み ■ GETSTRBYTESが文字列を返す問題を修正 ■ 空の汎用配列を格納した変数をunload時に消去せず、次回起動時に復元するように変更 ■ 変数/関数名の中に演算子名が含まれていた場合これをエラーとする ▲ reference文字列中のバイト値1をカンマへ置換する(ver.4互換性保持) ・ 一部の辞書ファイルで廃止されたシステム変数を使用していたのでこれを排除 aya_aitalk.dicの16行目、およびaya_communicate.dicの13行目に random[ ] という変数がありますが、このシステム変数は version 5では廃止されています。version 5では代わりにシステム関数 RAND( ) を使用します。機能は同じです。 construction 220 ■ 高速化 辞書読み込み時のパース、最長一致展開、EVAL等の実行が高速化されています。 沢渡みかげ氏に速度面のボトルネック箇所を調べていただき、これを改善するバッチも提供して頂きました。 感謝いたします。 ■ システム関数追加 GETSTRBYTES ■ STRFORMが整数を正しく表示できない問題を修正 ■ 汎用配列の要素にコロンを含む文字列が存在すると復元時に化ける問題を修正 ■ 要素数1の汎用配列が復元時に配列でない単一の値へ変化してしまう問題を修正 ▲ リクエストで渡された文字列に": "が含まれていると値の取り出しに失敗する問題を修正 ▲ システム起動時間を取得するシステム変数が使えていなかった問題を修正 construction 219 ■ Phonohawk氏の偽林檎 文5プラグインソースを若干改変してVC++6でコンパイル。 氏によって不具合修正と性能改善がなされており、全体に品質が向上しています。感謝いたします。 今後の修正やバージョンアップにおいてはWindowsおよびVC++固有な記述は極力しないように配慮。 ■ 辞書読み込み/変数復元速度の向上 (by Phonohawk氏) ■ SETDELIMの第二引数が即値でないとwarningとなり動作しない問題を修正 ■ 最長一致展開で候補が無かった際、"%"が削れてしまう問題を修正 ■ 最長一致展開において[ ]演算子の複数付与を可能とした ■▲ 誤記 ×Shift-JIS ○Shift_JIS ■ コードUTF-8でファイル書き込みを行う際、BOMを書かないように変更 ■ 変数に改行コードを含む文字列を格納すると次回起動時に復元に失敗する問題を修正 ▲ 400 Bad Requestを返送する際終端の改行が不足していたので修正 ▲ さおりリクエストにおいてResultが空だった場合の動作がver.4と異なっていた問題を修正 ▲ ascii補完 いくつか方法がありますが一番オーソドックスな手で construction 216 初版 開発開始 |