首頁 web前端 js教程 JavaScript的核心:它是在C還是C上構建的?

JavaScript的核心:它是在C還是C上構建的?

May 05, 2025 am 12:07 AM
c/c++

JavaScript不是在C或C上構建的;這是一種解釋的語言,在通常用c編寫的引擎上運行。 1)JavaScript被設計為用於Web瀏覽器的輕巧,解釋的語言。 2)發動機從簡單的口譯員演變為JIT編譯器,通常在C中,提高了性能。 3)用C編寫的V8引擎將JavaScript編譯為本機機器代碼,從而提高了執行速度。 4)C的功能對於構建複雜的JavaScript引擎至關重要,但是JavaScript的語法和語義仍然獨立。

JavaScript \的核心:它是在C還是C上構建的?

JavaScript是一種徹底改變網絡開發的語言,經常引起人們對其基本架構的好奇心。許多人想知道:“ JavaScript是建立在C還是C上的?”讓我們深入研究這個引人入勝的話題,並探討JavaScript的核心,其演變以及它如何與這些基礎語言相互作用。

JavaScript的核心不是直接建立在C或C上。相反,這是一種在引擎上運行的解釋語言,通常用C或其他低級語言編寫。最著名的JavaScript引擎是V8,由Google為Chrome and Node.js開發,實際上是用C編寫的。但是,這並不意味著JavaScript本身是“構建在” c上的。相反,使用C進行了解釋和執行JavaScript的引擎。

讓我們深入研究這種關係,並探索JavaScript核心的複雜性。


JavaScript的成立可以追溯到1995年,由Brendan Eich在Netscape上創建。最初被稱為摩卡(Mocha),重命名為JavaScript以利用Java的受歡迎程度,儘管兩種語言完全不同。 JavaScript被設計為一種輕巧,解釋的語言,可以在Web瀏覽器中運行,使其成為動態Web內容的關鍵工具。

第一個JavaScript引擎是用各種語言編寫的簡單口譯員,包括隨著時間的流逝,隨著對更好性能的需求的增長,引擎演變為“ Just-time(JIT)編譯器”,由於其性能和系統級別的功能,它們通常用C編寫。這種演變標誌著JavaScript的執行模型的重大轉變,從純解釋到結合解釋和編譯的混合模型。

Google於2008年推出的V8引擎改變了遊戲規則。 V8在執行之前將JavaScript直接編譯為本機機器代碼,從而極大地提高了性能。用C編寫的V8的架構展示了C的效率如何利用以提高JavaScript的執行速度。出於類似原因,其他著名的引擎(如Spidermonkey(Mozilla)和JavaScriptCore(Apple)也使用C。

這是JavaScript如何通過V8引擎與C相互作用的一個簡單示例:

 // JavaScript代碼
功能問候(名稱){
    返回`您好,$ {name}! `;
}

console.log(ettry(“ world”));
登入後複製

該JavaScript代碼在V8引擎上運行時,將通過V8的C -Written組件轉換為本機機器代碼。引擎的內部設備,例如解析器,優化器和垃圾收集器,都在c中實現。

有人可能會問,為什麼不將C用於這些引擎? C提供面向對象的編程功能,模板和豐富的標準庫,這對於構建像JavaScript引擎(例如JavaScript引擎)至關重要。 C比C更複雜,它提供了對現代JavaScript引擎至關重要的更好的抽象和性能優化。

但是,對發動機C的依賴並不意味著JavaScript本身是“構建在” c上的。 JavaScript仍然是一種高級,解釋的語言,其語法和語義與c無關。該發動機僅提供JavaScript有效運行的環境。

在考慮這種體系結構的優勢和潛在陷阱時,會想到幾點:

  • 性能:用於發動機的C使用C可以進行重大的性能改進,這對於現代Web應用程序至關重要。但是,這也意味著C代碼中的任何錯誤或效率低下都可能影響JavaScript的性能。

  • 複雜性:C的複雜性可以導致發動機的開發和維護更具挑戰性。從事JavaScript引擎的開發人員必須精通JavaScript和C,這可能是陡峭的學習曲線。

  • 安全性:由於JavaScript引擎是用C編寫的,因此可以利用C代碼中的任何安全漏洞,從而影響JavaScript應用程序的安全性。

  • 可移植性:雖然JavaScript本身是高度便攜式的,但需要針對不同平台編輯用C的發動機,這可以在不同環境中引入行為上的不一致性。

以我的經驗,使用JavaScript並了解其基本引擎一直在啟發。我親眼目睹了V8引擎中的優化如何在Node.js應用程序中導致顯著的性能提高。但是,當調試引起引擎C內部的問題時,我也遇到了挑戰,這可能令人生畏。

總結一下,JavaScript的核心不是在C或C上構建的;這是一種解釋的語言,它依賴於通常用C的引擎來有效執行。 JavaScript和C之間的這種關係證明了將高級語言與低級優化相結合以創建穩健和性能係統的力量。當您進一步探索JavaScript時,了解這種動態可以加深您對語言及其生態系統的欣賞。

以上是JavaScript的核心:它是在C還是C上構建的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1229
24
為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和? 為什麼在C/C++中,結構體的sizeof不等於每個成員的sizeof總和? Aug 26, 2023 am 09:29 AM

sizeof()所獲得的結構類型元素的大小並不總是等於每個單獨成員的大小。有時編譯器會添加一些填充以避免對齊問題。所以尺寸可能會改變。當結構成員後面跟著一個尺寸較大的成員或位於結構末端時,將添加填充。不同的編譯器有不同類型的對齊約束。在C標準中,總對齊結構取決於實作。情況1在這種情況下,雙精度z為8位元組長,大於x(4位元組))。因此又增加了4個位元組的填充。此外,短類型資料y在記憶體中具有2位元組空間,因此添加了額外的6位元組作為填充。範例程式碼#include<stdio.h>structmyS

