Skip to content

Releases: HelloAIXIAOJI/JiLang

0.4.2 Release

18 May 17:48
Compare
Choose a tag to compare

Full Changelog: 0.4.1...0.4.2
本文档介绍JiLang 0.4.2版本的更新内容,包括新增功能和修复的问题。

主要更新

1. 加入get_property语句

新增了强大的动态属性访问功能,通过get_property语句可以更灵活地访问对象和数组的属性与元素。此功能特别适合需要在运行时动态决定访问路径的场景。

基本语法:

{
  "get_property": {
    "object": "要访问的对象或数组",
    "path": "属性路径或属性路径数组",
    "output": "存储结果的变量名(可选)"
  }
}

主要特性:

  • 支持使用字符串路径(使用点号分隔)或数组路径访问嵌套属性
  • 支持变量作为路径元素,实现真正的动态属性访问
  • 支持数组索引和length属性访问
  • 详细错误提示,帮助定位访问问题

完整文档请参阅动态属性访问文档

2. 修复VariableReference自0.4.0后的问题

在0.4.0版本的重构中,变量引用系统遇到了一些问题,特别是在处理嵌套属性和数组索引时。0.4.2版本修复了这些问题:

  • 修复了嵌套属性访问中的解析错误,如@var.object.property格式
  • 修复了数组元素访问时的索引解析问题,如@var.array[0]
  • 修复了嵌套数组访问的处理,如@var.array[0][1]
  • 修复了数组length属性无法正确访问的问题

这些修复确保了变量引用在各种复杂场景下的稳定工作。

3. 加强VariableReference功能

除了修复问题外,我们还对变量引用系统进行了多项增强:

  • 新增对动态索引引用的支持,如@var.array[@var.index]
  • 改进了错误处理,提供更清晰的错误消息
  • 增强了变量解析的类型安全性,减少运行时错误
  • 优化了嵌套变量引用的性能
  • 添加了对中文和非ASCII变量名的更好支持

4. 支持.jil文件后缀

从0.4.2版本开始,JiLang正式支持.jil文件扩展名,以避免与其他编程语言(如Julia语言的.jl)发生混淆:

  • 解释器现在能自动识别并处理.jil.jl文件
  • 推荐所有新建项目使用.jil作为标准文件扩展名
  • 现有的.jl文件可以继续使用,但建议逐步迁移到.jil

这一变更有助于明确区分JiLang程序,提高项目的可识别性,并避免与其他工具的潜在冲突。

使用示例

动态属性访问示例

{
  "program": {
    "main": {
      "body": [
        {"var": {
          "user": {
            "name": "张三",
            "details": {
              "age": 30,
              "skills": ["编程", "设计", "写作"]
            }
          }
        }},
        {"var": {"property": "age"}},
        {"var": {"skill_index": 1}},
        
        // 使用变量决定访问的属性
        {"get_property": {
          "object": "@var.user",
          "path": ["details", "@var.property"],
          "output": "user_age"
        }},
        {"echo": ["用户年龄: ", "@var.user_age", "\n"]},
        
        // 使用变量作为数组索引
        {"get_property": {
          "object": "@var.user",
          "path": ["details", "skills", "@var.skill_index"],
          "output": "user_skill"
        }},
        {"echo": ["用户技能: ", "@var.user_skill", "\n"]}
      ]
    }
  }
}

增强的变量引用示例

{
  "program": {
    "main": {
      "body": [
        {"var": {"items": [10, 20, 30, 40, 50]}},
        {"var": {"index": 2}},
        
        // 使用动态索引访问数组
        {"echo": ["动态索引访问: ", "@var.items[@var.index]", "\n"]},
        
        // 访问数组长度
        {"echo": ["数组长度: ", "@var.items.length", "\n"]}
      ]
    }
  }
}

向下兼容性

0.4.2版本完全向下兼容0.4.0和0.4.1版本的功能,所有现有程序应当可以正常运行。同时,建议开发者利用新的get_property功能来实现更灵活的数据访问模式。

0.4.1 Release

