成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

沒有原生數據類型,Java會更好嗎?

開發 后端
Gilad Bracha重新挑起了一場有關編程語言設計的爭論,特別是一門編程語言可以兼顧面向對象思想和原生數據類型嗎?下面是大家的一些討論。

Gilad Bracha在博客中寫道:“我經常說,Java的原罪在于它不是一個純面向對象的語言(一切皆對象的語言)。”文中討論的主要內容不是純面向對象語言的優點,而是提出了一個問題:Java如果沒有原生數據類型,是否能保持高性能?答案是肯定的。

Gilad首先拿類型變化舉了一個簡單例子。Java語言的char類型最初用16位二進制表示(符合當時的Unicode標準)。但是當標準改變之后,“人們用Java處理unicode時不得不自己處理編碼格式”。至于性能的問題,他提供了幾個例子演示如何在不影響效率的情況下處理對象。其中一個例子:

那么我們如何避免使用原生數據類型而又不損失性能呢?

Java有一套強制靜態類型機制,它被編譯成靜態類型的匯編語言(Java字節碼,即JVML)。它支持靜態類。我不建議使用這些特性,但是我們需要知道。我們唯一需要做的就是根除原生數據類型。

假設我們存在一個靜態類Int表示32位整數。編譯器能夠把該靜態類轉換為int類型。因此,我們就可以編寫標準的Java代碼而無需損失任何性能。

更有趣的例子包括:以操作符命名的方法、==操作符、實例鎖定和數組協變等等。

原生數據討論結論:

總之,Java原本可以完全面向對象而不受明顯的性能影響。但是它過去不是,現在不是,可能未來也不是。光榮易逝啊(Sic Transit Gloria Mundi)。

文章的讀者回復大多數都同意Gilad的觀點。

摘選如下:

◆Daniel Speiwak——事實上,聽起來很像Scala。Odersky和朋友們提出了一種有關協變數組和消除原生的解決辦法:泛型特化。

◆abies ——可能并非如此簡單。盡管我也認為將原生類型編碼為對象可以非常高效,但是總會有損失的。Smalltalk就是一個例子——大多數實現都把小/大整數區別對待,小整數被存放在非環形指針里。這意味著整數在不同大小轉換時表現出巨大的性能差異——對每一個整數的處理都有一些影響。我非常高興Java在數學運算法方面有可能和C++/Fortran一樣快。

◆Osvaldo Doederlein——有關面向對象vs原生數據類型的討論首先面臨一個挑戰:舉出至少一個純面向對象語言相比擁有原生數據類型和數組的語言沒有顯著的性能損失。不要拿高層次的應用基準來糊弄我。我要的是數學運算/數組的微基準,或者是現實世界低層次的運算,如數據壓縮、視頻編碼、網絡棧等等。
討論也包括一些技術上的例子以說明兩者之間的鴻溝。

也許有關“OO爭論”最有趣的一些方面在這次討論中并沒有提到。比如:

效率vs面向對象純度是80年代和90年初期(Java誕生之前)Smalltalk和C++語言之爭的焦點,其實這是一個完全不相關的辯論,因為它忽視 了OO語言誕生的原因。當時最純正的OO語言是 Smalltalk和Self,兩者都明確的以Simula(不是Simula I)為榜樣以建立一種支持領域專家簡單直接的表達問題和解決方案的語言。影響性能是完全可以理解的!

文章作者認為 Smalltalk在嵌入式、毫秒時間計時、切換的程序和實時的圖形顯示系統(應用于噴氣式飛機)中優于C++應用。這是因為Smalltalk應用了很多編程技巧(比如預編譯的方法和Smalltalk對象可以直接與硬件打交道而不依賴操作系統)以獲得性能優勢。關鍵在于,編寫相同的C++程序所花費的開發時間縮短了1/3。

Java從來沒有真正想成為一個面向對象語言。如果Sun在獲取Smalltalk授權時沒有受到阻礙(ParcPlace的純粹商業錯誤),Java可能根本不會存在。Oak將繼續沿著“智能烤面包機”的道路進化,而不會成為Java的基礎。 Java的目的就是融合Samlltalk和C++的各自最佳特性,而不是成為一種純OO語言。

從代碼和語言“特征”的角度談論OO純度是絕對錯誤的。對象是一種隱喻工具,開發人員可以借此更好的理解問題域,并獲得完全不同的、更加簡單和富有效率的設計和架構。如果一門語言是純面向對象,“一切皆對象”,僅僅意味著你可以直接表達你的設計而無需考慮這些這些設計在機器層面如何實現和執行。

如果基于為何編程語言這樣設計、在機器執行效率不是關鍵因素時對象是否真的提供了一種建立設計的好辦法等問題來看待純OO/效率的爭論,還是非常有趣的。

【編輯推薦】

  1. 成為Java高手的重要過程
  2. Java GUI的發展和演化簡史
  3. Java正則表達式工具類實例
  4. 用Java壓縮文件解決沒有中文問題示例
  5. Java與C++語言在作用域上的差異淺析
責任編輯:彭凡 來源: javaeye
相關推薦

2021-07-28 05:33:38

網絡中立互聯網信息服務

2021-01-14 22:13:03

人工智能教育互聯網

2019-08-14 08:00:00

Arch LinuxUbuntuLinux

2010-10-15 13:28:34

MySql數據類型

2010-09-17 14:49:04

Java數據類型

2022-03-04 07:37:16

DenoNode.js項目

2023-03-27 10:04:27

數據類型浮點型布爾型

2022-06-13 15:28:42

人工智能機器學習數據

2016-08-18 14:13:55

JavaScript基本數據引用數據

2019-08-12 11:40:48

數據庫SQLite3數據類型

2014-01-05 17:08:09

PostgreSQL數據類型

2011-08-19 14:26:42

SQL Server 分層數據類型

2020-10-26 13:46:07

Java基礎入門篇

2022-10-27 20:42:04

JavaScripJava編程語言

2010-07-22 17:57:40

2012-02-01 10:43:16

微軟Web

2017-07-10 13:38:07

MySQL數據類型整數類型

2010-08-10 17:17:59

2013-07-30 14:00:46

.NET數據類型

2013-07-30 14:48:58

.NET數據類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜影院| 久久99久久99 | 久久久久久国产精品 | 日韩欧美精品在线 | 在线一区二区国产 | 成年人视频免费在线观看 | 亚洲影视在线 | 午夜噜噜噜| av网站在线播放 | 日韩一区二区三区精品 | 欧美黄色一区 | 中文字幕在线一区二区三区 | 久久久一区二区三区四区 | 成人在线精品视频 | 欧美成人h版在线观看 | 中文字幕一区二区三区精彩视频 | www.一区二区三区 | 久久久久久久久久久久久9999 | 一区二区三区中文字幕 | 久久噜噜噜精品国产亚洲综合 | 日韩欧美三区 | 欧美 日韩 亚洲91麻豆精品 | 国内精品视频在线观看 | 亚洲精品在线看 | xxxxx免费视频 | 国产色在线 | 欧美日韩精品久久久免费观看 | 欧美在线综合 | 在线中文字幕第一页 | 欧美在线观看免费观看视频 | 欧美精品在线播放 | 粉色午夜视频 | 国产欧美精品区一区二区三区 | 自拍偷拍亚洲欧美 | 青青草国产在线观看 | 精品国产一区二区国模嫣然 | 亚洲社区在线 | 日韩av一区二区在线观看 | 亚洲国产网 | 天堂精品视频 | 看亚洲a级一级毛片 |