這個 init constructor
public PersonRecord{
if ("Heinz".equals(firstName))
throw new IllegalArgumentException(…);
}
到是沒想過
除了效能考量,要不要用外部的 fonts/js/css 也有個簡單的判斷原則:
你的網站是公開給 internet 用嗎?
如果不是,那就全部都 self host,不要用外部的 CDN
你接到的案子,是給公司行號/圖書館/kiosk... blah blah 的 內部 應用,用外部 CDN 是自找苦吃。
That is, the toString() method (as well as equals() and hashCode()) is implemented using an invokedynamic-based mechanism. This is similar to how string concatenation has also been migrated to use invokedynamic in recent Java versions.
這是唯一吸引人的地方,也是目前 kotlin 做不到之處。這算 Oracle 的後發者優勢吧。
要加的功能好多,2020 做的完?
把工作從 UI thread 拔掉當然是很好,不過我觀察發現卡住的地方通常是真的算很久 (貼個 Java code 轉成 kotlin 之類的),或是修改一個 1000 行的 kotlin 程式檔。parser 不再快一點也是白搭
kotlin 有的大家都想要,這點 Java 也一樣 (被逼的)
kotlin 吸收前人的經驗,只留下實用的功能,現在變成現代化語言的標竿了。Dart 也許到了 4.0 功能上也會差不多
改得超多的,之前的什麼 any T 都不見了
In Valhalla, we convert from inline to reference types via an inline widening conversion. This is similar to boxing, but it has a significant difference: the result of the conversion is not an identity object (as a box would be), but a reference to an inline object.
Boxing
的話是直接開一個肥 Object, Reference projection
的話只是一個 reference 指向 inline object,所以整個輕量化。
看到後面,最大缺點是 Optional
要寫成
Optional.inline<User> userOpt = Optional.of( findUserById(12))
這種奇怪的型式才能得到最佳化,然後像是 Map API 也變難懂:
public V.ref get(K key);
看到 return V.ref
一定很傻眼
昨天把公司的大小專案都升到 jdk 11 和最新的 spring boot 了
蠻爽的
時間久了發現我現在的更新週期大約是;
- spring boot 一年
- vuejs 半年
- k8s 半年
- postgresql 一年以上
- JDK 三年以上
- OS 三年以上
可能的話我也想一兩年升一次 k8s 就好, 但目前不太可能...