自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

熱點(diǎn)技術(shù):GCC6 即將帶來(lái)的新特性

開(kāi)發(fā) 前端
GCC項(xiàng)目在每年的三/四月份都會(huì)作出重大更新。三月即將到來(lái),GCC項(xiàng)目的工程師們正忙著GCC 6的發(fā)布。我將在百忙之中抽出一點(diǎn)時(shí)間,簡(jiǎn)短地談?wù)撘恍〨CC 6的新特性。

GCC項(xiàng)目在每年的三/四月份都會(huì)作出重大更新。三月即將到來(lái),GCC項(xiàng)目的工程師們正忙著GCC 6的發(fā)布。我將在百忙之中抽出一點(diǎn)時(shí)間,簡(jiǎn)短地談?wù)撘恍〨CC 6的新特性。

 

警告

GCC力圖實(shí)現(xiàn)一些警告,這些警告可以幫助開(kāi)發(fā)者在編譯時(shí)發(fā)現(xiàn)錯(cuò)誤,而不是讓潛在的危險(xiǎn)代碼被默默接受并最終部署。對(duì)于 GCC 6,主要增加的是警告如下:

誤導(dǎo)性的縮進(jìn):對(duì)誤導(dǎo)性縮進(jìn)進(jìn)行警告的目的是檢測(cè)出代碼結(jié)構(gòu)中與人類理解不相符的代碼塊。最明顯的例子就是 2014年的“Apple SSL”bug,不恰當(dāng)?shù)目s進(jìn)看上去是將GOTO語(yǔ)句放在了IF條件語(yǔ)句里面,而實(shí)際上呢并沒(méi)有放在IF的判斷分支內(nèi)。更多的細(xì)節(jié)見(jiàn)David Malcolm的一篇博客。

同值比較:代碼中將一個(gè)對(duì)象跟它自己比較或者跟始終與同一值比較的情況,通常是代碼中的筆誤。GCC 6將對(duì)這種比較進(jìn)行警告。

重復(fù)的條件:GCC 6將對(duì)IF-ELSE-IF比較鏈中重復(fù)的條件進(jìn)行警告。

負(fù)移位值和移位溢出: GCC現(xiàn)在將對(duì)左移一個(gè)負(fù)值或者左移溢出進(jìn)行警告。這種行為通常會(huì)導(dǎo)致未定義的結(jié)果,相比于運(yùn)行時(shí)產(chǎn)生未定義結(jié)果,在編譯時(shí)就報(bào)出警告是更明智的選擇。

空引用:GCC更積極的檢測(cè)那些由于空指針引用或者返回空值引起錯(cuò)誤和未定義行為的邏輯路徑,或者將空值賦給明確要求非空的函數(shù)參數(shù)的情況。

特性

每一個(gè)版本的gcc都會(huì)帶來(lái)各種新的特性,這些新特性讓使用GCC開(kāi)發(fā)變得更加容易。即將到來(lái)的GCC 6版本的亮點(diǎn)包括:

OpenMP 4.5:OpenMP API提供了一組簡(jiǎn)單、但高度靈活的接口來(lái)開(kāi)發(fā)并行C、C++和Fortran程序。2015年11月發(fā)布了OpenMP 4.5規(guī)范,該規(guī)范在現(xiàn)有的OpenMP4.0基礎(chǔ)上有了很多改進(jìn)。GCC 6將為C和C++提供OpenMP 4.5的支持,對(duì)Fortran提供OpenMP 4支持以及對(duì)offloading一定程度的支持,尤其對(duì)于Intel MIC處理器。

段寄存器支持: x86/x86_64是一個(gè)分段的內(nèi)存架構(gòu),但是GCC很大程度上忽略了Intel架構(gòu)這方面的特性,而是依靠隱含的段寄存器。底層代碼比如linux內(nèi) 核或者glibc通常必須意識(shí)到分段體系結(jié)構(gòu),傳統(tǒng)上采用匯編語(yǔ)句進(jìn)行顯式的段寄存器操作。從GCC 6起,變量在聲明時(shí)就可以指定到特殊的段,使用這些內(nèi)存中變量時(shí)顯式的段寄存器就會(huì)被操作。

