Best compiled language for extending Ruby

I want to write my core logics in a compiled language for 1) performance
and 2) protecting my source code – in case I will be selling my product
to a customer.

What would be the most natural-supported-easy-fast language to do this
in, given the many choices of language bridges?

I am particularly interested in,

  1. C
  2. Objective C
  3. Ocaml
  4. Lisp (SBCL)
  5. Scheme

Does anyone have experience and would like to share?

I will be coding in OS X and deploying in FreeBSD mostly.

Thanks

Shark

Sharkie L. wrote:

  1. Objective C
  2. Ocaml
  3. Lisp (SBCL)
  4. Scheme

Does anyone have experience and would like to share?

I will be coding in OS X and deploying in FreeBSD mostly.

The only one of these for which a well-documented interface exists is C.
C++ can be made to work, but Ruby itself is written in C.

I’m sure it’s possible to write extensions in the other four languages
and build a C interface, so if your algorithms are more naturally
expressed in one of them, by all means use one of them. By the way,
which Scheme(s) were you considering? Quite a few of them compile to C
now, so that might make a Ruby interface easier.

Quoth M. Edward (Ed) Borasky:

  1. Ocaml
    For OCaml there is rocaml. eigenclass.org

Regards,

I am thinking of Stalin Scheme, and that is because I hear it is fast.
My first programming language is Scheme, and that is still my favorite.
I like Ruby because I find it similar to Lisp/Scheme – in a strange
way.

Anyway, can I compile Stalin Scheme to C, or is there a high performance
scheme that will compile to C? It will allow me to get my work done
fastest, and most naturally suite my logics. I am very excited in
hearing that it can compile to C.

Sharkie L. wrote:

I am thinking of Stalin Scheme, and that is because I hear it is fast.
My first programming language is Scheme, and that is still my favorite.
I like Ruby because I find it similar to Lisp/Scheme – in a strange
way.

Anyway, can I compile Stalin Scheme to C, or is there a high performance
scheme that will compile to C? It will allow me to get my work done
fastest, and most naturally suite my logics. I am very excited in
hearing that it can compile to C.

There are several Scheme-to-C processors that I know of, and there are
lots of published speed benchmarks. The ones I can recall off the top of
my head are bigloo, larceny, gambit-c and chicken. I personally like
gambit-c because it has an Erlang-like lightweight process extension
called Termite. And I’m pretty sure Chicken has a SWIG interface, which
means you could drive common C libraries from both Chicken and Ruby via
SWIG.

If you head over to comp.lang.scheme, I think you’ll get plenty of
answers.

I am very excited in hearing that it can compile to C.

You can also compile ruby to C. Does this mean the code is in general
as
efficient as hand-coded C? No. Maybe for certain purposes.

Why would you combine Scheme and Ruby? If you like Scheme, use it.

BTW there are quite a few Scheme implementations that compile to
native
code. MzScheme (PLT), Chicken, Bigloo (which compiles also to Java),
Larency (which I have never tried) etc.

because I hear it is fast.

Frankly, I’d suggest to actually test it and ask again later.

On Tue, Dec 18, 2007 at 03:35:10PM +0900, tho_mica_l wrote:

You can also compile ruby to C.

(perhaps slightly off-topic)

What tool(s) would you recommend for that?

There is a backward way of using Objective-C
You create a lib in Objective-C and then use the RubyCocoa approach…
Of course, this isn’t very portable…

What tool(s) would you recommend for that?

The full sentence probably should have been: There are a few scripts
that translate a subset of ruby to C. I don’t think they are ready for
prime time.

With respect to “stalin”, IIRC early editions of the language shootout
included timings for this compiler.

On Dec 18, 2007 4:10 AM, Sharkie L. [email protected]
wrote:

I am thinking of Stalin Scheme, and that is because I hear it is fast.
My first programming language is Scheme, and that is still my favorite.
I like Ruby because I find it similar to Lisp/Scheme – in a strange
way.

Stalin is great, and all, but it isn’t a full Scheme implementation
(AFAIK
it’s mostly R4RS compatible). It’s fast, indeed, but if you’re thinking
of
enjoying Scheme in its entirety, I don’t think it’s the best choice.

On Dec 17, 11:32 pm, Sharkie L. [email protected] wrote:

  1. Objective C
    Shark

    Posted viahttp://www.ruby-forum.com/.

There’s rocaml: eigenclass.org . Never used it,
but thought I’d mention it.

JM

I had developed some applications using smalltalk but they are small
utility
programs. I would prefer smalltalk for utility programs but I am not
sure if
this is a good choice for getting good performance.

Kiran

On Dec 18, 2007 2:43 PM, Jean-François Trân [email protected]
wrote:

2007/12/18, Vitor P. [email protected]:

Stalin is great,

I would never imagine to read such a sentence in this mailing-list.

I guess I should have padded that statement with disclaimers. And I
guess
locking my door against those damn KGB agents would have helped, as
well.
Alas, I have to smile every time they walk by and make me swear
allegiance.

2007/12/18, Vitor P. [email protected]:

Stalin is great,

I would never imagine to read such a sentence in this mailing-list.

and all, but it isn’t a full Scheme implementation (AFAIK
it’s mostly R4RS compatible). It’s fast, indeed, but if you’re thinking of
enjoying Scheme in its entirety, I don’t think it’s the best choice.

Thinking about the importance of context…

– Jean-François.

On Dec 18, 9:17 am, “[email protected][email protected] wrote:

I will be coding in OS X and deploying in FreeBSD mostly.
JM
I’ve been using rocaml lately, and I like it. OCaml isn’t Haskell, but
nobody’s perfect! :stuck_out_tongue: Seriously though, OCaml fits very well (imho)
with the style of ruby (Hindley-Milner type inference + structural
typing is very similar to duck typing), and rocaml makes it easy to
write extensions since it auto-generates all the glue code for you
(similar to SWIG). You basically write a .ml file as you normally
would, declare a few things about the interface, and rocaml does the
rest. Doesn’t work on windows yet I don’t think (OCaml does, just not
rocaml).

Regards,
Jordan

You can write your libs in Ruby/Python/Perl and use SWIG to convert this
to
C or vice-versa.

Regards,
Luiz Vitor Martinez C…

On Dec 18, 2007 2:55 PM, Vitor P. [email protected] wrote:

locking my door against those damn KGB agents would have helped, as well.
Alas, I have to smile every time they walk by and make me swear
allegiance.


Vitor P. (dodecaphonic)

http://twitter.com/dodecaphonic


Regards,
Luiz Vitor Martinez C. [Grabber].
(11) 8187-8662

engineer student at maua.br

On Wed, Dec 19, 2007 at 08:29:59AM +0900, MonkeeSage wrote:

I am particularly interested in,

  1. C
  2. Objective C
  3. Ocaml
  4. Lisp (SBCL)
  5. Scheme
    […]
    There’s rocaml:eigenclass.org. Never used it,
    but thought I’d mention it.

I’ve been using rocaml lately, and I like it. OCaml isn’t Haskell, but
nobody’s perfect! :stuck_out_tongue: Seriously though, OCaml fits very well (imho) with the
style of ruby (Hindley-Milner type inference + structural typing is very
=========================================================
similar to duck typing), and rocaml makes it easy to
======================

Yes! I wish more people knew this. If anything, it would make the
periodic
static vs. dynamic typing threads less boring. I’ve often started to
write
about this for eigenclass.org, but I’m dropping more and more posts as
of late
(I must be around ~75% rejection rate or so, and worsening).

write extensions since it auto-generates all the glue code for you
(similar to SWIG). You basically write a .ml file as you normally
would, declare a few things about the interface, and rocaml does the
rest. Doesn’t work on windows yet I don’t think (OCaml does, just not
rocaml).

“Non-pure-Ruby” development on Windows is often difficult; even a plain
old C
extension can be challenging. AFAIK, rocaml could in principle[1] work
on
Win32, at least with the MinGW and cygwin builds of Ruby and OCaml
(maybe with
the MSVC ones too, if the same compiler is used for both). So I believe
that
rocaml should be usable on Win32 after some work in the Makefile
generation
magic. I don’t use Win32 myself so it will be up to some brave Win32
developer
to clear the path.

By the way,

I’ve been using rocaml lately, and I like it. OCaml isn’t Haskell, but
nobody’s perfect! :stuck_out_tongue:

What do you miss when you’re doing OCaml instead of Haskell (apart from
the
syntax, I assume :)? I sometimes ache for ad-hoc polymorphism; I’m
looking
forward to the result of the attempt to bring type classes to OCaml.
How do you feel about the strict vs. non-strict semantics? One thing I
love
about OCaml is that I can know what is happening under the hood and
there are
no bad surprises (bad performance or unexpectedly high memory
consumption).

[1] The inability of ocamlopt (up to 3.09.2 or so, 3.10.0 can on some
platforms) to generate PIC code is not a problem on win32, see [274896].
The next release of OCaml will feature dynamic loading of native code.

AFAIK, rocaml could in principle[1] work on
Win32, at least with the MinGW and cygwin builds of Ruby and OCaml

May I ask if somebody has succeeded in building rocaml on cygwin?

What do you miss when you’re doing OCaml instead of Haskell

Eager vs lazy evaluation makes some difference, I’d suppose.

Luiz Vitor Martinez C. wrote:

You can write your libs in Ruby/Python/Perl and use SWIG to convert this to
C or vice-versa.

I was not aware that SWIG could do this – I thought the called
library had to be in C or C++ and the calling programs could be in any
supported “scripting” language.

Since Haskell creates stubs for C, how difficult would it be to write a
Ruby Wrapper around it? Wouldn’t that be a better solution in that case?