[gambit-list] Compiling Meroon objects and initializers

Mikael mikael.rcv at gmail.com
Sat Jul 9 13:30:49 EDT 2011


Hi,

2011/7/9 Roger Wilson <misterrogerwilson at gmail.com>

> Hi,
>
> That makes a lot of sense.  So my next question is how do I include Meroon
> into each source code file?
>

Well, depends on if you want to administrate your code directly atop
Gambit's (load) (compile-file) (##namespace) etc. or if you want to use a
module system to abstract that away for you.

If the latter, (import meroon) should do it. (Though. I don't know if Meroon
can be run atop the current version of Black Hole, as maybe Meroon would use
some nonstandard ways of macro expansion. Check on the list if anyone did
this, or if you have further questions about the feazibility of this ask
Per.)

If the further, (include "meroon.scm") should (in a very basic usecase, see
examples below for more complex examples where that feature a separation of
code into header and code files).


> As a more general question is there a good resource for learning about
> recommended methods for structuring, including, loading, linking, making
> macros visible etc?  I.e. actually building a non-trivial program spread
> across many source files. Alternatively are there any well structured
> complete programs I'd be recommended to inspect the source of?


If you use Black Hole as a module system, it does the namespace handling and
macro export work automatically. If you build your app atop Gambit's (load)
etc you can study the examples/ dir in the Gambit distribution.

If using that module system, no examples to study needed.

If going with Gambit's (load) (compile-file) etc., you can study the
examples/ dir in the Gambit distribution - other than that, how identifier
exporting and macros go together with them is straight-forward, maybe the
use of (##namespace) is nontrivial in some special cases duno.


>  Thanks,
>
> Roger.


Brgds


>
>
>
>
> On Sat, Jul 9, 2011 at 2:11 PM, Mikael <mikael.rcv at gmail.com> wrote:
>
>> Well you should still somehow get a ,be to the underlying gambit repl to
>> check. Anyhow probably what's happening is that
>>
>> (define-class my-object Object
>>   ((= object-id :initializer get-next-global-id)))
>>
>> is interpreted by Gambit as three expressions in each other, and it starts
>> evaluating the inner-most, so what you see down there is a complaint that
>> object-id and :initializer are unbound - which is projected as the value
>> #!unbound - which is indeed not a number.
>>
>> This in turn probably happens because you didn't include Meroon ['s
>> sources] into your Scheme environment (in this case: your sourcecode file)
>> prior to using Meroon functionality (i.e. define-class etc.) .
>>
>> Brgds
>>
>>
>> 2011/7/9 Roger Wilson <misterrogerwilson at gmail.com>
>>
>>> Hi,
>>>
>>> Thanks for the help, I'll try and clarify.  I'm actually using Swank
>>> rather than a REPL.
>>>
>>> If I run my app, connect to it with Slime and evaluate the code below
>>> using 'slime-eval-region' then I can create instances of the my-object class
>>> using (instantiate my-object), and each object has a unique object-id.  I
>>> was happy with that during the early stage of development.  Now I'm trying
>>> to speed things up so I've put the code below in a scm file, I generate C
>>> code with 'gsc -link my_file.scm' and compile and link it in with my (OS X)
>>> app.  However when the Gambit setup function is called in my app I get the
>>> error.....
>>>
>>> *** ERROR IN | object| -- (Argument 1) NUMBER expected
>>> (= #!unbound #!unbound 'get-next-global-id)
>>>
>>> How can I convince Meroon to run the 'get-next-global-id ' function to
>>> generate an object-id each time I instantiate an object in the same way as
>>> when I was developing interactively?
>>>
>>> Roger.
>>>
>>>
>>>
>>> On Sat, Jul 9, 2011 at 9:07 AM, Mikael <mikael.rcv at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> As for the error you encountered, can you please do ,be in the REPL to
>>>> see exactly what it is that failed.
>>>>
>>>> Regarding how to make it work with a compiled file, can you please
>>>> clarify what you mean by making it to work with a compiled file - i.e., what
>>>> is it you are trying to achieve, and what part of it is it that you don't
>>>> get to work currently?
>>>>
>>>> Brgds,
>>>> Mikael
>>>>
>>>> 2011/7/9 Roger Wilson <misterrogerwilson at gmail.com>
>>>>
>>>>> Hi,
>>>>>
>>>>> I have a basic Scheme question.
>>>>>
>>>>> The following works as intended from my Swank REPL.  How do I make it
>>>>> work with a compiled file?  I'm trying to create a Meroon object that has an
>>>>> automatically created unique id each time one is created.
>>>>>
>>>>> (define *global-id* 0)
>>>>> (define (get-next-global-id)
>>>>>     (let ((current-global-id *global-id*))
>>>>>          (set! *global-id* (+ *global-id* 1))
>>>>>          current-global-id))
>>>>>
>>>>> (define-class my-object Object
>>>>>   ((= object-id :initializer get-next-global-id)))
>>>>>
>>>>>
>>>>> When the Gambit setup function runs I get the error....
>>>>>
>>>>> *** ERROR IN | object| -- (Argument 1) NUMBER expected
>>>>> (= #!unbound #!unbound 'get-next-global-id)
>>>>>
>>>>>
>>>>> Roger.
>>>>> _______________________________________________
>>>>> Gambit-list mailing list
>>>>> Gambit-list at iro.umontreal.ca
>>>>> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20110709/738b815e/attachment.htm>


More information about the Gambit-list mailing list