<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                <!-- The Brutal Truth --> ## <span id = "The-Brutal-Truth">殘酷的真相</span> 當人類開始烹飪他們的食物時,他們大大減少了他們的身體分解和消化食物所需的能量。烹飪創造了一個“外化的胃”,從而釋放出能量去發展其他的能力。火的使用促成了文明。 我們現在通過計算機和網絡技術創造了一個“外化大腦”,開始了第二次基本轉變。雖然我們只是觸及表面,但已經引發了其他轉變,例如設計生物機制的能力,并且已經看到文化演變的顯著加速(過去,人們通過旅游進行文化交流,但現在他們開始在互聯網上做這件事)。這些轉變的影響和好處已經超出了科幻作家預測它們的能力(他們在預測文化和個人變化,甚至技術轉變的次要影響方面都特別困難)。 有了這種根本性的人類變化,看到許多破壞和失敗的實驗并不令人驚訝。實際上,進化依賴于無數的實驗,其中大多數都失敗了。這些實驗是向前發展的必要條件。 Java是在充滿自信,熱情和睿智的氛圍中創建的。在發明一種編程語言時,很容易感覺語言的初始可塑性會持續存在一樣,你可以把某些東西拿出來,如果不能解決問題,那么就修復它。編程語言以這種方式是獨一無二的 - 它們經歷了類似水的改變:氣態,液態和最終的固態。在氣態階段,靈活性似乎是無限的,并且很容易認為它總是那樣。一旦人們開始使用你的語言,變化就會變得更加嚴重,環境變得更加粘稠。語言設計的過程本身就是一門藝術。 緊迫感來自互聯網的最初興起。它似乎是一場比賽,第一個通過起跑線的人將“獲勝”(事實上,Java,JavaScript和PHP等語言的流行程度可以證明這一點)。唉,通過匆忙設計語言而產生的認知負荷和技術債務最終會趕上我們。 [Turing completeness](https://en.wikipedia.org/wiki/Turing_completeness)是不足夠的;語言需要更多的東西:它們必須能夠創造性地表達,而不是用不必要的東西來衡量我們。解放我們的心理能力只是為了扭轉并再次陷入困境,這是毫無意義的。我承認,盡管存在這些問題,我們已經完成了令人驚奇的事情,但我也知道如果沒有這些問題我們能做得更多。 熱情使原始Java設計師加入了一些似乎有必要的特性。信心(以及氣態的初始語言)讓他們認為任何問題隨后都可以解決。在時間軸的某個地方,有人認為任何加入Java的東西是固定的和永久性的 -他們非常有信心,并相信第一個決定永遠是正確的,因此我們看到Java的體系中充斥著糟糕的決策。其中一些決定最終沒有什么后果;例如,你可以告訴人們不要使用Vector,但只能在語言中繼續保留它以便對之前版本的支持。 線程包含在Java 1.0中。當然,對java來說支持并發是一個很基本的設計決定,該特性影響了這個語言的各個角落,我們很難想象以后在以后的版本添加它。公平地說,當時并不清楚基本的并發性是多少。像C這樣的其他語言能夠將線程視為一個附加功能,因此Java設計師也紛紛效仿,包括一個Thread類和必要的JVM支持(這比你想象的要復雜得多)。 C語言是面向過程語言,這限制了它的野心。這些限制使附加線程庫合理。當采用原始模型并將其粘貼到復雜語言中時,Java的大規模擴展迅速暴露了基本問題。在Thread類中的許多方法的棄用以及后續的高級庫浪潮中,這種情況變得明顯,這些庫試圖提供更好的并發抽象。 不幸的是,為了在更高級別的語言中獲得并發性,所有語言功能都會受到影響,包括最基本的功能,例如標識符代表可變值。在簡化并發編程中,所有函數和方法中為了保持事物不變和防止副作用都要做出巨大的改變(這些是純函數式編程語言的基礎),但當時對于主流語言的創建者來說似乎是奇怪的想法。最初的Java設計師要么沒有意識到這些選擇,要么認為它們太不同了,并且會勸退許多潛在的語言使用者。我們可以慷慨地說,語言設計社區當時根本沒有足夠的經驗來理解調整在線程庫中的影響。 Java實驗告訴我們,結果是悄然災難性的。程序員很容易陷入認為Java 線程并不那么困難的陷阱。表面上看起來正常工作的程序實際上充滿了微妙的并發bug。 為了獲得正確的并發性,語言功能必須從頭開始設計并考慮并發性。木已成舟;Java 將不再是為并發而設計的語言,而只是一種允許并發的語言。 盡管有這些基本的不可修復的缺陷,但令人印象深刻的是它已經走了這么遠。Java的后續版本添加了庫,以便在使用并發時提升抽象級別。事實上,我根本不會想到有可能在Java 8中進行改進:并行流和**CompletableFutures** - 這是驚人的史詩般的變化,我會驚奇地重復的查看它[^3]。 這些改進非常有用,我們將在本章重點介紹并行流和**CompletableFutures**。雖然它們可以大大簡化你對并發和后續代碼的思考方式,但基本問題仍然存在:由于Java的原始設計,代碼的所有部分仍然很脆弱,你仍然必須理解這些復雜和微妙的問題。Java中的線程絕不是簡單或安全的;那種經歷必須降級為另一種更新的語言。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看