青语言是一门完全基于中文语言习惯打造的编程语言,主要面向青少年、儿童和非专业人士。
语言主页:https://qingyuyan.cn
语言社区:https://forum.qingyuyan.cn
操作系统:Win10 x64
开发工具:VS2022
SDK:.Net7
1、VS生成菜单->发布选定内容
2、命令行方式:
dotnet publish -c Release -r win-x64 /p:PublishSingleFile=true
/p:PublishTrimmed=true /p:TrimMode=Link /p:IncludeNativeLibrariesForSelfExtract=true
可切换目标运行环境
当今世界信息化高速发展,信息技术已成为促进社会进步的重要推力。随着我国信息化的不断进步,尤其是互联网行业的高速发展,我国已迈入信息化强国的门槛,然而与发达国家相比,在信息技术创新、技术分享等方面仍存在较大差距。
这一现在现状的原因包含多个方面,但我们认为其中存在一个基础性的问题,中国没有良好的学习编程的”土壤“。当前主流的编程语言均以英文为载体,各种语言文档、使用手册也均使用英文,这对于母语非英语的人群造成了一定的使用门槛。对于专业的程序开发人员来说,可以通过学习英文来克服困难,但对于业余人员和学生来说,这大大增加了学习成本。实际上,国外很多知名程序员,包括比尔·盖茨、扎克伯格等,大多从青少年时期甚至儿童时期就开始接触编程,对于母语为英语的他们来说,不存在基础的语言障碍。反观国内,虽然近年来开始部分推行编程进入课程,但整体推广的效果并不理想。这就导致了我国缺少广泛的、良好的编程”土壤“,在争取科技制高点的过程中,这将成为我国的劣势。
为了解决这一问题,我们需要以中文为载体的编程语言,以方便大众学习和使用。
在青语言之前,已经存在一些中文编程语言,其中比较成功的有易语言、习语言等等。然而,这些语言均存在一些问题,例如闭源、不支持跨平台等。当前主流的编程语言均采用开源的发展模式,企业和社区共同扩展语言的功能,构建良好的语言生态。而上面提到的现有的中文编程语言,大多采用闭源的模式,这就导致了语言的发展推力单一,开发力量薄弱,无法形成基础的语言生态,最终无法进入主流大众视线。
基于此,我们决定打造一门完全开源的中文编程语言——青语言。
取名为青语言,意为主要面向广大青少年、儿童和业余爱好者学习和使用的编程语言,同时也希望这门语言充满青春朝气,蓬勃发展。
为了适应目标人群的需求,我们对青语言的设计目标如下: 1、使用中文为载体,消除语言障碍。 2、语法设计简洁,易于学习和使用。 3、具备简单的扩展接口,方便社区开发扩展功能。
在确定了使用中文为载体后,还需要明确中文编程语言的实现方式,我们对中文编程语言分类如下: 1、使用现有语言,采用关键字替换,实现中文编程,但本身依赖原语言。 2、从头编写实现中文编程,但语法逻辑参考主流编程语言。 3、从中文出发,设计和实现全新的编程范式。
这3种方式中,第一种实现难度低且可以借用原语言生态,但同时对原语言的依赖过高。第三种方式实现难度太高,近几十年来并未出现新的成功的编程范式,且实现后其生态构建和推广难度都较大。 综上,我们选择采用第2种方式,具体的设计构成如下:
1、语言核心参考Lisp语言。 Lisp被称为实现编程语言的语言,其极简的语言内核,非常便于实现。这样可以使得青语言的核心语言实现十分简洁,方便开源开发者参与和推动语言核心的发展。
2、语法上参考JavaScript语言。 JS编程语言语法非常简单,其最初设计也是Lisp核心,因此实现起来非常容易。对于使用者来说,需要掌握的概念少,可以很容易地学习和使用。
3、使用C#开发,运行在.Net平台上。 目前.Net平台可以说是最开放、跨平台兼容最好的编程语言之一,且本身有良好的语言生态可以借用。基于.Net平台可以使青语言具备是否良好的跨平台兼容性,同时可以方便地扩展其功能。
4、目前使用动态链接库DLL的方式扩展功能。 青语言提供简单的C#原生功能的封装方法,开发者可以通过参照示例项目,将需要的功能封装成为单个DLL文件,可以方便地分享和使用。
目前,我们已经实现了青语言的语言核心,也实现了诸如音频播放、GUI、机器学习功能的简单封装。未来我们希望通过开源社区的助力,进一步扩展青语言的功能,构建良好的语言生态。 除了语言本身和扩展功能的开发外,语言的发展还离不开丰富和优质的文档支持,所以我们也希望社区能够进一步补充青语言的教程、使用文档、代码示例等文档内容。
路在脚下,愿你我同行,迈向崭新世界。
青语言设计中的一个核心点就是:语法尽量简单
青语言的语法主要参考了JavaScript语言,需要学习的概念较少,是一门难度极低的编程语言。在正式开始学习青语言的语法细节之前,我们先总体上了解一下青语言的语法设计。这部分适合有编程基础的使用者快速掌握青语言,如果没有编程基础看不懂也没关系,我们会在之后更详细地进行介绍。
青语言代码输入解释器后,会首先分割为语法元素,可以分为4种语法元素——关键字、符号、变量、函数
其中关键字和符号是固定的,关键字包括:
元 空 真 假 如果 再则 否则 当
执行 直到 返回 跳出 继续 取反
异步 等待 尝试 排查 例行 遍历
由于关键字本身也是中文,如果和其他中文代码连在一起,会造成断句歧义,所以请记住,关键字需要能够和其他代码分隔开,包括通过空白、符号等实现间隔,最简单的方式就是前后留空白。
第二种语法元素是符号,包括:
; 中文分号开头表是单行注释
;; 连续两个中文分号是多行注释的开头,一直到另一个连续的双分号
, 逗号没有具体的意义,在青语言中仅表示间隔,解析期会被丢弃,同时支持中英文两种逗号
”“ 中文的双引号用来表示字符串
、 中文的顿号用来向函数传递单个参数
{ } 【 】 ( ) 《 》
+ - * / % += -= *= /= %=
> < == >= <= != <>
&& ||
= :
部分符号我们还提供了对应的中文,但是要注意一点,符号会自动作为语法中的分隔符,所以使用的时候可以连着其他代码一起写,但是使用中文替代时,需要前后添加空白,以避免断句歧义。符号对应的中文包括:
加 减 乘 除以 模 加等 减等 乘等 除等 模等
大于 小于 等于 大于等于 小于等于 不等于
且 或
为 设为
除了固定的关键字和符号外,剩下的就是用户可以自定义的变量和函数了,对于这两种语法元素,青语言使用了简单的方式进行标记。
以 #
开头的都是变量,不能是单独的#号,语法解析上是从#号开始直到下一个分隔标记,包括空白或者符号。例如:
#变量1
#甲
#乙
以 @
开头的都是函数,不能是单独的@号,语法解析上是从@号开始直到下一个分隔标记,包括空白或者符号。例如:
@显示
@读文本文件
@显示、“你好,编程世界”
从分号到行末的都是注释,注释的内容不会作为代码执行,以两个;;开头是多行注释,直到另一个;;
;这是一行注释,这里的内容作为对代码的说明,不会被执行
;;
这是一段注释
支持多行注释
这部分内容都不会执行
;;
空 ;空类型,表示不存在或者值为空
真 ;逻辑类型,表示逻辑真
假 ;逻辑类型,表示逻辑假
0xFF ;二进制类型,表示二进制数据
123 ;这是整数
4.56 ;这是小数
“这是一段字符串” ;用中文双引号括起来的部分是字符串
#甲 : 123 ;用冒号表示在当前语境给变量#甲绑定值123
#乙 = 4.56 ;用等于号表示顺着语境链向上查找变量#乙并绑定值4.56
直接调用变量名,解释器会根据当前语境向上查找变量对应的值,并将值返回,例如经过上面的赋值之后,我们输入
#甲
将会看到这样的输出
>> 123
这里,前面的>> 是输出提示符,后面的123是变量对应的值。
事实上,上面提到的赋值语句其实本事就是是一种中缀运算。常见的中缀运算符还包括
1+2*3/4-5 ;四则算术运算
5%3 ;取模运算
2>3 ;比较运算,包括 >, <, >=, <=, ==, <>,
1 小于 2 ;中缀运算都有对应的中文包括 加、减、乘、除以、模、大于、小于、大于等于、小于等于、等于、不等于
;注意,使用中文中缀符时,一定要注意前后要有空格或其他空白字符,用作代码的分割标识
#甲 设为 123 ;设为用于赋值,对应 :号
#乙 为 4.56 ;为用于赋值,对应 = 号
【1,2,3】 ;中括号表示数组,内部存放多个元素,可用逗号分隔
【1 2 3】 ;不用逗号分隔也是可以的
【1,2.3,“你好”】 ;数组可以存放任意类型的元素
#张三 = @{ ; @{……}表示对象
#姓名: “张三” ;对象本质上也是语境,对象的属性使用 : 定义,本质上是在本级语境执行绑定
#年龄: 15
}
类似于中文中的组词,当我们把变量名组合起来,就表示变量的访问路径
#数组 = 【1,2,3】
#数组#1 ;这里先访问到变量#数组,然后在#数组里访问#1
;这里的#1表示访问序号为1的元素,数组序号从0开始,所以#1表示访问的是第2个元素,显示 2
#对象 = @{
#姓名: “张三”
#年龄: 15
@显示姓名: @【】{
@显示、#姓名
}
}
#对象#姓名 ;这里先访问到#对象,再在#对象里访问#姓名,显示 “张三”
#对象@显示姓名【】 ;对象里的函数会在对象语境内执行,这里会显示#对象内的#姓名属性
@双倍 = @【#某】{ ;@开头表示是函数,定义函数的格式是 @【参数列表】{执行语句...}
返回 2 * #某 ;返回语句用于返回值
}
@双倍【3】 ;调用函数的方式是在函数名后面加上【实参列表】
@双倍、3 ;如果函数只有一个参数,可以使用顿号简化传参
;以上两种调用方式等价,返回 6
如果 2 < 1 {
@显示、“条件为真” ;由于分支的判断条件为假,这个代码块不会执行
}否则{
@显示、“条件为假” ;由于分支的判断条件为假,所以执行这个代码块
}
;如果存在多种可能,我们可以使用“再则”进行多次判断
#甲 = 3
如果 #甲 等于 1 {
@显示、“变量#甲的值为1”
}再则 #甲 等于 2 {
@显示、“变量#甲的值为2”
}再则 #甲 等于 3 {
@显示、“变量#甲的值为3”
}否则 {
@显示、“变量#甲的值大于3”
}
#序 = 1 ;设置循环控制变量初始值为 1
当 #序 小于等于 10 { ;当#序小于等于10时,循环执行
@显示、#序 ;这里会显示从1到10
#序 加等 1 ;每次循环让#序自增1
}
当 #次:1,#次 小于等于 5,#次 加等 1 { ;当语句后面跟随3个语句
@显示、#次 ;分别是定义循环控制变量,循环条件,每次循环结束对控制变量的操作
}
#某 = 1
执行 { ;先执行后判断循环控制条件,至少执行一次
@显示、#某
#某 加等 1
}直到 #某 等于 5
@斐波那契=@【#某】{如果 #某 小于 2 { 返回 #某}否则 { 返回 @斐波那契【#某-1】+@斐波那契【#某-2】}}
;使用 @分支 函数开启新的任务,这里传递的参数是代码块
@分支、{@显示、@斐波那契、30}
;使用 @并行 函数,一次开启多个任务
@并行、【
{@显示、@斐波那契、30}
{@显示、@斐波那契、30}
{@显示、@斐波那契、30}
】
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型