一刻也没有 GreatScript 的暴死难过,下一个赶到战场的是 JS#!

325 天前
 heroisuseless

前景提要:我自创了一门编程语言,可以看作另一个 TypeScript ,但是比 TS 更简约,原文在:https://www.v2ex.com/t/1010934

经过几天与网友们的激烈对线(感谢这些网友们的意见建议),我承认我的自制编程语言有几个问题:类型表达能力不足,冒号太多,违逆一般认知等,吸取了这些教训后,我对 GreatScript 又进行了大刀阔斧的改革,以至于我不得不用一个新名字去命名它,这就是 JS#。

为什么命名为 JS#,因为我主要用#符号去进行类型标注,大致语法在(如果感觉不错希望点个 Star ):greatscript.github.io/index.md at main · HeroIsUseless/greatscript.github.io

JS#的特点在于:

  1. 代码量比 JS/TS 少
  2. 语法少,自洽

下面跟 TS 对比一下:

// 定义一个常量
const a : number = 1; // TS
a # number : 1 // JS#

与 TS 相比,取消了“const”符号,同时用 # 符号标注类型,因为在某些编程语言里(例如 python ,shell),#代表注释,所以我认为这样用很合理,直观,简约。

// 定义一个变量
let b : number | string = 1; // TS
b! # number | string : 1 // JS#
// 赋值一个变量
b = 2; // TS
b = 2 // JS#

变量在 JS#中,用感叹号!定义,代表这是一个变量,需要警惕/注意。而赋值则与 JS/TS 相同。

// 定义一个 object
const c = {
	d: 1 as number,
	e: '' as string
}; // TS
c : {
	d # number : 1,
	e # string : ''
} // JS#

在定义一个结构体这里,JS#就体现出了对 TS 甚至对 JS 的优越性:语法自洽。因为 JS#保持了语法的一致性,为什么 JS#非得用冒号赋值,其实就是为了兼容这里,相比之下,JS/TS 在赋值变量常量用等号=,在赋值属性的时候用冒号:就不太能说得过去了吧?

// 定义一个函数
function add(a : number, b : number) : number {
	return a + b;
} // TS
add(a # number, b # number) # number : (
	a + b
) // JS#
// 函数执行
add(1, 2); // TS
add(1, 2) // JS#

对于函数,JS#的观念是一个待执行的表达式,或者叫表达式模版,所以用圆括号包裹,函数执行时表示表达式立即执行,圆括号被解构掉,很完美啊,而且函数声明与常量/变量声明统一了。而执行则与 JS/TS 相同。

// 定义一个类
class Person {
	id: number
	name: string
} // TS
Person() : {
	id # number : 0
	name # string : ''
} // JS#
// 初始化一个类实例
const person = new Person(); // TS
person : Person() // JS#

对于类定义,JS#则将其看作一个函数,或者说一个模版,在调用时,立即执行该表达式,由于该表达式是一个结构体,则立即返回一个结构体,达到初始化一个类的效果,我觉得很巧妙,但是还有一些并没有思考清楚,例如构造函数之类的(最差就是照搬 JS/TS )。

还有其他很多地方还没有思考,比如说泛型,接口,类型定义什么的,但是我认为问题不大,类型表达能力应该和 TS 相同,并且应该没有什么语法上的移进规约冲突之类的。

最后附一个类型定义的语法设计:

// 定义一个类型
type T = number | string; // TS
T #: number | string // JS#(草案)
2055 次点击
所在节点    分享创造
8 条回复
yafoo
325 天前
确实完美,支持
lxrmido
324 天前
精神可嘉
Rrrrrr
323 天前
问题是只有你自己会用
qq135449773
323 天前
那你为什么不用 ts
zhouyg
323 天前
难得的造语言轮子,支持支持
mumuuu
322 天前
语言在于使用,有没有使用的 sample ?如何在 vscode 上进行开发?
MrDavidJones
322 天前
TS 在于类型推导,特别是泛型,写多个类型起码多一半时间去开发,还是要看使用、维护方不方便吧。
guangs
321 天前
符号太多了吧

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

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

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

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

© 2021 V2EX