導航:首頁 > 源碼編譯 > 編譯turbofan

編譯turbofan

發布時間:2022-10-03 19:05:23

A. Node.js 8有哪些重要功能和修復

N-API介紹
N-API是用於構建原生插件的API。它獨立於底層Java運行時,並作為Node.js自身的一部分進行維護。這么做的目的是保證應用程序二進制介面(ABI)在不同Node.js版本之間能夠保持穩定。
N-API的目的是將附加組件和基礎Java引擎中的更改區分開,以便原生插件在不需要重新編譯情況下,就可以運行不同的Node.js版本。
了解更多N-API信息。
Node.js 8中的緩沖區安全性改進
在Node.js 8版本之前,使用new Buffer(Number)構造函數分配的緩沖區並未使用ZEROS初始化內存空間。結果導致新的Buffer實例可能包含敏感信息,容易導致安全問題。
雖然這是一個用於提高創建新Buffer性能的決定,但是對大多數人來說,並不打算這么使用。因此從Node.js 8開始,使用new Buffer(Number)或Buffer(Number)分配的Buffers會被ZEROS自動填充。
將V8升級到5.8:TurboFan&Ingnition
使用Node.js 8版本,底層的V8 Java引擎也會更新。
對於Node.js用戶來說,最大的變化就是引入TurboFan和Ignition。Ignition是V8的解釋器,TurboFan是優化編譯器。
「Ignition和TurboFan的聯合使用已經開發了近3½年,它代表了V8團隊集體認識的最終結果,是V8團隊收集了Java的實測性能並仔細分析了Full-codegen的缺點和Crankshaft的結果。這也是能夠在未來幾年內繼續優化Java語言體系的基礎。「 - Daniel Clifford和V8團隊

B. 編譯器具體實現中比較巧妙的思想有哪些

要說編譯器實現的巧妙思想,很多都是用來解決工程性問題的,跟編譯原理中的演算法(解決抽象概念問題 / 學術問題)未必有直接關系。
題主是更想知道某個演算法在具體實現中的特點或者說應用方式呢,還是更想了解工程方面的問題呢?
我覺得前者應該有很多人會給出非常有趣的回答,我就主要回答後者的方面吧。解決工程性問題的巧妙技巧也挺吸引人的,而且有非常大量的素材…根本無法列舉完。
LLVM
說到編譯器實現,不得不落個俗套說說LLVM編譯器套件。不用介紹LLVM是啥了,感覺是「地球人都知道」系列。
1、一套IR,三種表現形式:運行時表現形式(llvm/IR,內存中)、序列化表現形式(bitcode,用於存儲)、文本表現形式(「LLVM匯編」,便於人閱讀和編輯)。三種形式間可以無損變換是LLVM非常非常強大的實現特點之一。
實際使用時能否真的達到無損變換很大程度上取決於要實現的語言有多少東西無法用LLVM IR表達。
例如說如果有語言實現基於LLVM來實現JIT編譯器,並且想把一個運行時的對象指針當作常量嵌入生成的代碼里,它可以把這個常量構造成LLVM IR,但如果把這個常量序列化到bitcode或生成文本形式,等「下一次編譯」再讀出來用的話,那個常量指針可能已經不對了。這跟生成PIC(position-independent code)的問題類似,但LLVM沒辦法幫語言解決這種問題。
也有可能有些語言實現偷懶,有些嵌入LLVM IR的metadata無法無損轉換為文本形式,這也不能怪LLVM IR不好,但確實是使用中要頭疼的問題…
這種一套IR三種表現形式的設計非常實用,一些新的語言實現項目受其影響也採用了類似的設計。

C. Node.js v8.0.0正式發布,看看帶來了哪些主要新特性

