Hi Peter!
I see you are really motivated for having types in Pharo. This is great.
The email you’ve sent a couple of days ago motivated me for continuing my
effort.
The two important design points of my implementation are as follow:
(A) - Types are specified in the method comment. Consider the following
two examples:
-=-=-=-=-=-=-=-=-=-=-=-=
RBParser class>>parseMethod: aString
"
:: String -> RBProgramNode
“
...
-=-=-=-=-=-=-=-=-=-=-=-=
The method parseMethod: accepts a string as argument and return a program node
-=-=-=-=-=-=-=-=-=-=-=-=
exampleLabelledIf
"
var b: RTPieBuilder
var c: Class
“
| b c |
…
-=-=-=-=-=-=-=-=-=-=-=-=
The method exampleLabelledIf defines two temporary variables, b and c. The
comment defines the types of these variables
(B) - I am still unsure which types system to use. Probably I will use
the one of Dart for now. It is easy to implement but it is unsound. I think
having a Gradual Type checker for Pharo would be fantastic, but this is
seriously more complicated to have.
All in all, there is a fair amount of non-trivial theory behind. Does this make
sense to you?
Cheers,
Alexandre
> On Oct 2, 2015, at 3:50 PM, Peter Uhnák <[email protected]> wrote:
>
> Hi,
>
> What options do we have in terms of type annotations in Pharo?
>
> I stumbled upon TypePlug this
> https://marcusdenker.de/talks/08ParisTypes/08ParisTypePlug.pdf (or rather
> this http://scg.unibe.ch/archive/masters/Hald07a.pdf )
>
> which enabled type annotation for Squeak such as
> ~~~~~~~~~~~~~~~~
> Fruit>>mixWith: aFruit <:type: Fruit :>
> ^ (Array with: self with: aFruit) <:type: Array E: Fruit :>
> ~~~~~~~~~~~~~~~~
> Orange>>color
> ^ (Color orange) <:type: Color :>
> ~~~~~~~~~~~~~~~~
> (or even blocks)
> [ :a1 <:type: Integer :> :a2 <:type: Integer :> | a1 + a2 ]
> ~~~~~~~~~~~~~~~~
>
> obviously something like this wouldn't even compile in Pharo (does Sqeak have
> different syntax for pragmas, or did the TypePlug change the syntax?)
>
> And my question is... is there a port of this, or something similar?
>
> I've also found this
> http://randycoulman.com/blog/2013/02/12/specifying-types-for-smalltalk-fit/
> Which is a framework for integrated testing that uses pragmas such as
> ~~~~~~~~~~~~~~~~
> makeBatchWithdrawalOn: aDate note: aString
> <fitTakes: #(#{Date} #{String})>
> <fitReturns: #{Fixture}>
> ^(BatchWithdrawalFixture date: aDate note: aString)
> systemUnderTest: systemUnderTest
> ~~~~~~~~~~~~~~~~
>
> Right now I am exploring what options we have in Pharo in terms of type
> annotations (before writing yet-another-library ;-)).
>
> Thanks,
> Peter
--
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.