[GitHub]开源: 30天我开发了一个用于编程学习和教程搭建的工具 — xlings

0.背景

xlings最初是受[Rust社区的rustlings、国内外知名公开课的形式(mit6.1810/d2l/rcore…)]的启发, 加上从学习者和内容创作者(教程开发者)两个方向的思考下。在xmake构建工具的基础上(类似插件的形式)开发的一个项目 – [支持Windows和Linux] – 本文就简单聊一聊 学习者功能介绍、创作者功能介绍、现状和发展

1.通用功能 – 编程学习

软件安装和环境搭建

xlings中集成了一些常用的环境/软件的一键安装和配置, 并且支持扩展。这个功能可以帮助编程初学者方便的配置好开发环境和安装相关的软件, 同时也能帮助资深开发者避免常用环境的重复搭建的时间。通过install命令可以查看支持的软件和环境

在install命令后面加上对应的环境和软件xlings就能自动下载相关依赖然后安装并配置

例如安装Python环境

bash

xlings install python

安装vscode

bash

xlings install vscode

多编程语言支持和实时编译运行

xlings中的run功能可以运行一个代码文件, 并且自动检测代码类型和然后使用相关编译器/解释器运行代码。如果没有相关环境xlings会自动安装相关的依赖,后期可能增强这个功能, 例如: 把Python运行中缺少库也自动进行安装

运行C++代码

bash

xlings run main.cpp

运行C和Python代码也是类似run命令后加对应的代码文件

bash

xlings run main.c

bash

xlings run main.py

在这个基础上还有一个动态编译运行的功能, 可以避免多次”修改代码再运行验证”这个重复过程。xlings可以实时的检测代码的变化, 在你修改代码后会自动的重新编译再运行

AI代码提示

xlings再代码编译运行的时候接入了大模型错误分析和自定义后端大模型的功能。如果编译程序报错的时候, 大模型可以对报错信息进行分析然后给出对应的提示

从上面AI给出的提示可以看出来, 他来带了一个调皮可爱的风格。这是应该我们可以通过配置文件给大模型设定角色和风格, 如果你把他设置成一个代码练习两年半的抽象艺术家, 那么他就会用抽象风格给你提示。如果你把他设置成一个严肃且脾气暴躁的性格,当代码出错的时他甚至可能会批评你。这个功能可以让编程学习的时候多一点乐趣, 少一点枯燥乏味

本地大模型配置文件示例 – config.llm.xlings

lua

xlings_llm_id = "tongyi"
xlings_llm_key = "sk-xxx"
xlings_llm_system_bg = [[
背景: 你是一个代码专家
任务: 对编译器/解释器输出的错误进行相关内容的提示和建议
输出要求: 用时而可爱、时而傲娇、时而生气的方式回答, 并且每次回答不超过100字
示例:
    输入: error:未定义变量。
    输出: 哎呀,小变量迷路啦!检查一下变量名是不是写错了呢?🎈
    输入: 错误:未定义变量。
    输出: 哼,变量都找不到!快去检查你的拼写吧,本天才才不会轻易原谅呢!🌟
    输入: Hello World
    输出: 哇哦, 程序成功运行了, 点赞!
]]

2.课程/教程搭建

项目基础结构和模板生成

xlings提供了一个init命令, 结合配置文件可以用来生成一个类[Book + Code + Video + X]结构的教程项目。例如,再本地文件夹中创建一个xlings的配置文件

config.xlings

lua

xlings_name = "learn-stl"
xlings_lang = "cpp"

其中xlings_name是练习代码的名字, xlings_lang是项目使用的语言。然后在配置文件所在的目录运行init命令就可以生成一个基础项目结构

bash

speak@speak-pc:~/test/xlings/my_project$ xlings init
-mdbook
mdbook v0.4.40
2024-10-29 01:09:37 [INFO] (mdbook::book::init): Creating a new book with stub content