5月30日12點,Node.js8正式發布了,這個版本具有一系列新功能和性能改進,並且這些功能和改進將獲得長期支持(LTS)。下面就來介紹Node.js8版本中最重要的功能和修復。新版本的代號是Carbon。Node.js8將從2017年10月起,正式成為當前的LTS版本,並持續到2019年12月31日。這也意味著Node.js6版本將在2018年4月進入到維護模式,並在2019年4月結束維護支持。下載Node.js8版本:https://nodejs.org/download/rc/v8.0.0-rc.2/AsyncHooksAPI介紹AsyncHooks(以前稱為AsyncWrap)API允許獲取有關句柄對象生命周期的結構跟蹤信息。API發出的消息會將Node.js中所有句柄對象的生命周期告知給consumer。它試圖解決類似於continuation-local-storagenpmpackage這樣的問題。如果你正在使用continuation-local-storage,那麼已經可以用稱為cls-hook的asynchooks來代替使用了–只是目前並不是使用asynchooks的最好時機,所以需要謹慎使用!AsyncHooksAPI在Node.js8中如何工作createHooks函數的注冊功能會被每一個非同步操作的不同生命周期事件調用。constasyncHooks=require('async_hooks')asyncHooks.createHooks({init,pre,post,destroy})了解AsyncHooks,或查看正在進行的工作文檔。這些函數將會根據處理程序對象的生命周期事件選擇性觸發。N-API介紹N-API是用於構建原生插件的API。它獨立於底層JavaScript運行時,並作為Node.js自身的一部分進行維護。這么做的目的是保證應用程序二進制介面(ABI)在不同Node.js版本之間能夠保持穩定。N-API的目的是將附加組件和基礎JavaScript引擎中的更改區分開,以便原生插件在不需要重新編譯情況下,就可以運行不同的Node.js版本。了解N-API信息。Node.js8中的緩沖區安全性改進在Node.js8版本之前,使用newBuffer(Number)構造函數分配的緩沖區並未使用ZEROS初始化內存空間。結果導致新的Buffer實例可能包含敏感信息,容易導致安全問題。雖然這是一個用於提高創建新Buffer性能的決定,但是對大多數人來說,並不打算這么使用。因此從Node.js8開始,使用newBuffer(Number)或Buffer(Number)分配的Buffers會被ZEROS自動填充。將V8升級到5.8:TurboFan&Ingnition使用Node.js8版本,底層的V8JavaScript引擎也會更新。對於Node.js用戶來說,最大的變化就是引入TurboFan和Ignition。Ignition是V8的解釋器,TurboFan是優化編譯器。「Ignition和TurboFan的聯合使用已經開發了近3½年,它代表了V8團隊集體認識的最終結果,是V8團隊收集了JavaScript的實測性能並仔細分析了Full-codegen的缺點和Crankshaft的結果。這也是能夠在未來幾年內繼續優化JavaScript語言體系的基礎。「-DanielClifford和V8團隊目前V8的編譯管道如下圖所示。這個管道的最大問題是,新的語言功能必須在管道的不同部分實現,這就增加了大量額外的開發工作。下面是簡化的管道,沒有了FullCodeGenerator和Crankshaft:新管道大大降低了V8團隊的技術負擔,並實現了很多之前無法實現的改進。了解TurboFanandIgnition和TurboFanInliningHeuristics。將npm升級到5.0.0新的Node.js8版本還附帶npm5-最新版本的npmCLI。新npm版本的亮點:一種新的標准化的鎖定文件功能,用於跨包管理器的兼容性(package-lock.json),以及一種用於shrinkwrap的新格式和語義--save已經不再需要了,因為所有的安裝將默認保存node-gyp現在支持Windows的node-gyp.cmd新的發布版本將會包括sha512和sha1校驗Node.js8版本中的其它顯著改變BufferBuffer方法現在接受Uint8Array作為輸入ChildProcessArgument和Kill信號驗證得到改善ChildProcess方法接受Uint8Array作為輸入Console使用控制台方法時,錯誤事件發送現在受到了抑制DomainsNativePromise實例現在是域感知的文件系統實用程序類fs.SyncWriteStream已被棄用已棄用的fs.read()字元串介面已被刪除HTTP溢出的Cookieheaders會被連接成一個字元串該httpResponse.writeHeader()方法已被棄用StreamStream現在支持destroy()和_destroy()APITLS該rejectUnauthorized選項現在默認為trueURLWHATWGURL的實現,現在是Node.jsAPI完全支持的Node.js8下一步要做什麼Node.js8版本令我們興奮,因為它包含了很多有趣的提升,例如AsyncHooksAPI,這些API在當前的文檔狀態是很難掌握的。我們將盡快開始使用新版本,並盡快提供給用戶新功能的更詳細說明。

D. Nodejs 8有哪些重要功能和修復

5月30日12點,Node.js 8正式發布了,這個版本具有一系列新功能和性能改進,並且這些功能和改進將獲得長期支持(LTS)。

下面就來介紹Node.js 8版本中最重要的功能和修復。

新版本的代號是Carbon。Node.js 8將從2017年10月起,正式成為當前的LTS版本,並持續到2019年12月31日。這也意味著Node.js 6版本將在2018年4月進入到維護模式,並在2019年4月結束維護支持。

下載Node.js 8版本:https://nodejs.org/download/rc/v8.0.0-rc.2/

Async Hooks API 介紹

Async Hooks (以前稱為AsyncWrap) API允許獲取有關句柄對象生命周期的結構跟蹤信息。

API發出的消息會將Node.js中所有句柄對象的生命周期告知給consumer。它試圖解決類似於continuation-local-storage npm package這樣的問題。

如果你正在使用continuation-local-storage,那麼已經可以用稱為cls-hook的async hooks來代替使用了 – 只是目前並不是使用async hooks的最好時機,所以需要謹慎使用!

