2017-07-06 103 views
0

內調用原稿假設有一個特殊的硬件可以使 某些標準庫的功能更快。更換Golang標準軟件包並在

硬件可能存在與否。

我可以編寫一個軟件包,它可以像使用標準硬件一樣使用此功能簽名,但它會強制所有應用程序和其他軟件包根據硬件的可用性決定要導入的軟件包具體目標。在編譯時和所有應用程序和包中的代碼修改。

理想情況下,我更願意決定在運行時使用哪個包,而不需要應用程序更改其導入。

該軟件包將檢查硬件的可用性,並使用它或執行標準功能。

有沒有辦法實現它?

「截取」標準包函數調用的其他方法?

+0

你的意思是注入或鉤入二進制代碼像JIT? – mattn

+0

由於這個原因,您的問題值得投票結束:「太廣泛了:請編輯該問題,將其限制爲具有足夠詳細信息的特定問題以確定合適的答案。」例如,你想要Intel SSE4嗎?你想要ARM浮點嗎?或者是什麼? – peterSO

+0

@peterSO我不認爲細節很重要,OP只是想知道這個機制是什麼。該機制與您所針對的特定硬件無關。 – Adrian

回答

-1

這聽起來像你正在談論一個將被其他應用程序使用的庫。你不能(很慶幸)以這種方式修改標準庫 - 否則只是導入一個軟件包可能會有令人難以置信的廣泛和潛在的災難性副作用。如果您想對標準庫應用一些特殊的硬件特定優化,以供其他人在廣泛的項目中使用,最好的辦法是make your changes to the standard library and submit a patch

+0

硬件不夠通用,不足以證明包含在標準庫中。然而,它爲那些擁有它的人提供了寶貴的改進。問題在於,我正在改進的這一部分與實際應用程序之間還有許多其他庫。其中一些將是特定於應用程序的。應用程序編寫者更改所有這些都很複雜。這就是爲什麼我試圖看看是否有辦法在兩者之間「掛鉤」。考慮一下LD_PRELOAD以及備用內存堆管理器如何掛接而不需要應用程序編寫者更改其所有malloc調用。 – GreyBit

+0

沒有。 LD_PRELOAD基於共享庫,而Go stdlib靜態鏈接到最終的二進制文件。 – Adrian

+0

很明顯,LD_PRELOAD由於靜態鏈接而無法在這裏工作。問題是,是否有任何其他機制,構建或運行時,允許攔截對特定標準庫的調用而不更改所有其他使用它的庫。它不必對應用程序編寫器完全透明,可能需要額外的步驟,只是不應對使用此特定標準庫的所有內容進行深入更改。 – GreyBit

相關問題