如何創建比C語言更快的編程語言?

【CSDN編譯整理】近日,beza1e1上發表了一篇博客《Faster than C》,在Hacker NewsReddit Programming上引發了開發者們的激烈討論。現將此文編譯,我們一起來探討下。

單從編程語言特性來判斷,雖然Fortran語言也以快而著稱,但開發者們還是將C語言稱之為領導者。開發者創建新一門語言通常以C語言為參照對象,將語言編譯時間與C語言進行對比,會因比C語言慢多少而引以自傲。然而,很少有語言能夠擊敗C。

那么,什么樣的語言才能比C更快呢?

更好的別名機制(Better Aliasing Information)

別名實際上是指兩個引用指向同一個內存位置。例如,典型的內存復制(not memcpy from stdlib.h!)

  1. void*?memcopy(void*?dst,?const?void*?src,?size_t?count)?{ ?
  2. ???while?(count--)?*dst++?=?*src++; ?
  3. ???return?dst; ?
  4. }?

根據目標架構,編譯器利用代碼對此進行大量的優化。比如,X86利用SSE指定MOVDQU,它可以復制16字節,而非4字節(sizeof(void*))。然而,因為Aliasing(別名),dst中以src+1為例,在這種情況下,結果在dst出現的第一句一定是*src,由于C語義的原因,編譯器不允許使用MOVDQU。

在C99中新增了限制性關鍵字,我們在這里使用的編碼src和dst與其他地方引用的不同。在某些情況下這種機制比較受用,能夠起到幫助,但在我們的例子中卻不受用。

Fortran語義稱函數參數從未有過別名(alias ),Fortran中單獨有數組類型,而在C中,數組實質上是指針。這就是為什么Fortran經常比C更快的原因以及為什么依然要在Fortran中編譯數值庫的原因,當然它還涉及到指針算法的成本問題。

因此,想要創建一門比C更快的語言應該提供更容易被編譯器處理的別名機制。

在編譯階段完成運算(Push Computation to Compile-Time)

在編譯時應當減少運行時間,當然,在C編譯器像1+2這樣的案例,加法運算在編譯階段就完成了。編程語言利用完美的元編程語言能夠使程序員可以做一些特定優化的應用。一個簡單的實例,比如fib(20)可以寫成6765。一個真實的例子,Eigen C++ library for linear algebra通過使用C++模板來避免復制和一些計算指令 。Lisp是宏觀系統技術之父。比如,一個學生使用Scheme的編碼奇聞。基本上,程序員可以在編譯過程中修改抽象的語法樹,用這樣的元編程特性來權衡是很復雜的。程序員往往會低估了如何編譯正確宏的困難性如同他們會低估如何編譯正確的并發程序一樣。

一門語言的設計者應該好好思考下元編程。在編譯的時候多思考要像C++ 模板那樣能夠提供多種益處的性能。

運行優化(Runtime Optimization)

在運行時,有動態信息顯示不適用于靜態編譯器,C語言可以復制任何一個特定的示例,一般情況下,它是不可行的。該技巧只解決了問題的一小部分。

運行時優化whole-world變得相當的容易。盡管這可能是靜態的,C語義(編譯單元)和強制性的預處理器使其編譯起來更難,盡管Python通過inlining across file borders(PyPy)擊敗了C。

當然也有使用JIT,但在嵌入式系統語言是不適宜的。雖然Java,C#或者是其他語言擊敗了C,但它們不會威脅到C的用戶群。

結束語:

想要創建一門比C要快的新的語言,更好的別名機制是我唯一確定能提高語言速度的方法,因為在C中無法實現Fortran的速度,另外就是思考如何用更簡單的方法編寫出更快的程序。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452279.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面向對象方法學

面向對象技術強調在軟件開發過程中面向客觀世界或問題域中的事物,采用人類在認識客觀世界的過程中普遍運用的思維方法,直觀、自然地描述客觀世界中的有關事物。 面向對象的分析方法是利用面向對象的信息建模概念,如實體、關系、屬性等&#x…

學成在線--3.CMS頁面管理開發(自定義條件查詢)

文章目錄0.需求分析1.服務端--Dao2.服務端--Service3.服務端--Controller4.前端1)page_list.vue中增加查詢表單2)page_list.vue中添加數據模型對象3)在鉤子方法中構建siteList站點列5.Api調用1)修改 cms.js,向服務端傳…

動態生成表格、隱藏表格、選中刪除任意行、jquery、輸入驗證

PS: 游戲公司后臺開發,工作模式:996。 于是寫博客這事也荒廢了.... 想想還是寫一點吧。 呵呵,請不要笑話我注釋寫這么多,習慣了,我上班寫代碼都是有注釋的。 我建兩個相似的表是為了,給后臺使…

安裝 PrestaShop 1.6 - 詳細的安裝指南

2019獨角獸企業重金招聘Python工程師標準>>> 詳細的安裝指南 下載和解壓 PrestaShop 程序代碼包 你可以從 PrestaShop 官方下載最新的版本,下載地址為:http://www.prestashop.com/en/download. 這里你只有一個選項,只能下載最新的…

