K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1254] Re:状況(日記?)
投稿者:(ぱ)こと管理人
2009/05/09 02:35:53

世間では連休で私も会社は休みだったはずですが何かとどたばたしてまして お返事が遅れましてすみません。 > ちなみに、test.dkmで最高6800ぐらいnewします。 これで速度低下しないかと心配して、crowbarやDiksamではMEMモジュールを作って MEM_storage_malloc()を使ったのですが、C++でクラスを使おうとすると単純に 置き換えはできませんね(newのオーバーロードで置き換えはできますが、私には、 演算子のオーバーロード自体相当に腰が引けます。boostのように、汎用的で 一般的に知られたライブラリを使うのなら、だいぶ軽減されると思いますけど)。 ところで、DiksamをC++で書き直し、fix_tree.cppでたくさんnewが起きるということは、 DiksamでのExpressionやStatementの構造体をクラスにしておられるのだと思いますが、 これはやっぱり、fix_tree.cppではfix()、generate.cppではgenerate()という メンバ関数を作って、クラスごとにポリモルフィズムで呼び出しているのでしょうか? オブジェクト指向の教科書にはそう書いてありますが、実際にやってみると クラスごとに細かい制御ができなかったりモデルにロジックが侵食したりして あまりうまくいかない、と経験上思っておりますので。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1253] 状況(日記?)
投稿者:
2009/05/07 19:00:06

 fix_treeのところで多少手間取っていますが一応終了。トータルの結合 試験で多分たくさんのがバグが・・・  少し長いプログラムを読み込ませるだけで、細かいサイズのメモリーを 7千ぐらい、newとdeleteしているのを見るにつけ、これは結構システムに 負担ではないと思いつつ、区切りが出来たらboostの高速メモリー管理poolに 変えようとかと考えています。一括削除が可能だし。また、メモリー上のトラ ブルが起こったら追うだけでも大変だと思う、今のところそのトラブルには 遭遇していないのが救いです。バグは当たり前のようにありますが・・・  ちなみに、test.dkmで最高6800ぐらいnewします。  特に新しいところがなく日記的なので、不要だったら削除してください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1252] Re:関数実装について
投稿者:
2009/05/04 22:30:19

>Diksam ver.0.4以降だと、ファイルをrequireしておけば、 >呼ぶ際は普通の関数呼び出しですけれど、 そうなんですか、同じものを再発明しそうですね。 >Emacs Lispはダイナミックロードですが、私としては初回呼び出しのタイムラグは >気にならないと思っているので、まあ問題ないと思っているのですけれども。 私の場合、スレッドが必要だと思うほどクリティカルな部分を意識しているので やはり、利用者がコンパイラ起動を意識したほうがいいかなと思っています。 >ということはDVMはひとつでグローバル変数とヒープ領域は共有ですね。 >結構ロックが大変そうな気はします。  この辺はまだ希望的観測の部分が多いので、実際に作りこんでみないと なんともいえない感じです。  今現在はfix_tree部分を作っていますが、途中でnew、deleteが頻発するので 思わず。new、deleteに被せて、newのアドレスとサイズをコンテナMAPに総て入れ、 deleteで検証する監視プログラムやサポ-トプログラムばかり作ってて脱線気味 です。目的プログラム70%残り30%は監視やデバックプログラムです・・・ 文字列リテラルも、wchar_tを使ってもポータビリティーが上がらないのでstring に変えてしまったし、diksam言語部分だけでも一通り動くようになるのはまだまだ 先です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1251] Re:関数実装について
投稿者:(ぱ)こと管理人
2009/05/04 19:33:38

> 言語仕様から見ると、Aプログラムの内部からBファイル内にある関数B1を普通に >コールすることです。当初は、ファイル名.関数名();で起動しようか、関数プロ >タイプ宣言で"ファイル名":関数名();で内部的には普通の関数記述と思いましたが。 Diksam ver.0.4以降だと、ファイルをrequireしておけば、 呼ぶ際は普通の関数呼び出しですけれど、 >いつ重いコンパイラが走るかコントロール出来ないので、 .dkhにシグニチャ宣言だけ書いて.dkmに実装を書くと、関数呼び出し時にコンパイラが 動きますから、状況によって問題になるかもしれません(実装まで.dkhに書いてしまえば いいわけですけど)。 Emacs Lispはダイナミックロードですが、私としては初回呼び出しのタイムラグは 気にならないと思っているので、まあ問題ないと思っているのですけれども。 >スレッド起動の仕様 >普通に関数名(P1,,,Pn);を書くと戻ってくるまでコール元は待ちます。 >start(関数名,起動P,,,Pn);と書くとスレッド起動となります。 ということはDVMはひとつでグローバル変数とヒープ領域は共有ですね。 結構ロックが大変そうな気はします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1250] 関数実装について
投稿者:
2009/05/02 18:30:12

