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», ...
随机推荐
- 2. 解释器与PyCharm安装
1. 解释器安装 官网 选择解释器版本 建议选择比最新版本低2~3个版本,当前选择3.10 添加到环境变量,如不勾选后续可手动配置 安装完成后已将解释器安装路径自动添加到环境变量中 将解释器安装路径添 ...
- 墨天轮专访TDengine陶建辉:坚持做难而正确的事,三次创业成就不悔人生
导读: 时序数据库(Time Series Database)在最近几年被越来越多的用户接受并使用,并有广泛的应用场景.云原生时序数据库 TDengine 一直稳居墨天轮时序数据库榜首,其近期的海外发 ...
- Awesome-Visual-Captioning
目录 Table of Contents Paper Roadmap ACL-2021 CVPR-2021 AAAI-2021 ACMMM-2020 NeurIPS-2020 ECCV-2020 Vi ...
- 5.flask 源码解析:请求
目录 一.flask 源码解析:请求 1.1 简介 1.2 请求 Flask 源码分析完整教程目录:https://www.cnblogs.com/nickchen121/p/14763457.htm ...
- RMI,SOA,微服务
什么是SOA SOA(Service-Oriented Architecture),中文全称:面向服务的架构. SOA提倡将不同应用程序的业务功能封装成"服务"并宿主起来,通常以接 ...
- 去哪儿旅行携手 HarmonyOS SDK | 告别繁琐,常用信息秒级填充
背景 去哪儿旅行作为行业内领先的一站式在线旅游平台,多年来在日益加剧的市场竞争中积极寻求创新,凭借其优质的服务深受消费者青睐.2024年,去哪儿旅行适配HarmonyOS NEXT版本, 升级用户服务 ...
- 开源一款AI聊天工具
学习Spring AI项目,开发一款问答工具 AI大模型请注册并生成API密钥 获取API密钥地址:https://bigmodel.cn/console/overview 开源地址:LuckyAI ...
- 3.21 Linux PATH环境变量及作用(初学者必读)
在讲解 PATH 环境变量之前,首先介绍一下 which 命令,它用于查找某个命令所在的绝对路径.例如: [root@localhost ~]# which rm /bin/rm [root@loca ...
- optical simulation of quantum logic
量子逻辑的光学模拟(PRA, 1998) 主机中<1998Cerf.pdf> 核心: 1. 用一个光子的多条路径的叠加态来表示n qubits, 那么实验上干涉仪所包含的路径数为 2^n ...
- Ubuntu使用dpkg查看与修改architecture的用法
dpkg是Debian的包管理器,因为Ubuntu是Debian的变体,在Ubuntu下也有这个工具. 两个常用的命令是: dpkg -i package-file和dpkg -r package 分 ...