tinydate.js[v0.3] 新增了字符串格式化為日期對象的函數

更新說明 加入了String類型的擴展成員 convertToDate() 可以直接將 字符串格式的日期轉換為Date對象。加入了String類型的擴展成員 convertToTimeSpan() 可以將 字符串格式的日期轉換為TimeSpan對象。修復了日期格式化為字符串的format函數中的bug。tinydate.js v0.3 Date.prot…

面向對象方法學的四個要點

面向對象方法學的要點面向對象方法學的出發點和基本原則,是盡可能模擬人類習慣的思維方式,使開發軟件的方法與過程盡可能接近人類認識世界解決問題的方法與過程,也就是使描述問題的問題空間(也稱為問題域)與實現解法的解空間(也稱為求解域)在…

學成在線--4.CMS頁面管理開發(新增頁面)

文章目錄1.定義新增頁面接口1)在model工程中定義響應模型2)在api工程中添加接口2.新增頁面服務端開發1)Dao2)Service3)Controller3.新增頁面前端開發1)創建page_add.vue2)配置路由3)…

嵌套For循環性能優化

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。1 案例描述某日,在JavaEye上看到一道面試題,題目是這樣的:請對以下的代碼進行優化 Java代碼 for (int …

docker-ce安裝

1、安裝 sudo yum -y install docker 2、加入開機自啟systemctl enable docker轉載于:https://www.cnblogs.com/runnerjack/p/8618524.html

python-study-17

復習 上節課復習1、什么是模塊模塊是一系列功能的集合體2、為何用模塊拿來(內置或第三方的模塊)主義,提升開發效率自定義模塊可以讓程序的各部分組件重用模塊內的功能3、如何用模塊大前提:模塊是被執行文件導入使用,模…

面向對象方法學的優點

1.與人類習慣的思維方法一致面向對象的軟件技術以對象為核心,用這種技術開發出的軟件系統由對象組成。對象是由描述內部狀態表示靜態屬性的數據,以及可以對這些數據施加的操作(對象的動態行為),封裝在一起所構成的統一體。面向對象的設計方法…

如何學好C語言

我相信,這可能是很多朋友的問題,我以前也有這樣的感覺,編程編到一定的時候,發現能力到了瓶頸,既不深,也不扎實,半吊子。比如:你長期地使用Java和.NET ,這些有虛擬機的語言…

學成在線--5.CMS頁面管理開發(修改頁面)

文章目錄1.修改頁面流程1)前端邏輯2)后端邏輯2.修改頁面接口定義3.后端開發--Dao4.后端開發--Service5.后端開發--Controller1)根據id查詢頁面2)保存頁面信息6.前端開發--頁面處理流程7.前端開發--編寫page_edit.vue8.前端開發--配…

在樹莓派上播放音頻

https://blog.csdn.net/qinxiandiqi/article/details/39155593轉載于:https://www.cnblogs.com/Baronboy/p/9206164.html

Map四種獲取key和value值的方法,以及對map中的元素排序

2019獨角獸企業重金招聘Python工程師標準>>> 獲取map的值主要有四種方法,這四種方法又分為兩類: 一類是調用map.keySet()方法來獲取key和value的值, 另一類則是通過map.entrySet()方法來取值, 兩者的區別在于,前者主要…

配置Oracle Instant Client環境

1.配置Oracle Instant Client環境 到Oracle官網下載Oracle Instant Client,注意選擇x86平臺,Toad只認32位的Oracle Instant Client。至于版本號,沒有特別要求,版本向下兼容。 桌面上,右鍵點“我的電腦”,選…

學成在線--6.CMS頁面管理開發(刪除頁面)

文章目錄0.刪除用戶邏輯1.刪除頁面接口定義2.后端開發--Dao3.后端開發--Service4.后端開發--controller5.前端開發--page_list.vue添加刪除按鈕6.前端開發--page_list.vue編寫刪除事件7.后端開發--Api方法定義Api方法0.刪除用戶邏輯 1)前端邏輯 (1&…

諾基亞是“不跟隨”還是跟不上?

在Android和iPhone為主流的環境下,諾基亞用“不跟隨”的口號表明自己欲保持個性,但是否也意味著其固步自封,跟不上時代? 5年市值縮水超900億歐元,全球業績連續4個季度虧損,更為可怕的是,被視為…

HTTP 協議(詳解)

HTTP協議簡介:HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于萬維網(www.world wide web)服務器與本地瀏覽器之間傳輸文本的傳輸協議。 http請求協議與相應協議HTTP協議包含瀏覽器發送數據到服務器需要遵循…

對象的特點

對象有如下一些基本特點。(1) 以數據為中心。操作圍繞對其數據所需要做的處理來設置,不設置與這些數據無關的操作,而且操作的結果往往與當時所處的狀態 (數據的值)有關。 (2) 對象是主動的。它是進行處理的主體。不能從外部直接加工它的私有數據&a…