2016-04-03 98 views
1

有關代碼生成的幾個問題與飛鏢:類/編譯時間飛鏢

  1. 鏢可以在運行時生成一個類飛鏢上的飛鏢虛擬機上運行的代碼?
  2. 在編譯/預運行時是否有任何類型的代碼生成等同於Java註釋處理?

回答

1

1)Dart VM和dart2js不支持在運行時生成代碼。
一種解決方法是將代碼生成到文件並將其加載到新的隔離區(也可以是數據URI)。應用程序只能通過消息傳遞與在另一個隔離區中運行的生成代碼進行通信。

2)這是transformers的用途,但變換器僅適用於dart2js(或開發時的pub服務),但不適用於在服務器端Dart VM上運行的代碼。

https://github.com/dart-lang/build(目前僅在開發人員預覽版中)可用於瀏覽器和服務器端代碼的代碼生成。它是一個監視源文件並在源文件更改時更新生成的代碼的工具。

+0

我明白了。我曾想到第一種方法。你對隔離和消息通信的開銷有什麼看法嗎?我無法找到關於隔離性能的更多信息 – spierce7

+0

我假設它比在相同的隔離內傳遞值要慢很多,但它仍然只是在內存中,因此比網絡請求要快得多。你需要爲你的具體用例做一些基準測試以獲得正確的結果。我認爲它也很大程度上取決於您發送的值的類型(原始值,映射或列表,或自定義類實例或自定義類實例的樹)。 –