如果沒有完成,那麼只有一個原因:努力做到這一點比可能的好處更高。
微軟肯定不會這樣做,因爲成本太高:.net代碼居住在組件中,沒有人會改變它。是的,程序集會阻止逐類增量編譯。沒有人會停止使用組件。
這裏是我的答案爲什麼沒有人需要它。您可以將構成單個項目的類分佈到多個程序集中並逐個編譯它們。它實際上是漸進式編譯,但並不像逐類漸進式編譯那樣精細。而當你的架構正確設計時,彙編級增量編譯就足夠了。
編輯:好的,我下載了Mono C#編譯器來看看它可以使它增量。我認爲這不是很難。基本上它執行以下步驟:1)解析文件2)編譯3)創建程序集。在編譯完類型之後,你可以掛鉤到某個地方,然後保存到某種中間文件中。然後重新編譯只更改的。所以這是可能的,但對於Mono團隊來說這不是高優先級問題。
編輯2:我發現this interesting thread人們在討論單向C#編譯器的Incremental編譯。這是相當舊的,但關鍵的解釋可能是仍然有效:
樂興和正常解析非常 快,只在代碼被解析的 的大小依賴。語義 分析通常是最花時間 耗時的步驟爲裝載引用 組件和各地的龐大 元數據進行篩選,以解決符號和類型 是真正的編譯器的肉, 還,新的「編譯」的代碼是 「附加」到這個元數據/ AST什麼 增加解決 符號隨時間的複雜性。首先在內存中完成的代碼排列是 ,因此速度很快。 保存到磁盤很慢,但取決於 發出的代碼大小。
對於漸進式編譯,緩存 元,就會使一切非常 快,因爲通常很少會被 從一個編輯改成其他的 。但gmcs將不得不 使 元數據/ AST的部分無效,不構成 的。
編輯3:C#編譯器有在1.0和1.1版/incremental
選項,但它是removed:在1.0和1.1版的C#的發現
的/增量標誌編譯器現在被認爲已經過時。
編輯4:米格爾奧德伊卡薩給出明確的答案(1,2)爲什麼單編譯器將不增量:
有很多很多地方 GMCS只是沒有設計在 上編輯和繼續場景。
如果有人想使這個他們 論文題目,那就是我沒意見,但 變化量都在太多的領域太 大。我不想 甚至想打擾他們。
我沒有列出的東西的原因是 ,因爲它們將在編譯器 無處不在。當你試用它們時,你肯定會遇到 ;-)
所以他認爲這是一項比一個人的論文更大的任務。 Mono有更多更出色和更實際的任務。
可能是因爲沒有人真的需要它嗎? – Andrey 2011-03-31 15:45:10
人們需要它。相信你我。 – mcintyre321 2011-03-31 15:50:44
爲什麼?請提供一個場景。我想不出任何...這可能意味着,我沒有幻想;-) – 2011-03-31 15:52:34