2501d,d17年前就有了編譯時

D在17年前就有了編譯時!D功能穩步進入其他語言.
:此處的編譯時關鍵字指示在編譯時運行它前面的塊.

D不使用關鍵字來觸發它.觸發它的是"常 式".當然,必須在編譯時可計算式.如:

int sum(int a, int b) => a + b;
void test()
{int s = sum(3, 4); //在運行時運行,enum e = sum(3, 4); //在編譯時運行
}

只要避免使用非常全局變量,I/O調用系統函數(如malloc()),無需更改,可在編譯時運行相當大比例的函數.
甚至可(使用D的自動管理內存)用它分配內存.

這是我最喜歡的用法之一.我曾經編寫一個單獨的程序生成靜態表.用編譯時執行函數時,不再需要它了.下面是一例:

__gshared uint[256] tytab = tytab_init;
extern (D) private enum tytab_init =
() {uint[256] tab;foreach (i; TXptr)        { tab[i] |= TYFLptr; }foreach (i; TXptr_nflat)  { tab[i] |= TYFLptr; }foreach (i; TXreal)       { tab[i] |= TYFLreal; }/*為簡潔起見,刪除了更多行*/return tab;
} ();

計算數組然后返回它的λ返回'tytab'數組的初化器.
它的全部榮耀的鏈接.

CTFE另一個常見用法是用來創建DSL.

:感謝你創建D!.
別客氣!
:在每臺x86計算機上都是相同值?
它在所有機器都是相同值,因為整數類型是(不依賴實現)固定大小的,且2的補碼算術強制性的.

但是,因為計算常的順序不同,浮點結果可能會有所不同.如,x87計算精度更高,然后僅在寫入內存時圓整它.

:我接著要感謝你制作D.我仍沒有找到一個我可以/會實際使用的更多編譯時功能的語言.所以我仍在使用D.
有添加類似ZigsetFloatMode(strict)等的想法嗎?我有1個或2個項目想法,對某些計算,我需要確定性然后是性能.但仍非常需要浮點所能提供的性能.

謝謝你的客氣話!
浮點確定性最佳選擇是堅持使用雙精.然后,在64位代碼中,使用堅持使用64位算術的XMM寄存器和指令完成雙精數學運算.

實際上,Zig也允許這樣做(在運行時編譯時環境中調用相同函數):

fn square(num: i32) i32 {return num * num;
}
pub fn main() void {_ = square(2);_ = comptime square(3);
}

如果內容編譯時不兼容,則編譯時調用產生編譯錯誤(恕我直言,這是一個重要的功能,因為如果期望在編譯時運行的代碼因為某些輸入參數已按運行時求值更改從編譯時,因此意外進入運行時,它會敲響警鐘).

D的ImportC也可用C代碼CTFE!

int sum(int a, int b) { return a + b; }
_Static_assert(sum(3, 4) == 7, "你看,編譯時檢查!");

為什么C標準不添加它?它效果很好!

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

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

相關文章

Taro地圖組件和小程序定位

在 Taro 中使用騰訊地圖 1.首先在項目配置文件 project.config.json 中添加權限: {"permission": {"scope.userLocation": {"desc": "你的位置信息將用于小程序位置接口的效果展示"}} }2.在 app.config.ts 中配置&#x…

深度學習——回歸實戰

線性回歸: 線性:自變量和應變量之間是線性關系,如:y wx b 回歸:擬合一條曲線,使真實值和擬合值差距盡可能小 目標:求解參數w和b 所用算法:梯度下降算法 梯度下降&#…

Angular 最新版本和 Vue 對比完整指南

1. Angular 最新版本 當前 Angular 最新穩定版本是 Angular 17(2024年初) 2. 主要區別對比表 特性 | Angular | Vue 框架類型 | 完整框架 | 漸進式框架 默認語言 | TypeScript | JavaScript/TypeScript 數據處理 | RxJS | Promise/async/await 架構特點 | 依賴注入,…

單片機-串轉并-74HC595芯片

1、74HC595芯片介紹 74HC595 是一個 8 位串行輸入、并行輸出的位移緩存器,其中并行輸出為三態輸出(即高電平、低電平和高阻抗)。 15 和 1 到 7 腳 QA--QH:并行數據輸出 9 腳 QH 非:串行數據輸出 10 腳 SCLK 非&#x…

探索AI在地質科研繪圖中的應用:ChatGPT與Midjourney繪圖流程與效果對比

文章目錄 個人感受一、AI繪圖流程1.1 Midjourney(1)環境配置(2)生成prompt(3)完善prompt(4)開始繪圖(5)后處理 1.2 ChatGPT不合理的出圖結果解決方案 二、主題…

【微服務】6、限流 熔斷

線程隔離與容錯處理 本視頻主要講解了在購物車業務中,因商品微服務響應慢導致的問題及解決方案,重點介紹了線程隔離后查詢購物車業務不可用的情況,以及如何通過Fallback邏輯進行緩解,包括配置Feign調用為簇點資源、添加Fallback邏…

springboot+vue使用easyExcel實現導出功能

vue部分 // 導出計算數據exportDataHandle(id) {this.$http({url: this.$http.adornUrl(/xxx/xxx/exportCalDataExcel),method: post,data: this.$http.adornData({id: id}),responseType: blob, // 重要:告訴axios我們希望接收二進制數據}).then(({data}) > {c…