>これは、CからDiksamの関数を関数名を指定して呼び出すということですよね。 内部的に見るとそうです。  言語仕様から見ると、Aプログラムの内部からBファイル内にある関数B1を普通に コールすることです。当初は、ファイル名.関数名();で起動しようか、関数プロ タイプ宣言で"ファイル名":関数名();で内部的には普通の関数記述と思いましたが。 いつ重いコンパイラが走るかコントロール出来ないので、プログラムファイル読込 み関数と破棄関数(中間コードリソースの破棄)を作ることにしました。  この仕様でVMの変更が発生します。それは、1ファイル内の関数コールはコンパ イラで関数アドレスを生成しますが。ファイル外の場合、関数アドレスではなく関 数名を持って、実行時リンクして関数コールする仕様が追加になります。 (最外枠ブロックの実行構文はなくなり、ファイル名起動ではmain()が実行) 中間コードの構造は。 親 ファイル1  ファイル親ー>子    ファイルn ↓   |----------¬    |----------¬ 子   関数1 ・・・・・・ 関数n  関数1 ・・・・・・ 関数n  の様に、階層構造の親子関係で関数置きに分離した中間コードになる予定です。 この、ファイルnの部分が必要時にコンパイルされ中間コードに追加される感じです。  この構造はちょうど関数単位のマルチスレッドに適応できます。 スレッド起動の仕様 普通に関数名(P1,,,Pn);を書くと戻ってくるまでコール元は待ちます。 start(関数名,起動P,,,Pn);と書くとスレッド起動となります。 例   thread_ID1 = start(fnc1,,,);   thread_ID2 = start(fnc1,,,);   thread_ID3 = start(fnc1,,,); と書くとメインスレッドと3つのfnc1スレッドが同時に動きます。 関数については、この様な仕様を組込みたいと考えています。 また、グローバルシステム変数とスレッド起動された関数は一般的なCのグローバ ル変数やスレッドとは、かなり性格が違ったものになります。でも、この点は実物 のめどが出来そうなときにでも、評価していただければ嬉しいと思っています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1249] Re:その後の状況
投稿者:(ぱ)こと管理人
2009/05/02 03:39:28

訂正します。 >と思って見ていたらbaseが初期化されていない >ことに気付きました。またバグです。すみません (_o_) いくらなんでもこれじゃ動かないよな、と思ってよく考えると baseはローカル変数の参照に使うので関数内でしか使用されず、 関数を読んだ際にセットされるので問題ありませんでした。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1248] Re:その後の状況
投稿者:(ぱ)こと管理人
2009/05/02 03:14:14

>追加したい機能 >・関数指定起動、スクリプトファイル名と関数名を指定して起動 > (スクリプトファイル間の連携したプログラミングのために) これは、CからDiksamの関数を関数名を指定して呼び出すということですよね。 特定の関数を実行するには、dvm/execute.cのexecute()関数を、 http://kmaebashi.com/programmer/devlang/diksam_src_0_2/S/18.html#544 ・事前にdvmのcurrent_executableとcurrent_functionとpcを設定して  (プログラムカウンタは関数ごとなのでpcは0に設定)、 ・execute()関数を、適切な引数で呼び出す ことで可能なはずです。 ただ、実際にはDiksamからネイティブ関数を呼び出して そのネイティブ関数からさらにDiksamの関数を呼び出す、というケースも あるので、スタックポインタを設定の上、execute()関数のローカル変数 baseも引数で渡してやらないと… と思って見ていたらbaseが初期化されていない ことに気付きました。またバグです。すみません (_o_) gccの-Wallでは当てにならないですし、山さんがされたようにVisual Studioでも コンパイルしたいのですがなかなか時間が取れない状態です。明日からは連休ですが、 連休は連休でまた色々と… 編集さんはゲラを発送されたとのことですし(ん?) >その結果、diksam0.2.0の系譜をもつ別の言語になってしまいます。 >なので、言語名は別のものになります。そこでお聞きしたいので >す。diksam0.2.0の系譜をもつ別のものを作ることになりましたが、 >ここでお話しすることは可能でしょうか? まったく問題ありません。 > ぶちゃけて言います。気分を害したりしませんか?>< それはないです(^^) Diksamベースで新しい言語ができるのであれば、 どこをどう直されるのか興味深いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1247] その後の状況
投稿者:
2009/05/01 07:40:30

 各種機能を追加しようとdiksam0.2.0を解析修正をトライしていましたが、メモリ破壊トラブル に数回遭遇しメモリーダンプ解析を行う状態になってしまいました。さすがにこれは私の手に負え る状態ではないと感じ、diksam0.2.0を元にOOで新たに言語を作るほうが早いと思い、現在作成し ています。今は構文解析ツリーの生成まで終了しています。 ちなみに、yaccはkmyaccを使用、lex部分は自作です。 追加したい機能 ・グローバルシステム変数への透過的アクセス ・関数指定起動、スクリプトファイル名と関数名を指定して起動  (スクリプトファイル間の連携したプログラミングのために) ・関数単位でのスレッドセーフなマルチスレッド起動 ・関数単位でのスレッドセーフな通信 ・#define構文の追加(別名定義のみ)  等の、APとして必要な要件を組み込む必要がありました。その結果、diksam0.2.0の系譜をもつ 別の言語になってしまいます。なので、言語名は別のものになります。そこでお聞きしたいので す。diksam0.2.0の系譜をもつ別のものを作ることになりましたが、ここでお話しすることは可能 でしょうか?  ぶちゃけて言います。気分を害したりしませんか?><
