早在 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
}

T 语言语法设计方案总结的更多相关文章

  1. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  2. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  3. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

  4. R语言语法基础一

    R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...

  5. L脚本语言语法手冊 0.10版

    L脚本语言语法手冊 0.10版       简  介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...

  6. 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展

    1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...

  7. Go语言语法说明

    Go语言语法说明 go语言中的go func(){}() 表示以并发的方式调用匿名函数func 深入讲解Go语言中函数new与make的使用和区别 前言 本文主要给大家介绍了Go语言中函数new与ma ...

  8. PL真有意思(二):程序设计语言语法

    前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...

  9. Neo4j-Cypher语言语法

    Neo4j-Cypher语言语法 梦飞扬 2018-03-15 264 阅读 Neo4j 本文是记录Neo4j图数据库中实用的Cypher语言语法. Cypher是什么 "Cypher&qu ...

  10. XPAND模板语言语法1.0

    XPAND模板语言语法1.0 Xpand模板语言一般写在以.xpt为结尾的文本文件中 ,以"« »" 作为开头和结尾  .Xpand语言主要包括以下几个标签: «IMPORT», ...

随机推荐

  1. 14. 迭代器、生成器、模块与包、json模块

    1.迭代器 1.1 迭代器介绍 迭代器是用来迭代取值的工具 每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代 # while循环实现迭代取值 a = [1, 2, 3, 4, 5, ...

  2. c++可变模板参数

    在C++中的可变模板参数使用省略号 ... 来表示一个参数包(Parameter Pack),其具体位置决定了这个包是模板参数包还是函数参数包,以及如何进行参数展开. 1. 模板参数包:c... Ar ...

  3. webgl和canvas的区别

    webgl和canvas的区别 WebGL和Canvas的主要区别在于它们的渲染方式.功能复杂性.以及编程难度.12 渲染方式:Canvas使用2D渲染上下文来绘制图形和图像,基于像素的绘图系统, ...

  4. 有封装过v-model相关的双向绑定组件吗?

    有的,之前在做⼀个通⽤的上传组件的时候,⼀开始是通过传统的⽗⼦通信实现的,⽗传⼦实现的图⽚ 回显,⼦传⽗实现的图⽚url抛出传给给接⼝,后来使⽤v-model做了⼀点优化,简单了不少 追问: 具体是怎 ...

  5. 如果读完这几百 Python 的书籍,能成编程大佬吗? #Python 入门 #编程 #编程学习 #知识分享

  6. C#/.NET/.NET Core学习路线集合,学习不迷路!

    前言 C#..NET..NET Core.WPF.WinForm.Unity等相关技术的学习.工作路线集合(持续更新)!!! 全面的C#/.NET/.NET Core学习.工作.面试指南:https: ...

  7. 使用VMware Workstation创建的虚拟机无法连接网络解决方法

    引言:最近打开虚拟机老是连接不上网络,在网上找这前两个方法试还是一直不行,最后才知道忘记重启DHCP service和NAT service 1.查看虚拟机的设置,确保虚拟机网络连接的方式勾选的是NA ...

  8. pandas的一些基本操作

    Pandas 是一个开源的数据分析和操作库,它是 Python 编程语言的一个扩展.Pandas 提供了快速.灵活和表达能力强的数据结构,旨在使数据清洗和分析工作变得更加简单易行. 1.为什么要学习p ...

  9. DPaRL:耶鲁+AWS出品,开放世界持续学习场景的新解法 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Open-World Dynamic Prompt and Continual Visual Representation Learning ...

  10. python实现基于RPC协议的接口自动化测试

    01什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议.从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的 ...