18 May 06:13
Compare
Choose a tag to compare

移除了WindowWV标准库模块

Full Changelog: 0.4.0...0.4.1

0.4.0 Release

17 May 13:18
Compare
Choose a tag to compare

Full Changelog: 0.3.1...0.4.0

0.3.1 Release

11 May 19:01
Compare
Choose a tag to compare

JiLang 0.3.1 版本更新日志

目录

概述

JiLang 0.3.1 版本带来了多项重要更新:支持传统双斜杠注释语法、全面错误检查模式、变量引用前缀新语法、增强的错误处理机制、代码架构重构以及多项性能优化。本次更新提升了开发体验,同时保持了完全的向后兼容性。

新特性

1. 支持传统双斜杠注释风格

JiLang现在支持传统的//注释风格!虽然这不是标准的JSON语法,但我们添加了预处理环节,在JSON解析前自动移除所有注释,让你可以更自然地编写代码。

示例:

// 这是一个文件级注释
{
    // 这是内部注释
    "program": {
        "main": {
            "body": [
                {"echo": ["Hello"]}, // 这是行尾注释
                // 这个语句被注释掉了
                {"echo": ["World"]}
            ]
        }
    }
}

使用双斜杠注释的优势:

  • 更符合大多数开发者的习惯
  • 可用于临时禁用代码片段
  • 语法更简洁,不需要创建JSON注释对象
  • 在任何位置都可以添加注释

注意事项:

  • //注释在JSON解析前被完全移除,不会显示在调试输出中
  • {"comment": "..."}风格的注释仍然保留,在调试模式下会显示
  • 字符串内部的//不会被视为注释

2. 全面检查模式 (--check-all)

新增--check-all命令行选项,提供更全面的错误检查能力:

  • 检查并统一报告脚本中的所有错误,而不是只报告第一个遇到的错误
  • 检查包含:不存在的模块、未知的语句类型、语法错误、参数错误等
  • 错误信息包含位置标识,便于定位问题
  • 不执行脚本代码,仅进行检查
  • 对于大型脚本的调试非常有用

使用方法:

jlang your_script.jl --check-all

输出示例:

全面检查模式已启用 - 检查所有类型错误并统一报告,不执行代码
检查完成,发现以下问题:
1. 未找到模块 'nonexistent_module'。您能凭空变出这个模块吗?
2. 第2个语句错误: 运行时错误: 未知的语句类型: nonexistent_function
3. 第3个语句错误: 模块错误: 未找到模块 'nonexistent_module'

3. 支持$和¥前缀变量引用语法糖

JiLang现在支持使用$和¥作为变量引用的简化语法:

  • $变量名 - 等同于 @var.变量名
  • ¥变量名 - 等同于 @var.变量名(中文环境友好)

这种简化语法使得变量引用更加简洁,减少了输入量,提高了代码的可读性。

示例:

{
    "program": {
        "main": {
            "body": [
                {"var": {"姓名": "张三"}},
                {"var": {"年龄": 25}},
                
                {"comment": "传统引用方式"},
                {"echo": ["姓名: ", "@var.姓名", ", 年龄: ", "@var.年龄", "\n"]},
                
                {"comment": "使用$前缀引用(适合英文键盘)"},
                {"echo": ["姓名: ", "$姓名", ", 年龄: ", "$年龄", "\n"]},
                
                {"comment": "使用¥前缀引用(适合中文环境)"},
                {"echo": ["姓名: ", "¥姓名", ", 年龄: ", "¥年龄", "\n"]}
            ]
        }
    }
}

变量前缀语法糖的优势:

  • 代码更简洁,减少了冗余输入
  • 提供了适合不同输入习惯的多种引用方式
  • ¥符号为中文用户提供了更自然的体验(真的有人用中文输入法写代码或JSON吗?)
  • 与其他脚本语言的变量引用风格更加一致
  • 完全兼容传统的@var.前缀方式

4. 优化字符串处理

  • 改进了UTF-8字符处理
  • 修复了可能导致崩溃的边缘情况