[この投稿を含むスレッドを表示] [この投稿を削除]
[1246] Re:日本語対応diksam
投稿者:(ぱ)こと管理人
2009/04/28 00:49:20

>ちなみにlex.zz.cを見ればわかりますが >トークンを漢字に変えると、なでしこのようにすぐになってしまいます。 それだけだと、ぴゅう太の日本語BASICとか http://labs.yaneu.com/20090401/ 年刊Ah!SKI第1号のアレみたいなのになりそうです。 トシがばれますねえ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1245] Re:日本語対応diksam
投稿者:
2009/04/27 19:56:19

>ただ、書くのはともかく、読むほうは「あそこまで日本語化」したほうが >よいというニーズはあるかと思います。 なでしこのHP見に行きましたが、結構すごいことになっていますね。 私のイメージが古かった。ちなみにlex.zz.cを見ればわかりますが トークンを漢字に変えると、なでしこのようにすぐになってしまいます。 それが良いか悪いかは別の話ですが。  言語の意味合いをもう少し膨らませて、len.zzで「if」と「もし」を同じ 意味にして、プログラムを日本語変換するソフトを作ると・・・ 日本語英語両用自由自在のなでしこをこ・・・ げほんげほん  今は目的を先に
[この投稿を含むスレッドを表示] [この投稿を削除]
[1244] Re:日本語対応diksam
投稿者:(ぱ)こと管理人
2009/04/26 23:24:49

>なでしこは知っていますが、あそこまで日本語化するのは反対の立場です。 確かに。わかります (^^; ただ、書くのはともかく、読むほうは「あそこまで日本語化」したほうが よいというニーズはあるかと思います。 >>よろしければPXU00211@nifty.ne.jpまで送付ください。 >送りました。内容はメールにて書いています。 受け取りました。ありがとうございます。 さっそく購入以来数度しか使っていないVisual Studio2005でビルドしてみました。 includeパスが絶対指定されていましたが、相対に直したらビルドできました。 >>(例外処理機構がないため)exit()以外に選択肢がなく、実用上問題が出るかも >>しれません。 >この辺が今の課題の一つです、 ver.0.4系だと例外処理機構があるのですが、ビルドが難航しているわけですよね。 >手を着けていないものに、「初期値が設定されていない変数が使われています」が >数十出ています。 これがそんなに出るようではいけないわけですが… こちらでも調べてみたほうがよさそうです。 >コンパイラも何かあるとexitで落ちてしまいます。 ダイナミックリンクである以上確かにこれも問題です。 実用に使い始める前にコンパイルエラーぐらいは取ってくれるだろう、と思うので、 優先度は下げているのですけれども。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1243] Re:diksam0.4.03のトラブル
投稿者:
2009/04/25 22:27:43

ご返答ありがとうございます。  う~~ん、ある程度予測をして、場所を下に移すも等いろいろやってはいたのですが・・・  うまく動かずにここに書き込みました。しかし、いまだにdiksam4.0.3はトラブル で落ちてしまいます。VC++への移植にミスがあると思うのですが。エラーが数百近く 出たのを端からつぶしていったのに問題があるのかもしれません、いまだにワーニン グエラーはたくさん残っています。手を着けていないものに、「初期値が設定されて いない変数が使われています」が数十出ています。対処しないといけないのですがい まだにそこまでは。  やはり、4.0は一時保留にして、いまは2.0で問題なく動いています。2.0ソースの 拡張子を.cから.cppに総て変えて、ワーニングも総てつぶして、diksam内部からclass を扱えるようにしました。私が使用しているデバッククラスも使えるようになったの で、多少楽になりました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1242] Re:diksam0.4.03のトラブル
投稿者:(ぱ)こと管理人
2009/04/25 19:56:21

