diff --git a/README.md b/README.md index e422e93..adb7bfb 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,85 @@ -# mruby-devkit +# MRuby Devkit -mruby devkit +![mruby](./doc/logo.png) -灵感来自于 Golang 可以编译为二进制可执行文件。 devkit 提供一个简易的脚手架,使用 Ruby 程序也可以打包成二进制可执行文件。 +MRuby Devkit 是一个开箱即用的脚手架。 基于 MRuby 将你的 Ruby 代码打包成 二进制可执行文件。 ---- +方便开发类似于 Golang 的二进制可执行文件。 -测试: +> —— 灵感来自于 Golang 可以编译为二进制可执行文件的迷人特性。 -MacOS -- AMD64 ✅ -- ARM64 ✅ -Debian/Ubuntu/Mint Linux +# 一、使用约定 -- AMD64 ✅ -- ARM64 ✅ +## 前置运行环境 + +系统需要安装 Ruby3,且安装了 Rake + +> `gem install rake` + +## 约定 + +### 1. `src/main.rb` 程序入口 + +程序入口不可修改。它是 `run`、`build` 寻找的入口。 + +### 2. `src/lib/*.rb` 是多文件 + +lib 中适合存放拆分的多文件。 + +多文件中,如果存在依赖关系。需要特殊命名比如 01xxx, 02xxx …… 控制相对顺序。 + +多文件最终会被拼接成一个上下文送入编译。 + +### 3. `mruby.conf.rb` 是 mgem 配置文文件 + +可以引入 [第三方 mgem ](https://mruby.org/libraries/) + +裁剪需要加入的 gem,控制编译选项。 + +#### 注意: +* 第三方标准库并不是每一个都可以被正确 build 比如 mgem-curses 无法 build,因为存在 BUG。 +* 要正确的配置编译选项,确保 mruby 产生。 +* 配置的 mgem 可以直接在上下文中使用,不需要 require + +## 差异 + +* MRuby 和 CRuby 标准库有差异,请关注官方的文档 +* 工作模式是:裁剪 mgem 、功能,最后编译的解释器 + mruby 代码 进行联合工作。 mruby 代码不需要 require 语句导入包。 +* MRuby 有可能工作在嵌入式环境中,以及可能没有文件系统的硬件中。所以编译成 二进制应用。 +* MRuby 和 CRuby 内核不同。 MRuby 实现精简高效,全部采用可跨平台的 C 语言,内存实现高效,精简,适用于嵌入式、跨平台。 +* MRuby 更像是 C 项目在开发,需要了解 C 语言以及构建的概念 --- -# 使用方法 +# 二、开发 -## 0. 系统需要拥有 +## 0. 编写程序 -Ruby3 提供 Rake +`src` 下编写 ruby 程序 -## 1. rake -T 查看可用命令 +## 1. 运行程序 + +> 模仿 golang 的 go run + +`rake run` + +## 2. 编译当前程序(默认使用当前计算机平台) + +> 模仿 golang 的 go build + +`rake build` + +## 3.交叉编译的包 + +借助 Github Action 编译不同平台的可执行二进制文件。 + +* 可以 fork 仓库在 Github Action 运行结果下可以看到构建产物。 + +## 4. 内置 Rake 命令 + +rake -T 查看可用命令 ``` ➜ build git:(main) rake -T @@ -45,34 +98,28 @@ rake mruby:init # init rake run # run program ``` -## 1.模仿 golang 的 go run -`rake run` - -## 2.模仿 golang 的 go build +---- -`rake build` - -## 3.交叉编译的包 - -借助 Github Action 在 main 分支推送后,查看 Action 构建任务,下载产物 - -## TODO +# TODO - [x] 交叉编译 - [x] 多文件 +- [x] run 命令 +- [x] build 命令 +- [x] 自动初始化 -## 约定 +--- -- `src/main.rb` 是入口文件 -- `src/lib/*.rb` 是依赖文件 +# 平台: -程序会把 `lib/*.rb` 合并 最后和 main.rb 合成一个文件,进行 build +MacOS -这对程序的组织、复杂度都有会对应的要求。需要自己控制复杂的依赖关系。 +- AMD64 ✅ +- ARM64 ✅ -没有引入额外复杂的 makefile,也不想耦合进入 MRuby 的构建过程。 +Debian/Ubuntu/Mint Linux -有依赖关系的尽可能写在一个文件。 lib 中的文件应该可以 无顺序要求引入。最后汇总在 main.rb 进行聚合。 +- AMD64 ✅ +- ARM64 ✅ -lib 中声明关键的类、模块。main.rb 声明的是主体逻辑。