2 Star 10 Fork 0

372681370@QQ.com/klang_dlang

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

Klang

Klang 是一款跨平台, 高并发系统级编程语言.

简单示意

导入{
    打印: "gitee/HTWX/打印"
}
启动(){
    打印.打印行("您好, 我是Klang.")
}

以上示意省略了 程序声明: 程序 启动


语法


导入语法_


例:

// 整体导入
导入{
    打印: "gitee/HTWX/打印"    
}
// 解构导入
导入{
    // 给打印行指定别名为 '打印', 可以避免命名冲突
    打印: 打印行
} 来自 "gitee/HTWX/打印"

程序语法_


例:

// 整体导入
导入{
    打印: "gitee/HTWX/打印"    
}
// 解构导入
导入{
    // 给打印行指定别名为 '打印', 可以避免命名冲突
    打印: 打印行
} 来自 "gitee/HTWX/打印"

// `启动程序声明` 是程序声明的特例, 包含 `启动程序声明` 的模块可编译为 `exe` 格式可执行文件.
// `启动程序` 可以由多个文件组成, 且必须只能有一个启动函数, 且此(包含启动函数的启动程序文件)源码文件为`主启动文件`.
// `程序声明` 可以省略的, 如果省略了程序声明, 位于 `./源码/` 目录下的文件被视为 启动程序声明
// `./源码/其他目录` 内的文件被视为 `内部模块`, 子目录被视为 `子内部模块`.
// `内部模块` 及 ``子内部模块` 可以用导入语法导入到引用他的文件.
程序 启动

// 启动程序内必须包含 启动函数
启动(){
    // ... 可执行代码
}

注释


// 单行注释

/**
 * 多行注释
 */

支持部分JSDOC语法


内置类型


类型 大小
整数8, 正整数8, 字符, 字节 1
整数16, 正整数16 2
整数32, 正整数32, 小数32 4
整数64, 正整数64, 小数64, 复数64 8
复数128 16

值类型范围


类型 值或值范围
文本 "内容" | `内容`
整数 根据平台 = 整数32 | 整数64
小数 根据平台 = 小数32 | 小数64
整数8 -128~127
整数16 -32768~32767
整数32 -2141483648~2141483647
整数64 -9223372036854775808~9223372036854775807
正整数 根据平台 = 正整数32 | 正整数64
正整数8 0~255
正整数16 0~65535
正整数32 0~4294967295
正整数64 0~18446744073709551615
小数32 IEEE-754 32-bit浮点
小数64 IEEE-754 64-bit浮点
复数64 32位实部与虚部
复数128 64位实部与虚部
字符 根据平台 = 正整数
字节 同正整数8
指针 范围同正整数, 表示一个地址

复合类型


名称 说明
数组 T[3], 长度为3的数组, 数组的元素类型为T, T可为任意类型
整数[3]{1, 2, 3}, 长度为3的整数类型数组, 元素可以是任意类型为整数的表达式.
整数[]{1, 2, 3}是省略长度标注的数组, 此数组的长度根据初始化表达式推断为3, 包含字面量初
始表达式的数组声明可以省略长度标注
动态数组 T[...], 为动态数组,可从数组转换为动态数组或字面量表达式初始化, 整数[...]{1, 2, 3},
字面量初始一个动态数组, arr.(整数[...]) 将变量arr 转换为 整数动态数组, 其中变量arr
必须是一个整数类型的数组.
词典 [K : V] 是一个键类型为K, 值类型为V 的词典, 词典可以通过字面量表达式初始化:
map := [整数 : 文本]{1 : "值1", 2 : "值2"}, 是一个词典的初始化表达式. map 的类型为词典类型, 可以通过 map[1] 元素访问表达式来访问值
信道 T:> 是一个信道类型, T是任意类型, :> 表示为双向读写信道, 可进行读写操作
只读信道 T-> 是一个只读信道, T是任意类型, -> 表示为只读信道, 只能进行读操作
只写信道 T<- 是一个只写信道, T是任意类型, <- 表示为只写信道, 只能进行写操作
指针类型 *T, *T 表示T的指针类型, t := 新建 T, 新建表达式返回T类型的指针形式

内部函数


函数 创建<T>(长度:整数, 容量?:整数): T

li := 创建<整数[...]>(3, 5)
如果(li){
    //...
    // 表示创建成功
}

ch := 创建<整数:>>(3, 5)
如果(ch){
    // ...
    // 表示创建成功
}

ch2 := 创建<整数<->(3, 5)
如果(ch2){
    // ...
    // 表示创建成功
}

ch3 := 创建<整数->>(3, 5)
如果(ch3){
    // ...
    // 表示创建成功
}

map := 创建<[整数 : 文本]>(3, 5)
如果(map){
    // ...
    // 表示创建成功
}

函数 长度<T>(参数: T): 整数
str := "我是文本"
l := 长度(str)

泛型


// 类型参数是未实例化的类型, 在使用的时候指定类型参数实例化
// 一下语句声明了一个 类型别名A, 其中包括一个类型参数T, 
// 类型声明\类型别名声明\结构声明\接口声明\方法声明\函数声明\函数表达式
// 可以声明类型参数.
// 下面是类型别名声明包含类型参数的例子:
类型 类型别名A<T> = S<T>

// 泛型参数具有 `类型约束` 和 `默认类型` 等语法
// 下面 的类型参数T 约束为 整数包括整数的子类型
类型 类型声明B<T: 整数> = S<T>

类型 我的整数 := 整数

方法 我的整数.加加(): 整数{
    返回 整数.(本体)++
}