>1.argcの中身は初期化されていません。 これは明らかにおかしいですね。ご指摘ありがとうございます。 argcによる判定は、parse_parameter()実行後に行うべきことです。 今までは偶然動いてしまっていたようです…… >2.GetCommandLine();は何もやっていない・・・ GetCommandLine()はコマンドライン引数を取得するWindowsの関数です。 http://msdn.microsoft.com/ja-jp/library/cc429108.aspx これの戻り値はワイド文字列なので、 >3.DVM_wcstombs(command_line_wc);のcommand_line_wcはアドレスなのですが・・・ DVM_wcstombs()により、マルチバイト文字列に変換し、parse_parameter()で 引数列に分解しています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1241] diksam0.4.03のトラブル
投稿者:
2009/04/24 22:22:17

再度、diksam0.4.03のコンパイルを試していますが。 どう見てもWinmMainがおかしいように思います。 WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , PSTR lpCmdLine , int nCmdShow ) { DKC_Compiler *compiler; FILE *fp; DVM_ExecutableList *list; DVM_VirtualMachine *dvm; int argc; char **argv; DVM_Char *command_line_wc; char *command_line_mb; if (argc < 2) { fprintf(stderr, "usage:%s filename arg1, arg2, ...", argv[0]); exit(1); } command_line_wc = GetCommandLine(); command_line_mb = DVM_wcstombs(command_line_wc); argv = parse_parameter(command_line_mb, &argc); MEM_free(command_line_mb); 1.argcの中身は初期化されていません。 2.GetCommandLine();は何もやっていない・・・ 3.DVM_wcstombs(command_line_wc);のcommand_line_wcはアドレスなのですが・・・ やはり、私には手に余りそうです。何をしたいのかわからないので対処が出来そうに ありません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1240] Re:日本語対応diksam
投稿者:
2009/04/24 19:41:03

追記、ソースはタブ4スペースできれいに見えます。タブ8だとがたがたに・・・ 上に出したソースもがたがただった。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1239] Re:日本語対応diksam
投稿者:
2009/04/24 19:35:33

>ご存知かと思いますが、日本語プログラミング言語としては「なでしこ」が有名です。 >http://nadesi.com/ なでしこは知っていますが、あそこまで日本語化するのは反対の立場です。わざと やっているのではないかと思うぐらい読みづらいです。日本語の中にも和製英語が かなりたくさん入っています。それが当たり前に使われている現状を考えてみるに、- なでしこは、古文を読むような感じで現代的では有りません。日本語プログラミン グにおいても、和英混合で問題がないと私は思っています。 >よろしければPXU00211@nifty.ne.jpまで送付ください。 送りました。内容はメールにて書いています。 >http://kmaebashi.com/programmer/devlang/diksam_src_0_1_01/S/20.html ありがとうございます。意外と簡単に組み込めそうです。 >(例外処理機構がないため)exit()以外に選択肢がなく、実用上問題が出るかも >しれません。 この辺が今の課題の一つです、コンパイラも何かあるとexitで落ちてしまいます。 堅牢なシステムを作る予定なのでこの改善が必要です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1238] Re:日本語対応diksam
投稿者:(ぱ)こと管理人
2009/04/24 03:22:22

>うわぁ、これはなかなか破壊力がありますね。ずっと半角英数でプログラムを書いてきた >ロートルな私などからするとかなり違和感がありますが、メールとかで「Windows」 >みたいに書くおじさんは実際いましたから、需要はあるかもしれません。 >ていうかプロポーショナルフォントのおかげで全角と半角の区別がつきにくくなったのは >よいことなのか悪いことなのか… 投稿後にちょっと考えたのですが、 私の世代の感覚からすると、全角英数字と半角英数字の区別がつかないのは コンピュータリテラシの欠けたおっさんであり、そもそも全角英数字なんか いらんだろ、ぐらいに思っているのですが、 そんなふうに思うこと自体、端境期のおっさんの戯言かもしれませんねえ。 http://onisci.com/802.html
[この投稿を含むスレッドを表示] [この投稿を削除]
[1237] Re:日本語対応diksam
投稿者:(ぱ)こと管理人
2009/04/24 03:12:38

