Skip to content

[建议] 增加使用其他编程语言完成lab的支持 #36

@OshinoShinobu-Chan

Description

@OshinoShinobu-Chan

相关任务

整体框架/测试系统

问题描述

目前框架只能使用C++完成lab,我认为可以增加支持,让学生可以使用使用其他语言完成lab。

改进建议

  1. 在评测框架中增加一个通用的接口,可以允许学生将自己实现的链接器(无论使用什么语言)进行测试。只是如果选择了其他语言可能需要学生自己实现一些框架代码的功能,例如解析FLE格式文件,将FLEObject输出成FLE格式的文件等。
  2. 为一些常用语言增加框架代码的支持。具体来说只需要实现现有的链接器的框架即可,因为任务一足够简单,可以忽略。下面是我认为有必要支持的语言以及理由:
    • C:原版ics lab主要使用C语言(应该是C99标准),因此这样可以保持一致性。并且增加对C语言的支持工作量不会很大。
    • Rust:Rust语言最近在系统编程方面比较流行,有不少同学更熟悉Rust语言。
    • Python:Python语言也有很多同学熟悉,并且它足够简单。

预期效果

  1. 可以增加lab框架的灵活性。
  2. 可以避免学生因为不熟悉C++的语法而在这个lab上花费多余的时间。例如,框架代码中使用了很多STL容器,学生很有可能对它们的操作不够熟悉。

实施建议

目前的测试框架使用config.toml来配置测试流程。将链接器运行的那一步的command替换成其他的运行脚本就可以支持学生将任意自己实现的链接器进行测试(可能需要学生自己提前编译自己的链接器)。也就是替换这里的command。

[[run]]
name = "Link program"
command = "${root_dir}/ld"
args = ["${build_dir}/main.fle", "-o", "${build_dir}/program"]

这里应该只需要在文档中增加相关的说明即可。

对于需要框架支持的语言只需要用相应的语言重写链接器的框架即可。为减少工作量可以让选择了其他框架支持的语言在评测之前也需要自己手动编译以及更改测试框架中的配置文件。但是可以给学生提供相应语言的编译脚本和执行脚本。

我可以参与增加C语言和Rust语言的支持。

其他方案

No response

确认事项

  • 我已经检查过现有的issues,确认这不是一个重复的建议
  • 这个建议是具体且可实施的

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions