tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: makesyscalls



On 06/10, David Holland wrote:
> On Wed, Jun 10, 2020 at 01:25:03AM -0400, Thor Lancelot Simon wrote:
>  > Could you translate your prototype into a
>  > different language, one that's less basically hostile to our build system
>  > and its goals and benefits?
> 
> Like which one?

How about mruby?

  https://mruby.org/

It's small and lightweight.  IMO, the Ruby language is quite nice.  I
believe mruby can be cross-compiled since in

  https://github.com/mruby/mruby/blob/master/doc/guides/compile.md

it says:

  mruby uses Rake to compile and cross-compile all libraries and
  binaries.

It looks like it supports GCC and Clang.

Unfortunately, one prerequisite it lists is a Ruby 2.0 or later
implementation.  That obviously makes compiling harder. :-(  Given that
it seems to be targeting being linked and embedded in an application, I
guess I can see why they don't mind this dependency.  For the idea of
possibly including it in base, though, it's unfortunate.

Anyway, I'm talking about mruby just because it's a small and
lightweight implementation of the Ruby language that might have a
better chance of getting included in base if that were ever considered
desirable.  Since you're just looking for a reasonable language, though,
I still think Ruby would be an excellent choice, and the de facto
standard CRuby (a.k.a. Matz's Ruby Interpreter or Ruby MRI)

  https://www.ruby-lang.org/

would be a nice implementation.  I believe it can be cross-compiled.
And it's obviously available in pkgsrc.

> You removed the part of the post that explained that there aren't other
> reasonable choices.
> 
> Yes, it can be rewritten in C as a subsequent step. *After* quite a
> bit of tidying. And no, I'm not doing that now. Among other problems,
> compiling it requires bikeshedding where to put it in the tree. Feel
> free to sort that out.
> 
> As for lua: it has the same headline issues as awk, namely it doesn't
> enforce function arguments and doesn't require that variables are
> declared before use. Again, I see no reason to think it'll be any more
> maintainable.

I don't know anything about Lua, and I might be completely
misunderstanding what you're saying, but I think Ruby satisfies both of
those as follows (mruby and CRuby output shown):

* It enforces function arguments:

  ----
  $ cat func_args.rb
  def add(x, y)
    x + y
  end

  puts(add(5))
  $ mruby func_args.rb
  trace (most recent call last):
  func_args.rb:5: 'add': wrong number of arguments (1 for 2) (ArgumentError)
  $ ruby func_args.rb
  Traceback (most recent call last):
          1: from func_args.rb:5:in `<main>'
  func_args.rb:1:in `add': wrong number of arguments (given 1, expected 2) (ArgumentError)
  ----

* It requires variables to be assigned before use:

  ----
  $ cat var_use.rb
  puts(foo)
  $ mruby var_use.rb
  trace (most recent call last):
  var_use.rb:1: undefined method 'foo' (NoMethodError)
  $ ruby var_use.rb
  Traceback (most recent call last):
  var_use.rb:1:in `<main>': undefined local variable or method `foo' for main:Object (NameError)
  ----

Lewis


Home | Main Index | Thread Index | Old Index