TypeScript part3

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/04/26(木) 21:48:23.07ID:mMDBzDaB
http://www.typescriptlang.org/

JavaScript that scales.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.

part1
https://peace.5ch.net/test/read.cgi/tech/1349187527/
part2
https://mevius.5ch.net/test/read.cgi/tech/1430386649/
2020/10/12(月) 12:38:53.86ID:gBcZoQLz
>>628
サーバーは言語何を使うとしても仮想化前提だろ。
2020/10/12(月) 12:49:06.93ID:wrjLnlZW
>>633
同じ言語だからクラス書いたファイルを両方から参照すれば良くない?
そういう意味でなくてサーバとクライアントでシームレスにインスタンスをやり取りしたいとかであればフレームワークが居るのでは?
2020/10/12(月) 13:00:28.44ID:tosLr/AM
>>633
両方同じ言語なら共有ライブラリとしてそれぞれから参照すればいいけど
言語が違ってもOpenAPIみたいの使ってコード生成すればいいから
2度手打ちする必要はないかも
637633
垢版 |
2020/10/12(月) 13:15:11.55ID:lIqFO5mi
ごめんごめん
サーバーサイドはasp.net coreです
OpenApiとやらを使えば、クラスの生成が楽ちんてことね…
しかし二度手間感はすごいあるな…
でもBlazorに手を出すリスクを考えるとまだマシか…
2020/10/12(月) 13:38:59.49ID:sR+xz/oc
Blazorも使ってるけど、まだ.NET5対応のツール周りが全然だめなんだよね…業務なら素直にTypeScriptでいいと思うよ
2020/10/12(月) 15:15:45.91ID:1F5XaUKJ
over knight blazorくらいになってからが本番。
640デフォルトの名無しさん
垢版 |
2020/10/12(月) 15:31:28.54ID:TNFvs/DR
>>631,634
だよね。
なのに何でJavaとC#何だろ?って思った。
641デフォルトの名無しさん
垢版 |
2020/10/12(月) 15:34:05.12ID:TNFvs/DR
>>634
特に仮想化前提で遅くなるのに何で言語をネイティブコンパイラ言語にしないんだろ?と。
昔は実質C++しか無かったなら仕方ないとして、今なら選択肢はもっとあるのに・・・。
2020/10/12(月) 15:46:11.22ID:YFC4n48A
Goのコードは高機能でファットなランタイムに依存している
ランタイムとアプリを分離できないだけで、実質VM言語みたいなものだ
一方、.NET Coreはアプリとランタイムを実行ファイルに全部ぶっこんで配布することも可能
従来のVM言語という線引きは曖昧になりつつある
2020/10/12(月) 16:22:11.38ID:DGsDArLw
C#だとジェネリクス関連はJITに任せたほうが速かったりできるし、
.NET CoreはReady to Runでネイティブコンパイルされたコードを同梱することもできるぞ。
644デフォルトの名無しさん
垢版 |
2020/10/12(月) 18:07:07.48ID:pl0L2hmu
あー・・・。
そう言えばC#はネイティブにもコンパイル出来るようになったんだっけ・・・。
C#については納得。

Javaはまあ、コード資産だろうし。
645デフォルトの名無しさん
垢版 |
2020/10/12(月) 18:13:15.12ID:pl0L2hmu
JITについては正直半分くらいしか信じてないんだけど、あり得なくは無いなと思ってる。
Dや一部のC++みたいにコンパイル時実行での最適化とどっちが速いんだろうとか思う。
2020/10/12(月) 18:27:26.57ID:wrjLnlZW
>>643
ジェネリクスってコンパイル時に解決するものだと思ってた
2020/10/12(月) 18:58:23.00ID:2+ZUcZ4K
TypeScript part3
2020/10/12(月) 20:08:52.47ID:aavFFkjO
>>645
コンパイル時の方が多少早いけど、cppのジェネリクスもといテンプレートは型の分関数を用意するって愚直な方法をとってるので、バイナリサイズがデカくなる。
型情報も使えないしね。
あと、分岐命令なんかはどっちのほうが頻度高いかとか見て、動的にプロファイル取りながら最適化しつつ実行してるので、JITの方がより良い形になる事もある。

