這是一個棘手的問題......我不知道確切的答案。但我可以幫助你學習如何通過一些線索自己檢查。
您需要在映像中加載VMMaker軟件包。在Pharo中,只需從網絡和github上下載所有內容,就可以建立這樣的映像。請參閱
然後,主要提示是剛剛返回實例變量的方法被編譯爲執行原語264 + inst var offset ...(例如,您將通過檢查Interval>>#first
或任何其他簡單的inst var getter)
在傳統的解釋器VM中,這在Interpreter>>internalExecuteNewMethod
中處理。
看起來像你支付方法查找的成本(一些緩存使這更便宜),但不是真正的方法激活。
我想它解釋了調試器不能進入這樣簡單的方法......但這不是真正的內聯。
在COG中,如果使用解釋器,則在StackInterpreter>>internalQuickPrimitiveResponse
中也會發生同樣的情況。
至於JIT,這是由Cogit>>compilePrimitive
處理,另見genQuickReturnInstVar
的實現者。這並不適合內聯,但您可以看到生成的指令非常少。再次,我敢打賭,您通常不會支付查詢的代價,感謝所謂的多態內聯緩存(PIC)。
對於真正的內聯,我沒有找到線索的源代碼,這個快速瀏覽後...
我的理解是,它會在像側通從西斯塔VM回調發生,但是這是正在進行的工作,只有我模糊的回憶。 Clement Bera正在寫關於這個的博客(http://clementbera.wordpress.com上的sista編年史)
如果你害怕挖掘VMMaker源代碼,我邀請你去問問vm-dev.lists.squeakfoundation.org我很漂亮肯定艾略特米蘭達或克萊門特很樂意給你一個更準確的答案。
編輯
我忘了告訴你關於上述perigrinations的結論:我認爲會有一個非常小的差異,如果你直接使用研究所。變種。而不是一個getter,但這不應該是真正引人注目的,並且在任何情況下,您的編程風格都不應該被這種可忽略的優化所引導。
該Pharo用戶組和郵件列表也可能是一個合適的地方要求。有很多活動。 – User 2014-10-30 20:00:32
Yeap這個問題應該直接指向pharo-dev郵件列表和cog郵件列表,其中Clu後面的Eliot whos可以詳細回答 – Kilon 2014-10-31 10:49:07