zoukankan      html  css  js  c++  java
  • T 语言语法设计方案总结

    早在 2015,我就已经精通了 C++、C#、JS,也用过其它语言,比如 PHP、Python、Java 做过一些项目,就觉得这些语言设计得太过复杂、坑多、麻烦,所以就开始设计一门新语言,暂且叫 T 语言。我希望新语言是非常简单的,比如不需要脚手架就可以开工,不担心依赖安装问题,不会因为用了很多依赖导致项目很大很卡。

    设计的过程很辛苦,需要考虑到不同的情况,需要和不同的人讨论。一开始我以 C 为原型,前前后后修改了 90 多版,到现在以 JS 为原型。很多一开始觉得没用的功能,在经过多次增删后最后又重新放了回去。只有自己设计过语言才能体会到每个语言设计者背后的纠结。

    声明

    // 声明变量
    var x = 1
    const y = 2
    var [x, y]: [number, number] = [1, 2]
    
    // 声明函数
    function sub(x, y) => x - y
    
    function log() {
    }
    
    // 声明类
    class X {
        field = 1       // 字段
        method() {   // 方法
        }
    }
    
    class Y: X {         // 继承 X
        new() {                // 构造方法
        }
        length {                // 属性
        }
        set length(value) { // 设置属性
        }
    }
    
    // 声明枚举
    enum Align {
         left, center, right
    }
    
    // 声明别名类型
    type i32 = Int32

    语句

    // 基本逻辑判断和循环
    if (x) { }
    while (x) { }
    for (var i = 0; i < arr.length; i++) {}
    for (var item in obj) {}
    
    // switch
    switch (x) {
        case 0:
              log(0) // 不需要 break
        case 1:  continue // 强制穿透到下个 case
        case else: // 默认情况
              log(1)
    }
    
    // 异常语句
    try { } catch (e) {} finally {}
    assert x > 0 // 确保 x > 0  否则抛异常

    表达式

    // 数字
    1    0xffff_ffff
    
    // 字符串
    'x'    "x"     `1 + 1 = {1 + 1}`
    
    // 数组和对象
    [1, 2, 3]
    {x: 1}
    
    // 函数
    x => x
    (x, y) => x - y
    
    // 运算
    x + y         x - y        x * y        x / y
    x mod y // 取余
    x ^ y // 次方
    
    x == y     x != y     x < y     x > y      x <= y     x >= y
    x & y      x | y     !x     x ? y : z   // 短路逻辑运算
    x ?? y  //  同 x != null ? x : y
    
    x++      y--
    x = y     x += y   
    
    x is number      x  as number
    x.y        x[y]        x(y)       new X()
    x?.y       x?[y]      x?(y)
    
    await fn()
    try fn() // 如果 fn() 出错,返回 null

    类型

    // 基本类型
    any     void      null
    object      number     boolean     string
    
    // 引用
    X.Y     X[]       typeof x
    
    // 常量
    1    [any, any]     {x: null}
    
    // 组合
    X | Y       X & Y        !X
    X is Y ? X : void
    
    // 计算
    keyof X       X["key"]
    {[key: keyof X]: any}

    其它

    // 导入
    import "x"
    
    // 区间
    arr[0..^1]  // 数组中第 0 到倒数第 1 个
    
    // 接口
    interface X {}
    
    // 扩展
    extension String {}
    
    // switch 表达式
    var x = switch (y) {
        case 1: 2,
        case 1: 3
    }
  • 相关阅读:
    gsm at 指令
    wm8976 codec
    【Gym 100971J】Robots at Warehouse
    【XDU1144】合并模板
    腾讯云CentOS7安装LNMP+wordpress
    【USACO1.1】Broken Necklace
    【校赛小分队之我们有个女生】训练赛6
    【计导作业】——商品记录
    C 文件读写2
    C 文件读写1
  • 原文地址:https://www.cnblogs.com/xuld/p/12254147.html
Copyright © 2011-2022 走看看