Skip navigation.

exploreopera

| Help

Sign up | Help

プログラミング言語PJを作る日記

バグフィックス

for文が正しく機能していなかったバグの修正(スタックがあふれてました)
templateが正しく機能していなかったバグの修正(スタックがあふれてました)

pjdfの変更

色々なデータを扱うようにするため、変更しました。

設定ファイルは次の様になります。
sys
    .documentRoot = %"C:\workSpace\PJ\PJ\"%%
    .importDir = "imports/sample/category,imports/sample/class,imports/sample/templates,imports/test"
    .encoding = "UTF-8"
    .uploadDir = "uploadDir"
    .debugMode = true
    .dispError = true
    .dispTime = false

sys::db::pjtest
    .type      = "postgres"
    .host      = "localhost"
    .port      = 5432
    .database  = "pj_test"
    .user      = "nagashima"
    .password  = "nagashima"
    .maxconn   = 10


変更点は見てのとおり、属性値の記述方法です。以前の記述方法では、同名の要素を複数作成することができませんでしたが、コレにより複数作成することが可能になります。

次のような記述が可能です。

conf::data
    .name = "data name1"
    .value = "value1"

conf::data
    .name = "data name2"
    .value = "value2"


このように同名の要素が複数ある場合、最後の要素が新規に作成されます。例ではdataが追加されます。

pjdf::elem.getElems( str name )は、合致した最後の要素を返します。

ループさせる場合は、次の様になります。

pjdf = pjdf::base;

root = pjdf.getElem( @path "conf" );

elems = root.getElems();

for( i = 0; elems[i], != void; i++ ){
    echo [for].getName();
    echo [for].getValueStr( "name" ) _ "<br />";
    echo [for].getValueStr( "value" ) _ "<br />";
}

importの変更

各ファイル毎にimportをするのはちょっと面倒なのと、クラスファイルをパースしない様にする事が難しいためimportは設定ファイルで指定するように変更しました。

sys.importDir = "imports/sample/category,imports/sample/class,imports/sample/templates,imports/test"

このような設定が必要になります。

修正

category file のパスの変更

dir1/dir2/fileName.category.pj の場合

aa = new@dir1::dir2 className;


になります。categoryのファイル名はクラスファイルとは異なり任意になります。クラス名にしておくとわかりやすいです。


getValueClone が getMulti()

わかりにくいので変更しました。

stmtにgetMulti()を追加

templateだけではなく、orのstmtにもgetMulti()を追加しました。

sequence対応

dbのkeyとしてSequenceが指定できるようになりました。pj.confのorの設定のkeySequenceを指定してください。


sys::or::sample.keySequence = "sample_id_seq"


keySequenceが設定されている場合、insertでkeyの値を設定するとエラーになります。nullを設定してください。

destroySession

機能していなかったのを修正

date型

http://neta.ywcafe.net/000851.html

日付のフォーマットってスラッシュ区切りじゃないのね。

エラーについての考え方

PJには例外は必要ないという考えで以前例外を廃止しましたが、ちょっと使いにくいのでerrorとしてを再度復活させます。ただし、デストラクタがあるのでfinallyに相当するものはありません。記述は以前と同じで、関数単位になります。またエラー処理なので、種類もありません。

メソッドでエラーが発生した場合、処理がエラーブロックに移ります。この時点ではデストラクタは処理されません。エラーブロックの処理を行ってからデストラクタが処理されます。エラーブロックでもreturnは必要になります。

エラーブロックが無いメソッドでエラーが発生した場合、デストラクタの処理を行い呼び出し側にエラーを投げます。

errorステートメントでエラーを投げることが出来ます。エラーの内容は文字だけです。


トップレベルでエラーが発生した場合は処理が中止になり、エラーが表示されます。


PJでは、0で割った場合や、ファイル取得でファイルが無い場合等、戻り値がある場合で問題がある場合はvoidを返します。そのためifでvoidが戻ったかどうかを確認することで関数単位のエラー処理は可能ですし、voidは変数に入れるとエラーが発生するためチェックしない場合でもエラーになります。

errorはそれをまとめて処理する場合に使用します。

senをgosenに変更

全文検索用のライブラリをsenからgosenに変更しました。

合わせてluceneもちょっと変更してます。


変更した結果。


なんだかちょっと遅くなってる気がする。(TT

オープンソース

オープンソース系のライセンスはソースさえ公開してれば何しても良いと思ってたんですが、どうやら違うみたい。

現在考慮しないといけないライセンスは

Eclipse Public License

jericho html parser 変更無し

GNU Lesser General Public License

jericho html parser 変更無し

senをちょっと改造してる

Apache License 2.0

commons系 変更無し

lucene 色々変更してる



これらを考慮しないといけないので、配布の方法を変えて

変更してないものは、個別に用意してもらう
変更してるものはライセンスにそって別に配布

という事にします。

なので、インストールがちょっと面倒になります。

antにチャレンジ

今まではwarファイルを作るのはeclipseのexportを使っていましたが、全文検索用の辞書を含まないwarを作るべくantでwarを作ることにしました。

最新からは

  • PJ(辞書込み)とPJ-nodic(辞書無し)の2種類になります。全文検索を使用しない、また辞書は自分で用意するという場合PJ-nodicを使うとファイルが小さくで良いです。
  • 設定ファイルが含まれなくなりpj.conf.sampleと言うファイルが含まれます。.sampleを取って使ってください。


と変更になります。

バグフィックス

breakとcontinueが上手く動いていなかったのを修正
May 2008
MTWTFSS
April 2008June 2008
1234
567891011
12131415161718
19202122232425
262728293031