詳細剖析Python 腳本問題介紹
David Mertz 采訪了 JPython 和 Python for .NET 的開發者 Mark Hammond、Finn Bock 和 Barry Warsaw。他從 Mark 那里了解到一些有關微軟開發的最新獨家新聞內幕(當然所有內容都在保密合同限制內)并從 Finn 和 Barry 那里了解到有關 JPython 和他們將要發布的 Jython 項目的一些信息。
盡管Python 腳本通常等同于 CPython,但它的規范曾在其它地方實現過多次,包括在用于 Java 和 .NET 的應用程序中。JPython 將 Python 源碼編譯成 Java 字節碼,并提供了對 Java 類的透明訪問。
Python for .NET 是微軟將要發布的交叉語言技術平臺工作中的一個應用。在采訪 Mark Hammond、Finn Bock 和 Barry Warsaw 的過程中。我發現了有關 JPython 和 Python for .NET 是如何開發的更多信息,以及為未來這些替代 Python 實現進行了哪些準備。
Python for .NET由于在 PythonWin 環境和 PythonCOM 擴展方面出色的開發,Mark Hammond 為廣大 Python 程序員所熟知。出于我們欽佩 Mark 的相同原因,微軟也很看重他。他們決定在 Python for .NET 的實現上向他求助。據 Mark 稱,Python for .NET 的工作版本應該很快就可得到,現在您應該已經可以從 ActiveState 獲得它的 alpha 或 beta 版(請參閱 參考資料)。
David Mertz :到底什么是 Python for .NET 呢?我想我特別想知道的是 Python for .NET 與您自己對CPython 的 PythonWin 和 PythonCOM 擴展(它們似乎能夠控制 Windows 的內部)之間的關系是怎樣的。
Mark Hammond :Python for .NET 是一種編譯器和運行時,它在微軟的 .NET 平臺上實現了 Python。.NET 平臺提供了一個運行時和元數據系統,它們設計成允許完整的語言互操作性,但要實現這一點,語言必須能在該運行時中使用。
例如,如果 Python 類是公用的以便 Visual Basic 程序員能夠繼承它,Python 類就必須以 .NET 術語而不是以 CPython 術語來實現和描述。Python .NET 的優點只是可以與 .NET 框架互操作。這里仍然有許多缺陷,主要由于實現還不成熟而導致。但這確實只是時間的問題。我們仍處于開發和調試的 beta 階段。
Mertz :您對現在的 Python for .NET 和 CPython 之間不兼容性問題是怎么看的?Hammond :是啊,大多數模塊還沒有被實現,所以現有以 C 編寫的模塊還無法確切使用。如果您的目標不是 .NET 框架,最好此時不要使用 Python .NET。
Mertz :不過,Python for .NET 肯定有一些主要的優勢,例如方便的語言間通信和多語言應用開發。但為什么您說比已經有的那些 -- 例如 Python+C+SWIG 要好呢(當然是假設情況)。
Hammond :就 Python+C+SWIG 目前的發展而言,應該是明顯的。語言間調用永遠不應該象使用 Python+C+SWIG 那樣困難。但 SWIG 在許多其它方面是個了不起的產品。它揭開了 Python C 擴展編寫的神秘面紗,并僅將它歸到困難的行列。
將 .NET 與 COM 或 Corba 進行比較更合理一些。COM 和 Corba 都提供交叉語言調用“正適用”的解決方案,而不需要任何手工參與或編譯。.NET 將它更進了一步,并提供交叉語言繼承和異常能力。這些優點非常類似于在 Java 虛擬機下的多語言實現中發現的那些。
Mertz :Python for .NET 將 Python 腳本編譯成外部虛擬機的格式。對于 .NET VM 是否將支持 Stackless 和 Vyper 的某些外來特性,例如延續性、生成器、協同程序、尾遞歸或延緩求值,您認為會這樣嗎?
Hammond :是的,從理論上說它會。但微軟 Beta 協議的一些條款不允許我談論有關性能的問題。 讓我們將目標只定在核心 Python 語言引用中定義的那些特性上。無用信息收集是繼承的,就象在 JPython 和 JVM 中的那樣。
Mertz :接下來談談政策主題,您認為微軟為什么正在進行 Python for .NET 的開發工作呢?
Hammond :這樣選擇目標 .NET 的人就可使用Python 腳本了。
微軟很早就確定要參與到 Python 和其它許多語言中,以確保他們的 VM 確實是不懂語言也能夠使用的。根據來自各種語言實現者的反饋意見,現在他們已經對他們的 VM 做了大量更改。
【編輯推薦】