一刻也没有 GreatScript 的暴死难过,下一个赶到战场的是 JS#! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
heroisuseless
V2EX    分享创造

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

  •  
  •   heroisuseless 2024-02-02 18:15:39 +08:00 2500 次点击
    这是一个创建于 667 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前景提要:我自创了一门编程语言,可以看作另一个 TypeScript ,但是比 TS 更简约,原文在: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#(草案) 
    8 条回复    2024-02-06 18:18:53 +08:00
    yafoo
        1
    yafoo  
       2024-02-02 23:40:58 +08:00 via Android
    确实完美,支持
    lxrmido
        2
    lxrmido  
       2024-02-03 19:17:11 +08:00
    精神可嘉
    Rrrrrr
        3
    Rrrrrr  
       2024-02-04 12:31:07 +08:00
    问题是只有你自己会用
    qq135449773
        4
    qq135449773  
       2024-02-04 14:16:22 +08:00
    那你为什么不用 ts
    zhouyg
        5
    zhouyg  
       2024-02-04 17:45:43 +08:00
    难得的造语言轮子,支持支持
    mumuuu
        6
    mumuuu  
       2024-02-05 09:49:01 +08:00
    语言在于使用,有没有使用的 sample ?如何在 vscode 上进行开发?
    MrDavidJones
        7
    MrDavidJones  
       2024-02-05 10:30:15 +08:00
    TS 在于类型推导,特别是泛型,写多个类型起码多一半时间去开发,还是要看使用、维护方不方便吧。
    guangs
        8
    guangs  
       2024-02-06 18:18:53 +08:00
    符号太多了吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1064 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 23:40 PVG 07:40 LAX 15:40 JFK 18:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86