2014-09-18 63 views
4

我想弄清楚Swift泛型是如何工作的。具體而言,我無法找到關於編譯模型的精確聲明。在C++中,泛型(模板)並不是單獨編譯的,因爲它們被實例化(至少原則上)用於每個調用站點。相反,Java泛型是分別編譯的。 Swift的情況如何,關於單獨編寫仿製藥?Swift的泛型是否分別編譯?

+0

我似乎記得今年在其中一個WWDC高級會議視頻中討論了這個問題。不能更具體,雖然對不起:) – 2014-09-18 16:16:38

回答

3

這是兩者的組合,具體取決於優化器決定哪些內容會獲得更好的性能。他們在WWDC Session 404: Advanced Swift結束時談論它。幻燈片說:

斯威夫特可以運行通用代碼直接

優化可以隨意產生的通用代碼專門版本

  • 仿製藥的單獨編譯
  • 更快的編譯
  • 靈活性用於速度的貿易碼大小
1

從語義上講,它類似於C++的方式。在使用T參數化的Swift通用函數中,可以在運行時直接使用T(如T.self)訪問事物。您也可以在C++中執行此操作,但不能在Java中執行此操作,此時泛型只能在編譯時和類型擦除之後進行。