我尝试引入mruby/c(Mac版)以解决第11个问题(解决办法之一)

# 簡介
mruby是Ruby的輕量級版本。
mruby/c則是使用mruby編譯器的更小型Ruby執行環境。

mruby拥有Ruby的基本功能,
mruby编译器是由Ruby编译器的松本行弘先生编写的。

因此,基本的Ruby程序可以在mruby和mruby/c中运行。

田中和明先生的mruby课程我听过两次。
这是我第三次听田中和明先生的mruby/c课程。

我之前一直很感兴趣,但一直没有想到自己该做什么。

我和swest的6位与Ruby、mruby、mruby/c相关的人士交谈过。
这是我第一次和松本行弘先生以及Ruby、mruby、mruby/c的相关人士同时进行对话。

参与讨论的参与者回答道:“如果进行静态解决的话,应该可以在mruby编译器中支持关键字参数的功能。”

在swest会议的讨论中,有一个关于实现音乐相关程序便捷的延迟方案提出了一个很好的建议。

突然我有了动力,决定尝试mruby/c,于是在网上搜索了“mruby/c”。

无法找到文章的日期。

以下是链接。
https://github.com/mrubyc/mrubyc/releases/tag/release1.1

根源在于 https://github.com/mrubyc/mrubyc。

尝试下载Master。

mruby.png

環境:Mac OS Sierra 10.12.6
型号:Mac mini(2014年底)
处理器:3Ghz 英特尔 Core i7
内存:16GB 16000MHz DDR3
硬盘:999.35GB,空闲611.15GB

$ cc --version
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

在下面的README.md文档中没有提到,但是需要另外安装mruby编译器。

请问您需要将您提供的句子「mruby编译器(mrbc.exe)是通过编译开源版的mruby创建,或者您可以从上面链接中下载」翻译成中文。

##MRuby

##MRuby是一个轻量级的嵌入式Ruby解释器,适用于嵌入式系统和可嵌入到其他软件中的情况。

$ brew install mruby

从现在开始用最新的版本号1.4.1(截至2018年9月3日)。

在进行研究时的一个例子:
https://researchmap.jp/jo449djb8-1778110/#_1778110

咪红宝石(Mruby)

## Documents

[How to compile?](doc/compile.md)
# How to compile?

To make mruby/c sample programs, just `make` in top directory. `Makefile` generates mruby/c VM library `libmrubyc.a` and mruby/c executables.

#mruby/c executables

Three mruby/c executables are generated in /sample_c directory.

mrubyc is a mruby/c VM for one mruby byte-code file. This program executes one mrb file.

