星期六, 1月 20, 2007

[想法] 以python+shedskin來取代shellscript-like的python程式.

前陣子有跟shedskin的作者通過幾次信,
(關於Shedskin請看我之前的介紹),
基本上目前作者認為Shedskin還有非常大幅度的改善空間,
他現在主要還是會把心力放在改善對python語法支持度的實作上,
不過他現在是全職進行開發, 看來shedskin仍是大有可為.

另外我也送了patch跟小tool過去,
所以現在shedskin也支援os.system()了,
還有一個簡單的小tool可以列出目前支援的function.
這樣可以幫助轉換只是使用python來作簡單的shell script應用的程式.

有機會的話我想要支援os.popen(), 其實popen()本身倒是不難,
只是pclose()的時機有一點麻煩, 畢竟C++沒有啥垃圾收集,
(雖然有libgc,但是libgc只管gc裡狹義的memory)
另外就是可能要改寫目前shedskin裡file object的行為會比較複雜,

我現在最初步的的作法是在os/__init__.cpp裡自行加入
file *_popen(str *c) {
return new file(popen(c->unit.c_str(),"r"));
}
等shedskin翻譯出來了之後, 再自行修改C++程式碼,
自己加入相對應的pclose(), 實在是很蠢的作法.

shedskin的作者有提到可以加一個
__os__::exit()的方向去想,
我在想應該可以把回傳的FILE* 當作static變數,
exit()時再close()掉,這倒似乎是一個可行的作法.
不過他也提到他對pipe沒啥好感,
看來他如果要作popen也會放在很後面才作了...

作者Mark感覺滿熱心的, 回的信比我寫給他的還多,
大家有興趣可以下載shedskin來玩玩,
即使只是bug report跟feedback 作者也會滿高興的.

沒有留言: