# 明语言 **Repository Path**: ming-lang/ming ## Basic Information - **Project Name**: 明语言 - **Description**: 明语言是一门生态融合编程语言,可以生成Python/JS/C三种语言的代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-03 - **Last Updated**: 2024-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 明语言 明语言的目标是:**成为最强的生态融合语言**! 要融合哪几个生态呢? - C:后端开发、嵌入式、操作系统、机器人。 - Python:AI开发、数据分析。 - JS:前端开发、跨平台应用。 本工程是明语言的编译器,我同时还配套了明语言的同步开源书: [《明语言炼成记》](https://gitee.com/ming-lang/dev-book)。 这本书将和编译器的代码同步更新。 欢迎大家一起讨论和学习! ## 编译器 明语言的编译器框架有以下几个部分: - 前端:用tree-sitter实现 - 中端: - 解释器 - 后端: - m2py:将明语言转译成Python - m2c:将明语言转译成C语言 - m2js:将明语言转译成JavaScript - 工具: - vscode-ming:VSCode的插件 - LSP 因此,这个编译器和Z语言编译器不同,前端和工具用JS实现,中后端用Python来实现。 ## 语法概览 下面是明语言大致的语法: ```js // 导入标准库,用use关键字。 use io:* // 常量定义用const关键字。 // 浮点数的字面值需要加上f后缀。 const PI = 3.1415926f // 函数定义和Go比较像。函数的关键字是`fn`。明语言里函数默认是纯函数,即不能产生副作用。 fn add(a int, b int) int { // 代码块的最后一个语句即是返回值 a + b } // fn mut表示函数可以产生副作用 fn mut writeFile(name str, s str) bool { let f = open(name, W) // 和Go语言类似的defer语句 defer f.close() f.write(s) true } // fn var表示函数是动态类型,与JS、Python类似。 fn var make_obj(message) { // 局部导入 use time:now // 类JSON var obj = { time: now() arr: [n*n for n in 1..10] // list comprehension message: message } obj } // main函数是特殊的函数,它是程序的入口。不需要指定mut或var。 fn main { // 函数调用与C一致。 print("Hello, world!") // 语句结尾不需要';'。 // 明语言支持嵌入字符串。这里PI值被直接嵌入到字符串里了。 print("Here is pi: ${PI}") // let标量,类似于C的变量,但它的值是不可变的。 let a int = 10 // 可以在变量名称后直接指定类型,如果不指定,编译器会自动推导。 a = 12 // 错误!a是不可变的量。 // mut变量。这个相当于C语言里的普通变量。 mut b = 5 // 支持基本的类型推导。 b = b * 2 // 正确!b是可变量。 b = "明语言" // 错误!不能改变变量的类型。 // var幻量。这个相当于JavaScript里的var变量,不但值可以变,类型也可以变。 var c = 5 c = "明语言" // 正确!c是幻量,可以从整数类型变成字符串。 print("a+b is $add(a, b)") } ```