25年01月HarmonyOS應用基礎認證最新題庫

判斷題 “一次開發,多端部署”指的是一個工程,一次開發上架,多端按需部署。為了實現這一目的,HarmonyOS提供了多端開發環境,多端開發能力以及多端分發機制。 答案:正確 《鴻蒙生態應用開發白皮書》全面闡釋…

ELK實戰(最詳細)

一、什么是ELK ELK是三個產品的簡稱:ElasticSearch(簡稱ES) 、Logstash 、Kibana 。其中: ElasticSearch:是一個開源分布式搜索引擎Logstash :是一個數據收集引擎,支持日志搜集、分析、過濾,支持大量數據…

Dubbo-筆記隨記一

一、實戰 1 . Springboot整合 1.1 服務提供者 1.1.1 依賴 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>3.2.10</version></dependency><dependency&g…

git tag

文章目錄 1.簡介2.格式3.選項4.示例參考文獻 1.簡介 同大多數 VCS 一樣&#xff0c;Git 也可以對某一時間點的版本打上標簽&#xff0c;用于版本的發布管理。 一個版本發布時&#xff0c;我們可以為當前版本打上類似于 v.1.0.1、v.1.0.2 這樣的 Tag。一個 Tag 指向一個 Commi…

ETCD滲透利用指南

目錄 未指定使用put操作報錯 未指定操作版本使用get報錯 首先etcd分為兩個版本v2和v3&#xff0c;不同的API結果無論是訪問URL還是使用etcdctl進行通信&#xff0c;都會導致問題&#xff0c;例如使用etcdctl和v3進行通信&#xff0c;如果沒有實名ETCDCTL_API3指定API版本會直接…

使用VUE3創建個人靜態主頁

使用VUE3創建個人靜態主頁 &#x1f31f; 前言&#x1f60e;體驗&#x1f528; 具體實現? 核心功能&#x1f3d7;? 項目結構&#x1f680; 用這個項目部署 Git Page &#x1f4d6; 參考 &#x1f31f; 前言 作為開發者或者內容創作者&#xff0c;我們經常需要創建靜態網頁&a…

Lua語言中常用的字符串操作函數

string.sub(s, i, j) 功能: 截取字符串 s 中從位置 i 到位置 j 的子字符串。 local s "Hello, Lua!" print(string.sub(s, 1, 5)) -- 輸出 "Hello" print(string.sub(s, 8, 11)) -- 輸出 "Lua!" string.len(s) 功能&#xff1a;將字符串長度…

llm大模型學習

llm大模型 混合專家模型&#xff08;MoE&#xff09;MoE結構路由router專家expertSwitch Transformer的典型MOE模型最后MoE總結 混合專家模型&#xff08;MoE&#xff09; 模型規模是提升LLM大語言模型性能的關鍵因素&#xff0c;但也會增加計算成本。Mixture of Experts (MoE…

Linux入門攻堅——43、keepalived入門-1

Linux Cluster&#xff08;Linux集群的類型&#xff09;&#xff1a;LB、HA、HPC&#xff0c;分別是負載均衡集群、高可用性集群、高性能集群。 LB&#xff1a;lvs&#xff0c;nginx HA&#xff1a;keepalived&#xff0c;heartbeat&#xff0c;corosync&#xff0c;cman HP&am…

HTML5 動畫效果:淡入淡出(Fade In/Out)詳解

HTML5 動畫效果&#xff1a;淡入淡出&#xff08;Fade In/Out&#xff09;詳解 淡入淡出&#xff08;Fade In/Out&#xff09;是一種常見的動畫效果&#xff0c;使元素逐漸顯現或消失&#xff0c;增強用戶體驗。以下是淡入淡出的詳細介紹及實現示例。 1. 淡入淡出的特點 平滑…

YOLOv8/YOLOv11改進 添加CBAM、GAM、SimAM、EMA、CAA、ECA、CA等多種注意力機制

目錄 前言 CBAM GAM SimAM EMA CAA ECA CA 添加方法 YAML文件添加 使用改進訓練 前言 本篇文章將為大家介紹Ultralytics/YOLOv8/YOLOv11中常用注意力機制的添加&#xff0c;可以滿足一些簡單的漲點需求。本文僅寫方法&#xff0c;原理不多講解&#xff0c;需要可跳…

Go語言的 的多態性(Polymorphism)基礎知識

Go語言的多態性&#xff08;Polymorphism&#xff09;基礎知識 在編程語言中&#xff0c;多態性是一個核心概念&#xff0c;它允許同一接口被不同的數據類型所實現&#xff0c;從而在不影響代碼結構的情況下增強代碼的靈活性和可擴展性。在Go語言中&#xff0c;多態性通過接口…

nginx運行之后顯示的是上一個項目,如何解決

重啟 Nginx 使配置生效 修改 Nginx 配置后&#xff0c;你需要重新加載或重啟 Nginx&#xff0c;以使配置生效。執行以下命令&#xff1a; sudo nginx -t # 測試配置是否正確 sudo systemctl restart nginx # 重啟 Nginxbash 復制代碼 檢查瀏覽器緩存 瀏覽器可能緩存了舊…