> 下記のような半角全角入り混じったようなプログラムも意味的に言語仕様と有って >いれば動くようになりました。 うわぁ、これはなかなか破壊力がありますね。ずっと半角英数でプログラムを書いてきた ロートルな私などからするとかなり違和感がありますが、メールとかで「Windows」 みたいに書くおじさんは実際いましたから、需要はあるかもしれません。 ていうかプロポーショナルフォントのおかげで全角と半角の区別がつきにくくなったのは よいことなのか悪いことなのか… そういえば、失敗プロジェクトとして名高い「Σプロジェクト」はUNIXベースのOSだった のですが、全角で「ls」とか書いても通ったという話を聞いたことがあります。 裏は取っていませんが。 なお、せっかくの(数少ない)Diskamユーザをなくしたくはないですし有名なので ご存知かと思いますが、日本語プログラミング言語としては「なでしこ」が有名です。 http://nadesi.com/ >ソース必要でしたらVCのソリューションごと送りましょうか? 私はロートルプログラマなので本体に取り込むことはないと思いますが、 一般公開してよいものでしたら、興味を持つ方がいるかもしれません。 よろしければPXU00211@nifty.ne.jpまで送付ください。 > 次は関数の組み込みおよびVMのスレッドセーフ化かな。関数の組み込みの仕方を >習得したら、本格的にdiksamを組み込んだアプリケーションの作成に入れます。 ネイティブ関数の自作についてであれば、dvm/native.cが参考になるかと思います。 http://kmaebashi.com/programmer/devlang/diksam_src_0_1_01/S/20.html ただ、ver.0.1ベースだと、引数に変な値が渡されたりしたときに (例外処理機構がないため)exit()以外に選択肢がなく、実用上問題が出るかも しれません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1236] 日本語対応diksam
投稿者:
2009/04/23 19:29:57

 下記のような半角全角入り混じったようなプログラムも意味的に言語仕様と有って いれば動くようになりました。もちろん総て全角で書いても動きます。付属の test.dkmも問題なく動作しました。 ------------------------------------------------- int print (string str); string 今時; int 時間;  今時="朝"; 挨拶(今時);  今時="昼"; 挨拶(今時);  今時="夜"; 挨拶(今時);  今時="わからん"; 挨拶(今時); int 挨拶(string 今 ) { print("パラメータ 今=" + 今 + "\n"); if(今=="朝")  { print("------ おはようございます\n"); }elsif(今=="昼")  { print("------ こんにちは\n"); }elsif(今=="夜")  { print(”------ こんばんは¥n”); }else  { print ( "------ おいすー\n" ) ;  } } ---(注:デバック用に故意に半角全角入り乱れています)------------- lex部分を独自に書くことで問題がないようです。ソース必要でしたらVCのソリュー ションごと送りましょうか? VC++2005で書かれてSJIS専用になっています。またdiksam1.0対応のみです。  次は関数の組み込みおよびVMのスレッドセーフ化かな。関数の組み込みの仕方を 習得したら、本格的にdiksamを組み込んだアプリケーションの作成に入れます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1235] Re:VM間排他制御について
投稿者:
2009/04/22 22:41:02

>これなんですが、「誰にとって」簡単であることを目指しているのでしょうか。  う~~ん、正直言いまして、私の方法論もいいのか悪いのか、わからない結果となりました。やっぱり聞いてみて正解です。したがってアプリがある程度で来た時点で両方を実装して実際に使ってみてから判断がよさそうであると考えました。だいぶ先になるかもしれませんが、実装して使ってみて感想・批評・訂正・修正・駄目押し、ぜひよろしくお願いします。  この他にも、いろいろ、単純に出来るのではないかと構想しています。なにぶん逆の目から見た発想なので実際に実装してみるまでは評価は難しいのかもしれません。複雑なことを意識せずに複雑な操作をプログラムするアプリケーションなので、お暇がありましたらお付き合いください。特に言語の構造に深くかかわる可能性もあります。よろしくお願いいたします。  また、現在字句解析が7割ほどかけました。書き終わった後接続試験です。ifもifも10も10も123400も受け付ける字句解析は結構大変です。漢字を受け付ける以上、10と10は同じ意味なのでやはり数字リテラルとして処理しなければ^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[1234] Re:VM間排他制御について
投稿者:(ぱ)こと管理人
2009/04/22 02:53:50

>私の目的は、最も簡単な方法だけを提供しそれ以上のことは出来ない、 >知らなくていい、とても初期の段階のプログラミングを想定しています。 これなんですが、「誰にとって」簡単であることを目指しているのでしょうか。 VMを作る山さんの立場からすれば、ネイティブスレッドを相手に共有変数の整合性を 保持しようと思ったら、結局、セマフォというかミューッテクスによるロックが 必要であるように思います。 それにより、個々の変数が任意の時点で正しい値を持つことが保証されるなら、 アプリケーションを作成するユーザの立場からすれば、困らないように思います。 あるいはもし、複数の変数の整合性まで保証しなければならないのであれば (たとえば点の座標をx, yのふたつの共有変数で持つとき、点を(10, 10)から (20, 20)に移動させる際、(10, 20)のようなハンパな状態を見せてはいけないとか)、 これはトランザクションになりますから、トランザクションの終了を宣言する 方法が必要になると思うのですが…… >それは「Diksam言語仕様自体が複雑ではないのか?」と、実は利用者に説明するのは、 >関数と計算式とif,thin,elseif,else,while,continue,break。以外は使わないようにと >説明します。 そうそう、この程度の機能でも、組み込み言語が使えれば便利な局面は多々ありますよね。 Diksamやcrowbarは少なからずこういう用途を想定しているので、使っていただけることは 作者としては嬉しいです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1233] Re:VM間排他制御について
投稿者:(ぱ)こと管理人
2009/04/22 02:25:43

