Windows版 OpenXM 高山信毅 (神戸大学)、2002.3.18 [email protected] OX-RFC-100 http://www.openxm.org Noro, Takayama (1997—2000), Ohara, Okutani,Tamura • データ構造(数、多項式、リスト、文字列) • Stackmachine API • コントロール&エンジンモデル [713] print_ox_rfc100_xml_form(x^2); <cmo_recursive_polynomial> <cmo_list><cmo_int32 for="length">1 </cmo_int32> <cmo_string>"x"</cmo_string> </cmo_list> <cmo_polynomial_in_one_variable><cmo_int32 for="number of terms">1</cmo_int32> <cmo_int32 for="variable name">0</cmo_int32> <cmo_int32 for="exponent">2</cmo_int32> </cmo_polynomial_in_one_variable> </cmo_recursive_polynomial> <cmo_zz>1</cmo_zz> [718] ox_rpc(fctr,x^2-1); 0 [719] ox_pop_cmo(0); error([12,executeFunction : invalid function name]) [720] ox_rpc(0,"fctr",x^2-1); 0 [721] ox_pop_cmo(0); [[1,1],[x-1,1],[x+1,1]] [722] OX-RFC100 Control&Engineモ デルの実装 • Thread, event driven (Omproxy.java 田村 (2000)、 asirgui 野呂(1998?)) unix用 ソースコードの大幅な書き換えが必要、保 守が大変 • Unix signal Windowsでは使えない cygwin (cygwin1.dll) の利用、 unix のソースコードの変更が最小限ですみ保 守が容易 Setjmp,longjmp • Setjmp • Longjmp • • • • • • #if defined(__CYGWIN__) #define SETJMP(b) sigsetjmp(b,~0) #else #define SETJMP(b) setjmp(b) #endif Siglongjmp system • system • Sh を起動できない • Fork & exec プログラムの起動 • Xterm が使えない start で代用 • パス名の混乱 (\OpenXM\bin\ox, /OpenXM/bin/ox, c:/OpenXM/bin/ox, /cygdrive/c/OpenXM/bin/ox) • cygwin 環境での起動とWindows環境での 起動での動作の違い • 環境変数の扱い • Cppがない oxpp /asirconnectr { [(getenv) (OSTYPE)] extension tag 0 eq { asirconnectr_win }{ [(getenv) (OSTYPE)] extension (cygwin) eq { asirconnectr_cygwin }{ asirconnectr_win }ifelse } ifelse } def 成果と課題 • Asir-contrib の多くのコマンドがWindowsで も動作するようになった(雑用) • WebAsir の実験(まだ遊び) • 起動をきれいに行うためには broker-like な仕組みが必要であることがよくわかった。 (OX-RFC101(小原)、Javaでの起動(田 村) 発展版が必要) Asir-Contrib(2002,1.2.1) • Sm1, gnuplot, phc, tigers, om,math,dsolv (2000, 1.1.1) • Base • Print (xdvi, tex,xml,…) • Matrix (okutani lib) • Poly, … Document generation system • • • • Weave,tangle(Knuth, 1980’s), javadoc (1990’s) Gentexi (特に新しいアイディアなし 雑用) /*&usage begin: base_cancel(S) It simplifies {S} by canceling the common factors of • denominators and numerators. • example: base_cancel([(x-1)/(x^2-1), (x-1)/(x^31)]); • end: */ 参考ソースコード • • • • • OpenXM/src/asir-contrib OpenXM/misc/packages/Windows OpenXM/src/kan96xx/lib/*win* OpenXM/src/kan96xx/lib/httpd.sm1 #defined(__CYGWIN__) OpenXM_contrib2/asir2000, OpenXM/src/kan96xx/Kan • 参考記事:Cygwin、藤枝和宏(unixマガジン、20 00、11月号よりの連載
© Copyright 2024 ExpyDoc