mrubyc basic_sample01.mrb
$ make
cd mrblib ; make all
make[1]: Nothing to be done for `all'.
cd src ; make all
/Library/Developer/CommandLineTools/usr/bin/make libmrubyc.a
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o alloc.o alloc.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o class.o class.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o console.o console.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o global.o global.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o keyvalue.o keyvalue.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o load.o load.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o rrt0.o rrt0.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o static.o static.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o symbol.o symbol.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o value.o value.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o vm.o vm.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o hal/hal.o hal/hal.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_array.o c_array.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_hash.o c_hash.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_numeric.o c_numeric.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_math.o c_math.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_range.o c_range.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_string.o c_string.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o mrblib.o mrblib.c
ar rv libmrubyc.a alloc.o class.o console.o global.o keyvalue.o load.o rrt0.o static.o symbol.o value.o vm.o hal/hal.o c_array.o c_hash.o c_numeric.o c_math.o c_range.o c_string.o mrblib.o
ar: creating archive libmrubyc.a
a - alloc.o
a - class.o
a - console.o
a - global.o
a - keyvalue.o
a - load.o
a - rrt0.o
a - static.o
a - symbol.o
a - value.o
a - vm.o
a - hal/hal.o
a - c_array.o
a - c_hash.o
a - c_numeric.o
a - c_math.o
a - c_range.o
a - c_string.o
a - mrblib.o
/Library/Developer/CommandLineTools/usr/bin/ranlib: file: libmrubyc.a(c_math.o) has no symbols
cd ext ; make all
/Library/Developer/CommandLineTools/usr/bin/make libmrubyc_ext.a 
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG -I../src    -c -o c_ext.o c_ext.c
ar rv libmrubyc_ext.a c_ext.o
ar: creating archive libmrubyc_ext.a
a - c_ext.o
cd sample_c ; make all
cc -g -I ../src -I ../ext -Wall -Wpointer-arith -L ../src -o mrubyc main.c ../src/libmrubyc.a ../ext/libmrubyc_ext.a
cc -g -I ../src -I ../ext -Wall -Wpointer-arith -L ../src -o mrubyc_sample main_sample.c ../src/libmrubyc.a ../ext/libmrubyc_ext.a
cc -g -I ../src -I ../ext -Wall -Wpointer-arith -L ../src -o mrubyc_concurrent main_concurrent.c ../src/libmrubyc.a ../ext/libmrubyc_ext.a
cc -g -I ../src -I ../ext -Wall -Wpointer-arith -L ../src -o mrubyc_myclass main_myclass.c ../src/libmrubyc.a ../ext/libmrubyc_ext.a
$ mrubyc basic_sample01.mrb
-bash: mrubyc: command not found
$ ../sample_c/mrubyc basic_sample01.rb 
Error: Illegal bytecode.

编译并执行(compile and go)
使用mrbc将rb编译为mrb。
然后,使用mrubyc进行执行。

$ mrbc basic_sample01.rb
$ ../sample_c/mrubyc basic_sample01.mrb 
30
-10
30

源代码内容。

a = 10
b = 20
c = a + b
puts c

d = a - b
puts d

a = a * 2
b = b / 2
c = a + b
puts c

# 课题(issue)
## 课题1
关于mrubyc、mrubyc_concurrent的路径建议切分方式。

第二题:
文件夹中“sample”文件的扩展名是rb。
需要引入mruby,并通过mrbc进行编译以生成mrb。(不包含步骤说明)

##问题3
无法使用brew安装mrubyc,无法使用ruby_c引入。
若能够通过brew一起安装mruby,将会很好。

在mrubyc-master中,
出現了「/Library/Developer/CommandLineTools/usr/bin/ranlib: file: libmrubyc.a(c_math.o) 中沒有符號」的錯誤。release1.1版本則沒有相應的文件,因此不會有警告。

##问题5
我无法熟练使用mruby/c IDE。
如何才能正确编译呢?
我曾经应该已经被教过一次了,可是…。

在应对Ruby的规范扩展时,应采取何种方式来应对mruby/c?

上述的内容包括关键字参数。

如何实现音乐演奏所需的同机构造。

从SWEST的发言中。

学习将特定的CPU移植到其他设备方法

可以将TOPPERS/SSP包含在内吗?

如果要將配置器更改為Ruby系統。

对于课题10,我不清楚”master”和”release1.1″之间的关系。

##问题11
正在尝试在Docker中引入mruby/c。目前还不太顺利。

在Docker Hub注册账号。

$ docker pull kaizenjapan/mrubyc
Using default tag: latest
latest: Pulling from kaizenjapan/mrubyc
55cbf04beb70: Pull complete 
1607093a898c: Pull complete 
9a8ea045c926: Pull complete 
d4eee24d4dac: Pull complete 
b59856e9f0ab: Pull complete 
34d336b2fcd6: Pull complete 
cc1ab820e4eb: Pull complete 
a27cf78a7a17: Pull complete 
3144ee375031: Pull complete 
64338bafac63: Pull complete 
Digest: sha256:15ee5f97aaad81e7e0650b2f9223e5634bb2c01a70111fea27387a105840047b
Status: Downloaded newer image for kaizenjapan/mrubyc:latest
KM-S05:sample_ruby administrator$ docker images
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
kaizenjapan/mrubyc                      latest              0d4197b2f770        20 minutes ago      1.86GB
$ docker run -it kaizenjapan/mrubyc
root@f5fb4d1350a8:/# ls
1.3.0.zip  boot  etc   lib    media  mruby-1.3.0  opt	root  sbin  sys  usr
bin	   dev	 home  lib64  mnt    mrubyc	  proc	run   srv   tmp  var
root@f5fb4d1350a8:/# cd mrubyc
root@f5fb4d1350a8:/mrubyc# cd sample_ruby
root@f5fb4d1350a8:/mrubyc/sample_ruby# /mruby-1.3.0/bin/mrbc basic_sample01.rb
root@f5fb4d1350a8:/mrubyc/sample_ruby# ../sample_c/mrubyc basic_sample01.mrb
30
-10
30

如果要使用gcc,请从docker的gcc官方库中拉取。

$ docker pull gcc
Using default tag: latest
latest: Pulling from library/gcc
55cbf04beb70: Pull complete 
1607093a898c: Pull complete 
9a8ea045c926: Pull complete 
d4eee24d4dac: Pull complete 
b59856e9f0ab: Pull complete 
34d336b2fcd6: Pull complete 
cc1ab820e4eb: Pull complete 
a27cf78a7a17: Pull complete 
3144ee375031: Pull complete 
Digest: sha256:728cb48fde7df7a788d7fee93567e2841624aeaaea7e07fd42326836663d4066
Status: Downloaded newer image for gcc:latest
$ docker run -it --name gcc gcc
root@685f0be9ffee:/# apt-get update
Ign:1 http://deb.debian.org/debian stretch InRelease
Get:2 http://security.debian.org/debian-security stretch/updates InRelease [94.3 kB]
Get:3 http://deb.debian.org/debian stretch-updates InRelease [91.0 kB]
Get:4 http://deb.debian.org/debian stretch Release [118 kB]      
Get:5 http://security.debian.org/debian-security stretch/updates/main amd64 Packages [392 kB]
Get:6 http://deb.debian.org/debian stretch-updates/main amd64 Packages [5148 B]
Get:7 http://deb.debian.org/debian stretch Release.gpg [2434 B]               
Get:8 http://deb.debian.org/debian stretch/main amd64 Packages [7099 kB]
Fetched 7801 kB in 9s (797 kB/s)                                                                                                             
Reading package lists... Done

# apt-get update
(略)
# apt-get install mruby
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mruby
0 upgraded, 1 newly installed, 0 to remove and 4 not upgraded.
Need to get 296 kB of archives.
After this operation, 2091 kB of additional disk space will be used.
Err:1 http://deb.debian.org/debian stretch/main amd64 mruby amd64 1.2.0+20161228+git30d5424a-1
  Could not resolve 'deb.debian.org'
E: Failed to fetch http://deb.debian.org/debian/pool/main/m/mruby/mruby_1.2.0+20161228+git30d5424a-1_amd64.deb  Could not resolve 'deb.debian.org'
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
root@685f0be9ffee:/# apt-get install mruby --fix-missing?
E: Command line option --fix-missing? is not understood in combination with the other options

这个部分还未完成,将逐步添加内容。

梅耶币发布1.1版

mrubyc1.png
$ cd src
$ ls
Doxyfile	c_ext.h		c_string.c	console.h	libmrubyc.a	static.c	vm.h
Makefile	c_hash.c	c_string.h	errorcode.h	load.c		static.h	vm_config.h
alloc.c		c_hash.h	c_symbol.c	global.c	load.h		symbol.c
alloc.h		c_numeric.c	c_symbol.h	global.h	mrubyc.h	symbol.h
c_array.c	c_numeric.h	class.c		hal		opcode.h	value.c
c_array.h	c_range.c	class.h		hal_posix	rrt0.c		value.h
c_ext.c		c_range.h	console.c	hal_psoc5lp	rrt0.h		vm.c
$ make
cd src ; make all
if [ ! -e hal ]; then ln -s hal_posix hal; fi
/Library/Developer/CommandLineTools/usr/bin/make libmrubyc.a
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o alloc.o alloc.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o class.o class.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o console.o console.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o global.o global.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o load.o load.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o rrt0.o rrt0.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o static.o static.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o symbol.o symbol.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o value.o value.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o vm.o vm.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o hal/hal.o hal/hal.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_array.o c_array.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_hash.o c_hash.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_ext.o c_ext.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_numeric.o c_numeric.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_range.o c_range.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_string.o c_string.c
cc -Wall -Wpointer-arith -g -DMRBC_DEBUG     -c -o c_symbol.o c_symbol.c
ar rv libmrubyc.a alloc.o class.o console.o global.o load.o rrt0.o static.o symbol.o value.o vm.o hal/hal.o c_array.o c_hash.o c_ext.o c_numeric.o c_range.o c_string.o c_symbol.o
ar: creating archive libmrubyc.a
a - alloc.o
a - class.o
a - console.o
a - global.o
a - load.o
a - rrt0.o
a - static.o
a - symbol.o
a - value.o
a - vm.o
a - hal/hal.o
a - c_array.o
a - c_hash.o
a - c_ext.o
a - c_numeric.o
a - c_range.o
a - c_string.o
a - c_symbol.o
cd sample_c ; make all
cc -g -I ../src -Wall -Wpointer-arith -L ../src -o mrubyc main.c ../src/libmrubyc.a
cc -g -I ../src -Wall -Wpointer-arith -L ../src -o mrubyc_sample main_sample.c ../src/libmrubyc.a
cc -g -I ../src -Wall -Wpointer-arith -L ../src -o mrubyc_concurrent main_concurrent.c ../src/libmrubyc.a
cc -g -I ../src -Wall -Wpointer-arith -L ../src -o mrubyc_myclass main_myclass.c ../src/libmrubyc.a
$ cd sample_ruby
$ mrbc basic_sample01.rb 
$ ../sample_c/mrubyc basic_sample01.mrb 
30
-10
30

以下是中文的参考资料:

参考资料(reference):https://github.com/mrubyc/mrubyc/issues/57

文書履歴:
版本0.10 初稿 2018年09月03日 上午
版本0.11 追記 mrubyc/issues/57 2018年09月03日 上午
版本0.12 追記 libmrubyc.a(c_math.o) 没有符号 2018年09月03日 中午
版本0.13 追記 mrbc描述 2018年09月03日 下午
版本0.14 追記 表題(Mac編)课题9 2018年09月03日 晚上
版本0.15 追记 简介, 改为课题10 2018年09月03日 晚上
版本0.16 添加docker项目,修改为课题11 2018年09月04日 晚上
版本0.17 注册docker hub 2018年09月05日 晚上
版本0.18 追加URL 2023年02月28日

谢谢您阅读到最后。

请给我一个赞?,还请关注一下。

非常感谢您将文章读到最后一句。

请点击喜欢的图标?并关注我,享受幸福生活。

广告
将在 10 秒后关闭
bannerAds