5. 支持环境变量引用

JiLang现在增加了对系统环境变量的直接访问支持:

  • 新增@env.前缀用于引用环境变量
  • 直接从操作系统获取环境变量值
  • 如果环境变量不存在,则返回null

示例:

{
    "program": {
        "main": {
            "body": [
                {"echo": ["当前用户: ", "@env.USER", "\n"]},
                {"echo": ["系统路径: ", "@env.PATH", "\n"]},
                {"echo": ["主目录: ", "@env.HOME", "\n"]},
                {"var": {"path": "@env.PATH"}},
                {"comment": ["PATH环境变量内容:", "@var.path"]}
            ]
        }
    }
}

环境变量引用的优势:

  • 无需手动导入环境配置
  • 脚本可以访问系统信息和配置
  • 便于开发跨平台和配置感知的脚本
  • 与现有的变量引用系统无缝集成

6. 增强try-catch错误处理机制

JiLang现在提供了全面增强的错误处理机制:

  • 改进的try-catch语句,提供更精确的错误捕获和处理
  • 支持在catch块中访问详细的错误信息
  • 新增finally块,无论是否发生错误都会执行
  • 支持嵌套的try-catch结构
  • 各种操作(如除零、未定义变量引用等)现在会抛出恰当的错误消息

示例:

{
    "program": {
        "main": {
            "body": [
                {"comment": "基本try-catch示例"},
                {"try": {
                    "try": [
                        {"echo": ["尝试执行可能出错的代码...\n"]},
                        {"var": {"result": {"op": "div", "left": 10, "right": 0}}},
                        {"echo": ["这行不会执行,因为上面会产生除零错误\n"]}
                    ],
                    "catch": [
                        {"echo": ["捕获到错误!程序继续执行\n"]}
                    ]
                }},
                
                {"comment": "带错误信息的try-catch"},
                {"try": {
                    "try": [
                        {"echo": ["@var.undefined_variable"]}
                    ],
                    "catch": [
                        {"echo": ["捕获到错误: ", "@var.error_message", "\n"]}
                    ],
                    "error_var": "error_message"
                }},
                
                {"comment": "带finally块的try-catch"},
                {"var": {"resource": "已分配资源"}},
                {"try": {
                    "try": [
                        {"var": {"result": {"op": "div", "left": 10, "right": 0}}}
                    ],
                    "catch": [
                        {"echo": ["处理错误\n"]}
                    ],
                    "finally": [
                        {"echo": ["清理资源: ", "@var.resource", "\n"]},
                        {"var": {"resource": null}}
                    ]
                }}
            ]
        }
    }
}

try-catch错误处理的优势:

  • 脚本可以优雅地处理各种运行时错误,无需中断整个程序执行
  • 可以捕获精确的错误信息,便于调试和日志记录
  • finally块确保资源能正确释放,避免资源泄漏
  • 遵循现代编程语言的错误处理模式,使代码更健壮
  • 完全兼容现有代码,无需修改旧脚本

代码改进

1. 代码结构重大重构

  • 将原本巨大的statement.rs文件拆分成多个更小的模块文件,极大提升了代码的可维护性和可读性

  • 创建了新的statements文件夹,包含以下专用模块:

    • basic.rs - 基本语句(var, echo, concat, comment等)
    • control_flow.rs - 控制流语句(if, while, for, switch)
    • function.rs - 函数相关语句(call, execute_function)
    • array.rs - 数组操作语句
    • object.rs - 对象操作语句
    • regex.rs - 正则表达式操作
    • exec.rs - 系统命令执行
    • mod.rs - 模块定义和主要语句执行函数
  • 每个模块文件专注于特定的功能组,使代码更加清晰和易于维护

  • 保持了完全的向后兼容性,现有脚本无需任何修改即可运行

