2011-07-13 253 views

回答

10

我能想到的至少有三個理由使用XS:

  1. 您想要在Perl 5
  2. 訪問C庫您的代碼塊可證明是減慢你的程序如果用C語言編寫
  3. 它會更快您需要訪問的XS

原因僅提供1東西是明顯的,應該不需要交代。

當你真的需要理由2不太明顯。通常你最好查看代碼的結構。如果您有profiled your code並且有benchmarktest suite來證明XS代碼更快更正確,則只應調用原因2。

原因3是一個危險的原因。實際上你很少需要看看Perl的膽量來做些什麼,但至少有one valid case

+1

如果您還可以涵蓋使用Inline :: C與純XS的優點/缺點,那將是非常好的選擇。 – friedo

+0

是的,比較會很好。對願望清單還有一個條目:只能用XS完成什麼樣的事情,以及只能通過Inline :: C完成什麼。 – hexcoder

+0

Inline :: C只是XS的一個包裝。它可以很容易地調用C語言,但缺點是你需要使用相同的C編譯器來構建你的Perl。一般來說,您只應使用Inline :: C爲您構建XS代碼,然後獲取該代碼並去除Inline :: C。這是兩全其美的。 – frezik

3

在少數情況下,更好的內存管理是使用XS的另一個原因。例如,如果您有一些類似類型的非常大的對象塊,則可以通過XS更高效地管理它。例如,KinoSearch將此用於令牌,例如,大字符串中的開始和結束偏移量可以通過XS更有效地管理,而不是作爲大量標量池來管理。 PDL也有它的內存管理方面,以及速度。

有人建議將這種方法的一部分長期集成到核心Perl中,最初是因爲它提供了一個使線程中的共享數據更好的機會:請參閱:http://openparallel.com/2011/07/05/a-new-hope-for-efficient-safe-data-sharing-between-threads-in-perl/

+1

這是一個很好的觀點,我認爲它屬於理性2,但我的理由2太狹隘。我認爲理由2應該是「爲了更有效地利用計算機的資源」。 –

+0

@Chas。歐文斯同意了。您通常會使用不同的工具對其進行評估,並且在32位系統上可能會更早採用此策略,因爲內存具有硬限制,但是是另一個資源問題 –

相關問題