All done, no errors...
2024-10-29 01:09:37 [INFO] (mdbook::book): Book building has started
2024-10-29 01:09:37 [WARN] (mdbook::preprocess::cmd): The command wasn't found, is the "foo" preprocessor installed?
2024-10-29 01:09:37 [WARN] (mdbook::preprocess::cmd): 	Command: mdbook-foo
2024-10-29 01:09:37 [INFO] (mdbook::book): Running the html backend
2024-10-29 01:09:37 [INFO] (mdbook): Opening web browser
[xlings]: ../learn-stl/exercises/cpplings.hpp - ok
[xlings]: ../learn-stl/tests/cpplings.cpp - ok
[xlings]: ../learn-stl/xmake.lua - ok
warning: includes("../learn-stl") cannot find any files!
speak@speak-pc:~/test/xlings/my_project$ 

项目结构

bash

.
├── book
│   ├── book.toml
│   └── src
│       ├── chapter_1.md
│       └── SUMMARY.md
├── config.xlings
└── learn-stl
    ├── exercises
    │   └── cpplings.hpp
    ├── tests
    │   └── cpplings.cpp
    └── xmake.lua

book目录: 是用于存放项目的markdown文档, 使用xlings book(调用mdbook)可以把文档在浏览器打开, 也可以部署到Github上作为在线的电子书

learn-stl目录: 用于存放项目对应的练习代码, 可以被xlings加载识别用于练习代码自动化检测

config.xlings: 项目的配置文件, 可以在这里添加项目依赖这样xlings能自动安装项目所需要的环境

练习代码自动化检测

xlings把练习代码的自动化检测功能从单一教程项目抽象了。这样只要项目按照一定的格式设计练习代码都可以被xlings识别实现自动定位代码文件、实时检测当前练习的状态, 以及练习完成时可以自动跳转到下一个练习等功能。通过运行在对应项目中运行xlings checkerxlings xlings_name就可以加载代码开启练习代码的自动化检测, 例如d2ds动手写数据结构的项目

bash

xlings dslings # dslings是d2ds项目配置文件中设置的别名

运行效果

最上面显示练习进度信息和当前练习的状态, 后面就是编译信息以及AI提示。自动检测程序会”实时检测”这个练习, 当你成功完整并通过检测, xlings就会自动进入下一个练习并打开对应的代码文件

drepo项目管理

作为一个课程/教程搭建工具, 为了方便课程资源的管理以及学习者获取课程/教程资源。xlings还开发了一个可以发布项目的模块, 这样就能很方便的使用xlings获取对应项目的资源

bash

speak@speak-pc:~/test$ xlings drepo # 可以列出已经发布的项目

	drepo lists

--- d2python ---
name	: d2python
tags	: python
url	: https://github.com/d2learn/d2python
git	: git@github.com:d2learn/d2python.git
profile	: 动手学d2python项目
--- d2x ---
name	: d2x
tags	: template
url	: https://github.com/d2learn
git	: git@github.com:d2learn/xlings.git
profile	: drepo的模板配置文件
--- xlings ---
name	: xlings
tags	: tools, build, auto-exercises, pkg-manager
url	: https://github.com/d2learn/xlings
git	: git@github.com:d2learn/xlings.git
profile	: 技术、实验、练习、自学类项目, 快速构建和管理工具
--- d2ds ---
name	: d2ds
tags	: c++, data-structures
url	: https://github.com/d2learn/d2ds
git	: git@github.com:d2learn/d2ds.git
profile	: 强调动手实践的数据结构学习项目,其中包含在线书籍、公开课、练习代码等子项目
--- d2cpp ---
name	: d2cpp
tags	: c++
url	: https://github.com/d2learn/d2cpp
git	: git@github.com:d2learn/d2cpp.git
profile	: 动手学C++项目

	run xlings drepo [drepo_name] to download


xlings drepo后面加上项目名就可以下载对应的项目。例如下载d2ds项目

bash

xlings drepo d2ds

3.现状和发展

目前项目还是属于比较早期的阶段, 有了核心的功能及想法, 但部分功能目前的实现方案还是比较简单或者说是简陋的。例如,像drepo模块, 当前基本还是依赖与git服务, 且没有在线可以预览项目的站点。

发展方向上, 基本算比较清晰的。两个视角: 学习者 和 内容创作者(课程/教程), 从两个方面做一些实际&实用的功能最终达到一个相互作用发展的效果

4.相关链接

xlings开

d2learn官网

d2learn论坛


欢迎感兴趣的同学、老师、朋友在评论区和我交流想法, 也欢迎大家关注xlings开源项目

标签

发表评论