<tr id="tp1vn"><td id="tp1vn"><dl id="tp1vn"></dl></td></tr>
  1. <p id="tp1vn"></p>
  2. <sub id="tp1vn"><p id="tp1vn"></p></sub>
    <u id="tp1vn"><rp id="tp1vn"></rp></u>
    <meter id="tp1vn"></meter>
      <wbr id="tp1vn"><sup id="tp1vn"></sup></wbr>
      日韩第一页浮力,欧美a在线,中文字幕无码乱码人妻系列蜜桃 ,国产成人精品三级麻豆,国产男女爽爽爽免费视频,中文字幕国产精品av,两个人日本www免费版,国产v精品成人免费视频71pao
      網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

      寫給新入門的程序員,軍工級的代碼是什么樣子

      0
      分享至

      最近在監(jiān)理一個項目,因此也就看了一群程序員寫的代碼。簡單的說感受,現(xiàn)在很多程序員就是一群造糞機(jī)器,寫的代碼就是一坨屎,臭不可聞。

      當(dāng)然了,從軟件工程學(xué)、項目處理甚至于成本考慮,這群程序員做的程序并沒有什么問題。但從長遠(yuǎn)考慮這是一個劣幣驅(qū)逐良幣的過程,而且現(xiàn)在的良幣已經(jīng)被驅(qū)逐得差不多了。

      早上和這群家伙開會,會議上說的話有點重——“你們每行代碼都是對行業(yè)的侮辱!”



      為什么生這么大的氣?這是一個很小的項目,卻引入了30多個pip庫,最后卻卡在了一個質(zhì)數(shù)判斷的問題上。



      事情很簡單需要判斷出0-31這三十二個數(shù)字哪個是質(zhì)數(shù)。由于之前W君說過不要為了完成一行代碼去引用一個巨大的pip庫,就讓這群孩子們犯了愁了。

      于是就出現(xiàn)了這樣的代碼:

      def is_prime(n):if n <= 1:return Falsefor i in range(2, n - 1):if n % i == 0:# 找到了一個除數(shù),不是質(zhì)數(shù)return False# 循環(huán)結(jié)束,沒有找到除數(shù),是質(zhì)數(shù)return True

      這行代碼對不對呢?理論上是沒有錯誤的,畢竟,當(dāng)初上學(xué)的時候大多數(shù)老師會這么教的,這段程序完美的展現(xiàn)了上學(xué)的時候老師說的“指在大于1的自然數(shù)中,除了1和該數(shù)自身外,無法被其他自然數(shù)整除”的質(zhì)數(shù)最基本含義

      顯然,這比很多只會用python這種膠水語言無腦粘接各種庫的程序員強(qiáng)了那么一點點。

      不過,這件事依然不對,W君就說了一句“你們再想想”。

      于是代碼就改成了這個樣子:

      def is_prime(n):if n <= 1:return Falseif n == 2:return Truefor i in range(2, n - 1):if n % i == 0:# 找到了一個除數(shù),不是質(zhì)數(shù)return False# 循環(huán)結(jié)束,沒有找到除數(shù),是質(zhì)數(shù)return True

      程序員小A的說法是當(dāng)n=2的時候,for循環(huán)實際上是沒有執(zhí)行的,于是程序員小B則進(jìn)一步跟進(jìn)還得加上n==3的判斷:

      def is_prime(n):if n <= 1:return Falseif n == 2:return Trueif n == 3:return Truefor i in range(2, n - 1):if n % i == 0:# 找到了一個除數(shù),不是質(zhì)數(shù)return False# 循環(huán)結(jié)束,沒有找到除數(shù),是質(zhì)數(shù)return True

      W君當(dāng)時就氣笑了,說了一句“你們離真相更近了一步”,于是幾經(jīng)討論,他們拿出來了這個!

      def is_prime(n):if n <= 1:return Falseif n == 2:return Trueif n == 3:return Trueif n == 4:return Falseif n == 5:return Trueif n == 6:return Falseif n == 7:return Trueif n == 8:return Falseif n == 9:return Falseif n == 10:return Falseif n == 11:return Trueif n == 12:return Falseif n == 13:return Trueif n == 14:return Falseif n == 15:return Falseif n == 16:return Falseif n == 17:return Trueif n == 18:return Falseif n == 19:return Trueif n == 20:return Falseif n == 21:return Falseif n == 22:return Falseif n == 23:return Trueif n == 24:return Falseif n == 25:return Falseif n == 26:return Falseif n == 27:return Falseif n == 28:return Falseif n == 29:return Trueif n == 30:return Falseif n == 31:return Trueif n >= 32:return False

      小A的理由是反正只有32個數(shù)字,不妨這樣寫。緊接著W君就說了那句“你們每行代碼都是對行業(yè)的侮辱!

      這就是W君遇到的程序員的水平,能理解要判斷的數(shù)字是有限個數(shù)的,于是就給你寫出一大堆if判斷來做這件事。

      腦子這玩意是好東西,可惜現(xiàn)在很多程序員沒有這玩意。

      于是W君問干嘛不這樣寫呢?

      def is_prime(n):return n in [2,3,5,7,11,13,17,19,23,29,31]

      如果n在這個[2,3,5,7,11,13,17,19,23,29,31]列表中,直接返回真,否則返回一個數(shù)字在不在質(zhì)數(shù)列表中假難道不香嗎?

      這時候小A在說,這么牛,難道這是軍工級的代碼嗎?

      似乎所謂的“軍工級”成了一些程序員眼中高效代碼的傳說。但是還真不是這么回事,而且上面的那一行代碼的效率也并不高,畢竟python要在列表里挨個去試探n是不是在列表中,這個操作只不過是一個for循環(huán)的展開。

      再高效一些的代碼是這樣的:

      def is_prime(n):return (1 << n) & 2693408940 != 0

      理論上這是最快的方式,當(dāng)然了,這僅僅是在理論上,2693408940展開為二進(jìn)制為:10100000100010100010100010101100,在從低向高的質(zhì)數(shù)位上放“1”,其余非質(zhì)數(shù)位置上放0。我們只需要把這個二進(jìn)制串直接移動n位就可以對應(yīng)到是不是質(zhì)數(shù)的判斷上。

      最多4個CPU時鐘周期就可以判斷完畢這個數(shù)字n是不是質(zhì)數(shù)。

      而對于上面的“軍工級的代碼”查表法則需要大約2000多個時鐘周期才可以完成。

      但是誰腦子抽了才會用python算這么大的數(shù)字來移位計算呢?python根本不擅長這樣的操作。

      反而,反直覺的操作會更快:

      def is_prime(n):return n in {2,3,5,7,11,13,17,19,23,29,31}

      和前面的代碼不同,列表("[]")被改成集合("{}"),也就是把中括號改成大括號。在性能上會比python中的移位的操作快將近一半。

      那問題來了——軍工級的代碼要怎么寫呢?

      首先軍用代碼誰去python呢?這玩意狗都不用。大部分軍用代碼的編寫目前還是編譯形語言的天下,C語言都用得不多,更為普遍的是ADA。和python這些解釋形的語言相比它們更接近于硬件底層、執(zhí)行效率更高,可控性更強(qiáng),尤其是ADA,它的語法嚴(yán)謹(jǐn),天然適合安全關(guān)鍵系統(tǒng)。在咱們國內(nèi),大部分航空、航天、飛行控制、艦船控制的代碼都是ADA來寫的。

      其次,軍規(guī)代碼是有自己的規(guī)范的。例如MISRA C / MISRA C++、DO?178C、SPARK/Ada以及MIL-STD-498或者GJB 2786A一系列軟件開發(fā)標(biāo)準(zhǔn)。



      那么到了代碼層級,就遠(yuǎn)遠(yuǎn)不是前面寫了一兩行代碼這么簡單的事情了。

      軍工級代碼和普通商業(yè)代碼的最大區(qū)別,不僅僅是快,而是可靠,不是“能跑”,而是無條件正確。

      你可能會覺得這種說法有些裝,但我告訴你,軍用代碼的世界和現(xiàn)在的商業(yè)程序猿們寫業(yè)務(wù)邏輯調(diào)API、對接數(shù)據(jù)庫的世界完全不是一個宇宙。

      • 確定性(Determinism):相同輸入下,任何時刻、任何硬件平臺都必須產(chǎn)生相同輸出;
      • 形式化驗證(Formal Verification):代碼不能只是跑通單元測試,而是邏輯路徑必須被證明不會出現(xiàn)“非法狀態(tài)”;
      • 零未定義行為(No Undefined Behavior):你寫個野指針在Linux下可能沒出問題,在RTOS里就是立即炸;
      • 強(qiáng)類型/靜態(tài)分析支持:例如 Ada 的子類型約束系統(tǒng),能在編譯期就拒絕不合理狀態(tài);
      • 資源確定性:執(zhí)行時間、??臻g、緩存訪問必須全部可估算,不允許 GC、動態(tài)分配、解釋器優(yōu)化等不確定性行為。

      與此同時,你的代碼還要具有極強(qiáng)的可讀性和可驗證特性。

      以剛剛咱們的代碼為例子:

      def is_prime(n):return (1 << n) & 2693408940 != 0

      上面這種商業(yè)程序員認(rèn)為的“軍工級代碼”實際上根本就是錯誤的

      原因在于哪個大聰明給你的這個“2693408940”數(shù)字,你說從低到高凡是質(zhì)數(shù)的位上都是1就是這個“2693408940”的數(shù)字了嗎?有沒有缺掉某個數(shù)字?是不是在原理上沒有錯誤?

      “!=0” 這種不是人話的描述給軍隊的任何人看都能看懂嗎?

      在真正的軍用系統(tǒng)中,上面這種炫技式樣的代碼不僅不被提倡,甚至是被嚴(yán)令禁止的行為。

      2693408940 = 0b10100000100010100000100001001100這確實可以是某位程序員按照 0~31 范圍內(nèi)的質(zhì)數(shù)打出的一串?dāng)?shù)字位,其中第 n 位為 1 表示 n 是質(zhì)數(shù)。但這東西有幾個致命問題:首先這串?dāng)?shù)字是難以驗證來源,你只能“相信”這個數(shù)字是對的,而無法“推理”它是對的。軍用系統(tǒng)所有值必須可追溯到規(guī)范、公式或定義。而這個2693408940的推導(dǎo)過程并沒有在軟件編碼中出現(xiàn)。

      同時,這段代碼的可維護(hù)性為0,如果哪天質(zhì)數(shù)定義范圍改了,誰知道這段代碼還對不對?戰(zhàn)爭都開打了,還讓數(shù)學(xué)家來證明和定義具體哪個數(shù)字是質(zhì)數(shù)嗎?

      同樣,“!=0”不是語義,而是一個障眼法,軍工級代碼必須可讀、可分析、可驗證?!?= 0” 是個機(jī)械語言,而不是表達(dá)語義。0b10100000100010100000100001001100經(jīng)過計算非得“!=0”嗎?難道就不能直接寫真假嗎?

      所以,如果是一個軍工級代碼應(yīng)該怎么寫呢?這樣

      #include #include #define PRIME_TABLE_SIZE 32Ustatic uint8_t prime_table[PRIME_TABLE_SIZE]; /* 0 = false, 1 = true *//* 判斷一個數(shù)是否為質(zhì)數(shù)(布爾邏輯) */static bool is_prime_check(uint8_t n){    if (n <= 1U) {        return false;    }    for (uint8_t i = 2U; (i * i) <= n; ++i) {        if ((n % i) == 0U) {            return false;        }    }    return true;}/* 初始化 prime_table[] */void prime_table_init(void){    for (uint8_t i = 0U; i < PRIME_TABLE_SIZE; ++i) {        prime_table[i] = is_prime_check(i) ? 1U : 0U;    }}/* 驗證表正確性 */bool prime_table_verify(void){    for (uint8_t i = 0U; i < PRIME_TABLE_SIZE; ++i) {        uint8_t expected = is_prime_check(i) ? 1U : 0U;        if (prime_table[i] != expected) {            return false;        }    }    return true;}/* 接口函數(shù) */bool is_prime(uint8_t n){    if (n >= PRIME_TABLE_SIZE) {        return false;    }    return (prime_table[n] == 1U);}

      首先,在代碼中并不會存儲一個不知所云的數(shù)字,例如“2693408940”,而是利用“prime_table_init”函數(shù)在初始化的時候生成這個質(zhì)數(shù)列表。同樣,在生成后還需要對列表進(jìn)行驗證(prime_table_verify),以確保在生產(chǎn)的過程中出現(xiàn)錯誤。

      其次,所有的內(nèi)容都是“顯式”的,并不會有晦澀難懂的數(shù)據(jù)和算法,甚至0和1所代表的意義也需要在聲明的時候就近寫出注釋(/* 0 = false, 1 = true */)。

      最后,代碼看起來冗余度很大,比之前的“一行函數(shù)”要復(fù)雜很多。但每一行的職責(zé)就更明確了。

      那么為什么ADA更適合軍用代碼呢?如果我們把C語言轉(zhuǎn)成ADA就更加一目了然了:

      with Ada.Text_IO; use Ada.Text_IO;with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;procedure Prime_Table_Gen is   subtype Prime_Index is Integer range 0 .. 31;   type Prime_Table_Type is array(Prime_Index) of Boolean;   function Is_Prime(N : Integer) return Boolean is   begin      if N <= 1 then         return False;      end if;      for I in 2 .. Integer(N ** 0.5) loop         if N mod I = 0 then            return False;         end if;      end loop;      return True;   end Is_Prime;   Prime_Table : Prime_Table_Type;begin   -- Initialize table   for I in Prime_Index loop      Prime_Table(I) := Is_Prime(I);   end loop;   -- Output for verification   for I in Prime_Index loop      Put("Index ");      Put(I, 2);      Put(": ");      Put_Line(Boolean'Image(Prime_Table(I)));   end loop;end Prime_Table_Gen;

      大部分的內(nèi)容都是平鋪直敘接近于自然語言所書寫的。在這種狀態(tài)下即便是一個沒有太多程序經(jīng)驗的審計人員也可以很迅速的理解這些代碼所代表的含義。這在軍用系統(tǒng)中十分重要。

      當(dāng)然了,也正是有各自初始化和驗證的過程存在。軍用系統(tǒng)的啟動往往是這樣的:



      慢慢的一部分一部分的打開,相當(dāng)具有“儀式感”。

      所以說嘛,要不是知道軍用代碼是怎么寫、是什么樣子的,今天上午,還真被人拍馬屁拍爽了,哈哈哈。

      特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關(guān)推薦
      熱點推薦
      11年前優(yōu)衣庫男女主現(xiàn)狀曝光,他們還在一起生了兩個孩子

      11年前優(yōu)衣庫男女主現(xiàn)狀曝光,他們還在一起生了兩個孩子

      半糖甜而不膩
      2026-04-06 12:09:15
      特朗普訪華,美國駐華大使館的評論區(qū)亮了

      特朗普訪華,美國駐華大使館的評論區(qū)亮了

      歷史總在押韻
      2026-05-13 18:29:26
      最高院:提供 “口交” “肛交”等進(jìn)入式性服務(wù),是否屬賣淫行為?

      最高院:提供 “口交” “肛交”等進(jìn)入式性服務(wù),是否屬賣淫行為?

      周軍律師聊案子
      2026-04-21 09:50:16
      江西舉報恩人沈女士已社死,正臉照曝光,大叔崗位被調(diào),景區(qū)回應(yīng)

      江西舉報恩人沈女士已社死,正臉照曝光,大叔崗位被調(diào),景區(qū)回應(yīng)

      水泥土的搞笑
      2026-05-14 19:34:54
      因FIFA每人每天1.1萬美元補(bǔ)貼,加納將帶3名本土聯(lián)賽國腳參賽

      因FIFA每人每天1.1萬美元補(bǔ)貼,加納將帶3名本土聯(lián)賽國腳參賽

      懂球帝
      2026-05-14 18:17:06
      吳簽提前出來了???

      吳簽提前出來了???

      八卦瘋叔
      2026-05-14 11:00:18
      抽獎得來的Switch 2被老婆偷偷送人,37歲男玩家決心離婚

      抽獎得來的Switch 2被老婆偷偷送人,37歲男玩家決心離婚

      愛游戲的萌博士
      2026-05-14 15:08:52
      74歲布麗吉特:為了馬克龍,整容扮嫩撐了9年,如今終于可以解脫

      74歲布麗吉特:為了馬克龍,整容扮嫩撐了9年,如今終于可以解脫

      毒舌小紅帽
      2026-05-14 16:09:46
      楚阿梅尼徹底涼了!穆里尼奧欽定皇馬新核,1 億歐挖角曼城

      楚阿梅尼徹底涼了!穆里尼奧欽定皇馬新核,1 億歐挖角曼城

      奶蓋熊本熊
      2026-05-15 00:52:50
      國產(chǎn)“新偉哥”!效力是西地那非8倍,副作用卻更少

      國產(chǎn)“新偉哥”!效力是西地那非8倍,副作用卻更少

      鬼菜生活
      2026-05-09 11:20:07
      成人片女星許諾薩福諾夫奪歐冠將共度良宵,球員妻子爆粗回應(yīng)

      成人片女星許諾薩福諾夫奪歐冠將共度良宵,球員妻子爆粗回應(yīng)

      懂球帝
      2026-05-14 15:58:14
      山東招遠(yuǎn)一礦業(yè)公司基建礦區(qū)發(fā)生事故,造成3人死亡、2人受傷

      山東招遠(yuǎn)一礦業(yè)公司基建礦區(qū)發(fā)生事故,造成3人死亡、2人受傷

      界面新聞
      2026-05-14 09:48:55
      白左圣母被驅(qū)趕出家:還會說有一天我們也是難民嗎

      白左圣母被驅(qū)趕出家:還會說有一天我們也是難民嗎

      俠客棧
      2026-05-14 12:43:23
      何穗這些年變化也太大了,今昔對比,簡直不敢相信竟是同一個人

      何穗這些年變化也太大了,今昔對比,簡直不敢相信竟是同一個人

      草莓信箱
      2026-05-14 10:04:37
      U17女足5分鐘丟2球!門將巨大失誤,半決賽5戰(zhàn)朝鮮從未零封

      U17女足5分鐘丟2球!門將巨大失誤,半決賽5戰(zhàn)朝鮮從未零封

      奧拜爾
      2026-05-14 20:09:56
      三角連體服引爭議!28歲田徑美女回應(yīng):不是穿給你看的 眼光低俗

      三角連體服引爭議!28歲田徑美女回應(yīng):不是穿給你看的 眼光低俗

      念洲
      2026-05-14 14:28:32
      夏天已至,醫(yī)生叮囑糖尿病人:寧可吃西瓜,也別天天吃這5種食物

      夏天已至,醫(yī)生叮囑糖尿病人:寧可吃西瓜,也別天天吃這5種食物

      周哥一影視
      2026-05-14 18:40:09
      中央定調(diào),延遲退休后,社保累計繳費17年,到60歲可以退休嗎?

      中央定調(diào),延遲退休后,社保累計繳費17年,到60歲可以退休嗎?

      瀲滟晴方DAY
      2026-05-14 23:56:53
      A股:剛剛,中央一部門發(fā)布,不出意外的話,周五將迎來更大轉(zhuǎn)變

      A股:剛剛,中央一部門發(fā)布,不出意外的話,周五將迎來更大轉(zhuǎn)變

      云鵬敘事
      2026-05-15 00:00:09
      新華社消息|外交部:堅決反對所謂“哥本哈根民主峰會”執(zhí)意邀請“臺獨”分子大放厥詞

      新華社消息|外交部:堅決反對所謂“哥本哈根民主峰會”執(zhí)意邀請“臺獨”分子大放厥詞

      新華社
      2026-05-13 19:59:39
      2026-05-15 02:32:49
      軍武數(shù)據(jù)庫
      軍武數(shù)據(jù)庫
      軍事類興趣頻道,介紹各國武備
      1147文章數(shù) 6461關(guān)注度
      往期回顧 全部

      科技要聞

      馬斯克說會談很順利 黃仁勛點贊 庫克比耶

      頭條要聞

      馬斯克幼子裝扮“火”了 衣服包包都是中國造

      頭條要聞

      馬斯克幼子裝扮“火”了 衣服包包都是中國造

      體育要聞

      爭議抽象天王山,和季后賽最穩(wěn)定中鋒

      娛樂要聞

      何九華官宣當(dāng)爸!全程不提孩子媽

      財經(jīng)要聞

      李強(qiáng)會見美國工商界代表

      汽車要聞

      雙零重力座椅/AI智能體/調(diào)光天幕 啟境GT7內(nèi)飾發(fā)布

      態(tài)度原創(chuàng)

      教育
      旅游
      時尚
      房產(chǎn)
      軍事航空

      教育要聞

      老師的績效也隨工資發(fā)了,領(lǐng)導(dǎo)好像不太能拿捏老師們了!

      旅游要聞

      日照五蓮:云海日出映青山

      白色上衣+彩色下裝:今年夏天最火搭配,時髦又減齡!

      房產(chǎn)要聞

      海南樓市新政要出!擬調(diào)公積金貸款額度,最高可貸168萬!

      軍事要聞

      美以伊戰(zhàn)爭期間以總理密訪阿聯(lián)酋

      無障礙瀏覽 進(jìn)入關(guān)懷版 主站蜘蛛池模板: 国产精品无码制服丝袜| 国产一区二区三区在线观看免费| 91免费在线| 亚洲欧美另类久久久精品播放的| 久久精品无码一区二区无码| 成人av午夜在线观看| 丁香亚洲综合五月天婷婷| 色婷婷六月亚洲婷婷6月| 国产女人18毛片水真多18| 精品国产午夜肉伦伦影院| 国产免费99久久精品| 亚洲成人av免费一区| 免费av在线| 一区二区三区午夜福利院| 丁香五月婷婷在线| 一本久道久综合久久鬼色| 无码区国产区在线播放| 狠狠躁夜夜躁人人爽天天天天97| 特黄免费| 99久久精品午夜一区二区| 国产线播放免费人成视频播放 | 免费看欧美成人a片无码| 久久香蕉国产线看观看怡红院妓院| 国产丝袜一区二区三区在线不卡| 国产二级看片| 无码人妻一区二区三区av| 亚洲一区二区三区在线网址| 国产日产精品_国产精品毛片| 国产精品一区二区三区三级| 深夜福利在线观看视频| 最新国产精品拍自在线观看| 成年丰满熟妇午夜免费视频 | 在线看av一区二区三区| 精品人妻A∨一区| 老湿机午夜福利| 亚洲高清日韩专区精品| 奇米久久| 99re最新6| 国产精品林美惠子在线观看| 午夜肉伦伦影院| 97欧美精品系列一区二区|