1
Rocketer 2022-03-08 02:02:05 +08:00 via iPhone
现在 js 已经像是一门低级语言了,无论你用 es6 还是 ts ,最终都给你编译成 es5 运行。所以 js 本身怎么改已经无所谓了,理论上你甚至可以用 Java 写,然后编译成 es5 。只要有编译器即可
|
2
yyfearth 2022-03-08 03:18:24 +08:00
那不就是 TypeScript 吗
不是所有人都喜欢类型的呀 为啥你不喜欢 TS 又想要类型? TS 本来就可以兼容绝大部分的 JS 你不想要类型 TS 你定义成 any 基本上就和 JS 差不多了 另外 Google 有 Dart 呀 推过 但是失败了 现在靠 Flutter 来用 而且最终编译成 JS @Rocketer 未来我觉得还是要看 Wasm 不管是 JS 还是 TS 还是 Rust/C++ 甚至 Java/C# 都编译成 Wasm 就可以了 |
3
yyfearth 2022-03-08 07:15:29 +08:00
@3dwelcome 现在给 JS 加类型 语法就 2 种 要么学 TS 类型写在变量后面 a: string
要么学 Java 写在前面 String a 基本上就是 Dart 的做法 说要用变量名来表示类型的就是扯淡 string_a 这个根本没办法统一 而且之前也有这么做过的 问题多的要命 “我不想用 TS 啊,就想用原生 JS 那个熟悉的味道” 加上类型后就不是 原生 JS 的味道了啊 而且现在 TS 已经很成熟 JS 直接改个名 然后加几个 any 就可以跑了 具体的类型验证 后面再加也行 唯一就是用一些第三方库 需要找 typing 或者写 def 有一点点麻烦 |
5
cmdOptionKana 2022-03-08 08:27:33 +08:00
不理解,JS 加了 typing ,与 TS 有什么本质区别?只能是大同小异吧。
|
7
DOLLOR 2022-03-08 09:17:39 +08:00
python 的 type hint 都五六年了,都没多少人用,还备受嫌弃,毕竟多数人还是更向往“自由”的。
如果真的想要静态类型,那就不要找借口嫌弃 TS 。 |
8
3dwelcome OP @yyfearth "而且现在 TS 已经很成熟 JS 直接改个名 然后加几个 any 就可以跑了"
所以我其实没搞清楚是有了 TS 的存在,JS 才没考虑加静态类型。 还是说有了 WASM 这种预编译语言后,不再需要 JS 大展拳脚。 还是说 JS 已经年迈,有其他语言替代,加不加都无所谓,该退休了。 可是静态类型缺失,在 JS 用户统计里占第一,就是刚需般的存在。GOOGLE 说看不见用户需求,那就是看不见。 |
9
3dwelcome OP |
10
yaphets666 2022-03-08 09:28:59 +08:00
根本问题就是这门语言设计之初就是 script 用的,没想这么多问题。
|
11
cheng6563 2022-03-08 09:42:53 +08:00
lua 为啥不加静态类型?
python 为啥不加静态类型? bash shell 为啥不加静态类型? |
12
yyfearth 2022-03-08 09:47:01 +08:00 3
@3dwelcome 我记得本来 JS 是想加类型的 你可以看下 ECMAScript 4 https://evertpot.com/ecmascript-4-the-missing-version/
但是失败了 然后有了 TypeScript Dart Flow 基本上都是为了给 JS 加静态类型 结果就是 TS 成功了 Dart 在靠 Flutter 续命 Flow 死了 当初 ES4 失败 我记得是因为大部分 JS 的开发者并不想要类型 觉得太麻烦了 太复杂 而且就是给网页写点 script 方便好用才更重要 灵活性更重要 但是随着 webapp 越来越大 需要团队协作的越来越多 所以静态类型的重要性就越来越大 我个人认为 现在 JS 根本不打算再尝试加入类型: 1 是有之前的失败 2 已经有了很成熟的 TS 和 Dart 有需要的人为啥不用 3 现在 JS 核心人员有不少就是不喜欢 TS 和静态类型的 就是不想要和 TS 这些一样 你看下最近出的 private field/method 就知道了 @creanme 既然是静态类型 肯定会越来越复杂的呀 毕竟有大型工程的需要 ---- @3dwelcome 另外我猜你可能是希望通过引入静态类型来提高 JIT 性能 可能你不是特别在意静态类型本身 这样其实各大浏览器开发商已经在往这个方面努力了 之前有 asm.js 其实就是给 简化的 JS 加上基本类型的静态类型 这样就可以直接编译成本地代码执行 然后 asm.js 进化成了 wasm 所以 JS 本身就没有必要为了性能去添加静态类型的复杂度 想要性能 可以用支持静态类型的语言之间编译成 wasm 想要灵活性 就用 ES 或者编译到 es5 就是 |
13
gadfly3173 2022-03-08 10:54:14 +08:00
ts 的语法对于熟悉 java 之类的强类型语言的人来说用起来还是挺难受的。。尤其是类型要写在变量名后面。。
|
14
Leviathann 2022-03-08 11:37:38 +08:00
@gadfly3173 没什么感觉,java 我都写 var 的
|
15
anguiao 2022-03-08 11:47:51 +08:00
不如等 wasm 完善,喜欢的就直接用其他语言写好了,干嘛一定要给 JS 加类型呢?
|
16
NewYear 2022-03-08 11:48:01 +08:00
学习 C#用了 VS 后,认为类型还是非常重要的,虽然增加了一点负担,但是能带来较大的便利性。
不指定类型,表面上看是很简洁很舒服,但是指定类型能让 IDE 带来无比强大的自动 debug 和智能提示,写代码变得更加便利而不是更不方便,甚至能将很多编写错误的代码在编写环节就发现,减少了很多 debug 次数。 |
17
3dwelcome OP @NewYear 严重同意最后一句,JS 没类型很难预测代码的执行结果。
花大量时间调试语言设计上的问题,完全是浪费时间浪费生命。 |
18
3dwelcome OP @anguiao 既生瑜何生亮,wasm 的命运,和当年 flash 一样,注定只能是插件的形式存在。访问不了 DOM ,就替代不了 JS 。
只要 JS 老大哥不让位,浏览器领域就没别的语言能取而代之。 |
19
kop1989smurf 2022-03-08 12:10:32 +08:00
我个人理解主要还是历史包袱问题。
js 的初衷就是写个简单的逻辑脚本,没想过当 web 软件工程的主要开发媒介。 既然如此,那么强制类声明、强类型就都是没有必要的。(毕竟数据源都不严肃) 再加上楼上说的历史路线问题。 web 开发发展到现在,网页、脚本都需要编译才能运行了,我认为已经非常的背离初衷了。 整个 web 开发领域都在一个羸弱的根基上盖摩天大厦。这是我个人从情感上很难以接受的。 希望这个现像早日改变。 |
20
3dwelcome OP @kop1989smurf 历史包袱能理解,可是 google 是有能力改变的,比如让 wasm 直接访问 dom ,这对 chrome 开发者绝非难事。
google 没选择那么做,就是希望大家还是继续用古老的 js 。 以前微软这点就做得很好,至少还有个 VBScript ,让你有的选。不像 google 掌权,一家独大,完全没得选。 |
21
wanguorui123 2022-03-08 12:29:19 +08:00
有了静态类型就不是 JS 了,没有静态类型也是 JS 优势,JS 更灵活快速
|
22
3dwelcome OP @wanguorui123 我一直觉得软件核心是算法,不是拼大量字符串。
动态类型拼字符串可以,写点算法就很是痛苦。 |
23
wanguorui123 2022-03-08 13:20:14 +08:00
@3dwelcome 没有静态类型也能写出不错的代码,只是需要开发者的代码约束能力比较强
|
24
enchilada2020 2022-03-08 16:25:31 +08:00 via Android
@wanguorui123 有没有好的例子
|
25
enchilada2020 2022-03-08 16:25:48 +08:00 via Android
@wanguorui123 代码约束能力这块
|
26
EPr2hh6LADQWqRVH 2022-03-08 16:34:01 +08:00
动态是优势不是缺陷,ts 的类型系统更灵活。
纯静态语言不可能拥有像 ts 这样灵活性。 纯静态才是缺陷。 打个比方,一般来讲四只脚的动物跑得都比两只脚的快, 你现在出来责问,为什么长短跑运动员不使用四肢参赛,而只使用下肢 因为上肢拿去提供更高阶的东西了好吧,就算手脚并用能跑得更快,人也不会放弃那些高阶特性手脚并用的 |
27
3dwelcome OP @avastms 从统计学上来说,这网站上至少参加 JS 投票的一大半人,都觉得静态类型是一个缺陷。
你可以不用静态类型,但是不能没有。 如果 CPP 新规范里只允许 auto 动态类型存在,不允许 int 或者 double ,那早就闹翻天了。 |
28
dsrkafuu 2022-03-09 01:24:18 +08:00
我喜欢用 TS 写代码,我后面自己维护也舒服得多
但我喜欢 JS 这门语言,不喜欢 TS 这个超集 /语言,可玩性太强了 |
29
yyfearth 2022-03-09 02:54:28 +08:00
@3dwelcome wasm 目前设计的目的是可以直接把现有的软件编译到浏览器里面运行 而且主要就是算法部分
或者借助 wasm 把 js 里面有性能瓶颈的部分 更加高效的执行 另外 wasm 和 js 可以无缝集成 这样 wasm 就可以借助 js 来操作 dom js 也可以借助 wasm 来提升核心算法的效率 |
30
amlee 2022-03-14 11:43:54 +08:00
|