2. 变量引用系统重构

  • 创建了专门的variable_reference.rs文件,集中处理所有变量引用逻辑
  • 实现了VariableReference结构体和ReferenceType枚举,提供统一的变量引用处理机制
  • 支持的引用类型包括:
    • @var. - 变量引用
    • @const. - 常量引用
    • @params. - 函数参数引用
    • @env. - 环境变量引用(新增)
  • 重构后的代码具有以下优势:
    • 更好的模块化 - 所有引用处理逻辑集中在一处
    • 更易维护 - 添加新的引用类型只需修改variable_reference.rs文件
    • 更一致的代码风格 - 所有文件使用统一的API处理变量引用
    • 更好的类型安全 - 使用枚举替代字符串硬编码
  • 统一了所有文件(array.rsobject.rscontrol_flow.rs等)中的变量引用处理
  • 提供了resolve_value方法,用于处理包括环境变量在内的所有类型引用

3. 文档和项目优化

  • 更新了帮助信息,包含了新的注释功能
  • 更新了文档,添加了关于双斜杠注释的说明
  • 添加了新的示例文件double_slash_comment_test.jl
  • 移除了未使用的toml依赖,减小了项目体积并加快了构建速度(实际上是之前用于读取版本的,但逻辑实在是太傻逼了就改了。理论上打包体积变小)

4. 错误处理系统优化

  • 重构了错误处理机制,提供更详细的错误类型和消息
  • error.rs文件中集中管理所有错误消息,便于国际化和定制
  • 新增特定领域的错误类型和消息:
    • math模块错误:如除零错误、无效数值转换
    • 变量引用错误:未定义变量、类型不匹配等
    • 函数调用错误:参数不足、类型错误等
  • 改进了错误消息的可读性和一致性,使用友好的表达方式
  • 优化了try-catch语句的实现,提高了性能和可靠性
  • 确保所有模块能够正确抛出和处理错误,而不是静默失败

