[Squeak-fr] Re: F-Script 2.0

Philippe Mougin pmougin at acm.org
Jeu 14 Jan 12:15:45 UTC 2010


Salut Noury,

Pour la définition des classes, j'ai pensé à la syntaxe d'Objective-C, qui aurait pour avantage très intéressant la familiarité des développeur avec cette syntaxe. Deux raisons m'ont conduit à l'écarter:

- La syntaxe d'Ojective-C est sous optimale dans un contexte comme F-Script car elle requiert de déclarer l'interface de la classe séparément de l'implémentation (la raison en est le support pour la compilation séparée à la mode C). Dans le contexte de F-Script cela perd son sens et alourdirai significativement la définition de classe. Dans le cas d'une syntaxe inspiré d'Objective-C mais simplifié (comme dans ton exemple), j'ai considéré que le bénéfice de la familiarité se réduisait fortement voire qu'une certaine confusion pouvait avoir lieu, et qu'il était plus clair d'avoir une syntaxe repensée from scratch.  

- Le parsing serai largement complexifié car dans F-Script le symbol @ est utilisé pour dénoter les messaging pattern. Il faudrait pas mal de look ahead ou bien ne pas considérer la définition de classe comme une expression (pouvant apparaitre n'importe ou dans le code et pas seulement en tant qu'instruction), ce qui ne serait pas une limitation ennuyeuse en pratique mais nuirait à la régularité du langage.  

En ce qui concerne la suppression d'un niveau d'accolade, il ne me semble pas que cela soit gagnant puisqu'on remplace les accolades par "@class" et "@end".

Philippe

Le 14 janv. 2010 à 10:05, Bouraqadi Noury a écrit :

> 
> Salut Philippe,
> 
> J'imagine que tu as pensé à la solution d'objective-c avec des @. Cela enlève un niveau d'accolades supplémentaires. Pourquoi tu l'as écartée ?
> Cela donnerait pour la classe Point qq chose du genre
> 
> 
> @class Point
> - newDistanceFrom:aPoint
> {
>   ...
> }
> 
> + newDistanceFrom:aPoint
> {
>   ...
> }
> @end
> On 13 janv. 10, at 12:20, Philippe Mougin wrote:
>> 
>> Pour l'extension de classe dans F-Script, l'approche maintenant pressentie est celle d'une syntaxe spécifique. Par exemple, voici le code pour ajouter une méthode "print" à la classe NSObject (la classe racine sur Mac OS X):
>> 
>> NSObject
>> {
>> - print
>> {
>>   stdout print:self printString
>> }
>> }
>> 
>> 
>> Et pour reprendre ton exemple:
>> 
>> Point
>> {
>> - newDistanceFrom:aPoint
>> {
>>   ...
>> }
>> 
>> + newDistanceFrom:aPoint
>> {
>>   ...
>> }
>> }





Plus d'informations sur la liste de diffusion Squeak-fr