php與c#的差別有哪些 php與c#的差別有哪些 Jun 02, 2023 pm 01:45 PM

php與c#的差異有:1、語言型別系統不同,PHP屬於動態,而C#為靜態型別;2、使用的平台不同,PHP可實現跨平台,而C#為Windows專屬;3、程式設計範式不同,PHP支援物件導向、過程化和函數式編程,C#更傾向於物件導向編程;4、執行速度不同,PHP速度更快,C#相對較慢;5、應用場景不同,PHP應用於Web開發、伺服器等, C#用於Windows桌面和網路應用程式。

使用Clang工具建立一個C/C++程式碼格式化工具 使用Clang工具建立一個C/C++程式碼格式化工具 Aug 26, 2023 pm 01:09 PM

Inthistutorial,wewillbediscussingaprogramtocreateaC/C++codeformattingtoolwiththehelpofclangtools.SETUPsudoaptinstallpythonsudoaptinstallclang-format-3.5然後我們將在當前用戶具有讀寫權限的位置創建一個Python檔案。範例importoscpp_extensions=(".cxx",".cpp&

在C/C++中,有預增和後增兩種操作 在C/C++中,有預增和後增兩種操作 Aug 25, 2023 pm 02:25 PM

這裡我們來看看什麼是C或C++中的前自增和後自增。前自增和後自增都是自增運算子。但它們幾乎沒有什麼區別。前自增運算子首先遞增一個變數的值,然後將其分配給其他變量,但在後自增運算子的情況下,它首先分配給一個變數變量,然後增加值。範例#include<iostream>usingnamespacestd;main(){  intx,y,z;  x=10;  y=10;&nb

一文詳解vscode配置C/C++運行環境【保母級教學】 一文詳解vscode配置C/C++運行環境【保母級教學】 Feb 27, 2023 pm 07:33 PM

VScode中怎麼開發置C/C++?怎麼配置C/C++環境?以下這篇文章跟大家分享一下VScode配置C/C++運行環境教學(保母級教學),希望對大家有幫助!

在C/C++中,strcpy()函數是用來將一個字串複製到另一個字串的函數 在C/C++中,strcpy()函數是用來將一個字串複製到另一個字串的函數 Sep 09, 2023 am 08:49 AM

函數strcpy()是一個標準函式庫函數。它用於將一個字串複製到另一個字串。在C語言中,它在“string.h”頭檔中聲明,而在C++語言中,它在cstring頭檔中聲明。它會傳回指向目的地的指標。這是C語言中strcpy()的語法,char*strcpy(char*dest,constchar*src);strcpy()的一些關鍵點。它將整個字串複製到目標字串中。它替換整個字串而不是追加它。它不會改變來源字串。以下是C語言中strcpy()的範例:範例 線上示範#in

從C/C到JavaScript:所有工作方式 從C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

C/C++程式用來計算一個數的階乘中的尾隨零​​的數量 C/C++程式用來計算一個數的階乘中的尾隨零​​的數量 Aug 29, 2023 pm 12:29 PM

這裡我們將了解如何計算任意數字的階乘結果中尾隨0的數量。因此,如果n=5,則5! =120。只有一個尾隨0。對於20!,它將是4個零作為20!=2432902008176640000。最簡單的方法就是計算階乘併計算0。但對於較大的n值,這種方法會失敗。所以我們將採用另一種方​​法。如果質因數是2和5,那麼尾隨零就會出現。如果我們計算2和5,我們就可以得到結果。為此,我們將遵循此規則。尾隨0=階乘(n)素因數中5的計數演算法countTrailingZeros(n)begin &

See all articles