Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Added builtins per runtime
- X-seq: zsh-workers 27944
- From: Christoph Kappel <unexist@xxxxxxxxxxxxx>
- To: <schaefer@xxxxxxxxxxxxxxxx>
- Subject: Re: Added builtins per runtime
- Date: Sun, 02 May 2010 19:28:55 +0200
- Cc: <zsh-workers@xxxxxxx>
- In-reply-to: <x2t691a5d911005020208k4a4c8981ub3b7745048f44999@xxxxxxxxxxxxxx>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <12854b73c24.-5662614641985446414.-6364714751911043221@xxxxxxxxxxxxx> <o2y691a5d911005011258pfb4c688ar75e1953c01a5045@xxxxxxxxxxxxxx> <1285584468e.-5976807992945925025.-2686280647114173652@xxxxxxxxxxxxx> <z2o691a5d911005011349j14613f73g432036f224d86377@xxxxxxxxxxxxxx> <12855ad6dba.6318419370147111815.5595086135333789265@xxxxxxxxxxxxx> <x2t691a5d911005020208k4a4c8981ub3b7745048f44999@xxxxxxxxxxxxxx>
I stopped relying on the docs and started reading the code as I should have done
from start directly - it's FOSS after all and the docs of my project aren't even close
of being accurate too. ;)
I currently have two builtins, one just evals ruby code in the vm and returns the
result and another one that creates a new builtin. The first new builtin works w/o
problems, any further is either unknown or zsh segfaults so I need some more
code reading/testing there.
Looks like this:
~> zmodload zsh/ruby
~> reval "RUBY_VERSION"
"1.9.1"
~> rdef 'def bar(n); "-" * n.to_i; end'
~> bar 20
"--------------------"
~>
Basically I am just maintaining an array of builtins myself and call addbuiltins()
inside of my module whenever a new builtin should be added. Due the
BINF_ADDED flag the builtins will be defined once which is fine.
---- On Sun, 02 May 2010 11:08:21 +0200 Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote ----
>On Sat, May 1, 2010 at 2:02 PM, Christoph Kappel <unexist@xxxxxxxxxxxxx> wrote:
>>
>> That was exactly my question. Can a module change it's features per runtime?
>
>There doesn't appear to be any reason that a module could not provide
>a builtin (or even, I suppose, a parameter) that modifies the module's
>own features array on the fly. The effect would need to be the same
>as if "zmodload -F" had been invoked to enable the newly-materialized
>feature.
>
>> Generally the use of the word feature in the doc is really confusing, reading the
>> coding makes it's even worse when a feature struct contains lists of builtins,
>> condistions etc. which are called features too.
>>
>> The doc also doesn't make very clear what abstracts.
>
>The concept of features (as in the feature struct) was only recently
>introduced, and was layered on top of the existing implementation of
>builtins/parameters/etc. The abstraction may therefore be a bit less
>clean than one would find if it had been designed from scratch.
>
>> I basically want to provide a builtin/feature/whatever that provides a way to add
>> actions in another language - ruby in my case.
>
>I suspect that what you mean by this is that you intend to link a ruby
>interpreter to zsh, and you want to permit interpreted functions
>defined in ruby to appear on the fly as builtin commands from the
>point of view of the zsh interpreter. It might be possible to do
>that, because the same C function defined in the module can be called
>under multiple names. However, I'd suggest that you start by having a
>single builtin that invokes the ruby interpreter and pass it the name
>of the ruby function as its first argument, rather than attempt to
>create a new builtin for every function.
>
Messages sorted by:
Reverse Date,
Date,
Thread,
Author