On Sat, Sep 17, 2016 at 3:45 AM, Nicolai Hess <nicolaih...@gmail.com> wrote:
>
>
> 2016-09-16 18:42 GMT+02:00 Eliot Miranda <eliot.mira...@gmail.com>:
>>
>> Hi All,
>>
>>
>>
>> _,,,^..^,,,_ (phone)
>> > On Sep 14, 2016, at 10:50 PM, Marcus Denker <marcus.den...@inria.fr>
>> > wrote:
>> >
>> >
>> >>>
>> >>> We can change it back and maybe add support for the reformatter to not
>> >>> convert it to the literal array #(3 #+ 4) .
>> >>
>> >> I do not know in fact this is why I asked :)
>> >> Now may be my idea to use pragma to get something like pythondoctest is
>> >> a bad idea
>> >> but I really want to have literal programming.
>> >> What do you think?
>> > I like the idea to show examples/tests close to code, but pragmas are
>> > not really good...
>> >
>> >> If we have ' ' then it would be good that the syntax higlighter works
>> >> with a special mode inside the ' '
>> >
>> > it is just a string. How do you know that it contains code?
>> >
>> > Would you highlight all string in all code as if it contained code? Or
>> > would you add this just for
>> > Pragmas? But even there, strings are string, not code.
>> >
>> > I think we can conclude that pragmas are not a good solution to the
>> > problem, as they are far
>> > too limited to express code.
>>
>> I think that's not a safe conclusion.  We know from Igor's use of Kieran
>> arrays for C signatures in the UFFI, and can easily extrapolate here, that
>> arbitrary Smalltalk expressions /can/ be expressed in literal arrays.  S
>> expressions work for lisp.
>>
>> In this particular case special casing pretty printing of literal arrays
>> in pragmas would be all that's needed to make the code look beautiful.  Why
>> throw the baby out with the bath water?  It would be so easy to make this
>> work well.
>
>
> We can try this as well. And it is far more easier to work with this
> expressions if they are pragma arguments, than to parse the comment to find
> some code within.
> On the other hand, it looks much nicer if we have the examples right in the
> method doc. you have some text describing the method, some code, some more
> text about the reslt.
>
>
>>
>>
>> The only thing I'd do would be to print like this to make it clear that
>> the argument t is a literal Array and not some magic form of code:
>>
>>      <expr: #(3 + 4) result: 7>
>>
>
> Yes, I would like to change this anyway, even for literal arrays for ffi,
> calls like
>
> mouseStateX: x y: y
>     <primitive: #primitiveNativeCall module: #NativeBoostPlugin error:
> errorCode>
>     ^ self nbCall: #( Uint32 SDL_GetMouseState ( int* x , int* y ) )
>
> this will be reformatted to
>
> mouseStateX: x y: y
>     <primitive: #primitiveNativeCall module: #NativeBoostPlugin error:
> 'errorCode'>
>     ^ self nbCall: #(#Uint32 #SDL_GetMouseState #(#int #* #x #, #int #* #y))

errr, yuck!  Thats not pretty at all.  Is there some way to avoid
that?  As I've been getting started with FFI its been really nice
visually to see a *direct* correspondence between the C header file
declaration and the in-Image method.  Actually I think it would be
useful to go a step further to have positional rather than named
parameters for FFI methods.  At the moment the method names still end
up a bit mangled.  This seems feasible since currently an
open-round-bracket is invalid syntax if not preceded by an assignment
or colon.

e.g.
myvar := (a + b).       "okay"
self setVar: (a + b).  "okay"
self setVar( a + b ).  "currently invalid syntax - but could could
represent an FFI call"

defined like...
SomeLibrary class >> setVar( newValue )
    ^ self ffiCall: #( int setVar ( int newValue )

But I expect its not something we'd want to leap into.

cheers -ben

Reply via email to