错误修复

  • 修复了预处理阶段可能导致的崩溃问题
  • 优化了错误消息格式
  • 修复了¥前缀变量引用的UTF-8多字节字符处理问题,现在可以正确解析¥符号
  • 修复了数学运算中的除零错误处理问题,现在会抛出适当的错误而不是返回NaN
  • 修复了变量引用解析的几个边缘情况问题
  • 改进了嵌套try-catch结构的错误传播机制
  • 修复了变量引用系统中的嵌套属性访问问题,现在可以正确解析和访问嵌套的对象属性(如@var.user.profile.name
  • 扩展了变量引用系统,添加对嵌套属性、数组索引和环境变量的全面支持,使所有引用类型都能一致地处理嵌套结构

注释系统详解

JiLang现在支持两种注释风格,各有优缺点,可根据不同场景选择使用。

注释风格对比

双斜杠注释 (//)

// 这是一个整行注释
{"var": {"count": 42}} // 这是行尾注释

优点

  • 语法简洁,编写快速
  • 熟悉的语法,与大多数编程语言一致
  • 可以注释掉整行代码(临时禁用)
  • 可以添加行尾注释
  • 可在JSON任何位置使用(包括对象外部)

缺点

  • 不是标准JSON语法
  • 在调试模式下不可见,被预处理完全移除
  • 不能包含变量引用等动态内容

注释对象 ({"comment": "..."})

{"comment": "这是一个注释"},
{"comment": ["这是", "多部分", "注释,变量值:", "@var.count"]}

优点

  • 是标准JSON语法的一部分
  • 在调试模式下可见,便于调试
  • 可以包含变量引用,显示实时值
  • 支持多部分组合注释

缺点

  • 语法较冗长
  • 只能作为JSON对象的一部分使用
  • 不能用于行尾注释

推荐使用场景

我们建议根据不同场景选择合适的注释风格:

  1. 开发阶段

    • 使用//注释进行快速注释、临时禁用代码和添加简单说明
    • 适合频繁修改和测试的代码
  2. 调试阶段

    • 使用{"comment": "..."}对象注释显示中间变量值
    • 特别是使用{"comment": ["说明:", "@var.变量"]}格式查看变量实时值
  3. 文档和维护

    • 在重要算法或逻辑处使用{"comment": "..."}注释
    • 对于简单的代码说明,使用//注释
  4. 混合使用

    // 这部分实现了快速排序算法
    {"comment": "开始排序,数组大小: "},
    {"array.length": ["@var.items"]},
    {"comment": ["数组元素数量: ", "@var.result"]}

两种注释风格可以互补使用,根据具体需求选择最合适的方式。

使用示例

完整示例

// 这是一个使用//注释的文件示例
{
    "include": ["math"], // 包含数学模块
    "program": {
        "main": {
            "body": [
                // 使用双斜杠注释
                {"echo": ["测试 // 注释:\n\n"]},
                
                {"var": {"number": 25}}, // 设置一个变量
                
                // 使用数学模块计算平方根
                {"math.sqrt": ["@var.number"]},
                {"var": {"sqrt_result": "@var.result"}},
                
                // 访问环境变量示例
                {"echo": ["当前用户: ", "@env.USER", "\n"]},
                
                // 以下使用传统的JSON对象注释方式
                {"comment": "使用comment对象的注释"},
                {"echo": ["平方根结果: ", "@var.sqrt_result", "\n"]}
            ]
        }
    }
}

0.3.0 Release

08 May 17:40
efab96a
Compare
Choose a tag to compare

JiLang 0.3.0 更新日志

主要更新

  • 内置数组操作:添加了一系列内置数组操作语句,无需依赖标准库即可进行数组的常见操作
  • 对象操作:增加了对象操作功能,支持创建、访问和修改JSON对象
  • 正则表达式支持:新增正则表达式功能,提供强大的字符串模式匹配和处理能力
  • Switch语句增强:完善了switch语句实现,新增文档和示例
  • 错误处理优化:重构了错误消息系统,提高了错误信息的一致性和可维护性
  • 新增命令行选项:增加了错误检查和容错运行相关的命令行选项
  • 系统稳定性改进:修复了多个边缘情况的处理问题
  • 性能优化:提升了大型程序的执行效率

内置数组操作功能

0.3.0版本新增了强大的内置数组操作,无需依赖外部模块即可完成各种数组操作:

1. 创建数组 (array.create)

// 创建空数组
{"array.create": []},

// 创建带初始元素的数组
{"array.create": [1, 2, 3, "", true, null]},

// 创建指定大小的数组(带初始值)
{"array.create": {"size": 5, "initial": 0}}

2. 获取数组长度 (array.length)

{"array.length": ["@var.myArray"]},
{"echo": ["数组长度: ", "@var.result"]}

3. 获取和设置元素 (array.get, array.set)

// 获取元素
{"array.get": ["@var.myArray", 2]},
{"echo": ["索引2的元素: ", "@var.result"]},

// 设置元素(支持自动扩展数组)
{"array.set": ["@var.myArray", 5, "新值"]}

4. 添加和移除元素 (array.push, array.pop)

// 添加一个或多个元素到数组末尾
{"array.push": ["@var.myArray", "元素1", "元素2"]},

// 从数组末尾移除元素并返回
{"array.pop": ["@var.myArray"]},
{"echo": ["移除的元素: ", "@var.result"]}

5. 获取数组切片 (array.slice)

// 获取从索引1到4的切片(不包含索引4)
{"array.slice": ["@var.myArray", 1, 4]},
{"var": {"slice": "@var.result"}}

所有数组操作都会在result变量中返回操作结果,便于链式处理。数组操作还支持与循环语句和函数结合使用,可以构建更复杂的数据处理逻辑。

对象操作功能

0.3.0版本引入了强大的对象操作功能,让JSON对象操作更加简单:

1. 创建对象 (object.create)

// 创建空对象
{"object.create": []},

// 创建带初始属性的对象
{"object.create": {
    "name": "张三",
    "age": 25,
    "email": "zhangsan@example.com"
}},

// 可以在创建时引用其他变量
{"object.create": {
    "user": "@var.username",
    "id": "@var.userId"
}}

2. 获取和设置属性 (object.get, object.set)

// 获取对象属性
{"object.get": ["@var.user", "name"]},
{"echo": ["用户名: ", "@var.result"]},

// 设置对象属性
{"object.set": ["@var.user", "age", 30]},
{"object.set": ["@var.user", "address", "@var.userAddress"]}

3. 检查属性是否存在 (object.has)

// 检查对象是否有某个属性
{"object.has": ["@var.user", "email"]},
{"if": {
    "cond": "@var.result",
    "then": [
        {"echo": ["用户有邮箱\n"]}
    ],
    "else": [
        {"echo": ["用户没有邮箱\n"]}
    ]
}}

4. 获取对象的键和值 (object.keys, object.values)

// 获取对象所有键
{"object.keys": ["@var.user"]},
{"echo": ["用户对象的所有属性: ", "@var.result", "\n"]},

// 获取对象所有值
{"object.values": ["@var.user"]},
{"echo": ["用户对象的所有值: ", "@var.result", "\n"]}

5. 删除对象属性 (object.delete)

// 删除对象属性
{"object.delete": ["@var.user", "temporary"]},
{"echo": ["属性已" , "@var.result" ? "删除" : "不存在", "\n"]}

对象操作函数与数组操作类似,所有结果都会存储在result变量中,便于后续操作。

正则表达式功能

0.3.0版本新增了强大的正则表达式支持,可以进行复杂的字符串匹配和处理:

1. 正则表达式匹配 (regex.match)

// 匹配字符串中的模式
{"regex.match": ["\\d+", "年龄是25岁"]},
{"echo": ["匹配结果: ", "@var.result", "\n"]},

// 带捕获组的匹配
{"regex.match": ["user_(\\d+)_(\\w+)", "用户ID: user_12345_admin"]},
{"var": {"id": "@var.result[1]", "role": "@var.result[2]"}}

2. 正则表达式测试 (regex.test)

// 测试字符串是否匹配正则表达式
{"regex.test": ["^[a-zA-Z0-9]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,}$", "@var.email"]},
{"if": {
    "cond": "@var.result",
    "then": [
        {"echo": ["邮箱格式正确\n"]}
    ],
    "else": [
        {"echo": ["邮箱格式错误\n"]}
    ]
}}

3. 正则表达式替换 (regex.replace)

// 替换字符串中匹配的部分
{"regex.replace": ["\\d+", "他今年25岁了", "**"]},
{"echo": ["替换后: ", "@var.result", "\n"]},

// 使用捕获组的引用
{"regex.replace": ["(\\d+)岁", "他今年25岁了", "$1岁零1个月"]},
{"echo": ["替换后: ", "@var.result", "\n"]}

4. 正则表达式分割 (regex.split)

// 按正则表达式分割字符串
{"regex.split": ["\\s*,\\s*", "苹果, 香蕉, 橙子,葡萄"]},
{"echo": ["分割后的数组: ", "@var.result", "\n"]}

正则表达式功能使用Rust的regex库实现,支持大多数标准正则表达式语法。所有正则表达式操作的结果都存储在result变量中。

Switch语句功能

0.3.0版本完善了switch语句功能:

  • 支持任意类型值的匹配
  • 支持fallthrough选项,允许继续执行下一个case
  • 支持default默认分支
  • 提供了完整的文档和示例程序
{"switch": {
    "expr": "@var.value",
    "cases": [
        {
            "value": "选项1",
            "body": [
                {"echo": ["匹配到选项1\n"]}
            ]
        },
        {
            "value": "选项2",
            "fallthrough": true,  // 继续执行下一个case
            "body": [
                {"echo": ["匹配到选项2\n"]}
            ]
        },
        {
            "default": true,  // 默认分支
            "body": [
                {"echo": ["未匹配\n"]}
            ]
        }
    ]
}}

错误处理优化

0.3.0版本对错误处理系统进行了全面优化:

1. 集中式错误消息管理

  • 重构了错误消息系统,将所有错误消息集中在error.rs文件中统一管理
  • 按功能模块分类错误消息(interpreter、context、statement等)
  • 引入错误消息常量和格式化函数,消除硬编码的错误字符串
// 示例:使用集中定义的错误消息
return Err(InterpreterError::RuntimeError(
    array::POP_MISSING_ARGS.to_string()
));

// 示例:使用格式化函数生成错误消息
return Err(InterpreterError::ModuleError(
    context::module_not_found(module_name)
));

2. 更详细的错误分类

  • 细化了错误类型,包括程序结构错误、变量错误、函数错误、模块错误、运行时错误等
  • 为特定操作(如数组操作、switch语句、控制流语句)提供专门的错误消息集合
  • 支持带参数的错误消息,提供更准确的错误上下文信息

3. 新增命令行错误处理选项

  • --ignore-non-critical-errors:容错模式,只报告非关键错误而不终止程序执行
  • --check:仅检查程序中的错误,不执行程序代码

这些改进使错误消息更加一致、准确和可维护,大大提升了程序的可调试性和用户体验。

4. 错误消息更更更可爱!(也更暴躁)

  • "笨蛋!"、"喂!"、"诶多~"
  • "呜哇!变量酱好混乱~"
  • "诶嘿~"、"噗~"
  • "啊啦~程序员君不行呢~"
  • "这什么破代码!"、"看不懂文档吗?!"、"你写了个寂寞?!"

命令行参数增强

0.3.0版本增加了新的命令行参数,提供更灵活的执行控制:

错误处理相关选项

  • --ignore-non-critical-errors:启用容错模式
    • 程序会继续执行,即使遇到非关键性错误
    • 错误会被记录但不会终止程序
    • 只有影响程序结构的关键错误才会导致程序停止
# 容错模式运行
JiLang --ignore-non-critical-errors examples/my_program.jl
  • --check:仅检查语法和语义错误
    • 解析整个程序并检查所有可能的错误
    • 生成完整的错误报告但不执行任何代码
    • 适合在部署前验证程序正确性
# 只检查错误,不执行
JiLang --check examples/my_program.jl

信息查询选项

  • --help:显示帮助信息
    • 提供命令行选项列表和简要用法说明
    • 帮助开发者快速了解JiLang的基本使用方法
# 显示帮助信息
JiLang --help
  • --about:显示关于信息
    • 提供JiLang的基本介绍和项目地址
    • 帮助用户了解JiLang的功能和特点
# 显示关于信息
JiLang --about
  • --creator:显示创建者信息
    • 展示JiLang的创建者和项目相关信息
    • 表达对开源贡献者的感谢
# 显示创建者信息
JiLang --creator

既有命令行选项

  • --debug:启用调试模式,显示详细执行信息
    • 显示语句执行流程
    • 输出中间变量值
    • 显示注释内容
# 调试模式运行
JiLang --debug examples/my_program.jl

这些新增的命令行选项使得JiLang在开发、测试和生产环境中都能更灵活地运行。

兼容性说明

  • 本次更新完全向后兼容,已有程序无需修改即可运行
  • 新语法功能仅在使用时才需要了解
  • 错误消息格式保持不变,但内容更加详细和一致

示例程序

为展示新功能,新增了以下示例程序:

  • array_demo.jl: 演示所有数组操作的使用方法
  • object_demo.jl: 展示对象操作的各种用法
  • regex_demo.jl: 展示正则表达式功能的使用方法
  • switch_demo.jl: 展示switch语句的各种用法
  • error_handling_demo.jl: 展示错误处理和容错模式的使用方法

已知问题

  • 数组和对象深拷贝在某些复杂嵌套情况下可能存在效率问题
  • 正则表达式替换中,目前仅支持最多9个捕获组的引用($1-$9)

Full Changelog: 0.2.3...0.3.0

0.2.3 Release

06 May 19:27
Compare
Choose a tag to compare

0.2.3:增强弱类型系统,改进类型转换和比较
0.2.2:添加系统命令执行功能
0.2.1:添加递归函数支持和局部变量作用域
0.2.0:添加注释系统、增强模块系统和多层数据访问
0.1.0:具有基本功能的初始版本