什么是 GS ? GS 是我自创的一门编程语言,全名叫“GreatScript”,是一门类型化语言,可以编译成 JavaScript 。简单来说,就是又一门 TypeScript 。
GreatScript 的生态位跟 Typescript ,CoffeeScript ,ReScript 相同,那么,GS 究竟有什么优点,从而在众多类型化语言中脱颖而出呢?
答案就是写出来的代码少,在某些情况下,写出来的代码甚至比 JS 还少!而做到这样的关键,就是对 JS 代码进行大刀阔斧的改革,与其他类型化语言不同,JS 并不是 GS 的子集,GS 是对 JS 取其精华去其糟粕,它的优点是:
至于我为什么要造一个 GS ,说起来也算是一个副产品,我最初的打算是做一个用自制编程语言写自制操作系统的项目(很肝),自制编程语言起名叫 zlang ,自制操作系统起名叫 zos ,z 的意思是我的姓名的首字母,没有其他特别的含义,后来这个项目烂尾了(很正常),我只做到了用自制编程语言在自制操作系统上打印出一串“Hello World”,b 站录制了两期视频后,就彻底不干了,但是我自认为我设计的 zlang 还不错,而且现在我是一名前端程序员,而前端又向来以娱乐圈著称( bushi ),于是我就琢磨着能不能把我的 zlang 移植到前端上,如果用的人多的话,我也算一个前端创始人了,于是就有了 GS 。
附一个我的 b 站链接: [ [自制编程语言+操作系统 2 ] 在空无一人的赛道狂奔...-哔哩哔哩] https://b23.tv/6HjF8Fz
为了适配 JS ,GS 还是与 zlang 有一点点的不同,所以我又取了一个单独的名字而不叫 zlang ,那么 GS 到底长什么样呢?我弄了一个 GitHub 仓库,语法写到 readme 上了:
https://github.com/HeroIsUseless/greatscript.github.io/blob/main/index.md
目前这个仓库里就一个 readme ,不过我已经实现了 zlang 的编译器了,改一改就能用于 GS ,做一个 demo 不算太难,不过做一个完整的编译器就不容易了。
下面展示一段相同功能的 JS 与 GS 的代码片段:
使用 React 的情况:
可以看到 GS 甚至比 JS 更简约,这就是 GS 的最突出的特点之一,虽然现在 GS 还处于“刚创建一个文件夹”的水平,不过我相信由于 GS 的简约特性,将来一定会有大批拥趸的。
1
iikebug 303 天前
这种语法歧义太多了;
1 、return 就让人很迷惑,不想 rust 那样可以区分,在示例代码上我区分不出来有没有 return: 2 、导出导入也迷惑,不想导出内部变量,你这怎么区别; 语法不是越简洁越好的,一眼过去清晰明了才是最好的语法 |
2
HelloWorld556 303 天前 1
我也相信由于 GS 的简约特性,将来一定会有大批拥趸的。
|
3
debuggerx 303 天前 1
个人很讨厌隐式返回这个看似简洁的语言特性,代码的可读性比书写时的一点便利性重要多了,鼓吹这种东西的所谓“新语言”,有一个算一个,在我这里统一作为大聪明看待。
|
4
zhangkui 303 天前
AnyScript ? 加油!!!
|
5
Leviathann 303 天前
怎么不叫 ColonScript
|
6
grimbedroom 303 天前
rust 是末尾句不带符号视为 return ,你这个是什么思路,直接末尾句吗
|
7
heroisuseless OP @iikebug 我也有设计 return ,看我贴的视频链接就知道,return 被我设计成了提前返回,当然在最末尾调用一个 return 也是没有任何问题的
|
8
heroisuseless OP @grimbedroom 是的,直接末尾句,我也有设计 return ,可以看我贴的视频
|
9
heroisuseless OP @debuggerx 这里借鉴的 Haskell ,另外,我也有设计 return ,在视频里说明了。
另外,代码可读性我认为比 JS 要强,如果按照什么编程语言都不会的人来看,是变量/函数/类都有各自毫不相干的定义方式好,还是用一种统一的定义方式好? 我这里将常量/变量/函数/类都用冒号定义,以求简约,协调,不会的人一看也能举一反三。 说实在的,我设计的这个编程语言自认为很优美,很协调,从变量定义可以拓展出函数定义,从函数定义能拓展出类定义,匿名函数定义,类型定义,这一切都是相互关联的,反观类 C 语言,你很难找到变量定义和函数定义,类定义的区别,这代表毫不相干的定义你要学好几次。 |
10
heroisuseless OP @iikebug 导入导出还在设计中,在我的设计中,整个文件是一个实例(大括号括起来的那种),普通的变量常量函数都是 public 的,保护变量用.做前缀,私有变量用..做前缀,例如:
a : { b: 1 .c: 2 ..e: 3 } 这样你从语法层面上就调用不了保护变量和私有变量,硬要调用,那就变成了 a..b ,a...c ,这在语法层面就是错的。 另外,在文件系统中,.开头的文件往往是隐藏文件,我的灵感由此而来。 |
11
happyxhw101 303 天前
函数式编程语言不需要 return, 因为它们是函数式的,像 scala 这种,GS 不使用 return ,就有点 ”画虎不成反类犬“
|
12
Leon6868 303 天前
```
const viewList = [] export function ContView(){} ``` 这种 JS 如何转为 GS ? |
13
K120 303 天前
简约是你自己给自己定义的一个标签, 在我看来这更难懂,理解更费劲。
|
14
Leon6868 303 天前 1
JS 最被诟病的就是类型安全,这也是为什么 typescript 在大型项目中非常重要。你把变量、函数和类一起定义,真的不是开历史倒车吗?对于如此优雅的设计,你该如何设计 Lint 呢?
|
15
ayase252 303 天前
|
16
heroisuseless OP |
17
heroisuseless OP @Leon6868 虽然都是用冒号定义的,但是变量/函数/类的定义方式还是有些许不同
定义一个常量: ``` a : 0 ``` 定义一个函数: ``` f() : (...) # 变量名后面有括号就是函数 ``` 定义一个结构体: ``` s : {...} # 用大括号定义 ``` 定义一个类: ``` c() : {} # 变量名后有括号,并且右边是大括号 ``` 定义一个类实例: ``` d : c() ``` 所以还是很有统一性,并且各自的定义还是有清晰的区别的 |
18
heroisuseless OP 如果一门语言,有 JS 没有的类型安全,但是写出来的代码居然比 JS 还少,你就喜欢上这个语言了
现在介绍一下变量如何使用: ``` x! : 0 # 变量定义 x? : x + 1 # 变量赋值 y! : String | Person | 0 # 带类型定义,目前要求前几个可以是值也可以是类型,最后一个必须是值 z! : Int | undefined # undefined 既是类型也是值 ``` 函数怎么用呢? ``` add(a: Int, b: 0) : Int | ( # 变量如果仅用类型定义,那么它是必传参数,如果是用值定义的,那么它就是可选参数 a + b ) ``` 绝活:实例解构: ``` c! : 0 {a, b!, c?} : data # 这里定义了一个常量 a ,定义了一个变量 b ,赋值了一个变量 c {x: 0, b: 1} : data # 如果解构出来的是 undefined ,那么就赋予默认值 ``` |
19
Leon6868 303 天前
|
20
YANGTEKE 303 天前 via iPhone
突然想起来之前站里的一个叫前端之虎的大哥,有点意思
|
21
codingguy 303 天前
变量赋值用冒号代替等号的目的是啥?然后解构里面的赋值又换回了等号,但是对象里的键值对又是冒号分隔(破产女孩疑惑脸.jpg )
js 为了区分变量常量进化出来的 const ,let 你又给改回去了,开倒车属于是 |
22
heroisuseless OP @Leon6868 抱歉,之前的回答有点不太准确
在 GS 中,一个文件可以看作一个实例(大括号包裹的那种),内部定义的东西默认是 export/public 的 如果不想导出,则在变量名前加一个“.”: ``` viewList : [] .ContView() : () ``` 那么有.作为前缀的,就是不导出的,protected 的,如果是 private 的,则可以用..定义: ``` ..ContView() : () ``` |
23
nomagick 303 天前
一塌糊涂
|
24
keepRun 303 天前
有想法是好事,得鼓励。
不过是否是更好值得商榷 |
25
a132811 303 天前
这是逆 ECMA/TC39 标准而行呀。es 不是不想简化,是要兼容,而且这些年语法上渐近的精进了不少了。
Deno 走 web 标准,做得很好,但是就因为跟 node/npm 不兼容,推广起来老费劲了 |
26
changwei 303 天前 via Android 1
目前对于 js 改造最好的语言我觉得是 rescript ,原 po 可以参考一下他的设计
|
27
jones2000 302 天前
又是强制类型的。js 的好处就是什么类型都可以,天马行空。一上来就强制类型,直接被阉了。
|