找了一下跟這個主題相關的資訊,看到這篇 No Free Java LTS Version?1 ,如果上面的資訊沒錯,看來以後會分成不想付錢的就用 OpenJDK,願意付費買 Support 的就用 Oracle JDK?
Simon Ritter 留言中有重要資訊…XD
The points you make on the LTS releases are all correct. However, you're missing one very big point: the updates will only be available for customers with a commercial support contract from Oracle. Public updates for JDK 11, like those of all other release from JDK 9 onwards will stop after six months when the next version is released. This will have a big impact on deployments of Java where access to security and bug fixes is an issue.
只有簽合約的才拿得到 LTS 的維護更新!
事先定義的抽象化,終究也是照顧著過去的需求,而不是現在的全部,也因此,任何既有的程式庫或框架一定會有不足之處,最後必然是不斷地加入新功能,終究使得框架臃腫,或者是出現另一個框架,來照顧不滿的另一群人。
抽象化也有它的不足之處 ...
為了防止框架臃腫,所以模組化是必要的吧
如果搬出可維護性的大旗,提出「複製、貼上程式碼的方式,將來需要修改時,會需要改很多地方」的類似理由,複製、貼上的另一組好夥伴就會上場救援,像是「你是不會搜尋、取代嗎?」
有可能搜尋到了 100 筆資料,但其中可能只有 50 筆左右是需要改的,這時候就不是那麼容易了...
又或者以為只要改一個地方就好了,根本沒有想到要去搜尋其他地方是否還有類似的程式需要改 ...
再來就是:你有時間把你改過的程式全部重測過嗎?
不少人看似認為 Flux 是 Servlet Stack 的取代物,然而根本上是兩套不同的模型。
However, working with the reactive stream involves a bit of learning curve and ensuring that no developer ends up calling
block()
. Another deal breaker might be the lack of reactive database drivers. JDBC is inherently blocking and very few other databases like MongoDB, Cassandra support reactive drivers officially at this point.
提出了WebAssembly概念,顧名思義,就是Web的Assembly(組合語言)形式,要讓網頁應用也能擁有二進位Bytecode的執行格式
轉成 byte code 什麼的不就是 Java 的強項嗎!
現在也有開源專案和工具,能快速將大型商用軟體常用的Java語言,或是微軟的.NET語言的程式碼,都能轉換成WebAssembly格式
之前看到時還沒有支援 Java,現在終於有了,雖然還是 beta 版 ...
state machine 只是個 pattern,實作方式有很多種。像這篇文章寫的方式 (純 OOP) 會很難 trace 嗎?
kaif 的按鈕用的是 event-based 的 state machine,這是特化過的,專門用在即時 event 的服務 (遊戲 or 聊天室)。而 event based 的架構本身就不好 trace,跟 state machine 其實沒什麼關係。
kaif 按鈕其實用不到 event-based 的設計的,只是我寫慣了才直接用。
spring 其實也有出 state machine1 ,可以看看他們的設計
會用 state machine 解問題的人真的很少,大概只有遊戲圈的人才會用。而且需要一段時間練習。
一個簡單的判斷法,如果你的 class 出現了三個以上的 boolean flag,然後有一些會衝突相依,那麼差不多可以試試用 state machine 來 refactor 了。
題外話,你知道 kaif web 的 up vote/down vote1 的三角型按鈕是用 state machine 做的嗎?
一對小小的三角型包含了六種 state :
- WaitVoterState
- WaitSignUpState
- EmptyVoteState
- UpVotedState
- DownVotedState
- VotingState
為什麼只是個 up/down vote 要搞到 state machine?沒辦法,一開始也沒用 state machine 解的,不過後來跑出來三、四個 boolean flag 後我就寫到抓狂了,一氣之下就 refactor 成這樣了
這一篇還幫大家復習了 compiler/interpreter ,不錯讀。
Dart/Flutter 會變成 AOT 一部份的原因是 iOS 造成的,因為 iOS 不能跑 js 以外的 JIT 語言。(最早的 Flutter 只有 interpreter)
不是指純寫 Servlet,而是指 Servlet API,掛一層 Jersey/Spring,還是看到不少人搞不出 HttpSession、ServletContext 等的一些對應功能,然後縮回去直接搞 HttpSession、ServletContext … 基本上 Jersey/Spring 這類抽象層都想或有對應的方案,不過有時麻煩,有時藏在某些地方找不到,有時是心智模型還是掛在 Servlet Container,經驗上難以脫離(新生代若完全沒有或不用接觸 Servlet 容器,大概會比較沒這困擾) …
很少人直接寫 servlet 吧? 大部份上面都會掛一層 (Jersey/spring...etc)
那麼 servlet 這個 abstraction 就變成累贅了,去掉後少一層自然變得比較輕,也不需要部署肥肥的 servlet container 了。
(不過 benchmark 的結果都是純 servlet 變態的快… 神奇)