Skip to content
This repository

MacRuby is an implementation of Ruby 1.9 directly on top of Mac OS X core technologies such as the Objective-C runtime and garbage collector, the LLVM compiler infrastructure and the Foundation and ICU frameworks.

fix a bug in Array() where it will return incorrected value if passed…

… NSArray as argument

ary = [1, 2, 3] * 20
nsary = NSArray.arrayWithArray(ary)

p nsary.size        #=> 60
p Array(nsary).size #=> Expected 60, but incorrected value returns
latest commit d1e47668d4
Watson Watson1978 authored
Octocat-spinner-32 bin Make ruby_deploy cleanup .rb files properly when using --compile September 28, 2012
Octocat-spinner-32 ext follow changes in ruby/ruby@65ca601 February 22, 2013
Octocat-spinner-32 framework committing experimental branch content March 11, 2009
Octocat-spinner-32 icu-1060 ignore warning of return-type-c-linkage in ICU header for clang July 17, 2012
Octocat-spinner-32 include implement rb_hash_delete_if() January 08, 2013
Octocat-spinner-32 lib Update minitest to 4.3 to match CRuby 2.0 December 12, 2012
Octocat-spinner-32 misc Make installer setup Xcode integration as root October 02, 2012
Octocat-spinner-32 mspec update mspec to 69c388b April 06, 2013
Octocat-spinner-32 perf add perf_string.rb to do benchmark of string March 01, 2012
Octocat-spinner-32 plblockimp just compile plblockimp when need it August 07, 2012
Octocat-spinner-32 rakelib use macruby.mspec for `rake spec:list' task April 25, 2013
Octocat-spinner-32 sample-macruby update README.rdoc in sample-macruby August 04, 2012
Octocat-spinner-32 sample committing experimental branch content March 11, 2009
Octocat-spinner-32 spec update spec's tag May 20, 2013
Octocat-spinner-32 test-macruby Remove references to hotcocoa from the MacRuby sources April 14, 2011
Octocat-spinner-32 test-mri follow changes in ruby/ruby@65ca601 February 22, 2013
Octocat-spinner-32 test_vm implemented rb_provided() and rb_feature_provided(). these come from … September 19, 2011
Octocat-spinner-32 tool removed rb_nibtool.old March 21, 2011
Octocat-spinner-32 .document Make macri parse all relevant source files (GH-85) May 31, 2012
Octocat-spinner-32 .gdbinit add GDB trick June 20, 2012
Octocat-spinner-32 .gitignore rename the architecture name to i386 from invalid X86_32 July 12, 2012
Octocat-spinner-32 BSDL update copyright in BSDL June 04, 2012
Octocat-spinner-32 COPYING update to new ruby license October 17, 2011
Octocat-spinner-32 ChangeLog.markdown update ChangeLog August 28, 2012
Octocat-spinner-32 GPL committing experimental branch content March 11, 2009
Octocat-spinner-32 HACKING.rdoc add GDB trick June 20, 2012
Octocat-spinner-32 LEGAL Move plblockimp license information to LEGAL May 25, 2012
Octocat-spinner-32 LGPL committing experimental branch content March 11, 2009
Octocat-spinner-32 MacRuby.m Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 MacRubyDebuggerConnector.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 MacRubyDebuggerConnector.m Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 NSArray.m improve a performance in Array#hash January 26, 2013
Octocat-spinner-32 NSDictionary.m [fix #165] remove the check of whether receiver is mutable in NSDicti… November 09, 2012
Octocat-spinner-32 NSString.m Symbol#dup raises a TypeError June 22, 2012
Octocat-spinner-32 README.rdoc Note in the README that you can make installation less noisy February 21, 2012
Octocat-spinner-32 Rakefile Remove xcode_support from the standard rakefile installation August 25, 2012
Octocat-spinner-32 TODO Remove instruby.rb now that porting is complete January 19, 2012
Octocat-spinner-32 array.c fix a bug in Array() where it will return incorrected value if passed… July 05, 2013
Octocat-spinner-32 array.h move the implementation about #hash from Array to NSArray, in order t… September 25, 2012
Octocat-spinner-32 auto_zone_1060.h Fix auto_zone header for SL May 25, 2010
Octocat-spinner-32 b.rb now compile some of the VM primitives into bitcode that will be added… May 24, 2010
Octocat-spinner-32 bignum.c suppress warning of loop empty body July 16, 2012
Octocat-spinner-32 bridgesupport.cpp use pre-increment for C++ iterator February 08, 2013
Octocat-spinner-32 bridgesupport.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 bs.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 bs.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 bs_lex.h fixed compilation on Leopard August 11, 2009
Octocat-spinner-32 bs_struct_readers.c statically generate the struct reader methods, 128 seems necessary at… April 23, 2009
Octocat-spinner-32 class.c use MACRUBY_STATIC for rb_undef_alloc_func May 19, 2013
Octocat-spinner-32 class.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 compar.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 compiler.cpp use pre-increment for C++ iterator February 08, 2013
Octocat-spinner-32 compiler.h should not raise an exception, so implement vm_fast_mod(). fix #1471 May 15, 2012
Octocat-spinner-32 complex.c Remove unused static selector from complex.c January 03, 2013
Octocat-spinner-32 cont.c include/ruby/macruby.h -> macruby_internal.h January 08, 2011
Octocat-spinner-32 debugger.cpp Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 debugger.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 dir.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 dispatcher.cpp not coerce an inline expansion April 21, 2013
Octocat-spinner-32 distruby.rb committing experimental branch content March 11, 2009
Octocat-spinner-32 dln.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 dln.h .rbo files are now initialized using a gcc constructor instead of an … September 26, 2009
Octocat-spinner-32 dmydln.c committing experimental branch content March 11, 2009
Octocat-spinner-32 dmyencoding.c committing experimental branch content March 11, 2009
Octocat-spinner-32 dmyext.c committing experimental branch content March 11, 2009
Octocat-spinner-32 dmytranscode.c committing experimental branch content March 11, 2009
Octocat-spinner-32 dtrace.d removed the insn__entry and insn__return probes now that yarv is gone October 09, 2009
Octocat-spinner-32 encoding.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 encoding.h fix the struct declarations June 20, 2012
Octocat-spinner-32 encoding_ucnv.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 enum.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 enumerator.c use RARRAY_LENINT() to pass the value into int type arguments July 18, 2012
Octocat-spinner-32 env.c ENV#[]= raises an exception if the key contains the '=' like a 'foo=' June 22, 2012
Octocat-spinner-32 error.c add rb_vm_check_call() and use its function to check/call the method July 19, 2012
Octocat-spinner-32 eval.c add rb_vm_check_call() and use its function to check/call the method July 19, 2012
Octocat-spinner-32 eval_error.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 eval_jump.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 eval_safe.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 exported_symbols_list should not raise an exception, so implement vm_fast_mod(). fix #1471 May 15, 2012
Octocat-spinner-32 file.c File::Stat#inspect will not raise an exception if passed uninitialize… August 24, 2012
Octocat-spinner-32 gc-stub.m use __clang__ instead of __GNUC__ February 17, 2013
Octocat-spinner-32 gc.c add BasicObject#__id__ April 23, 2013
Octocat-spinner-32 gcd.c Make Dispatch::Queue#apply documentation less misleading August 25, 2012
Octocat-spinner-32 gcd.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 gen_bs_struct_readers.rb statically generate the struct reader methods, 128 seems necessary at… April 23, 2009
Octocat-spinner-32 golf_prelude.rb committing experimental branch content March 11, 2009
Octocat-spinner-32 hash.c implement rb_hash_delete_if() January 08, 2013
Octocat-spinner-32 hash.h fix the struct declarations June 20, 2012
Octocat-spinner-32 id.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 id.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 inits.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 interpreter.cpp Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 interpreter.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 io.c Object#display will raise an exception if passed nil July 31, 2012
Octocat-spinner-32 irb.1 Add "See Also" sections May 21, 2010
Octocat-spinner-32 kernel.c fix an overflow by multiplying May 15, 2012
Octocat-spinner-32 keywords committing experimental branch content March 11, 2009
Octocat-spinner-32 lex.c.blt committing experimental branch content March 11, 2009
Octocat-spinner-32 lex.c.src committing experimental branch content March 11, 2009
Octocat-spinner-32 lgamma_r.c committing experimental branch content March 11, 2009
Octocat-spinner-32 llvm.h now depend on revision 127367 of branch LLVM 2.9 March 11, 2011
Octocat-spinner-32 load.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 macruby_internal.h Use plblockimp to provide imp_implementationWithBlock() for OS X 10.6… May 25, 2012
Octocat-spinner-32 main.cpp Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 markgc.c update copyrights to 2011 January 15, 2011
Octocat-spinner-32 marshal.c keep the Object's status of untrusted July 29, 2012
Octocat-spinner-32 math.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 mt.c integrate Mersenne Twister based random number generator from 1.9 ups… February 13, 2010
Octocat-spinner-32 numeric.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 objc.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 objc.m Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 object.c add the implementation of Object#singleton_class August 19, 2012
Octocat-spinner-32 pack.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 parse.y RSTRING_PTR() returns (char *) instead of (const char *) like CRuby b… August 18, 2012
Octocat-spinner-32 prec.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 proc.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 process.c RSTRING_PTR() returns (char *) instead of (const char *) like CRuby b… August 18, 2012
Octocat-spinner-32 random.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 range.c [fix #172] fix the Range#each where does not accept the range object … November 23, 2012
Octocat-spinner-32 rational.c remove the unused definition July 16, 2012
Octocat-spinner-32 re.c refactor June 20, 2013
Octocat-spinner-32 re.h loop unrolling to improve the Objective-C methods performance in Stri… June 20, 2013
Octocat-spinner-32 ruby.1 committing experimental branch content March 11, 2009
Octocat-spinner-32 ruby.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 ruby_deploy.1 cover new --gem and --bs options February 10, 2011
Octocat-spinner-32 rubyc.1 Added some linker options to rubyc August 27, 2010
Octocat-spinner-32 rubyd.1 Add "See Also" sections May 21, 2010
Octocat-spinner-32 rubytest.rb committing experimental branch content March 11, 2009
Octocat-spinner-32 runruby.rb committing experimental branch content March 11, 2009
Octocat-spinner-32 sandbox.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 signal.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 sprintf.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 st.c fix incorrect using of GC_WB() January 04, 2012
Octocat-spinner-32 strftime.c move PRI_TIMET_PREFIX definition into ruby.h July 05, 2012
Octocat-spinner-32 string.c refactor June 20, 2013
Octocat-spinner-32 struct.c use RARRAY_LENINT() to pass the value into int type arguments July 18, 2012
Octocat-spinner-32 symbol.c implement Symbol#succ June 23, 2012
Octocat-spinner-32 symbol.h Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 test_vm.rb supported show known problems. April 12, 2011
Octocat-spinner-32 thread.c Thread.new will be accepted even if ThreadGroup#add is not accepted b… August 17, 2012
Octocat-spinner-32 time.c [fix #174] use rb_vm_call instead of rb_funcall to avoid an issue #174 January 03, 2013
Octocat-spinner-32 timev.h update MacRuby's older Time class with CRuby 1.9.2 June 16, 2012
Octocat-spinner-32 transcode.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 ucnv.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 util.c made static to get rid of name clash January 18, 2012
Octocat-spinner-32 variable.c [fix #208] fix a bug where set a constant which it will not raise an … April 13, 2013
Octocat-spinner-32 version.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
Octocat-spinner-32 version.h Flip RELEASE_YEAR and BIRTH_YEAR so RUBY_COPYRIGHT makes sense August 25, 2012
Octocat-spinner-32 vm.cpp fix a bug in defined?(super) which returns the incorrect value if use… June 17, 2013
Octocat-spinner-32 vm.h fix a bug in respond_to_key which cannot generate a unique key for di… March 11, 2013
Octocat-spinner-32 vm_eval.c use RARRAY_LENINT() to pass the value into int type arguments July 18, 2012
Octocat-spinner-32 vm_method.c Change ownership to The MacRuby Team and update copyrights April 23, 2012
README.rdoc

MacRuby

MacRuby is a Ruby implementation based on Mac OS X technologies, such as the Objective-C runtime and garbage collector, the CoreFoundation framework and the LLVM compiler infrastructure.

It is the goal of MacRuby to enable the creation of full-fledged Mac OS X applications which do not sacrifice performance in order to enjoy the benefits of using Ruby.

MacRuby is copyrighted free software by the MacRuby team and covered by the terms of the Ruby license. Please refer to the COPYING file for more information.

The project website contains more documentation, such as tutorials and guides: macruby.org

Requirements

  • An Intel 64-bit machine. PowerPC and Intel 32-bit machines are not supported anymore, but may still work.

  • Mac OS X 10.6 or later.

  • LLVM ToT, compiled for x86_64.

    LLVM is a moving target and breaks periodically. We recommend to install revision 127367 of branch 2.9, being sure to specify the correct C and C++ compilers through environment variables.

    $ svn co https://llvm.org/svn/llvm-project/llvm/branches/release_29@127367 llvm-2.9
    $ cd llvm-2.9
    $ env CC=/usr/bin/gcc CXX=/usr/bin/g++ ./configure --enable-bindings=none --enable-optimized --with-llvmgccdir=/tmp
    $ env CC=/usr/bin/gcc CXX=/usr/bin/g++ make
    $ sudo env CC=/usr/bin/gcc CXX=/usr/bin/g++ make install

    Note that compiling LLVM can take quite a while. If you have a machine with multiple cores, which is quite likely, you might want to speed up the process by using all/more cores. However, doing this can make your machine unresponsive during compilation. To use multiple cores pass the `-j N' option, where `N' stands for the number of cores you'd like to use. So for a Core Duo the command would look like:

    $ env CC=/usr/bin/gcc CXX=/usr/bin/g++ make -j2

    If you would prefer to update an existing LLVM Subversion working copy you need to be careful to remove any previous build files before you compile:

    $ svn status --no-ignore | awk '{print $2}' | xargs rm -rf
    $ svn revert -R .
    $ svn switch <repository-URL>

Note for using Xcode 4.3 (or later)

If you use the Xcode 4.3 (or later), you might need to configure Xcode path before installing MacRuby:

$ sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer/

Build Instructions

You can build MacRuby by doing the following command:

$ rake

Or, as with LLVM, you can specify the amount of jobs to run simultaneously:

$ rake jobs=2

Once done, you can run the RubySpec-based regression tests as well as the performance suite:

$ rake spec:ci
$ rake bench:ci

To install MacRuby on your machine:

$ sudo rake install # --quiet

Then you should be all set! Please report us any problem you will find (the macruby.org website has pointers). Thanks!

Contribute

Once you've made your great commits:

  1. Fork MacRuby

  2. Create a topic branch - git checkout -b my_branch

  3. Push to your branch - git push origin my_branch

  4. Create a pull request: github.com/USERNAME/MacRuby/pull/new/master

  5. That's it!

Something went wrong with that request. Please try again.