>新プログラミング言語「BF-BASIC(ここの上カンマ)n」 >上の(ここの上カンマ)の半角記号があると書き込めませんでした。 えっ? ……これはつまりSQLインジェクションが可能なわけで、重大なセキュリティー ホールです。修正しました。ご指摘ありがとうございました。 以下、経緯です。 この掲示板は、↓の注記とか、 http://kmaebashi.com/programmer/bbs_dev/index.html こことかにも書いたとおり、 http://kmaebashi.com/programmer/bbs_dev/newbbs.html PHPのmagic quotesの機能を使用しています。 そして、私が借りているレンタルサーバでは、magic quotesはずっとonに なっていました。 少なくとも今年の1月の時点でシングルクオートを含む投稿に成功しています。 http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1195&range=1 これがいつの間にかoffにされていたようです。 http://kmaebashi.com/test.php サーバ業者からのお知らせはなかったと思います。以前、PHPを5に上げるという 連絡はありましたがそれもなんだかうやむやになったような(現に今、4で動いてますし)。 # もちろんそれ自体、私を含めてちょっとどうかという話ではありますが。 magic quotesについては、私自身やり方として間違ってるよなあと思いつつ、 郷に入れば郷に従え精神で利用「してしまった」わけですが、当時の私が無知で バカでアホで軽率であったことは認めるとしても、それを前提としたスクリプトは たくさんあるはずで、告知なしにoffにされてはたまったものではないです。 ここはJoe'sウェブホスティングから借りていて、今までさほど大きな問題は なかったと思うのですが、今回の件で過去最大の不信感を持ちました。 ご指摘ありがとうございました。重ねて御礼いたします > 山さん
[この投稿を含むスレッドを表示] [この投稿を削除]
[1232] Re:VM間排他制御について
投稿者:
2009/04/21 10:39:48

SQL障害のため書き込めませんでした、どの部分が問題か調べるために2度のテスト書き込みと削除をしています。お騒がせして申し訳ありません。障害点は下記の部分。 新プログラミング言語「BF-BASIC(ここの上カンマ)n」 上の(ここの上カンマ)の半角記号があると書き込めませんでした。 お騒がせしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1231] Re:VM間排他制御について
投稿者:
2009/04/21 10:34:28

説明不足で申し訳ありません。 >だとすると、配列やオブジェクトのような参照型ではどうなるのでしょう。 配列やオブジェクトのような参照渡しはしないです。と言うかその点をまったく説明していませんでした。非同期の単一のデーターのみを対象にしていす。複数のデータを渡したい場合は、string変数に、","区切りでと考えていました。申し訳ありません。もちろん、パラメータを簡単に構築分解する関数を用意します。非同期渡しなので、送るほうが3回変数を書き換えても、受けは1回か2回しか読めない場合もあります。もし間違いなく渡したい場合は、スレッドセーフなキューシステムを、完全な同期をしたい場合は、それ様のシステムがいりますが。私の目的は、最も簡単な方法だけを提供しそれ以上のことは出来ない、知らなくていい、とても初期の段階のプログラミングを想定しています。 C++熟練者にとっては、最小高速なセマフォーがあればほぼ何でも出来ます。しかしプログラム間で正しく通信するための必要知識は膨大なものが必要です。(それを補間するために、いろいろなライブラリーが作られているが、それがまた複雑さを・・・) まさに「新プログラミング言語「BF-BASIC n」を作ろう」的な構想のアプリケーションです。だから、スレッドセーフな最小限の一方通行情報伝達だけを意識せずに提供できればいいのではないだろうか?との発想で書いています。これで本当に足りるのかは、アプリがある程度出来てこない事には想像がつきません。 決まり事を極力最小にして、複雑さはシステムで吸収できるよう設計したい。そんな目標が有ります。ここで1つ疑問が沸くと思います。それは「Diksam言語仕様自体が複雑ではないのか?」と、実は利用者に説明するのは、関数と計算式とif,thin,elseif,else,while,continue,break。以外は使わないようにと説明します。それ以外は、トラブルがあっても自分で対処回避できる人のみ「Diksam言語仕様」を見てくださいと言う予定です。  当初は独自で言語を作りはじめましたが、「俺が作りたいのは言語じゃない!!!」との思いが強くなり。いろいろなコンパイラーやインタープリタを調査した結果、Diksamに当たりました。特にしっかりとした言語仕様とVM部分がいいです。この上で複雑さをどれだけ吸収出来るものが作れるのか、がんばってみたいです。  まだまだ説明不足な点が多々あると思いますが、懲りずによろしくお願いいたします。 >>もっと簡単にしてグローバルは1VM内でのみ有効であるとして、 >>VM間変数と言う特殊な変数を作って、セマフォー処理をしてもいいと思う。 >山さんの投稿を見て私が最初にイメージしたのはこれだったのですが… はい、これがあれば一般的なプログラミングが可能です。しかし複雑な制御知識が必要になってしまいます。なのであえて上記のようなシステムを考えています。 >「変数の値取得用の関数」 変数の形をした、まさにこれなんです。説明不足申し訳ありません。ただ、関数にしてしまうと何度も読んでしまうミスを防げないので、あえて1回のみとしてシステム側で制限を加えたわけです。なぜこうしたかは、出来るだけ問題点をシステム側で見つけ出せるか?(目標)です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1228] Re:VM間排他制御について
投稿者:(ぱ)こと管理人
2009/04/21 02:07:14

>4.2回目を読みたい時は、変数更新の関数を呼びまた1回のみ読める。 あ、この「変数更新の関数」を呼んでから、変数を読み出すまでの間、 配布元VMでは変数の変更を禁止する(待つ)、ということでしょうか? だとすれば、余計な処理を間に挟めないように、「変数の値取得用の関数」を 用意したほうがよさそうにも思いますが…
[この投稿を含むスレッドを表示] [この投稿を削除]
[1227] Re:VM間排他制御について
投稿者:(ぱ)こと管理人
2009/04/21 01:50:42

>以下が私の考える見えない排他制御です すみません、いまいちよくわかりません。 まず前提として、山さんの案では、複数のVMが、別々のネイティブスレッドで 動作するんですよね? だとしたら、いずれにせよ共有の変数を読み書きする際は きっちりスレッド間でロックの取り合いをしなければならないわけで、この案で どこが簡素化できるのかがどうもよくわからないです。 >1.システム変数は1つのVMのみ読み書きが出来る、配布元VMとする。 また、この「システム変数」は、ユーザプログラムがこれを利用して同期を取るための ものではなく、まさにユーザプログラムがデータとして共有したいものなんですよね? だとすると、配列やオブジェクトのような参照型ではどうなるのでしょう。 int[] a = {1, 2, 3, 4}; という配列を共有したかったとして、 int[] tmp = a; // aを1回だけ読み出し 以後、tmp経由で配列aの中身は触り放題なわけですが、これでよいのでしょうか? >もっと簡単にしてグローバルは1VM内でのみ有効であるとして、 >VM間変数と言う特殊な変数を作って、セマフォー処理をしてもいいと思う。 山さんの投稿を見て私が最初にイメージしたのはこれだったのですが…
[この投稿を含むスレッドを表示] [この投稿を削除]
[1226] VM間排他制御について
投稿者:
2009/04/20 20:09:57

以下が私の考える見えない排他制御です 1.システム変数は1つのVMのみ読み書きが出来る、配布元VMとする。 2.他の受信VMは1回のみ変数を読むことが出来る。  (ローカル変数に代入し各種処理をする) 3.2回目を読もうとすると実行時エラーとなる。 4.2回目を読みたい時は、変数更新の関数を呼びまた1回のみ読める。  これで意識しない排他制御が可能になると考えています。 (変数更新を毎回呼んだら意味はありませんが・・・) これが私が実装しようとするスレッド間セーフなシステム変数です。 もしよろしければ、ご意見をお聞かせください。 diksamでスレッドセーフのVMが出来ても、グローバル変数が可能な方法があります。それは、セマフォーグローバル変数を宣言するとともに、ロックとフリーの関数を提供します。C++などでは、変数の排他管理は自分でしろと最小高速なセマフォーがあります。これと同じものを提供すれば、スレッドセーフなVM間の通信制御も可能になります。もちろん、もっと簡単にしてグローバルは1VM内でのみ有効であるとして、VM間変数と言う特殊な変数を作って、セマフォー処理をしてもいいと思う。もしお暇でありましたら、スレッドセーフなVMもご検討ください。 (なにぶんVMもほとんど知らないのに適当なことを言っているのかもしれません、その時は申し訳ありません)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1225] Re:ライセンスというか使用許諾というかについて
投稿者:
2009/04/20 18:09:44

