※ 引述《taiwancat.bbs@ptt.cc (月季)》之銘言:
> 不得不推一下pike!
> 沒想到還有別人在接觸pike!
> pike真的很好學 他是從LPC演變過來的
> 玩過mud的人學一定倍感親切!
> pike程式碼簡單易懂
> 在他的一個範例裡
> 94行就寫出一個multi-thread的http server!
> 他的推廣度一直不及python....我覺得很可惜
> 有興趣可以玩玩看!很好用的
聽到它是 LPC 演變過來的讓我很有興趣,
稍微看了一下,mixed 跟 mapping 還是存在,
不過我有幾個比較好奇的地方,
沒辦法馬上從它的 doc 看出來,
想請教一下。
1. Pike 是不是跟 LPC 一樣有一個常駐的 VM,
所有的 objects 會像是 processes 一樣常駐於 VM 內部?
是否每個程式檔被編譯載入後即是一個物件?
2. call_other operator 是否還存在於 Pike 中?
譬如寫 x->foo(a, b, c); 可以呼叫物件 x 中的 foo() 函式,
若 foo() 有三個參數 a、b、c,我寫 x->foo(a, b);,
是不是 c 可以自動被視為 undefined value?
3. 是否還有任意物件之間互相 shadow 的功能?
譬如 a 物件內部定義有 foo() 函式,
現在我臨時造出 b 物件(由跟 a 完全不相干的程式檔產生),
裡面也有一個 foo() 函式,
然後我讓 b 物件 shadow a 物件,
往後任何 a->foo() 這種呼叫均等同於 b->foo()?
(LPC 時代沒有 class 的概念,所以都用物件這個名詞)
另外是不是也有 nomask 這種保留字可以防止 shadow?
4. 是否還有 this_object()、function owner 和 bind 的觀念?
(1) 譬如目前程式是在物件 a 中執行,this_object() 會傳回 a。
(2) 由物件 a 中擷取出來的 function pointer,其 owner 為 a。
(3) 若物件 a 中定義有 foo() 這個函式,以 (: foo :) 獲得其指標,
是否能利用 f = bind((: foo :), b); 使 f 的 owner 被 bind 為 b?
此後執行 (*f)(a, b, c); 形同在 b 中執行 foo() 函式?
(同時 f 指向的 foo() 函式中所有 this_object() 呼叫均傳回 b)
5. 是否還存在 virtual object 的用法?
以往 LPC 必須使用實際存在的程式檔產生物件,
但是 LPC 的 VM 有一個機制能在找不到該檔案時呼叫一個 master applies,
由該 master applies 依據檔名等資訊 clone 出適當的物件傳回,
而該物件會在之後視為由該不存在的程式檔所產生的。
6. 是不是還有 save_object() 這種函式,
可以將所有 nosave/non-static global variable 以 text form 存入檔案,
之後直接用 restore_object() 讀出以恢復物件狀態?
不好意思問這麼多問題,
因為這些都是目前我還會使用 LPC 的理由,
但是他們官方網頁沒有跟 LPC 的比較表。
我問的東西可能跟 LPC4 有差距,
因為我熟悉的是 LPC3 時代 branch 出去的 MudOS LPC。
--
Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net
School: National Chung Cheng University
Department: Computer Science and Information Engineering
Researching: Porting GCC and Implementing VLIW instruction scheduler in GCC
Homepage: https://it.muds.net/~uranus
--
╔═══╗ ┼────────────────────────╮
║狂狷 ║ │* Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮
║ 年少║ ┼╮ < IP:140.119.164.16 > ╰─╮
╚╦═╦╝ ╰ * From:218-171-138-13.dynamic.hinet.net
─╨─╨─ KGBBS ─ ◎ 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩 ◎
--
--
* Modify: tinlans 05/08/07 3:58:31 <218-171-138-13.dynamic.hinet.net>