Async Hooks API 在 Node.js 8 中如何工作

createHooks函數的注冊功能會被每一個非同步操作的不同生命周期事件調用。

constasyncHooks=require('async_hooks')
asyncHooks.createHooks({
init,
pre,
post,
destroy
})


了解更多Async Hooks,或查看正在進行的工作文檔。這些函數將會根據處理程序對象的生命周期事件選擇性觸發。

N-API 介紹

N-API是用於構建原生插件的API。它獨立於底層JavaScript運行時,並作為Node.js自身的一部分進行維護。這么做的目的是保證應用程序二進制介面(ABI)在不同Node.js版本之間能夠保持穩定。

N-API的目的是將附加組件和基礎JavaScript引擎中的更改區分開,以便原生插件在不需要重新編譯情況下,就可以運行不同的Node.js版本。

了解更多N-API信息。

Node.js 8 中的緩沖區安全性改進

在Node.js 8版本之前,使用new Buffer(Number)構造函數分配的緩沖區並未使用ZEROS初始化內存空間。結果導致新的Buffer實例可能包含敏感信息,容易導致安全問題。

雖然這是一個用於提高創建新Buffer性能的決定,但是對大多數人來說,並不打算這么使用。因此從Node.js 8開始,使用new Buffer(Number)或Buffer(Number)分配的Buffers會被ZEROS自動填充。

將 V8 升級到 5.8:TurboFan & Ingnition

使用Node.js 8版本,底層的V8 JavaScript引擎也會更新。

對於Node.js用戶來說,最大的變化就是引入TurboFan和Ignition。Ignition是V8的解釋器,TurboFan是優化編譯器。

「Ignition和TurboFan的聯合使用已經開發了近3½年,它代表了V8團隊集體認識的最終結果,是V8團隊收集了JavaScript的實測性能並仔細分析了Full-codegen的缺點和Crankshaft的結果。這也是能夠在未來幾年內繼續優化JavaScript語言體系的基礎。「 - Daniel Clifford和V8團隊

目前V8的編譯管道如下圖所示。

新管道大大降低了V8團隊的技術負擔,並實現了很多之前無法實現的改進。

了解更多TurboFan and Ignition和 TurboFan Inlining Heuristics 。

將 npm 升級到 5.0.0

新的Node.js 8版本還附帶npm 5 - 最新版本的npm CLI。

新 npm 版本的亮點:

一種新的標准化的鎖定文件功能,用於跨包管理器的兼容性(package-lock.json),以及一種用於shrinkwrap的新格式和語義

--save 已經不再需要了,因為所有的安裝將默認保存

node-gyp現在支持Windows的node-gyp.cmd

新的發布版本將會包括sha512和sha1校驗

Node.js 8 版本中的其它顯著改變

Buffer

Buffer方法現在接受Uint8Array作為輸入

Child Process

Argument和Kill信號驗證得到改善

Child Process方法接受Uint8Array作為輸入

Console

使用控制台方法時,錯誤事件發送現在受到了抑制

Domains

Native Promise實例現在是域感知的

文件系統

實用程序類fs.SyncWriteStream已被棄用

已棄用的fs.read( )字元串介面已被刪除

HTTP

溢出的Cookie headers會被連接成一個字元串

該httpResponse.writeHeader( )方法已被棄用

Stream

Stream現在支持destroy( )和_destroy( ) API

TLS

該rejectUnauthorized選項現在默認為true

URL

WHATWG URL的實現,現在是Node.js API完全支持的

Node.js 8 下一步要做什麼

Node.js 8版本令我們興奮,因為它包含了很多有趣的提升,例如Async Hooks API,這些API在當前的文檔狀態是很難掌握的。我們將盡快開始使用新版本,並盡快提供給用戶新功能的更詳細說明。

閱讀全文

與編譯turbofan相關的資料

熱點內容
小天才app怎麼升級v242 瀏覽:544
簡單手工解壓玩具製作大全 瀏覽:927
免費編程電子書 瀏覽:869
想玩游戲什麼app最合適 瀏覽:560
安卓手機如何用airportspro 瀏覽:448
怎麼清理idea編譯緩存 瀏覽:951
鏡頭app怎麼推廣 瀏覽:437
什麼app隨便看電視劇 瀏覽:307
2021程序員薪酬 瀏覽:708
糖豆廣場怎麼下載app 瀏覽:213
qtvs2019選哪個編譯器 瀏覽:124
壓縮空氣管能焊嗎 瀏覽:284
linux中yum命令 瀏覽:397
在職演算法工程師 瀏覽:706
電碼加密函數方法有幾種 瀏覽:802
後綴是pdf 瀏覽:720
pr導出壓縮 瀏覽:32
命令語氣 瀏覽:245
脊柱解剖pdf 瀏覽:714
plc入門編程題目及答案 瀏覽:383