Hi

2018-05-26 8:46 GMT+03:00 Clément Bera <bera.clem...@gmail.com>:

> Just mentioning another use-case:
>
> getDatabaseInstance
>     ^ (Production CifTrue: [Database] CifFalse: [MockDatabase]) new
>

I think following code will work:

getDatabaseInstance
     ^ (Production ifTrue: [Database] ifFalse: [MockDatabase])
asMethodConstant new



>
>
> Since I use conditional compilation more often than just precompiling
> constants.
>
> I don't see an equivalent of asMethodConstant AST manipulation at runtime
> strategy in the image for this case right now but it's probably a couple
> lines of code with Reflectivity.
>
> On Sat, May 26, 2018 at 7:28 AM, Clément Bera <bera.clem...@gmail.com>
> wrote:
>
>>
>>
>> On Fri, May 25, 2018 at 10:44 PM, Esteban Lorenzano <esteba...@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On 25 May 2018, at 17:30, Clément Bera <bera.clem...@gmail.com> wrote:
>>>
>>> What about a preprocessor like the Java preprocessors ? The Truffle
>>> project relies heavily on that for high performance Java and it's quite
>>> nice. It's difficult to do that in Smalltalk right now.
>>>
>>> I think if you want to do what are asking for you just need to write a
>>> bytecode compiler extension.
>>>
>>> I did something similar in the past to have precomputed constants
>>> through AST manipulation at compilation time. You can find it here with
>>> examples: http://smalltalkhub.com/#!/~ClementBera/NeoCompiler. Once the
>>> code is loaded you need to recompile the examples (NeoCompilerExample
>>> withAllSubclassesDo: #compileAll.). With it you can write code such as:
>>> [ Smalltalk vm class ] Cvalue
>>> And depending if the compiler allowsPrecompilation or not, the bytecode
>>> compiler generates:
>>> Smalltalk vm class
>>> Or just a push literal with the precomputed value (the class
>>> VirtualMachine).
>>>
>>>
>>> this is not what #asMethodConstant provides?
>>>
>>
>> Can you turn asMethodConstant On and Off so you have the constant in
>> production and not a development time ? Typically at development time I
>> change the constants generated a lot and I don't want to waste time
>> recompiling all the time.
>>
>> But yeah, my project is from 2014. I guess instead of preprocessing you
>> could do everything at runtime with AST manipulation/recompilation like
>> in asMethodConstant.
>>
>> The main point of preprocessing IMO is to control performance, it's just
>> easier for me to just look at the generated bytecode and change the
>> preprocessor until it gets what I want, it's not always easy to run code
>> that will change your method at runtime quickly so you can look at the
>> bytecode generated.
>>
>> Anyway, I am not convinced at all something like that should be in the
>> base image.
>>
>>
>>>
>>> Esteban
>>>
>>> In the end I decided not to use this, but you can use it and extend it
>>> to support more than just constants (any AST manipulation is possible).
>>> Just checked it works in Pharo 6.
>>>
>>> On Fri, May 25, 2018 at 4:26 PM, Stephan Eggermont <step...@stack.nl>
>>> wrote:
>>>
>>>> Debiller 777 <ozovozovozo...@gmail.com>
>>>> wrote:
>>>> > Well, I've already asked about adding new literals to pharo or
>>>> Smalltalk in
>>>> > general, however this time I have a better idea:
>>>> > macros. Can they be added? Because if I understand correctly they may
>>>> be
>>>> > the only way to do that.
>>>>
>>>> Why do you think they would be a good idea? We have powerful
>>>> meta-programming facilities that are well understood and somewhat
>>>> supported
>>>> by tooling. How do we get value out of macros?
>>>>
>>>> Stephan
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Clément Béra
>>> https://clementbera.github.io/
>>> https://clementbera.wordpress.com/
>>>
>>>
>>>
>>
>>
>> --
>> Clément Béra
>> https://clementbera.github.io/
>> https://clementbera.wordpress.com/
>>
>
>
>
> --
> Clément Béra
> https://clementbera.github.io/
> https://clementbera.wordpress.com/
>

Reply via email to