回覆列表
  • 1 # sapwood

    某語言天天喊著人多勢眾就覺得要一統天下了。其實某語言只在單位的審批流,電商這些這些請求延遲應用需求是幾秒級別的應用場景。對於實時性要求高,可靠性要求高的環境。某語言基本絕跡。這表現在車床控制,武器控制,醫療裝置,甚至絕大多數3D遊戲。某語言基本是絕跡的。

  • 2 # 成都雷揚

    靠,這問題都能問出來,不是科班的吧?

    不單軍工,現在大多數工控行業,也還在用C++,底層的控制是Java難以取代的,那麼多底層控制邏輯,誰來負責封裝Java介面?

    你最多能做的事情是底層用C++,封裝個介面給作為應用層的Java用。當你的介面已經足夠健壯,可能可以看似完全用Java了,但哪天新加一個裝置呢?哪天裝置升級了呢。

  • 3 # 金屬果果

    首先是安全問題。

    Java是一個龐大的生態。在jvm(java的執行虛擬機器)這個大基礎之上還有無數框架、中介軟體。比如springboot、kafka等等。這裡面99%的程式碼貢獻者都是老外。龐大的程式碼量和複雜的設計體系使得即使開源的專案,要隱藏一些後門都是極為容易的事情。與之相反,想要找出這些後門難如登天(做過軟體開發的人就知道,自己親手寫的程式碼,專案一旦變得龐大,想要找出特定場景才出現的BUG有多難)。開源的專案的風險都不可控,不開源的部分就更不用講了。因此,Java生態體系無法達到軍工要求的安全級別,專案中每一個第三方都可能成為風險源。Jvm能不能保證安全都還是一個巨大的問題。

    其次是穩定性問題。

    得益於Java生態的完善,有大量的框架的元件可以使用,就使得在Java上做任何專案,程式設計師第一件事就是想找有無可用的現成框架或者元件,自己動手寫一些複雜的演算法必要性越來越低,底層能力越來越差,至少90%的java程式設計師是膠水程式設計師,負責組合各種第三方,然後做一些簡單的業務邏輯。第三方的框架和元件的程式碼質量和可靠性無法評估。大量使用框架帶來的問題就是臃腫,框架為了追求更廣泛的適用性,會做很多相容和妥協。極端情況下C++的程式只要幾KB大小就能實現的功能,java得帶上Jvm不說,打包個就可能幾十MB。套用一句真理:程式碼量越大,穩定性越差。

    再次是C++的優點。

    C++可以開發最低層的應用,例如直接和硬體打交道的驅動,幾乎沒有不可以實現的功能。用C++做開發最大的問題是,可以用的現成東西比較少,凡是想要做啥功能都要自己動手。開發界有一句古話“不要重複造輪子”,但是C++就是造輪子的工具,所以用C++開發就得自己造輪子。相當於工業母機床,想造什麼都根據需要來實現。從國家安全的角度考慮,軍工資訊化應該有自己的一套生態。這一套生態環境應該是封閉的,由軍工人一代一代累積下來的。

    綜上,個人認為,軍工不可能淘汰C++,隨著軍工資訊化生態的完善,被淘汰的更有可能是Java。當然,這個過程最難的就是人材的培養,越封閉的系統,人材越難得。

  • 4 # sonic888

    java和c++各有優勢和劣勢,c++與底層硬體的互動更直接,執行起來效率會更高,適合武器,嵌入式開發,編寫驅動程式等場景。而java的最大優勢有著強大的生態系統,對於搭建應用系統很有優勢,有著各種成熟的解決方案,比用c++開發的效率高了很多個數量級,而且開發的成本也會低很多。所以每種語言都有自己的優勢場景,做一個專案一定是合適的場景選擇合適的技術,不太可能一套技術棧打天下。

  • 5 # weiker12

    jvm會自動GC回收,引起短暫的掛起,c++記憶體是編碼自己控制的,不會存在這種情況,軍工類對實時要求極高,不允許有誤差,這是一個原因。還有系統底層一般會用C語言,這也是一個原因

  • 6 # 自在小築

    C++才是計算機高階語言終極形態,其他都是為了簡化人的使用難度,降低了下來的。太難太抽象的語言,不適合一般人學習使用。C++的各種開發包和架構也都是按人使用方便構建橋樑。

  • 7 # 球球的後花園

    如果你想所有產品都被美國卡脖子舒服你就用JAVA,你如果想讓你的國家國防防禦武器控制速度比美國慢被美國轟炸你你就用JAVA。

    所有要求速度的行業軟體都得用c或組合語言!!!

  • 8 # 無能的力量mj

    C++接近彙編效率,基本沒有延遲,有bug也是藍色畫面宕機類似底層嚴重故障。而java是個半編譯語言,它依靠直譯器,它不一定能及時執行。如果用來編寫碰撞檢測估計你更傾向於彙編或能操作CPU的語言,所有的都在預料的掌控下。這就是君工和行業生產不淘汰C++

  • 9 # 愛思考的雨滴

    java依賴java虛擬機器,運算效率低。軍工電子,嵌入式開發,優先考慮彙編、C、C++。你可以想像,對一顆超音速導彈,cpu運算差1ms,將意味著什麼。

  • 10 # 犍為真人

    軍工,即軍事工業,是工業領域的一個分支。工業控制,必然是C/C++的主戰場。工業控制,講究的是極高的穩定性,穩定壓倒一切。同時,還講究實時性。在控制過程中,一旦出現不穩定或大的延時,後果可能就是致命的。軍工,那要求更加嚴格,簡直就是性命攸關!

    遊戲有時也有類似的特點,但是出現問題,大不了就輸一局比賽,損失一件高階遊戲裝備,這與軍工的損失完全不在一個重量級。

    而Java廣泛用於應用級開發,特別是web平臺和手機app。哪怕是線上支付,對於穩定性和實時性的要求也沒有那麼高。經常我們遇到服務不可用之類的錯誤,“請重新整理重試”。關係不大,多重新整理幾下就好了嘛。事務機制基本能保證不會亂扣錢,但是保證不了一次性成功以及高度的實時性。

    而在工業控制中,關鍵操作可不敢“重新整理重試”。在類似駕駛的控制中,關鍵指令延遲0.1秒可能都是致命的。

    說了這麼多,這與C/C++和Java有什麼關係的?

    兩者最大的區別就是:Java是帶虛擬機器的,是帶垃圾回收的,而C/C++不帶。垃圾回收往往是不可控的,不知道什麼時候就執行了垃圾回收,這個時間可能很短,也可能很長。在垃圾回收時,就會帶來卡頓。Java雖然也有執行時編譯、“預熱”機制,但都是難以控制的,具有不確定性。說的直白點,你把一切希望都寄託到了Java虛擬機器(JVM)。而對於工業控制,尤其是軍工,肯定儘量要求一切要盡在掌控中。

    對於要求最高的控制場景,那都不能用windows或常規Linux,因為它們是分時系統,是多工的,是非實時的。這時候,可能最簡單的才是最可靠的。單任務、單程序、單執行緒,去除一切用不到的功能。連音效卡、顯示卡、網絡卡、硬碟/SD卡,都不是必需的。甚至更誇張一點,連作業系統都沒有

    windows、普通的Linux,能做到10毫秒的精度。定製的嵌入式系統,能做到毫秒級的精度。而高度最佳化的,不帶作業系統的板子,甚至可以做到微秒級別的實時控制。

    有了這些基礎,大家就能明白,在非常“低階”的系統中,只有彙編和C可以執行起來,虛擬機器和直譯器是跑不動的。就算跑起來,也是很慢的,很消耗資源的。

    Java,其底層就是用C語言寫的。大家若不相信,請馬上去閱讀Java原始碼中有關壓縮、JPG影象、科學運算(sin、cos、log、pow等)的部分。另外虛擬機器也是用C寫的。所以理論上來說,只要是Java能做到的,特別是效能方面,C語言都可以做到。

    對於業務系統,Java是非常合適的,開發效率高,生態系統好。但是對於軍工,開發效率要讓位於執行效率以及可靠性、實時性、低功耗。人們願意花費更多的研發時間去開發這樣的系統,哪怕是重複造輪子也在所不辭,因為這是性命攸關的,有時甚至是不計成本的。

  • 11 # 凌菱七號偵察室

    軍控裝置大多數涉及到硬體,Java這種頂層的語言顯然沒法搞。

    裝置行業很少會用到java的,基本是C++

  • 12 # 熟悉的陌生人0819

    真想不通整天喊著這語言好,那個語言不行,這個比那個好,能這麼認為的人實在是太low了。語言沒有好與不好,只有適合不適合某個運用場景。

  • 中秋節和大豐收的關聯?
  • 黃河科技學院專業排名最好的專業有哪些?