xlings: 一个用于编程开发、学习和课程搭建的开发者工具 ️
-
0.背景
xlings最初是受[Rust社区的rustlings、国内外知名公开课的形式(mit6.1810/d2l/rcore...)]的启发, 加上从学习者和内容创作者(教程开发者)两个方向的思考下。在xmake构建工具的基础上(类似插件的形式)开发的一个项目 - [支持Windows和Linux] - 本文就简单聊一聊 学习者功能介绍、创作者功能介绍、现状和发展
1.通用功能 - 编程学习
软件安装和环境搭建
xlings中集成了一些常用的环境/软件的一键安装和配置, 并且支持扩展。这个功能可以帮助编程初学者方便的配置好开发环境和安装相关的软件, 同时也能帮助资深开发者避免常用环境的重复搭建的时间。通过install命令可以查看支持的软件和环境
在install命令后面加上对应的环境和软件xlings就能自动下载相关依赖然后安装并配置
例如安装Python环境
xlings install python
安装vscode
xlings install vscode
多编程语言支持和实时编译运行
xlings中的run功能可以运行一个代码文件, 并且自动检测代码类型和然后使用相关编译器/解释器运行代码。如果没有相关环境xlings会自动安装相关的依赖,后期可能增强这个功能, 例如: 把Python运行中缺少库也自动进行安装
运行C++代码
xlings run main.cpp
运行C和Python代码也是类似run命令后加对应的代码文件
xlings run main.c
xlings run main.py
在这个基础上还有一个动态编译运行的功能, 可以避免多次"修改代码再运行验证"这个重复过程。xlings可以实时的检测代码的变化, 在你修改代码后会自动的重新编译再运行
AI代码提示
xlings再代码编译运行的时候接入了大模型错误分析和自定义后端大模型的功能。如果编译程序报错的时候, 大模型可以对报错信息进行分析然后给出对应的提示
从上面AI给出的提示可以看出来, 他来带了一个调皮可爱的风格。这是应该我们可以通过配置文件给大模型设定角色和风格, 如果你把他设置成一个代码练习两年半的抽象艺术家, 那么他就会用抽象风格给你提示。如果你把他设置成一个严肃且脾气暴躁的性格,当代码出错的时他甚至可能会批评你。这个功能可以让编程学习的时候多一点乐趣, 少一点枯燥乏味
本地大模型配置文件示例 - config.llm.xlings
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
xlings_name = "learn-stl" xlings_lang = "cpp"
其中xlings_name是练习代码的名字, xlings_lang是项目使用的语言。然后在配置文件所在的目录运行init命令就可以生成一个基础项目结构
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$
项目结构
. ├── 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 checker
或xlings xlings_name
就可以加载代码开启练习代码的自动化检测, 例如d2ds动手写数据结构的项目xlings dslings # dslings是d2ds项目配置文件中设置的别名
运行效果
最上面显示练习进度信息和当前练习的状态, 后面就是编译信息以及AI提示。自动检测程序会"实时检测"这个练习, 当你成功完整并通过检测, xlings就会自动进入下一个练习并打开对应的代码文件
drepo项目管理
作为一个课程/教程搭建工具, 为了方便课程资源的管理以及学习者获取课程/教程资源。xlings还开发了一个可以发布项目的模块, 这样就能很方便的使用xlings获取对应项目的资源
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项目xlings drepo d2ds
3.现状和发展
目前项目还是属于比较早期的阶段, 有了核心的功能及想法, 但部分功能目前的实现方案还是比较简单或者说是简陋的。例如,像drepo模块, 当前基本还是依赖与git服务, 且没有在线可以预览项目的站点。
发展方向上, 基本算比较清晰的。两个视角: 学习者 和 内容创作者(课程/教程), 从两个方面做一些实际&实用的功能最终达到一个相互作用发展的效果
4.相关链接