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
}
T 语言语法设计方案总结的更多相关文章
- Go语言语法汇总(转)
Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法 目录(?)[+] 最近看了看GoLang,把Go语言的语法 ...
- C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com
原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...
- R语言语法基础二
R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...
- R语言语法基础一
R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...
- L脚本语言语法手冊 0.10版
L脚本语言语法手冊 0.10版 简 介 L脚本语言是一个轻量级的,旨在接近自然语言的编程语言,眼下支持在中文.英文基础上的编程.并可扩展为随意语种.L脚本语言的语法结构简单.程序结构相对 ...
- 嵌入式C语言自我修养 01:Linux 内核中的GNU C语言语法扩展
1.1 Linux 内核驱动中的奇怪语法 大家在看一些 GNU 开源软件,或者阅读 Linux 内核.驱动源码时会发现,在 Linux 内核源码中,有大量的 C 程序看起来“怪怪的”.说它是C语言吧, ...
- Go语言语法说明
Go语言语法说明 go语言中的go func(){}() 表示以并发的方式调用匿名函数func 深入讲解Go语言中函数new与make的使用和区别 前言 本文主要给大家介绍了Go语言中函数new与ma ...
- PL真有意思(二):程序设计语言语法
前言 虽然标题是程序语言的语法,但是讲的是对词法和语法的解析,其实关于这个前面那个写编译器系列的描述会更清楚,有关语言语法的部分应该是穿插在整个设计当中的,也看语言设计者的心情了 和英语汉语这些自然语 ...
- Neo4j-Cypher语言语法
Neo4j-Cypher语言语法 梦飞扬 2018-03-15 264 阅读 Neo4j 本文是记录Neo4j图数据库中实用的Cypher语言语法. Cypher是什么 "Cypher&qu ...
- XPAND模板语言语法1.0
XPAND模板语言语法1.0 Xpand模板语言一般写在以.xpt为结尾的文本文件中 ,以"« »" 作为开头和结尾 .Xpand语言主要包括以下几个标签: «IMPORT», ...
随机推荐
- 9月《中国数据库行业分析报告》已发布,47页干货带你详览 MySQL 崛起之路!
为了帮助大家及时了解中国数据库行业发展现状.梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新<中国数据库行业分析报告>,持 ...
- Kubernetes 边缘节点抓不到监控指标?试试这个方法!
KubeSphere v3.1.0 通过集成 KubeEdge,将节点和资源的管理延伸到了边缘,也是 KubeSphere 正式支持边缘计算的第一个版本. 笔者也第一时间搭建和试用了边缘节点相关的功能 ...
- 某物联网数智化园区行业基于 KubeSphere 的云原生实践
公司简介 作为物联网 + 数智化园区一体化解决方案提供商,我们致力于为大中型园区.停车场提供软硬件平台,帮助园区运营者实现数字化.智能化运营. 在使用 K8s 之前我们使用传统的方式部署上线,使用 s ...
- DataDream:调一调更好,基于LoRA微调SD的训练集合成新方案 | ECCV'24
尽管文本到图像的扩散模型已被证明在图像合成方面达到了最先进的结果,但它们尚未证明在下游应用中的有效性.先前的研究提出了在有限的真实数据访问下为图像分类器训练生成数据的方法.然而,这些方法在生成内部分布 ...
- C++ 命令行传参 参数使用 坐标参数的转换
目录 1. 什么是命令行传参 2. 如何传参 3. 应用实例 4. 问题 1. 什么是命令行传参 命令行传参就是在 cmd 命令提示符, 或者 Linux shell 中使用可执行程序时, 可以添加 ...
- Go语言基础06 _function
Go语言基础06 _function 函数在Go语言中是一等公民 与其他主要编程语言的差别 可以有多个返回值 所有参数都是值传递:slice,map,channel 会有传引用的 错觉 函数可以作为变 ...
- att&ck学习笔记2
一.环境搭建 靶场下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/ DC IP:10.10.10.10OS:Windows 2012应用:A ...
- Python请求接口传Null
Python中没有Null,与之对应的是None. {"dog": "keji", "cat": None}
- 实证化讨论OpenAI的ChatGPT的政治倾向性
- 2.13 新手必读的Linux使用注意事项
通过安装并体验 Linux 系统,读者应该能发现 Linux 与 Windows 的一些不同之处,本节就几个容易让初学者混淆的问题做重点讲解,以便加深读者对 Linux 系统的认识. Linux 严格 ...