Perhaps a C-syntax front-end for Lowtalk would be interesting?
http://forum.world.st/Re-ANN-Lowtalk-a-new-Smalltalk-dialect-that-could-eventually-replace-Slang-td4966907.html

cheers -ben

On Wed, 17 Oct 2018 at 19:37, Dimitris Chloupis <kilon.al...@gmail.com>
wrote:

> there will be no remap of variable names, this is a strict compiler if you
> can even call it a compiler. Your variable names will stay exactly the same
> in the C side , a concern here was that Pharo would not allow to have names
> like "my_personal_function". All the praise to Pharo it actually allows for
> such naming for methods.
>
> So no this is going to be a very stupid compiler, there will be minimum
> amount of magic involved if not any at all and what you read in Smalltalk
> will be compiled exactly the same in C.
>
> I am now playing with RBParser for handling the parsing of the smalltalk
> code and I am impressed how flexible and elegant it is. Kudos to the devs
> behind it.
>
> Here is the begining of Magnatar
>
> exp := (RBParser parseExpression: 'Morph call_my_function').
> sel :=  exp selector asString.
> classname := exp receiver name asString.
> Transcript open;clear.
> Transcript show: classname ; show:'.' ; show:sel;show:'()';cr.
>
> Damn that was too easy :D
>
> On Wed, Oct 17, 2018 at 2:06 PM Thierry Goubier <thierry.goub...@gmail.com>
> wrote:
>
>> Le mer. 17 oct. 2018 à 12:39, Dimitris Chloupis
>> <kilon.al...@gmail.com> a écrit :
>> >
>> > About your last part on platforms, I will be providing a way to inline
>> C code so one can you use C macros to detect the platform and generate code
>> accordingly. Or this could happen via a pragma too, it should not be an
>> issue. This also a reason why I previously talked about an "in place"
>> annotation and why specially named variables was my first choice instead of
>> pragmas. I am also not a big fan of pragmas syntax which for me at least
>> deviates from standard smalltalk syntax style. But as I said I am not
>> against their usage at all.
>> >
>> > Generally because this is no an afternoon project obviously, I will be
>> relying on C code inling at first for special corner cases and then I will
>> implement them as annotations the more the project moves forward.
>>
>> Having a way to do the same as what asm inline is in gcc, but for
>> hand-written C inside your Smalltalk derivative is cool: remap
>> variable names, etc, so that your C generator handles all the
>> interface between the inlined C and the surrounding Smalltalk.
>>
>> Same if you also add platform-dependent customisation for generation.
>>
>> Thierry
>>
>> > On Wed, Oct 17, 2018 at 1:30 PM Dimitris Chloupis <
>> kilon.al...@gmail.com> wrote:
>> >>
>> >> Hello Allistair
>> >>
>> >> I have used Slang only once and it was generating code that was indeed
>> readbale but my aim is for more finer control over the output. Lets say I
>> want import a specific C header file or I want a string to map to custom C
>> type I created etc. So yes Slang is by no mean a bad tool at all its just
>> is not designed with making source output that is undetectable as
>> autogenerated by a human. But I will have to give it a more serious try
>> because it may be closer than I initially thought.
>> >>
>> >> I am not against the usage of pragmas, and indeed are an excellent way
>> to annotate stuff , my only concern is when I may want to annotate in place
>> for some weird reason , but that may be doable with pragmas as well too.
>> >>
>> >> Smalltalk code that is 100% smalltalk should be able to execute , you
>> mention however the execution of external C functions , problem is that in
>> my case that code does not live in DLLs but in an executable so no I am not
>> amaing to that level of execution.
>> >>
>> >> Also I have an easier solution for this too, when I made the
>> CPPBridge, which is a Pharo library that allows the usage of C++ libraries
>> from Pharo, I used a shared memory bridge to communicate back to Pharo
>> giving the ability of both function calls and callbacks. If I really want
>> to capture execution I can do it like this which is the exact opposite of
>> what you do, instead of the VM capturing the executable it will be the
>> executable capturing the VM if that makes any sense. This makes things far
>> easier. As a matter of fact not only my CPPBridge does this it also allows
>> to extend the pharo image file because it uses memory mapped files for the
>> shared memory which like pharo image files are memory dumps. So there is a
>> lot potential in that department.
>> >>
>> >> However my main goal is to use Smalltalk code execution to make sure
>> the prototype works on a basic level, there will be a C cide in this
>> project obviously which will act like a runtime that will provide live
>> coding features. This is also a library I made in C that does this through
>> the usage of DLLs that rebuilds and reloads dynamically.
>> >>
>> >> So I dont really need the VM to execute my code to check that is
>> working cause the C compiler and the live coding runtime can handle this. I
>> could even hook in the Pharo debugger, I have done this with my Atlas
>> library that allows to use Python library from Pharo by sending the python
>> error back to Pharo debugger where it triggers an error and the debugger
>> pops to allow you to do your usual live coding magic and basically resends
>> the code back to python. Because of my C livecoding library I can do this
>> with C too. My only concern is how the C/C++ compiler reports errors
>> because obviously it known that it kinda sucks on this. But hey I cannot
>> make C better :D
>> >>
>> >> Generally speaking the tools I am making are not designed for general
>> consuption but designed to solve my own problems. Of course I like to share
>> them because there is always the chance for someone to find them useful as
>> it has happened with Atlas for example. Plus as happened with Atlas one can
>> take my code and adjust it to his or her personal needs.
>> >>
>> >> On Wed, Oct 17, 2018 at 1:04 PM Alistair Grant <akgrant0...@gmail.com>
>> wrote:
>> >>>
>> >>> Hi Dimitris,
>> >>>
>> >>> As someone currently learning to use Slang (i.e. not an expert), I've
>> >>> added my 2c below...
>> >>>
>> >>> On Wed, 17 Oct 2018 at 11:06, Dimitris Chloupis <
>> kilon.al...@gmail.com> wrote:
>> >>> >
>> >>> > Thierry you have done it !!! you just gave a very easy solution to
>> my problems.
>> >>> >
>> >>> > Yeap Slang is quite close to what I am thinking, unfortunately
>> Clement told me to stay away from it because the code is ugly and specially
>> used for VM only. If I remember also correctly it does not generate
>> readable C code either. But the idea as a concept is very close to what I
>> imagine.
>> >>>
>> >>> I've found the C code produced to be quite readable, but that is
>> >>> probably influenced by the fact that I have read the slang first.
>> >>>
>> >>>
>> >>> > As a matter of fact you mentioning Slang made  I have an epiphany
>> that I dont have to create a new syntax at all, instead I could use
>> specific variables or methods to provide type annotation. Thus like Slang I
>> can use regular Smalltalk code that avoids changing types but without the
>> need for type inference (although I am not excluding this either).
>> >>> >
>> >>> > So yes I am definetly want to move to the direction that Slang goes
>> so I can fully utilise the Pharo IDE and minise code that I have to write.
>> >>> >
>> >>> > So basically I am thinking write code as you always write in Pharo
>> and either
>> >>> > a) Have special dictionary variables in each method that provide
>> static type annotations for the arguments of the methods, its return type
>> and local variables
>> >>>
>> >>> Slang uses method pragmas to define the variables types.  This seems
>> >>> to work quite well.
>> >>>
>> >>>
>> >>> > b) Have special methods that provide such dictionaries seperately.
>> >>> >
>> >>> > Or probably both. This way I can write 100% Smalltalk code and use
>> a very small compiler to read those dictionary variables for the type of
>> the variables and functions/structs (essentially a class will be output for
>> a C struct with pointers to functions for methods and variables for
>> instance variables). Why invent a whole new language when everything I need
>> already Pharo provides ?
>> >>> > I could also use special variable dictionaries for all sort of
>> things like generation of header files, generation of CMake files for
>> automatic building.
>> >>> >
>> >>> > Also I like to use the way UFFI is doing C function signatures by
>> using symbol arrays.
>> >>> >
>> >>> > So thank you all for inspiration it looks like all I need is Pharo
>> AST methods (which I can from the AST packages) and SmaCC.
>> >>> > So yeap looks like Magnatar will be a new Slang afterall, I will
>> keep you posted.
>> >>> >
>> >>> > Also this also opens the possibility of autowrapping the generated
>> c code back to Pharo through UFFI, so one can use C code as if its Pharo
>> code. I can leverage the TalkFFI project that does this already. Seems all
>> the pieces have fallen in their place.
>> >>> >
>> >>> > Keep the suggestions and advice coming, you guys are inspirational
>> :D
>> >>>
>> >>> Do you intend that the Smalltalk code can be executed?  This will
>> >>> likely increase the complexity quite a bit.  In the VM simulation we
>> >>> end up creating a XSimulation subclass that provides the framework for
>> >>> executing the smalltalk code, e.g simulating functions that are only
>> >>> in C.
>> >>>
>> >>> There is also the problem of platform differences.  Slang doesn't
>> >>> really handle them well (pragmas can be used to indicated that methods
>> >>> should only be compiled on certain platforms, and #ifdef type code can
>> >>> be used, but it isn't enough).  It would be nice to have a class that
>> >>> provides cross platform functionality, and then platform specific
>> >>> classes as required.
>> >>>
>> >>> HTH,
>> >>> Alistair
>> >>>
>>
>>

Reply via email to