>ここですが、現状のVMでも、DVM_VirtualMachine構造体は複数生成できると >思いますので(試してませんが)、yieldのような予約語を入れて中断できるように >すれば「複数起動され個々がいつでも中断再開できる」という用途は達成できそうに >思います。 はい、まだVM部分はざくっとしか見ていないので、内容のアドバイス大変にうれしいです。イメージ的には複数スレッドでVMが動くを目指しています。なおかつ中断状態をディスクに書き込み、読み出し再開を目指しています。(ちょっと無茶な仕様ですが^^;) Diksam上でのグローバル変数は禁止します。システムが固有に持っているグローバル変数を用いてVM間のコミュニケーションをする予定です。この変数へのアクセスは、理想的にはDiksamの変数と同等に扱えればいいのですが、当面はアクセス関数からのアクセスかな。このシステム変数を使うことでスレッド間排他制御を自動でやりたいと思っています。利用者は排他制御を意識できない、しないレベルにしたい。(目標) >そうではなくて、VMはあくまでひとつで、グローバル変数やヒープを共有し、 >複数のスレッドというかコルーチンというかファイバーというかを立ち上げられる >ようにしようと思ったら、DVM_VirtualMachineのpcやらcurrent_executableやら >current_pcやらをもうすこし整理する必要がありそうです。 今一番簡単にVMを考えるなら、総ての変数領域を、クラスの中にパックしてしまえばグローバル変数がないという条件で、完全なスレッドセーフのVMになるのではないかと思います。その場合、ヒープ領域も指定して持つと言う富豪プログラミングです。 私はまだVMもちらりとしか見ていないので、上記構想がどんなものかの評価が出来ていません。こうしたほうがよりよい等アドバイスが有りましたらよろしくお願いします。 ここ数日、Diksam0.4.01をVC++2005上で動作させることをトライしていましたが、多くのエラーとトラブルに遭遇し、まだ内容もわからずに修正するのは早計であった為、今現在はDiksam0.1を、VC++上に移植して作業をはじめています。0.1は少しの修正で移植できました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1224] Re:ライセンスというか使用許諾というかについて
投稿者:(ぱ)こと管理人
2009/04/20 01:30:57

そちらのソースを見たわけでもなく、私が趣旨を誤解している可能性もありますので あくまでご参考としてですが、 >また、VM部分はひとつのclassに入るように修正しようと思っています。 >使用上複数起動され個々がいつでも中断再開できる用途を考えているので、 >1つのまとまりとしてクラス化をして1パッケージで扱えるためにと。 ここですが、現状のVMでも、DVM_VirtualMachine構造体は複数生成できると 思いますので(試してませんが)、yieldのような予約語を入れて中断できるように すれば「複数起動され個々がいつでも中断再開できる」という用途は達成できそうに 思います。 そうではなくて、VMはあくまでひとつで、グローバル変数やヒープを共有し、 複数のスレッドというかコルーチンというかファイバーというかを立ち上げられる ようにしようと思ったら、DVM_VirtualMachineのpcやらcurrent_executableやら current_pcやらをもうすこし整理する必要がありそうです。 また、スレッドを分けるなら、MEMがstaticであるのはそれなりに問題になりそうに 思います。 >いつ完成するかはわかりませんが、何かありましたら必ずここでご報告いたします。 >ある程度めどが出来ましたら、フリーで公開するプログラムになります。 楽しみにしています。 >最後に1つ、「Diksam言語仕様 ver.0.4.01 」のページをパッケージに添付す >ことになると思いますが、その時はよろしくお願いいたします。 これについてもまったく問題ありません(明記しておくべきですね…)。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1223] Re:ライセンスというか使用許諾というかについて
投稿者:
2009/04/19 18:09:47

>Diksamについてですが、mycalc, crowbarと同じで結構です。 とてもありがとうございます。 簡素に現状をご報告いたします。字句解析については日本語関数や日本語の定義や変数を使いたいために、独自で書いています。スピードもそれほど要らない部分ですから。また、VM部分はひとつのclassに入るように修正しようと思っています。使用上複数起動され個々がいつでも中断再開できる用途を考えているので、1つのまとまりとしてクラス化をして1パッケージで扱えるためにと。(私がクラス好きなんでつ)ヒープとGCはまったく別の形でなくすかもしれません。なにぶん趣味で作っているものなので、いつ完成するかはわかりませんが、何かありましたら必ずここでご報告いたします。ある程度めどが出来ましたら、フリーで公開するプログラムになります。 最後に1つ、「Diksam言語仕様 ver.0.4.01 」のページをパッケージに添付すことになると思いますが、その時はよろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]