BT语言是一门极为简洁的编程语言,内核由Rust语言开发,BT的语法吸取了Rust、PHP、JavaScript一些编程语言的的优点,使其更为简洁,上手更简单。
BT语言的编译器只有一个极为简小的可执行文件,无任何依赖,BT语言是跨平台的,可以运行在Windows、Linux、macOS等多个操作系统上独立运行。
BT语言无需搭建环境,只需要一个简单的编译器即可运行,所以,如果你的电脑有一个记事本,可以直接写一段BT代码,来直接运行。
BT语言官网:BT编程语言官网https://btlang.org/
BT语言文档:
BT编程语言文档https://btlang.org/docs
BT语言开发的艰辛背后:
作者在2019年9月正式立项开发BT语言,一直是业余时间敲代码,当初计划用C语言实现,为此还专门深研Fabrice Bellard先生的Tiny C Compiler。
不过后来因为内存安全问题,专门学习了Rust编程语言,过程十分坎坷,最终在2022年1月发布第一个版本,由于个人编写,从未宣传,也没精力宣传,也从未有人关注过。
之后的时间中,一直在完善编译器,由于增加各种语法,期间重写过多次词法分析器和语法分析器,最终在两年后的2023年6月再次发布了一个重要版本。
为了实现Js的对象存储机制,再次投入了极大的精力来重写数据类型,并实现Web端的服务,2024年9月完成发布,并成立了一个简单的官网。
从2019年到现在1.0.3版本,三个版本历经了整整5年时间,完全利用业余时间开发,到现如今,1.0.3版本依然保持着高度的简洁性,不需要安装,不需要任何环境配置,也不需要依赖任何环境,只是一个精小的可执行文件,非常难得。
BT语言作者的自述:
做为一名程序员,我的大部分时间都在写底层代码,尤其是架构设计,在Web端的开发中,PHP是我用的最久的语言,对此,有着深刻的看法,例如函数调用以及嵌套问题,因为PHP的语法并不像Rust和JavaScript一样使用链式语法,例如PHP中:
// 声明字符串
$str = ' hello 123 world! ';
// 去掉两侧的空格
$str = trim($str);
// 获取字符串第2位到第13位的子字符串
$str = substr($str, 2, 13);
// 使用正则表达式将数字用括号包裹起来
$str = preg_replace('/(\d+)/', '($1)', $str);
简写就是:
$str = preg_replace('/(\d+)/', '($1)', substr(trim(' hello world! '), 2, 13));
你会发现第一段代码还好理解,但是由于语法的原因,只能嵌套使用,代码需要从右向左去读,这真的不够直观,读起来十分费解。
然而BT语言支持链式语法,使用BT语言的话就是:
' hello world! '.tirm().substring(2,13).replace(/(\d+)/,'($1)')
看起来简单易懂,因为从左到右的习惯,更能一目了然,所以,BT语言的语法借鉴了一些编程语言的语法优点,这很可贵。
Web端开发中,PHP的巨大优势是基于脚本解释,所见即得,不需要编译,而Java,Go 语言等任何的改动都需要编译运行,项目越大,编译时间越长,我认为这是脚本语言的优势。
而BT语言即是一门解释型语言,也是编译型语言,意思是她可以当做脚本执行,就跟Python和PHP一样,当然也可以直接编译成二进制的可执行文件,也可以像Java一样,编译成jar,虚拟运行。
所以BT语言在众多开发领域中是具有巨大的优势的。
BT语言可以用来快速开发Web网站,因为其独特的纯洁性,她不依赖Apache、Nginx这些Web服务器,只需要编写几行简单的BT代码,就可以配置好域名、SSL证书以及项目目录的绑定。
BT语言不像PHP只服务于Web,BT可以开发桌面软件,如果做为BT脚本,那么她可以直接被运行,还可以嵌入常见的主流程序语言中被调用,就像Python一样,因为编译器只有一个简小的可执行文件,可直接通过命令行或外部执行函数调用她。
BT是跨平台的,可以运行在Windows、Linux、macOS等多个操作系统上运行,而不需要对代码进行大量修改。
目前BT语言只实现了对脚本的解释运行,编译机制会在后面的版本逐渐完善。
如果你对BT语言好奇的话,不放试一试吧,从上面提到的官网链接中下载你所用系统的编译器,然后解压并直接执行编译器,windows系统的用户,可以直接打开 bt.exe 文件,编译器会默认执行当前目录的 main.bt 文件。
如果你本机安装了 vscode 的话,再好不过,因为BT语言官网为使用 vscode 编辑器的用户开发了针对BT语言的扩展:bt-lang,可以直接在扩展中搜索下载。
接下来让我们欣赏一下BT语言的魅力吧!
经典的开场白:
print 'hello world'
在BT语言中,我们不需要使用分号,直接换行即可(或者使用空格)
声明变量
name = 'Nina'
age = 26
sex = "Girl"
没错,BT中声明变量就是这么简单,你无需像Java与C语言那样声明变量类型,也无需像JavaScript那样使用var和let前缀来声明。
在BT中,同一个变量可以重复赋值不同的数据类型,例如:
data = 'Nina'
data = 26
data = true
你也可以这么写,BT的魔性语法:
// 可以直接写成一行
name = 'Nina' age = 26 sex = "Girl"
// 也可以多条语句之间用逗号分割
name = 'Nina', age = 26, sex = "Girl"
是不是很自由?
x = 120
y = x * (20 - 10 / 2)
z = x + y
print z
在BT语言中,print和println都是用于输出数据,相当于PHP中的print,区别在于println是换行打印
声明常量
在BT语言中,声明常量的要求是首字母为大写即可,只要满足这个条件,定义的便是常量,如此简单,示例:
Name = 'Lisa' //常量
NAME = 'Rita' //常量
_Name = 'Susan' //变量,因为第一位不是字母
// 注意,这里并不会报错
Name = 'Tali' // 此时Name的值仍然为Lisa,而不是Tali
数据类型
BT语言中的基础数据类型:
Int 整数
Float 浮点
Bool 布尔
Str 字符
Array 数组
Object 对象
还有一些其他数据类型,例如:
Fn 函数
Class 类
File 文件对象
Date 时间对象
还有很多其它的类型,这里不一一举例。
我们通过变量来写一下这些数据类型:
a = 123
b = 58.99
c = -133.789
d = true
d1 = 'hello'
d2 = "hello"
d3 = `hello`
d4 = `
很惊讶吗?
我可以多行!
我可以像JS一样插入变量,例如:${d2}
`
e1 = ['手机', '电脑', '平板', '手表']
e2 = ['价格', 1299.99, e1, a, b, c]
f = {
title: '标题',
content: '内容',
tag: ['自由', '富强', '文明', '和谐']
}
g = [
{
id: 1,
title: '标题'
},
{
id: 2,
title: '标题'
}
]
上面的代码示例是按照标准JS语法编写的,为了展示BT的变态和魔性,来,请看下面的数组和对象的示例:
title = '变态'
arr = ['手机' 521 title, true if title{
999
}]
obj = {
789: 199.999
199.999: 789
'呵呵': '该死的魅力'
}
println arr
println obj
BT语法跟Javascript类似,但她声明变量不需要使用var和let,这个吸取的是PHP的语法,然而BT也有let关键字,let主要用于声明当前作用域变量,而与全局变量分开看一下声明函数:
// 这是一个简单的函数声明
fn add(a, b){
a + b
}
print add(1, 2)
// 给参数a和b添加默认参数
fn add(a=10, b=20){
a + b
}
print add(20)
// 也可以使用赋值的方式声明函数,其实这个没啥意义,你喜欢就好,因为在bt中,上面的函数声明是可以重复声明的
add = fn(a){
return a
}
print add(123)
具体其它的语法可查阅官网的文档。