Javascript 为什么不增加静态类型呢?

2022-03-08 01:35:21 +08:00
 3dwelcome
https://2021.stateofjs.com/

这网站对 JS 生态做了一个调查,由 1 万多个人,统计出来最大的遗憾,就是 JS 缺乏静态类型。

今日不比往年,技术飞速发展,使得 JS 最终是以 JIT 实时转义后的静态类型语言,运行在 CHROME 浏览器上的。

有 JIT 加持后,要给 JS 加个类型,对于 google 并不是很难的事情,可一直没人去推动。(我不想用 TS 啊,就想用原生 JS 那个熟悉的味道。)

2921 次点击
所在节点    前端开发
30 条回复
Rocketer
2022-03-08 02:02:05 +08:00
现在 js 已经像是一门低级语言了,无论你用 es6 还是 ts ,最终都给你编译成 es5 运行。所以 js 本身怎么改已经无所谓了,理论上你甚至可以用 Java 写,然后编译成 es5 。只要有编译器即可
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 就可以了
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 有一点点麻烦
murmur
2022-03-08 07:43:20 +08:00
性能瓶颈在 dom ,不在 js 部分,后端你认为不行你可以 java 可以.net 可以 go ,何必一棵树上吊死
cmdOptionKana
2022-03-08 08:27:33 +08:00
不理解,JS 加了 typing ,与 TS 有什么本质区别?只能是大同小异吧。
creanme
2022-03-08 09:15:13 +08:00
@yyfearth ts 类型太复杂了,不太喜欢
DOLLOR
2022-03-08 09:17:39 +08:00
python 的 type hint 都五六年了,都没多少人用,还备受嫌弃,毕竟多数人还是更向往“自由”的。
如果真的想要静态类型,那就不要找借口嫌弃 TS 。
3dwelcome
2022-03-08 09:23:19 +08:00
@yyfearth "而且现在 TS 已经很成熟 JS 直接改个名 然后加几个 any 就可以跑了"

所以我其实没搞清楚是有了 TS 的存在,JS 才没考虑加静态类型。

还是说有了 WASM 这种预编译语言后,不再需要 JS 大展拳脚。

还是说 JS 已经年迈,有其他语言替代,加不加都无所谓,该退休了。

可是静态类型缺失,在 JS 用户统计里占第一,就是刚需般的存在。GOOGLE 说看不见用户需求,那就是看不见。
3dwelcome
2022-03-08 09:27:48 +08:00
@DOLLOR JS 不一样,有类型的话,我肯定用。

现在 JS 代码用 parseInt 或者 parseFloat 来确保一个准确的数字类型,移植复杂点的数学算法,调试很困难,我也是挺无语的。
yaphets666
2022-03-08 09:28:59 +08:00
根本问题就是这门语言设计之初就是 script 用的,没想这么多问题。
cheng6563
2022-03-08 09:42:53 +08:00
lua 为啥不加静态类型?
python 为啥不加静态类型?
bash shell 为啥不加静态类型?
yyfearth
2022-03-08 09:47:01 +08:00
@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 就是
gadfly3173
2022-03-08 10:54:14 +08:00
ts 的语法对于熟悉 java 之类的强类型语言的人来说用起来还是挺难受的。。尤其是类型要写在变量名后面。。
Leviathann
2022-03-08 11:37:38 +08:00
@gadfly3173 没什么感觉,java 我都写 var 的
anguiao
2022-03-08 11:47:51 +08:00
不如等 wasm 完善,喜欢的就直接用其他语言写好了,干嘛一定要给 JS 加类型呢?
NewYear
2022-03-08 11:48:01 +08:00
学习 C#用了 VS 后,认为类型还是非常重要的,虽然增加了一点负担,但是能带来较大的便利性。

不指定类型,表面上看是很简洁很舒服,但是指定类型能让 IDE 带来无比强大的自动 debug 和智能提示,写代码变得更加便利而不是更不方便,甚至能将很多编写错误的代码在编写环节就发现,减少了很多 debug 次数。
3dwelcome
2022-03-08 11:56:25 +08:00
@NewYear 严重同意最后一句,JS 没类型很难预测代码的执行结果。
花大量时间调试语言设计上的问题,完全是浪费时间浪费生命。
3dwelcome
2022-03-08 12:00:56 +08:00
@anguiao 既生瑜何生亮,wasm 的命运,和当年 flash 一样,注定只能是插件的形式存在。访问不了 DOM ,就替代不了 JS 。
只要 JS 老大哥不让位,浏览器领域就没别的语言能取而代之。
kop1989smurf
2022-03-08 12:10:32 +08:00
我个人理解主要还是历史包袱问题。

js 的初衷就是写个简单的逻辑脚本,没想过当 web 软件工程的主要开发媒介。
既然如此,那么强制类声明、强类型就都是没有必要的。(毕竟数据源都不严肃)
再加上楼上说的历史路线问题。

web 开发发展到现在,网页、脚本都需要编译才能运行了,我认为已经非常的背离初衷了。
整个 web 开发领域都在一个羸弱的根基上盖摩天大厦。这是我个人从情感上很难以接受的。

希望这个现像早日改变。
3dwelcome
2022-03-08 12:23:38 +08:00
@kop1989smurf 历史包袱能理解,可是 google 是有能力改变的,比如让 wasm 直接访问 dom ,这对 chrome 开发者绝非难事。
google 没选择那么做,就是希望大家还是继续用古老的 js 。
以前微软这点就做得很好,至少还有个 VBScript ,让你有的选。不像 google 掌权,一家独大,完全没得选。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX