summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--doc/limitations.md146
-rw-r--r--tasks/toolchains/openwrt.rake38
2 files changed, 182 insertions, 2 deletions
diff --git a/doc/limitations.md b/doc/limitations.md
index dd153f9ce..4f2596a8c 100644
--- a/doc/limitations.md
+++ b/doc/limitations.md
@@ -17,8 +17,8 @@ Please help to improve it by submitting your findings.
## ```1/2``` gives ```0.5```
Since mruby does not have ```Bignum```, bigger integers are represented
-by ```Float``` numbers. To enhace interoperability between ```Float```
-and ```Float```, mruby provides ``Float#upto``` and other iterationg
+by ```Float``` numbers. To enhance interoperability between ```Float```
+and ```Float```, mruby provides ``Float#upto``` and other iterating
methods for ```Float`` class. As a side effect, ```1/2``` gives ```0.5```
not ```0```.
@@ -64,3 +64,145 @@ end
#### mruby [1.2.0 (2015-11-17)]
No exception is raised.
+
+## Check of infinite recursion
+
+mruby does not check infinite recursion across C extensions.
+
+```ruby
+def test; eval 'test'; end; test
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```SystemStackError``` is raised.
+
+#### mruby [1.2.0 (2015-11-17)]
+
+Segmentation fault.
+
+## Fiber execution can't cross C function boundary
+
+mruby's ```Fiber``` is implemented in a similar way to Lua's co-routine. This
+results in the consequence that you can't switch context within C functions.
+Only exception is ```mrb_fiber_yield``` at return.
+
+## ```Array``` does not support instance variables
+
+To reduce memory consumption ```Array``` does not support instance variables.
+
+```ruby
+class Liste < Array
+ def initialize(str = nil)
+ @feld = str
+ end
+end
+
+p Liste.new "foobar"
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+``` [] ```
+
+#### mruby [1.2.0 (2015-11-17)]
+
+```ArgumentError``` is raised.
+
+## Method visibility
+
+For simplicity reasons no method visibility (public/private/protected) is
+supported.
+
+```ruby
+class VisibleTest
+
+ def public_method; end
+
+ private
+ def private_method; end
+
+end
+
+p VisibleTest.new.respond_to?(:private_method, false)
+p VisibleTest.new.respond_to?(:private_method, true)
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```
+false
+true
+```
+
+#### mruby [1.2.0 (2015-11-17)]
+
+```
+true
+true
+```
+
+## defined?
+
+The ```defined?``` keyword is considered to complex to be fully
+implemented. It is recommended to use ```const_defined?``` and
+other reflection methods instead.
+
+```ruby
+defined?(Foo)
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```
+nil
+```
+
+#### mruby [1.2.0 (2015-11-17)]
+
+```NameError``` is raised.
+
+## ```alias``` on global variables
+
+Aliasing a global variable works in CRuby but is not part
+of the ISO standard.
+
+```ruby
+alias $a $__a__
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+``` nil ```
+
+#### mruby [1.2.0 (2015-11-17)]
+
+Syntax error
+
+## Operator modification
+
+An operator can't be overwritten by the user.
+
+```ruby
+class String
+ def +
+ end
+end
+
+'a' + 'b'
+```
+
+#### Ruby [ruby 2.0.0p645 (2015-04-13 revision 50299)]
+
+```ArgumentError``` is raised.
+The re-defined ```+``` operator does not accept any arguments.
+
+#### mruby [1.2.0 (2015-11-17)]
+
+``` 'ab' ```
+Behavior of the operator wasn't changed.
+
+## ```Kernel.binding``` missing
+
+```Kernel.binding``` is not implemented as it is not in the
+ISO standard.
diff --git a/tasks/toolchains/openwrt.rake b/tasks/toolchains/openwrt.rake
new file mode 100644
index 000000000..1637f6d91
--- /dev/null
+++ b/tasks/toolchains/openwrt.rake
@@ -0,0 +1,38 @@
+# usage of environmental variables to set the
+# cross compiling toolchain proper
+MRuby::Toolchain.new(:openwrt) do |conf|
+ [conf.cc, conf.objc, conf.asm].each do |cc|
+ cc.command = ENV['TARGET_CC']
+ cc.flags = ENV['TARGET_CFLAGS']
+ cc.include_paths = ["#{MRUBY_ROOT}/include"]
+ cc.defines = %w(DISABLE_GEMS)
+ cc.option_include_path = '-I%s'
+ cc.option_define = '-D%s'
+ cc.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}'
+ end
+
+ [conf.cxx].each do |cxx|
+ cxx.command = ENV['TARGET_CXX']
+ cxx.flags = ENV['TARGET_CXXFLAGS']
+ cxx.include_paths = ["#{MRUBY_ROOT}/include"]
+ cxx.defines = %w(DISABLE_GEMS)
+ cxx.option_include_path = '-I%s'
+ cxx.option_define = '-D%s'
+ cxx.compile_options = '%{flags} -MMD -o %{outfile} -c %{infile}'
+ end
+
+ conf.linker do |linker|
+ linker.command = ENV['TARGET_CC']
+ linker.flags = ENV['TARGET_LDFLAGS']
+ linker.libraries = %w(m)
+ linker.library_paths = []
+ linker.option_library = '-l%s'
+ linker.option_library_path = '-L%s'
+ linker.link_options = '%{flags} -o %{outfile} %{objs} %{flags_before_libraries} %{libs} %{flags_after_libraries}'
+ end
+
+ conf.archiver do |archiver|
+ archiver.command = ENV['TARGET_AR']
+ archiver.archive_options = 'rs %{outfile} %{objs}'
+ end
+end