函数 使用泛型类型(){ 
    b := 类型声明B<我的整数>{
        s = 我的整数.(100) // 类型转换表达式
    }
    // 可以通过 属性访问 加加 方法
    b.s.加加()
}

函数 使用泛型类型1(){
    // 使用 整数类型 实例化 类型别名A<T>
    a := 类型别名A<整数>{
        s = 100
    }
}

类型声明与类型别名


// 声明一个整数及文本的联合类型, 声明类型是一个新类型
类型 新声明的类型 := 整数 | 文本
// 类型别名 类型别名只作为 类型的别名 不是一个新的类型
类型 类型的别名 = 整数 | 文本
// 类型别名或类型声明可以有类型参数
类型 泛型数组<T> := T[...]

结构类型


// 这是泛型的结构类型声明
// 结构类型的元素是属性声明, 且属性的类型不能是函数类型, 函数类型的属性可考虑用方法
结构 S<T>{
    s: T // 元素 s 的类型为 T
}
// 结构类型可以继承, 结构类型的基类只能是结构类型或结构类型的别名或者是结构类型的声明类型
结构 SS<T, T2> : S<T2>{
    ss: T
}

接口类型


// 这是 泛型的接口类型, 接口类型的元素是方法签名, 接口类型不存在属性
接口 I<T>{
    a(s: T): T
}
// 接口类型支持继承语法, 冒号后面的是 基接口, 是逗号表达式, 可以同时继承多个接口
// 接口的基类只能是接口
接口 II<T, T2> : I<T2>{
    b(s: *T): T
}
/**
 * 与上个接口声明等价
 * 接口 II<T, T2>{
 *   a(s: T2): T2
 *   b(s: T): T
 * } 
 **/

方法声明


// SS<T>的方法 a 实现接口I<T> SS.a 其中SS称为方法接受者是类型引用节点
// 此写法为简写形式也可写成 SS<T>.a(s: T): T
方法 SS.a(s: 本体.T): 本体.T{
    返回 s
}

函数声明


函数 函数A(参数: S<整数>):S<整数>{
    返回 参数
}

常量、变量、简洁变量声明

// 常量声明必须具有初始化表达式
// 初始化表达式必须能在编译时求值
常量 c = 100
// 变量可以只声明无初始化系统自动初始化为其空值
// 全局变量使用前必须初始化
变量 v: 整数

// 简洁变量声明不是顶级语句只能在函数体或方法体等局部作用域的位置声明
函数 函数A(参数: 整数): 整数{
    // := 是声明及初始化运算符
    // 使用 := 声明的变量可以省略 `变量` 修饰符
    // 简洁函数变量声明具有局部作用域
    // 局部变量 v 在此覆盖全局变量 v
    v := 参数 + 100
    返回 v
}

枚举声明


// 枚举值 可以是任意常量值, 常用枚举值写法编译器可自动推断其初始表达式
// 如果推断表达式与预期不符合, 可以手动修改.
枚举 E{
    e = 1,
    e2          // 推断为 2
    e3          // 推断为 3
    e4          // 推断为 4
    e5 = "我是文字枚举值"
    e6          // 推断为 6 如不符合预期可手动指定
}
枚举 E2{
    e1 = 1 << 1,
    e2           // 推断为 1 << 2
    e3           // 推断为 1 << 3
}

运算符


// 一元运算符
    // a 后缀一元运算符
        ++、--
    // b 前缀一元运算符
        -、&、*
// 二元运算符
    // 二元运算符
        +、-、*、/、%
    // 位运算符
        &、|、^、~、<<、>>

// 赋值
    =
// 复合赋值
    +=、-=、*=、/=、%=、&=、|=、^=、~=、 >>=、 <<=、
// 逻辑运算
   &&、||、!

语句


启动(){

    // 简洁变量语句
    a := 生成随机数()

    // 如果语句
    如果(a > 0){
        打印(`变量 a 值是:${a}, 大于0.`)
    }
    另如(a > 50){
        打印(`变量 a 值是:${a}, 大于50.`)
    }
    否则{
        打印("我也不知道 a 是什么样的数")
    }

    // 循环语句
    循环(i := 0; i < a; i++){
        打印(i)
    }

    // 循环属于语句
    arr := [整数 : 文本]{1 : "1", 2 : "2"}
    循环(k, v 属于 arr){
        打印(k, v)
    }

    // 无限循环
    a := 10
    循环(真){
        如果 (a > 100){
            跳出
        }
        打印(a)
        a++
    }

    // 假如语句
    a := 10
    假如(a){
        若是 5:
            打印("a 是 5")
        若是 6, 7, 8, 9, 10:
            打印("a >= 6 且 a <= 10")
        若是 11, 12:
            打印("a是11或12")
        默认:
            打印("不知道a是什么")
    }

    // 简洁变量声明
    a := S<整数>{
        s = 10
    }
    // 类型断言表达式
    如果(a.<S<整数8>){
        打印("a.s 是 S<整数8> 类型")
    }

    // 类型转换表达式
    a := 100
    b := 我的整数.(a) // 转换 a 为 我的整数

    // 类型查询表达式
    假如(a.<类型>){
        若是 整数, 小数:
           打印("a是整数或小数类型")
        若是 S<整数>
           打印("a 是 S<整数> 类型")
        默认:
           打印("a 是未知类型")
    }
}
MIT License Copyright (c) 2020 372681370@QQ.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

暂无描述 展开 收起
TypeScript
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
TypeScript
1
https://gitee.com/HTWX/klang_dlang.git
git@gitee.com:HTWX/klang_dlang.git
HTWX
klang_dlang
klang_dlang
master

搜索帮助

Cb406eda 1850385 E526c682 1850385