ディスカッション (11件)
JavaScriptの歴史において、長年の課題だったDateオブジェクトの使い勝手の悪さ。それを解決するために誕生した新しい標準API「Temporal」が、ついに日の目を見ようとしています。構想から9年という長い歳月をかけ、いかにしてJavaScriptの『時間』を修正しようとしてきたのか、その執念の開発プロセスを振り返る内容です。
サーバーサイドのランタイムに実装されるのが待ちきれないな。これさえあれば全面的に導入できるから、本当に最後の一歩って感じ。
Temporalが承認されて最高に嬉しい!長年死ぬほど頑張ってきたチャンピオンのみんな、本当におめでとう。ここ数年temporal_rsの開発に関われて楽しかったよ :)
JavaがAPIを改善してきた歴史(Joda-TimeからJava 8のJSR 310まで)と関連づけて考えると面白いだろうね。不変性、Instant、まともなタイムゾーン対応とか。2018年にJSにこれらを持ってくる「過激な提案」が出たって話だけど、絶対Javaの影響受けてるよね?
Safari(Technology Previewで一部サポート)。2020年代におけるIEの精神的後継者はSafariで決まりだな。
正しい方向への大きな一歩だけど、まだこのAPIは好きになれないな。理由はこれ。特にJSだとクライアントとサーバーでコードを共有してデータをやり取りすることが多いから、データとロジックを厳密に分けたいんだよね。シリアライズしやすいように、データは全部ただのJSONで、クラスのインスタンスとかメソッド持ちのオブジェクトにはしたくない。Temporalはそうなってない。メソッドがあるのは便利だけど、ネットワーク越しに送るのが面倒なんだ。date-fnsみたいに、データだけのTemporalオブジェクトを引数にとる純粋関数のセットの方が断然好みだな。
「Ken SmithがJavaのDateコードをJavaからCへそのまま移植したものだった(Mochaの中で自分が書かなかった唯一のコードだ)」。これ面白いね。そもそもJavaのutil.Date自体、ほぼ間違いなくCのtime.h APIの移植だろうに。
PythonでもISO8601の日付パース周りで、同じような10年がかりのドタバタ劇を経験したよ。2012年に始まって、10年くらい経ってようやく標準ライブラリに解決策が入ったんだ。
「Firefoxは仕様が固まるのと並行してTemporalを実装できた。André Bargull(ネットではAnbaとして知られてる)の見事な働きのおかげだ」。ここで強調しておきたいのは、Andréは実はボランティアで、たった一人でこれを全部やり遂げたってこと。
例えばInterval型とか欲しいよね。こんな感じで。 const D = new Temporal(); const t = new Interval({minutes:5}); const v = D.add(t);
これは本当に嬉しい。Temporalを使うと時間の管理につきまとう複雑さ(特にInstantとカレンダー日時の区別)に強制的に向き合わされるから、まるでミスを誘発するように作られてるDateみたいな間違いは起こりにくくなる。多少コードは長くなるけど、夏時間(DST)のバグで夜中の3時に叩き起こされるくらいなら、喜んで数文字余計に書くよ。