>>646
コンパイル時に解決はしてるけど、ILレベルでは複数の関数が作られてる訳ではなかったはず。
もちろん実行時には、JITで型ごとに関数が生えることもある。
2020/10/12(月) 20:18:21.71ID:wrjLnlZW
>>648
そゆことね。なるほど
2020/10/12(月) 21:17:35.13ID:/8/TUV2P
モダンC++対マネージコード:パフォーマンス対生産性
https://www.infoq.com/jp/news/2012/04/native_vs_jit/
2020/10/12(月) 22:34:15.13ID:CacJvltN
>>625
型はトモダチ…!
2020/10/12(月) 22:37:04.59ID:CacJvltN
質問なのですがTypeScriptでC++みたいに関数引数をconstにするにはどうすれば
良いの?
2020/10/12(月) 22:47:48.13ID:CacJvltN
>>648
>あと、分岐命令なんかはどっちのほうが頻度高いかとか見て、動的にプロファイル取りながら最適化しつつ実行してるので、JITの方がより良い形になる事もある。
デマくね…?
プロファイル取る手間はタダじゃないし、
2020/10/12(月) 23:49:02.74ID:m2BvN3X6
>>652
eslint no-param-reassign
2020/10/13(火) 00:53:50.25ID:y5Oy6HcC
Ruby では、1秒で100万回ループすると、

JIT されて、1秒で1,000万回ループされる
2020/10/13(火) 06:14:03.47ID:ksuhhYbG
>>651
型はトモダチ!(゚∀゚)
2020/10/13(火) 07:33:03.58ID:mCCwe/N2
>>653
どっかで読んだけどな。
というか、AOTの制限事項として、JITより効率が悪い可能性の一つとして挙げられてるよ。
2020/10/13(火) 17:57:10.11ID:cQUBKlo0
(´・ω・`) webpack v5 ……
2020/10/13(火) 21:41:54.07ID:mhza1+DZ
>>654
「Invalid option '--param-reassign'」って言われた つ∀`;)
ESLint: 6.5.1.

ていうかできたとして無差別にconnstというのもそれはそれでC++と違う希ガスorz
2020/10/15(木) 17:16:37.21ID:pazOZeAi
webpack@5、めっちゃ破壊的やん…
2020/10/15(木) 17:39:38.69ID:hmYZFqJj
>>659
お前の目はフシアナか?
https://eslint.org/docs/rules/no-param-reassign

