Skip to content

标准库与 Runtime API ​

玄铁在底层 Runtime (xt_runtime.c) 提供了丰富的内置函数和标准库对象方法,这些 API 可以直接在语言层被调用:

全局内置原语 ​

命令行参数与环境变量 ​

命令行参数用 runtime 内建 xt_get_args() 获取(须先 外 函 声明;返回数组,第 0 项是程序自身路径):

xuantie
外 函 xt_get_args(): 数组

设 参数 = xt_get_args()
设 i = 1                                    // 0 是程序自身路径
当 i < 参数.长度 {
    若 参数[i] == "--详细" { 示("详细模式") }
    i = i + 1
}

环境变量用 runtime 内建 xt_env_get(名) 读取(未设置返回空串;不启子进程——比 执("cmd /c echo %VAR%") 快,且不会闪控制台窗口):

xuantie
外 函 xt_env_get(名: 字): 字

设 家目录 = xt_env_get("USERPROFILE")            // Windows
若 家目录 == "" { 家目录 = xt_env_get("HOME") }  // macOS / Linux

注意:语言没有名为 参数 的全局变量——参数 只是编译器源码里自己起的局部变量名。凡 runtime 内建都需先 外 函 声明才可解析(签名范例见 xuantie_compiler/玄铁.xt 文件头)。

运行时内建函数 ​

Runtime (xt_runtime.c) 中以 XTValue xt_xxx(...) 形式实现的函数,在程序里 外 函 声明后即可调用:

内建签名作用
xt_get_args(): 数组命令行参数(第 0 项为程序自身路径)
xt_env_get(名: 字): 字读环境变量(未设置返空串)
xt_cwd(): 字当前工作目录绝对路径
xt_self_path(): 字程序自身可执行文件绝对路径
xt_get_temp_path(): 字系统临时目录路径
xuantie
外 函 xt_cwd(): 字
外 函 xt_self_path(): 字
示("工作目录: " & xt_cwd())
示("程序位置: " & xt_self_path())

完整清单以 runtime/xt_runtime.c 的函数定义为准(另有 arena 池、跑 模式进程继承等编译器内部使用、不建议用户直接调用的内建)。

URL 编解码与字节转换 ​

函数返回行为
URL编码(串)字按 RFC 3986 做百分号编码:A-Z a-z 0-9 - _ . ~ 直通,其余按 UTF-8 字节转 %XX(大写);空格 → %20;空串 → 空串。URL 里带中文/空格/特殊字符时必须先编码——求 不做编码,未编码的中文会得到"成功但空体"(服务端拒答,容易误判)
URL解码(串)字%XX(十六进制大小写均可)→ 原字节;+ 原样保留(RFC 3986,不做 form 的空格还原)。转义不完整 / 非十六进制 / 结果非合法 UTF-8 一律明确报错退出(提示含偏移)
字节到字符串(字节)字字节流按 UTF-8 严格校验后还原为字符串;非法字节或非字节输入明确报错退出。取字节流可用 字节(容量) 建缓冲、.追加(字节值) 逐个写入
到字节集(字符串)字节拷贝字符串的 UTF-8 字节建字节集;字节集方法(截取/寻找/倒找/替换/取字节/写字节/到十六进制/分割/长度)详见 字节
xuantie
设 地址 = "https://example.com/search?q=" & URL编码("玄铁 语言")
示(URL解码("%E7%8E%84%E9%93%81"))     // 玄铁

类型转换(整/小数/字) ​

把值显式转换为另一类型。整()/小数() 返回结果容器(失败不炸,可判定);字() 直接返回字符串。

函数返回行为
整(x)结果<整>整数原样;真/假→1/0;小数→截断取整(整(3.7)=3);字符串→严格解析(整("42")=42),非数字串失败;空 失败
小数(x)结果<小数>整数→小数(小数(5)=5.0);数字符串解析(小数("3.14")=3.14);失败同 整
字(x)字(直接)任意值转文本:字(42)="42"、字(3.7)="3.7"、字(真)="真"、数组→"数组对象" 这类占位描述

结果容器判定写法(失败不会中断程序):

xuantie
设 转 = 整(输("请输入数字:"))
若 转.成功 {
    示("两倍 = " & 字(转.值 * 2))
} 否 {
    示("不是数字: " & 转.错误)
}

注意:整("12abc")、整("")、整("1.5")(带小数点的串)都判失败——字符串必须是纯整数文本。要解析小数请用 小数()。

  • JSON 转换:化(对象) (序列化为 JSON 文本),解(字符串) (解析 JSON 文本为字典/数组)

标准库命名空间 ​

数组 ​

详情页:数组 | 完整教程:06 数组编程指南

数组支持动态扩容、索引访问和丰富内置方法。创建:设 列表 = [1, 2, 3];索引:列表[0];长度:列表.长度。

内置方法:追加(append)、删(remove)、插(insert)、找(find)、含?(contains)、连接(join)。

高阶方法(通过 引 "../lib/数组.xt" 予 A 引入标准库):A.映射(map)、A.过滤(filter)、A.归纳(reduce)、A.查找(find)、A.每个?(every)、A.存在?(some)、A.排序(sort)、A.去重(dedup)、A.反转(reverse)。

完整教程、详细示例与输出请参阅:06_数组编程指南.md

字符串方法 ​

详情页:字符串

  • 常用成员:截取 (substring)、包含?/含? (contains)、替换 (replace)、寻找/倒找 (find/rfind,返字符位置,找不到 -1)、分割 (split)、到大写/到小写 (ASCII 大小写)、重复 (repeat)、去首尾空格/去首空格/去尾空格 (strip/lstrip/rstrip)、字符数/长度(字节数) 等属性读取;拼接用 & 运算符(没有 拼接 方法,实测调用会报对象不存在的方法)。
  • 分割 语义(同 Python split):分隔符按完整字面子串匹配,保留空段。例:"a,b,,c".分割(",") → ["a","b","","c"](4 段);"a,b,,c".分割(",,") → ["a,b","c"](2 段);"".分割(",") → [""]。分隔符为空串 "" 时按逻辑字符逐字拆分:"你好".分割("") → ["你","好"]。
  • 剥空白三件套(同 Python strip/lstrip/rstrip):剥 ASCII 空白(空格、\t、\n、\r;判定集另含 \v/\f,但本语言字面量写不出这两个转义),中间空白保留,返回新串(无可剥时复用原串,零分配)。全角空格  (U+3000) 不在其列——要一起剥就先 替换(" ", " ")。

字典方法 ​

详情页:字典

  • 支持 设置 (set)、获取 (get)、包含? (contains)、键集 (keys) 等。

字典字面量的键写法 ​

键支持三种写法(同一字典可混用):

xuantie
设 配置 = {"名称": "玄铁", 版本: 1, ("动态" & 后缀): 真}
  • 引号字符串键:{"名称": "玄铁"} —— 经典写法,任何内容都可作键。
  • 裸标识符键(CSS 风):{版本: 1} —— 标识符紧跟冒号时直接作字符串键,不当变量求值。UI 库选项推荐此写法:{宽: 240, 圆角: 8, 点击: 函() {...}}。
  • 括号表达式键:{(变量): 值} —— 要用变量/表达式的值作键时必须加括号(否则会被当裸键字面量)。

注意:关键字作键仍需引号(如 {"选": 1},因 选 是通道关键字);裸键仅限标识符。

基于 VitePress 静态构建 · 文档内容与仓库 GUIDE/ 同源

玄铁玄铁 XUANTIE · 中文系统级编程语言MARK 玄·折 120×120 · STROKE 8 · NO CURVES