乙個真實的物件(第一部分)

2021-06-15 21:58:28 字數 899 閱讀 5540

注意到在這個模式中,python型別存在於它們自己的小世界中(桔色部分),而且對於每個底層的型別,我都需要把它放到乙個python特性的包裝類中。如果只是想支援一種語言,這個模式是很好的。在我上面這個例子中,我只寫python**,那麼所有我處理的物件都是pyobject,它們可以相互工作的很好,通過它們的python特性。可是當你想支援多種語言的整合時,這個模式就會崩潰了。在這種情況下,每一次乙個物件從一種語言移動到另一種語言時,它需要從源語言去包裝,再包裝到目標語言。這會帶來明顯的效能問題,當跨語言呼叫時包裝類被建立被丟棄。

這個包裝的方法還有更深層次的問題。乙個挑戰便是我們要指出需要傳遞的物件。例如,python中有pystring,當呼叫c#函式時需要乙個物件時,是應該傳遞pystring還是解包裝為string?這些微妙的問題從來沒有乙個好的答案。更糟的,在程式設計師後面靜悄悄的包裝和解包裝的過程中,物件同一性的缺失會產生更討厭的問題。

大多數流行的用c實現的動態語言同樣使用包裝模式。當用c來實現動態語言時,這種包裝是很合理的,因為c指標沒有攜帶任何執行時有用的型別資訊,所以需要乙個包裝層來提供需要的執行時型別資訊。但是,託管的執行時,例如clr,為它們的標準物件提供了豐富的執行時型別資訊,所以應該可能直接使用這個物件,沒有包裝和和管制帶來的混亂和執行代價。我們在dlr中使用了這一點,這也是我們實際應用的型別系統。

這意味著dlr中的所有物件和clr的物件是完全一致的。我們新增了更好的支援公共動態操作的特性,但我們仍然深深地植根於.net上現存的庫和語言。如果想要真正的使語言之間無縫整合,我們需要乙個統一的型別系統,不用管制和包裝層。

現在我們到達了第一部分的終點,我擔心這也許會令人不滿意。到現在為止,我們關於動態型別系統的解釋就是,我們使用的物件和元資料完全是clr上已經使用的靜態的型別化的物件。好吧,今天在網上的發布不會讓我停止。更多關於clr上的動態型別系統的細節我會在下面討論。

Axure RP 第一部分

axure rp是乙個專業的快速原型設計工具。axure 發音 ack sure 代表美國axure公司 rp則是rapid prototyping 快速原型 的縮寫。axure rp是美國axure software solution公司旗艦產品,是乙個專業的快速原型設計工具,讓負責定義需求和規格...

第一部分 初識Solr

第一章 solr簡介 這章主要包括內容 這本書講述nosql技術,apache solr 像它的非關係模式兄弟一樣,針對於某些問題進行了優化。特別的,solr在處理企業級大量資料 及時搜尋 文字資料 返回相關性結果等方面進行了很大優化。這裡說的只是冰山一角,讓我們從下面幾方面來進行詳細敘說 solr...

css排雷第一部分

import url basic.css warning urgent plant moons plant moons 1 a href span title feature lang en 選出屬性等於lang或者以lang開頭的所有元素。選擇h1 strong 可以解釋為選擇h1字元素中的所有s...