ていうか引数に再代入するガイジなんて必要ないから無差別にエラーで構わんやろ
2020/10/31(土) 19:19:55.76ID:T4Ek6w2r
JavaScriptからTypeScriptへの書き換えオワタ\(^o^)/
JavaScrpit最初に知って一ヶ月で全部書いたから3000行ぐらいだろうと思っていたら
あとでちゃんと数えたら8790行やったorz
実作業4日かかった
ここで4日というのは4日×8Hではなくて4日×24Hの意m(ry
2020/10/31(土) 19:27:20.93ID:cZ59ogsv

TypeScriptやってない頃に書いたコードってTypeScriptのこと意識してなくてオブジェクトの形を動的に変えたりしない?
自分がやったときはそのせいでだいぶ時間かかったわ
2020/10/31(土) 19:31:22.31ID:T4Ek6w2r
prototype文で無理矢理classにしていたやつを
さらに基底クラス(にあたるブツ)の所有でもって継承を表現していたやつの普通のclassと継承への書き換えが苦痛やった、
機械的とはいえ自動化できるほど単純には行かず苦痛やった、
手製イベントのインターフェースが実際何になるのかがぐちゃらけていたので3種類のインターフェースのORで
表現できるとワカルまで試行錯誤を要した、
あとはだいたいうまいぐあいに逝けた
とわいえVSCodeの強力なインテリセンスとリアルタイムエラー報告(スクロールバーのところが赤くなるやつ)が無かったら
到底完遂不可能なところやった、、、
webpack使用
665デフォルトの名無しさん
垢版 |
2020/10/31(土) 19:34:13.19ID:fxcwqRC2
おめでとう
2020/10/31(土) 21:54:44.53ID:bInJNbvZ
ウンコードなJSをTSに変えることで人は強くなるのだ
おまえはまた強くなった
2020/11/01(日) 08:10:24.39ID:jzqs5N6a
委譲から継承に切り替えたらそりゃ辛いっしょ。
乙〜
2020/11/02(月) 00:59:20.76ID:ZpVsHyOp
delegation over inheritance って言うしな
2020/11/06(金) 22:00:05.98ID:4red4XqV
GithubでもTsは定義箇所にジャンプできたりするんだな
強い
2020/11/09(月) 19:43:09.64ID:m4E6C9lQ
今からTypeScriptやるならDenoでいーの?
あっギャグじゃないです真面目な質問
671デフォルトの名無しさん
垢版 |
2020/11/09(月) 21:13:08.03ID:EKGzterf
作った本人は デノ って発音してるように聞こえる
2020/11/09(月) 21:43:52.92ID:nCMtc7Yy
Denoあんまり詳しくないけど、何やりたいかにもよると思う
Web開発をする分にはまだNodeなんじゃないかな
周辺のツールやライブラリが揃ってるので
CLIツールとかならDenoでいーんでの?
2020/11/11(水) 11:00:58.08ID:UmNDS4oo
>>669
jsx/tsx でもイケるようになったね
2020/11/17(火) 22:53:14.47ID:slG9DoRm
https://ncjamieson.com/prefer-interfaces/
https://github.com/microsoft/TypeScript/wiki/Performance

以前 type 推しの人がいたけどやっぱり interface か…
2020/11/20(金) 14:22:41.76ID:Us83CHd5
Announcing TypeScript 4.1
https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/
2020/11/20(金) 21:01:29.75ID:2CLFT5fk
どんどん複雑になるなぁ
ついていけまへんわ
2020/11/20(金) 21:22:14.83ID:2ALlQdvp
逆にバージョンアップでシンプルになっていく言語ってあるの?
互換を完全に切るような言語なら可能だろうけど
2020/11/20(金) 21:41:42.91ID:lbWKfW5j
>>677
Schemeが小さくはなったな
ま、大規模に使われてる言語じゃないから出来る芸当だ
2020/11/20(金) 21:44:46.30ID:4mUoVYL/
言語機能が増えたからと言って全部使う必要はないしな
たまにどこかで使われてるのを見てあれってなったら調べるくらいで良い
2020/11/20(金) 21:50:47.55ID:lbWKfW5j
JavaScriptは動的型だけど、動的型は意識しなくても複雑な事が出来てしまう
TypeScriptはそれらに対して何としてでも型を付けたいんだよ
それだけの事
JavaScript自体は何も変わってない
2020/11/20(金) 23:06:21.09ID:YMHZwsA3
もうaltJS風WebAssemblyコンパイラにして
2020/11/20(金) 23:26:29.58ID:CQfd4Gtb
>>681
つ AssemblyScript
2020/11/21(土) 01:50:51.61ID:uA84MfqB
コンパイラ型ほ生産性低いよ。
2020/11/21(土) 04:03:36.16ID:KUTDu7Bm
template literal typesなんていれるから
型レベルSQLとかおかしな事やり始めてるし
https://github.com/codemix/ts-sql
2020/11/21(土) 09:57:45.60ID:y2efXPmb
くっそ遅くなりそう
2020/11/21(土) 10:46:50.16ID:+IqFTLxs
C++並にコンパイル遅くなったりしてね。
実質マクロだから実行時は速いんちゃう?
687デフォルトの名無しさん
垢版 |
2020/11/21(土) 10:54:34.52ID:QRxilPan
>>678
あれ小さくなったって言えんの?
r7rs なんて common lispよりでかいじゃん。
コアだけなら小さいだろうけどコアだけじゃなんもできんだろ。
2020/11/21(土) 12:06:56.10ID:FiI26J/z
うちのtsプロジェクト、tslintも入れてビルドに10分くらいかかってる。
前に -incremental 試してみてなんかの理由で断念したんだよな。
もう一度トライしてみるか。
2020/11/21(土) 12:34:04.91ID:8nB0jPpm
スクリプトのメリット完全に失っててワロタ
スクリプトはビルドしちゃいけないんだよ
IDEでパラレルLintするぐらいならいいけどな
ビルドしないと動きませんじゃ本末転倒でなにがなんだか
ビルドするならC#とかGoでやりゃいい
2020/11/21(土) 13:16:27.04ID:L7J0TnQj
ts-nodeならビルド不要だけど、それとは違う話か
TypeScriptを直に実行できる処理系は今後も現れないだろうな
2020/11/21(土) 13:30:05.02ID:y2efXPmb
>>689
>ビルドするならC#とかGoでやりゃいい
ブラウザで使うのが現実的じゃない
2020/11/21(土) 13:42:58.96ID:uA84MfqB
Dart始めました
2020/11/21(土) 14:02:54.86ID:xoaJjvLB
そもそもスクリプト言語でスクリプト言語向きじゃない大規模なことをやろうとしてるからこれができたわけで、言語のせいにするのは違う
そもそも今のWeb(アプリ)はTS使ってなくてもビルドしてるものばっかりだし
2020/11/21(土) 14:35:34.39ID:FiI26J/z
まあ、べつに「スクリプトのメリット」を期待してtsを使ってるわけじゃないしな。
とはいえビルド時間が短縮できるならそれに越したことはないが。
2020/11/21(土) 15:32:21.74ID:+IqFTLxs
watch使うからビルド速度そんなに気にならないなぁ
2020/11/21(土) 18:31:06.90ID:/DiusCOy
>>687
RSR7-smallは5をベースにしてるから、それでなんも出来ないとか言ったら、それまでのSchemeを全否定じゃんw
2020/11/21(土) 18:58:48.16ID:+IqFTLxs
いっそガチでマクロ入れてくれたら色々捗るなぁ。凄く読みにくくなるだろうけど。
そこまで行かなくとも、(内部的に複数の関数を持つ)関数オーバーロードとか欲しいかも
2020/12/18(金) 05:11:45.78ID:7UB7snzp
ブラウザ使っててよく Webページ が固まることがあるから、ちゃんとUIスレッド以外で処理しろよとよく思ってたが
JavaScript 自体がシングルスレッドだったのね

WebWoker とかいうのもあるみたいだが、MDN見るに、
言語側でがっつり管理するからスレッドセーフあんまり考慮しなくてもいいみたいだし、これは楽でいいわ

Java やってて、クリティカルセクションの処理が一番嫌いだった
デッドロックの原因探すの大変すぎた
2020/12/18(金) 05:52:13.96ID:427cIB03
そもそもIO待ちにスレッドを使うのがナンセンスだったんだよな
2020/12/18(金) 07:23:19.35ID:7UB7snzp
まぁでも、

JavaScript のソースコード内に書いたものが全部同じスレッドで走ってる

ってだけで、setTimeout とかの実装内では普通に別スレッド走ってるのか。
そりゃそうだよな、そうしないと非同期処理なんてどうあがいても不可能だものね。
2020/12/18(金) 09:04:21.16ID:TR+u0YNG
非同期処理はスレッドの場合とそうでない場合の2種類ある
そうでない場合は基本的にハードウェア割り込みで実装されてる
タイマーとか通信処理とか
ファイルアクセスもOS毎に非同期APIが有るけど、libuvは互換性の為に敢えて同期APIを使う処理をスレッドプールに投げているようだ
2020/12/18(金) 09:10:54.87ID:TR+u0YNG
setTimeoutはスレッドを使ってない様に思うけど、結局の所ユーザー側でそれを知る術が無い
2020/12/18(金) 12:01:30.61ID:hVx5pFA4
>>698の問題はスレッドがどうとか関係なくて、html中のある個所の内容が決まらないと
全体のレンダリングができない構造になっていたとか、jsをダウンロードしないと
レンダリングされないのにその取得に時間がかかっているとかそんなところだろうな。
2020/12/18(金) 13:13:24.97ID:7UB7snzp
最近ないように思うけど、1つのページがブラウザ全体をストールさせることが多かったのよ
そんでブラウザを起動し直さなければいけない

その原因が、JS のスレッドと ブラウザのレンダリングスレッド(UIスレッド)が同じスレッドを共有してることにある

DOM 書き換えてる最中に レンダリングされちゃうと、ページレイアウトがぐちゃぐちゃになるから、全部同じスレッドで処理してるんだけど、
JSの処理でUIが固まるのを防ぐには、JS の DOM 書き換え「以外」の操作を別スレッドでやって、レンダリングスレッドと同期処理すればいい
(Java の synchronize とかの要領)

DOM 自体が レンダリングスレッドに属してるのは、しょうがないと思う
昔、マルチスレッドで動作する UI ライブラリ の多くがデッドロックその他のバグでどうにもならなくなって廃棄された(Java でいう AWT)

ということで、UI が固まるのにはスレッドは関係あると思うのよ
まぁ書き方が悪かったのかもしれんが

あと、JS がシングルスレッドなのはとても良いことだと思ってるからね、自分は
マルチスレッド化したら、どのみち同期化処理に失敗して、デッドロックで今よりも固まること多くなるだろうから

参考にした:
https://stackoverflow.com/questions/30932870/why-doesnt-javascript-get-its-own-thread-in-common-browsers
2020/12/18(金) 13:18:46.36ID:7UB7snzp
JS で重めの処理をしたりバグがあっても、レンダリングスレッドと分離されてれば、
少なくとも UIが固まることはないということね(デッドロックがなければ)

あと、上で最初に書いた、ブラウザ全体が固まるって話は語弊あったかもしれない

ブラウザの各タブのレンダリングスレッドと、ブラウザ全体のUIスレッドは、多分分けられてるんだよね?
後でちゃんと調べます
2020/12/18(金) 13:30:26.86ID:Lq+ZSFwA
firefoxがフリーズすることは最近ちょくちょくあったな
edgeに乗り換えたらきれいさっぱり直った
ffはもうだめかもわからんね
2020/12/18(金) 16:42:31.82ID:7UB7snzp
https://gimhana-ds.medium.com/how-firefox-and-chrome-use-process-and-threads-f58f478561f0

ブラウザのスレッドの話ココに載ってた
いろいろとたどってって疲れたので、全部は見てない

Chrome が Tab ごとにプロセスで、Firefox が Tab にマルチスレッド

Firefox もいっぱいプロセス作ってるけどね、ちゃんと読んだ人教えて
2020/12/18(金) 16:44:48.76ID:7UB7snzp
「Firefox が Tab ごとにスレッド」って書きたかった

そのスレッドも Main Thread = UI Thread (DOM 操作と JS 実行)が1個って意味で、
Raster Thread とか、Composer Thread とか多分他にもいろいろスレッド作る
709デフォルトの名無しさん
垢版 |
2020/12/18(金) 17:50:47.93ID:m88v/MV8
すみません、TypeScriptって開発中はコンパイルなしでブラウザですぐに変更の動作確認をできますか?
710デフォルトの名無しさん
垢版 |
2020/12/18(金) 19:33:24.14ID:JhB3G5yf
そういう時代が来るといいね
2020/12/18(金) 19:42:28.67ID:1RoKReGQ
Chromium Edge で、YouTube を見て、

動画を、5秒先へ進めたりすると、フリーズする
2020/12/18(金) 21:47:42.98ID:TR+u0YNG
WebWorkerは完全にスレッドだぞ
更にAtomicsを使えばスレッド間でatomicなデータ更新が出来る
2020/12/18(金) 21:53:39.89ID:6FItt2sR
WebWorker使いやすくて好き。並列処理面倒くさいからたまにしか使わないけど
2020/12/18(金) 22:14:36.51ID:TR+u0YNG
しかし、SharedArrayBufferはSpectreのせいでほぼ使えない状態だけどね
Spectreに対応したCPUが普及しきらない限り有効にされる事は無い
Webではもはや余計な機能追加はセキュリティーホールの元という認識でこれ以上進化することも無いだろう
ただ、ストアからインストールするPWAはネイティブアプリの代わりだから、機能追加していくと思われる
2020/12/18(金) 23:02:27.28ID:2C+h9Dqf
ストアの収益減らすの絶対許さないマンのアップル
vs
Webから情報吸いたいマンのグーグル
2020/12/19(土) 13:35:36.37ID:biviwPkb
promise(もしくはasync/await)が使えたらシングルスレッドでも実質別段困らない
希ガス
2020/12/19(土) 15:04:10.72ID:+cK8B71a
WebWorkerとか知らんかった...
メインと状態を共有しないのが明確なら便利そうだな
さもなくばAsync/Awaitか
2020/12/19(土) 15:41:20.87ID:1ZOkfUtM
I/O boundはPromiseでいいけど
CPU boundはPromiseじゃだめだからWebWorker使う
マルチコアの有効活用
2020/12/19(土) 18:53:18.58ID:Z1BeWWR+
>>715
それは有る
Appleはブラウザの進化を完全に否定した(WebUSBとか実装しないと明言した)
建て前はセキュリティーだけど、真実はPWAがネイティブアプリと同等の事が出来るとApple税が取れなくなるからだろうね
2020/12/19(土) 18:56:13.80ID:dPku7W9W
税なら税で素直に払えばいい
それでいい製品が使えるならいいことだ
NHKのようなものだな
2020/12/19(土) 19:15:06.66ID:BJ7NL7s9
Appleが採用しない事で足並みが揃わなくなって、Web全体に影響するという……
2020/12/19(土) 19:43:44.12ID:GiU9Z0Di
🍎に足並みを揃えない連中がよくない
723デフォルトの名無しさん
垢版 |
2020/12/19(土) 21:17:41.04ID:qtDJ4FDM
SharedArrayBufferの代替手段って無いの?
結局これは解決する問題なの?
2020/12/19(土) 22:01:28.77ID:oadZnMoo
WebUSBに関してはFireFoxも実装する予定はないので
足並みを揃えてないのはChrome
725デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:06:18.93ID:yZxXMpJa
目の前に機器があってスマホからコントロールしたい要求は一般的だと思うけど、USBの番号を個人で取れなくなったので、ブラウザに実装する意味は薄れたかもしれないですね。
2020/12/19(土) 22:29:23.32ID:lChJAmlD
ここだけはappleを応援するわ
消費者としてブラウザにどんどん変な機能つけるんじゃねぇ
727デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:33:23.73ID:yZxXMpJa
IoT的な意味合いで必要とする人たちが居るんですよ。

自分は見ないから動画機能を付けるなとか、聞かないから音機能を付けるなっていうのと同じでは?
2020/12/19(土) 22:44:29.90ID:8bUfeulY
USB APIをサーブしてajaxでlocalhostと通信でいいじゃん
わざわざブラウザがサポートすることじゃない
2020/12/19(土) 22:47:08.81ID:8bUfeulY
まあ百歩譲って乗せるとしても拡張でいいよな
標準化しようとするのはでしゃばりすぎ
2020/12/19(土) 23:00:43.45ID:YoyJ/iet
ブラウザがんばって欲しい
React + TS 最高
swift + storyboard とかいう糞オブ糞のそびえ立つ糞まみれは2度と触りたくない
2020/12/19(土) 23:55:21.82ID:Z1BeWWR+
PWAの定義が今一漠然としてるから、今後はその辺りが進化していくと思われる
で、PWAでない場合はJavaScriptの動作は思いっきり制限されるだろうね
ま、それで良いと思う
2020/12/20(日) 00:28:55.07ID:qaHDEdvT
> わざわざブラウザがサポートすることじゃない
ほんとこれ
なぜわざわざブラウザでなんでもやろうとするのか
IoTなんだから普通にツールとかアプリとかドライバ書けよと
2020/12/20(日) 00:29:51.25ID:L33Timbq
結局ああいうのって「すげええブラウザでこんなことできた!」
いいたいだけちゃうんか、みたいなのがマジ多い
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況