<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

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

      0
      分享至

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

      當然了,從軟件工程學、項目處理甚至于成本考慮,這群程序員做的程序并沒有什么問題。但從長遠考慮這是一個劣幣驅逐良幣的過程,而且現在的良幣已經被驅逐得差不多了。

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



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



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

      于是就出現了這樣的代碼:

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

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

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

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

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

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

      程序員小A的說法是當n=2的時候,for循環實際上是沒有執行的,于是程序員小B則進一步跟進還得加上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:# 找到了一個除數,不是質數return False# 循環結束,沒有找到除數,是質數return True

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

      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個數字,不妨這樣寫。緊接著W君就說了那句“你們每行代碼都是對行業的侮辱!

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

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

      于是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]列表中,直接返回真,否則返回一個數字在不在質數列表中假難道不香嗎?

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

      上面這種商業程序員認為的“軍工級代碼”實際上根本就是錯誤的。

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

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

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

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

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

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

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

      #include #include #define PRIME_TABLE_SIZE 32Ustatic uint8_t prime_table[PRIME_TABLE_SIZE]; /* 0 = false, 1 = true *//* 判斷一個數是否為質數(布爾邏輯) */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;}/* 接口函數 */bool is_prime(uint8_t n){    if (n >= PRIME_TABLE_SIZE) {        return false;    }    return (prime_table[n] == 1U);}

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

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

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

      那么為什么ADA更適合軍用代碼呢?如果我們把C語言轉成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;

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

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



      慢慢的一部分一部分的打開,相當具有“儀式感”。

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

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

      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.

      相關推薦
      熱點推薦
      郭德綱被約談的傳聞出來后,段子比他的相聲還搞笑

      郭德綱被約談的傳聞出來后,段子比他的相聲還搞笑

      雷斯林
      2025-12-08 19:14:36
      正式退出,陳夢官宣,不當教練,拒絕娛樂圈,安置崗位級薪水曝光

      正式退出,陳夢官宣,不當教練,拒絕娛樂圈,安置崗位級薪水曝光

      最愛乒乓球
      2025-12-09 00:08:40
      “畸形”的輪胎市場:外國人愛用的中國輪胎,國人為啥就是不買賬

      “畸形”的輪胎市場:外國人愛用的中國輪胎,國人為啥就是不買賬

      毒sir財經
      2025-12-06 22:07:18
      突發!洪森發視頻爆料

      突發!洪森發視頻爆料

      環球時報國際
      2025-12-09 00:20:50
      迷失無人區:女子帶藏獒無人區失聯兩周,警方找到車,車內只剩藏獒

      迷失無人區:女子帶藏獒無人區失聯兩周,警方找到車,車內只剩藏獒

      罪案洞察者
      2025-11-10 13:57:07
      盧克文工作室被封:一個“地攤戰略家”的破產

      盧克文工作室被封:一個“地攤戰略家”的破產

      紫京講談
      2025-12-08 22:06:18
      全體退休人員,12月養老金到賬后,千萬別急著花!先做這3件事

      全體退休人員,12月養老金到賬后,千萬別急著花!先做這3件事

      李博世財經
      2025-12-08 10:49:40
      今后3天河南晴朗持續!11日起大風雨雪強降溫“組團”上線

      今后3天河南晴朗持續!11日起大風雨雪強降溫“組團”上線

      大象新聞
      2025-12-08 13:30:12
      醪糟被關注!醫生:常吃醪糟的人,不用多久,腸道或迎來3個變化

      醪糟被關注!醫生:常吃醪糟的人,不用多久,腸道或迎來3個變化

      阿兵科普
      2025-11-30 20:53:55
      “一個月做5次,超過就按50萬一次收費!”澤尻英龍華逼丈夫簽下

      “一個月做5次,超過就按50萬一次收費!”澤尻英龍華逼丈夫簽下

      忠于法紀
      2025-12-03 11:35:03
      媽媽拍下小學女兒書桌,引來1.6w群嘲:健康的孩子也被你養廢了

      媽媽拍下小學女兒書桌,引來1.6w群嘲:健康的孩子也被你養廢了

      熙熙說教
      2025-12-08 20:51:14
      果然不出中國所料:中日戰機空中對峙后,美國防長送日本一句狠話

      果然不出中國所料:中日戰機空中對峙后,美國防長送日本一句狠話

      千里持劍
      2025-12-08 11:55:55
      又一百億大雷炸響!浙商大佬的“朋友圈” ,也不靈了

      又一百億大雷炸響!浙商大佬的“朋友圈” ,也不靈了

      深藍財經
      2025-12-08 20:01:21
      突發激烈交鋒!殲15精準鎖定,日軍機連敗兩次

      突發激烈交鋒!殲15精準鎖定,日軍機連敗兩次

      兵國大事
      2025-12-08 00:05:10
      富人家的保姆有多好?網友:我要去當保姆,哪里去培訓

      富人家的保姆有多好?網友:我要去當保姆,哪里去培訓

      帶你感受人間冷暖
      2025-12-07 00:20:08
      張本智和遭不公平待遇,西蒙高茨為他發聲:感到難過和心疼!

      張本智和遭不公平待遇,西蒙高茨為他發聲:感到難過和心疼!

      十點街球體育
      2025-12-08 01:20:05
      向中國借道?哈薩克斯坦賣礦給美國,求到我們頭上,中方態度堅決

      向中國借道?哈薩克斯坦賣礦給美國,求到我們頭上,中方態度堅決

      福建平子
      2025-12-08 09:58:27
      為審訊日本女特務,戴笠獨創“洗陰溝”刑罰,日本女特務十分羞恥

      為審訊日本女特務,戴笠獨創“洗陰溝”刑罰,日本女特務十分羞恥

      歷史點行
      2025-12-06 20:33:20
      突然,閃崩暴跌!剛剛,做空了!

      突然,閃崩暴跌!剛剛,做空了!

      中國基金報
      2025-12-08 16:15:34
      邁阿密國際主席馬斯:我們已經找到布斯克茨與阿爾巴的替代者

      邁阿密國際主席馬斯:我們已經找到布斯克茨與阿爾巴的替代者

      懂球帝
      2025-12-08 17:19:04
      2025-12-09 02:07:00
      軍武數據庫
      軍武數據庫
      軍事類興趣頻道,介紹各國武備
      1138文章數 6464關注度
      往期回顧 全部

      科技要聞

      國產機械硬盤尚未攻克,華為高管呼吁

      頭條要聞

      江蘇男子貴州投資養羊損失近百萬 543只羊被"躲貓貓"

      頭條要聞

      江蘇男子貴州投資養羊損失近百萬 543只羊被"躲貓貓"

      體育要聞

      一位大學美術生,如何用4年成為頂級跑者?

      娛樂要聞

      章子怡被說拜高踩低 主動和卡梅隆熱聊

      財經要聞

      百億金融爆雷 浙商大佬"朋友圈"也不靈了

      汽車要聞

      純電全尺寸大六座 凱迪拉克"小凱雷德"申報圖曝光

      態度原創

      本地
      旅游
      游戲
      藝術
      公開課

      本地新聞

      云游安徽|七千年敘事,第一章寫在蚌埠

      旅游要聞

      寒風割臉也不走?零下 5℃的天安門游客,藏著中國人的深情

      KeSPA杯:HLE和T1保持不敗,宙斯和小呂布有望碰撞Faker

      藝術要聞

      一棵樹的力量

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 久久久精品波多野结衣av| 国产精品a无线| 日韩人妻丝袜美腿中文| A片精品| 国产精品久久无码不卡黑寡妇| 欧美乱码精品一区二区三区| 潞城市| 亚洲乱码中文字幕| 69精品人人人人| 成人国产精品免费网站| 中国少妇人妻xxxxx| 九色视频丨PORNY丨丝袜| 国产成人欧美综合在线影院| 日本理伦片午夜理伦片| 中文字幕精品亚洲无线码二区| 白嫩人妻成人精品久久| 亚洲最大成人综合网| 久久综合精品国产一区二区三区无| 欧美三级午夜理伦三级| 99国产欧美久久久精品蜜芽 | 杨幂激情无码精品久久| 久久久国产成人一区二区 | A片网| 日本一本正道综合久久dvd| 日韩av无码久久一区二区| 国产成人亚洲精品狼色在线| 亚洲精品另类| 武宁县| 欧州成人与兽| 成人综合婷婷国产精品久久| 精品久久久噜噜噜久久久| 久久精品人人做人人综合试看| 无限A片| 精品久久久中文字幕人妻| 亚洲的天堂av无码| 性色av无码久久一区二区三区| 欧美色A?V| 成人黃色A片免费看三更小说| 久久er99热精品一区二区| 亚洲人成网站在线观看播放不卡| 一级做a爰片久久毛片下载|