增強(qiáng)位置和其他診斷工作:GCC 6的診斷機(jī)制引入了“增強(qiáng)位置”特性。這個(gè)特性允許CC跟蹤一定范圍的診斷信息,而不僅僅是單個(gè)點(diǎn)。舉個(gè)例子,一個(gè)復(fù)雜表達(dá)式中的有疑問(wèn)的子表達(dá)式可以被 識(shí)別出來(lái)并向開(kāi)發(fā)人員強(qiáng)調(diào)。診斷現(xiàn)在也包括“修復(fù)”性提示,建議開(kāi)發(fā)者如何修改錯(cuò)誤的代碼。這個(gè)特性將會(huì)在David Malcolm的另一篇博客中詳細(xì)介紹。

目標(biāo)克?。?/strong>GCC6 增加了一個(gè)新的“目標(biāo)克隆”屬性,用于指明特定函數(shù)需為不同的ISA變量進(jìn)行多次編譯,并創(chuàng)建程序分發(fā)器來(lái)檢測(cè)這些正在使用中的ISA并調(diào)用適合的克隆。這使得對(duì)ISA的不同版本提供”特殊運(yùn)行”程序支持更為容易。

擴(kuò)展存數(shù)規(guī)則:GCC6 新增一個(gè)新的pragma“scalar_storage_order”,用于指定在一個(gè)結(jié)構(gòu)內(nèi)字段的字節(jié)順序。如果目標(biāo)的字節(jié)順序不同于正在被訪問(wèn)的對(duì)象的字節(jié)順序,GCC6會(huì)自動(dòng)生成代碼來(lái)按需byte交換這些對(duì)象。

卸載/HSA:GCC5 最初已經(jīng)支持通過(guò)OpenMP來(lái)卸載到MIC,通過(guò)OpenACC卸載到Nvidia GPUS. GCC6改進(jìn)了這些性能并新增了通過(guò)HSA加速器來(lái)卸載。

語(yǔ)言和運(yùn)行時(shí)

GCC 6 現(xiàn)在的默認(rèn)值是 C++ 14.  GCC 6 現(xiàn)在包括 C++ Concepts.

C++運(yùn)行時(shí)庫(kù)現(xiàn)在支持特殊的數(shù)學(xué)函數(shù) (ISO/IEC 29124:2010)

支持 C++17 的實(shí)驗(yàn)功能

std::uncaught_exceptions

unique_key maps 的 try_emplace 和 insert_or_assign

用于訪問(wèn)容器和數(shù)組的非成員函數(shù) std::size, std::empty 和 std::data

std::invoke

std::shared_mutex

std::void_t 和 std::bool_constant

實(shí)驗(yàn)性的支持文件系統(tǒng)技術(shù)規(guī)范

實(shí)驗(yàn)支持大多數(shù)圖書(shū)館基本技術(shù)規(guī)范,包括 shared_ptr 多態(tài)性內(nèi)存資源和陣列支持第二個(gè)版本

矩陣相乘的 intrinsic 現(xiàn)在內(nèi)聯(lián)在 Fortran 前端簡(jiǎn)單的情況。

當(dāng)然,你可以找到和嘗試更多的優(yōu)化和修正。我甚至不會(huì)試圖枚舉所有發(fā)生在這個(gè)空間。這與以前的發(fā)布一樣,只要我們可以,我們將盡可能的提高所產(chǎn)生的代碼和修復(fù)更多報(bào)告的錯(cuò)誤。

責(zé)任編輯:王雪燕 來(lái)源: oschina
相關(guān)推薦

2024-02-19 10:15:37

JavaScript正則表達(dá)式ECMAScript

2023-01-09 14:36:51

BudgieLinux

2023-11-26 18:00:00

Svelte 5層級(jí)重寫(xiě)

2013-09-13 10:25:47

4G通信

2010-09-03 08:47:51

2021-08-02 23:12:04

iOS蘋(píng)果系統(tǒng)

2022-06-27 23:21:30

元宇宙購(gòu)物體驗(yàn)AR/VR

2011-01-06 11:31:15

部署IPv6IPv6

2022-05-26 16:35:45

6G無(wú)線通信移動(dòng)通信

2013-09-09 13:48:53

SDN

2014-02-19 09:14:44

光纖通道第6代

2020-11-25 08:15:20

數(shù)字貨幣區(qū)塊鏈比特幣

2012-03-02 11:35:12

微軟Windows 8

2017-08-11 12:54:23

工業(yè)4.0互聯(lián)網(wǎng)信息化

2012-04-17 09:42:24

Ubuntu 12.0新特性

2011-11-03 10:35:52

2021-02-21 09:22:00

區(qū)塊鏈行業(yè)發(fā)展物聯(lián)網(wǎng)

2009-06-16 11:23:00

InstrumentaJava SE 6新特

2012-02-21 22:31:09

Windows 8
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)