您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Java之JIT的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java之JIT的示例分析”這篇文章吧。
James Gosling,加拿大計算機科學家,完成了 Java 的原始設計,并實現了 Java 最初版本的編譯器和虛擬機,也是公認的 “Java 之父”。
Evrone 是一家企業軟件開發公司,旗下擔任技術布道師 (DevRel) 的 Grigory Petrov 最近對 James Gosling 進行了采訪。
James Gosling 在此次訪談中聊了大量關于編程語言的話題,例如對現代編程語言新特性的看法、怎么看待編程語言更新后引起的破壞性變更、為什么不是所有編程語言都使用 JIT 技術等。
Grigory:我們希望以軟件開發和軟件顧問的身份在俄羅斯組織 Python、Ruby、Java 和 Go 社區。通過這次采訪,我希望能展現這個行業的基本問題,進而為開發者同行提供幫助。你在 Java 領域的經驗和工作經歷可以幫助開發者變得更好,所以我們一起嘗試完成這個目標吧!
有些編程語言,例如 Go,舍棄了類和繼承這些特性。與此同時,其他語言則試驗了一些新特性,如 Rust 中的 traits。作為語言設計師,你認為編程語言應該用怎樣的現代、通用、合理方式來進行組合(Composition)。
James:我應該會繼續使用類,因為我發現類對于這種場景非常有效。事實上,對于如何做不同的事情,我沒有任何好的、清晰的想法。在 C 語言中,宏的存在幾乎是一場災難,因為宏不是語言的一部分,而是在語言之外的特性。Rust 正好希望通過合適的方式在語言中使用宏。
對于其他編程語言,如 Lisp 家族,它們有一套定義語法的方法,這些語法幾乎完全和語義無關。我曾經寫過許多 Lisp,沉迷于用 Lisp 程序來操作 Lisp 程序的技術。有些語言能夠讓你以不同的方式做到這一點,像 Groovy,我們可以直接使用 AST。而 Rust 則具有語法集成的宏。
Lisp 通過運算代碼片段來生成新代碼,在 Java 領域,這種方式也會經常被使用。雖然是非常底層的方法,不過卻很受歡迎。因為開發者可以對注解進行組合,并使用不同的語言生成字節碼,這是非常強大的技術,經常被用在意想不到的場景。例如 Jackson 框架,它通過計算序列化器提升了性能。
當然,這既是強大的技術,但也非常難以駕馭。這個技術充滿可能性,但這種可能性是有限的。我對 Lombok 有著強烈的愛恨交加情感。它添加了許多優秀的 Java 特性,但從另一方面來說,這也暴露了其弱點。因為有些特性本應是內置功能。
Grigory:我們最近采訪了 Ruby 的作者 Yukihiro Matsumoto,他提到他在最新的 Ruby 3.0 主要版本中做了一個實驗。他試圖在沒有引入破壞性變更的情況下發布這個版本,看看會發生什么。我知道 Java 對“破壞性”持謹慎態度。那么是否所有編程語言都要考慮兼容性的問題,每個大版本都兼容是一個好主意嗎?還是說這種情況只用于特定的語言,如 Ruby 或 Java?
James:這幾乎完全取決于開發者社區的規模。每一項重大變更都會給開發者帶去困擾,如果社區的開發者不多,那么破壞性更改不是大問題。另外還必須權衡成本效益。如果添加了某項破壞性的變更,它會增加負擔,但與此同時也會帶來一些好處,那么可以考慮。例如,如果將下標運算符從方括號更改為圓括號,它可能不會帶來任何好處,并且會引起開發者極大的困擾。那這就是一個愚蠢的變更。
舉個例子,JDK 9 引入了一個極其罕見的破壞性變更:如果開發者使用了一些所謂的隱藏 API,封裝機制就會被打亂,那些破壞封裝邊界,以不應該使用的方式使用 API 的開發者,從 8 升級到 9 會碰到不少問題。
還有一種情況:當某處存在錯誤,并且開發者為該錯誤實現了變通方法。在這種情況下,如果修復了錯誤,那么有可能會對這些變通方法造成破壞。Java 也存在這種案例,我們的做法是要么不修復錯誤,要么引入正確的實現方法。
Grigory:我們來聊聊企業和產業的發展吧。我自己從未有過給機器人編程的經歷,但我曾在為數百萬人創造軟件的公司工作了一段時間。拿今天和 20~25 年前來對比,我發現像 GitHub 這樣的社交編碼平臺得到了巨頭公司的支持,它幫助個人開發者和企業或工業軟件開發者進行開源開發。那么我們是否可以認為現在是開源軟件的黃金時代,你怎么看?
James:我不知道如何回答,因為這個問題涉及到未來。“現在是開源軟件的黃金時代”這個觀點隱含著“是不是從現在開始要走下坡路”的意思。如果現在是黃金時代,那么未來就不是黃金時代了嗎?
所以我的看法是,無論黃金時代是什么模樣,我們所處的環境正變得越來越好,一步步靠近理想中的“黃金時代”。目前,我們面臨著各種圍繞安全以及人類進行網絡恐怖主義的危機。當這種事情仍在發生或正在發生,我不認為這是黃金時代。如果有某種方式可以終結網絡恐怖主義——那將是非常“黃金”的時代,愿我們拭目以待。我想說的是,這是一個真正偉大的時代,但它可以變得更好。
Grigory:你在 Java 和 JVM 中使用了 JIT 技術。JIT 帶來了非常驚人的速度,并且不影響語言的優雅語法和高級特性。許多編程語言都參考了 Java,例如 C# 和 JavaScript,它們通過熱路徑編譯對代碼進行重新編譯的速度接近 C 和 C++。但許多其他語言,如 Python、Ruby、PHP,雖然具備可選的 JIT,但沒有那么流行。許多主流編程語言也沒使用 JIT 來提升性能。所以,為什么不是所有編程語言都使用 JIT 來為開發者提供更快的速度?
James:事實上,靜態類型語言更適合通過 JIT 來提升性能。對于動態語言,比如 Python,這其實非常難。通常大家最終所做的是在語言中添加注解,這樣就會得到像 TypeScript 這種編程語言,它本質上是帶有類型注解的 JavaScript。這很有趣,因為 JavaScript 本質上是去除類型聲明的 Java。因此,TypeScript 本質上是具有混合語法的 Java。
但如果你是一名用 Python 快速編寫腳本的開發者,在他們看來,聲明讓他們覺得很困擾,思考變量的類型是非常煩人的事情。腳本語言世界中的大多數開發者并不關心性能問題。他們更在意的是能否用最快的速度完成開發,并不關心性能和相關的細節。
Grigory:有一個非技術問題。當我們談論不同的語言時,在你個人看來,對于剛入門的開發者或者相關專業的學生而言,該選擇什么語言作為他們學習的第一門語言?
James:對這個問題的回答我肯定會有一點偏心,畢竟 Java 已經被成功地使用了這么多年。但我本人學習的第一門編程語言是 PDP-8 匯編代碼,差不多同一時期還學習了 Fortran。所以我認為對于初學者,可以教他們任何東西,因為每個人的學習能力不一樣。
不過在這個問題上,我覺得要更多地考慮初學者未來的職業道路。如果希望成為一名全面發展的軟件開發者,去構建一款大型的高性能系統,那么 JVM 語言是無法繞過去的,無論學習的是何種 JVM 語言。例如 Clojure、Scala 和 Kotlin。但如果是一名物理專業的學生,我會對他說 Python 也很不錯。
事實上,我認為選擇哪門編程語言作為第一門學習的語言并不是什么大問題。雖然許多人會一直堅持使用自己學習的第一門語言,但如果能夠他們學習多門語言,并來回切換使用,這其實更好。我甚至覺得大學應該開設比較編程語言優劣的課程。課程內容是用 5 種不同的編程語言完成作業,這樣的課程設計能讓學生快速學習這些語言,因為它們其實也沒有太大的區別。不過學生通過這種方式會思考語言的優缺點。
很久以前我上過這樣的課程,例如使用 Cobol 完成數值計算,使用 Fortran 完成符號操作,對于這兩種語言來說,這些任務都不是它們擅長的領域,但我最后還是拿到了 A 的成績。
以上是“Java之JIT的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。