Dans le même ordre d'idée, faudrait-il alors écrire
"int unsigned const i = 1;" ?
Dans le même ordre d'idée, faudrait-il alors écrire
"int unsigned const i = 1;" ?
Dans le même ordre d'idée, faudrait-il alors écrire
"int unsigned const i = 1;" ?
Samuel Krempp writes:
| > comme "unsigned int typedef size t" ?
| ça encore, on peut répondre que c'est particulier, typedef
Hmm. Donc vous avez la r gle compl tement fausse. La r gle g n ra le
est que les d clarations se lisent innermost to outermost .
que dire de
void (*f(int (&)[8]))(const int&)
?
Samuel Krempp <krempp@crans.truc.en.trop.ens-cachan.fr> writes:
| > comme "unsigned int typedef size t" ?
| ça encore, on peut répondre que c'est particulier, typedef
Hmm. Donc vous avez la r gle compl tement fausse. La r gle g n ra le
est que les d clarations se lisent innermost to outermost .
que dire de
void (*f(int (&)[8]))(const int&)
?
Samuel Krempp writes:
| > comme "unsigned int typedef size t" ?
| ça encore, on peut répondre que c'est particulier, typedef
Hmm. Donc vous avez la r gle compl tement fausse. La r gle g n ra le
est que les d clarations se lisent innermost to outermost .
que dire de
void (*f(int (&)[8]))(const int&)
?
Du point de vue de la grammaire, pourtant, « typedef » est un « storage
class specifier », exactement comme static ou extern. (De la grammaire
seulement ; nous savons tous qu'il a une autre sémantique.)
[...]
Parmi les « specifiers » en C++, on a :
[...]
cv qualifiers (const, volatile)
Dans le C++ réformé de mes fantasmes, on écrirait ça ainsi :
double(double)* f;
Moi, je préfèrerais :
function * f( d : inout double ) returns x : double ;
ou quelque chose de ce genre. Tant que faire. Mais alors, je ferais que
l'affectation soit une instruction, et non un opérateur, et je
supporterai les affectations multiples. Disons :
variable x : double ;
variable y : double ;
function f( a : in double )
returns x : double, y : double
{
x := 2 * a ;
y := 3 * a ;
}
x, y := y, x ; // Pas besoin d'une fonction swap.
x, y = f( x, y ) ;
M'enfin, je ne crois pas qu'un nom comme C++ conviendrait au
resultat:-).
De même pour les tableaux :
double[] da;
Tu n'aurais pas fait du Java ?
Pourquoi pas :
variable da : array [] of double ;
Une chose est certaine, si j'avais quelque chose à changer en C++, sans
tenir compte de l'histoire (et donc de la compatibilité C), je ferais
que les declarations commencent par un mot clé, pour qu'il ne puisse
jamais avoir d'ambigüité entre ce qui est une declaration et ce qui est
une expression. Parce que cette ambigüité, c'est vraiment ce qu'il y a
de pire en C++.
Et pour une fois, je ne crois pas que je suis un outsider dans mon point
de vue. Je crois qu'il y en a d'autres à qui la syntaxe actuelle des
declarations ne plaît pas particulièrement.
On abandonne donc la tradition du (et donc la compatibilité avec le)
C
Et voilà où le bat blesse. Au départ, c'est (en partie au moins) la
compatibilité C qui a assuré la réussite de C++. Et maintenant, c'est
la réussite (c-à-d la quantité de code existant) qui rend un
changement difficile --
rendre illégal quelque chose comme :
int i ;
n'est pas près à être adopté.
où la délaration singe l'usage. Ce qui permet de déclarer sans trop
se casser la tête un tableau de deux pointeurs constants sur des
fonctions qui prennent des doubles et renvoient des doubles :
double(double) * const [2] f_pt_a = { fptr1, fptr2 }; Je ne veux même
pas essayer de savoir comment on peut faire ça en C/C++...
typedef double (*PtrFnc)( double ) ;
PtrFnc const f_pt_a[] = { fptr1, fptr2 } ;
voire :
double (*const f_pt_a[ 2 ])( double ) = { fptr1, fptr2 } ;
C'est assez simple, en fait :
En revanche, ça montre une faille dans l'histoire de
typedef/post-position du const. Dans :
typedef double (MaClasse::*PtrMemFnc)( double ) ;
PtrMemFnc const f ;
c'est bien le pointeur qui est const, et non la fonction, ce qui serait
le cas si on écrivait :
double (MaClasse::*f)( double ) const ;
Mais dès que le nom de ce qu'on declare se trouve à l'intérieur de la
declaration, il faut un peu de vrai analyse. Typedef ou non.
Du point de vue de la grammaire, pourtant, « typedef » est un « storage
class specifier », exactement comme static ou extern. (De la grammaire
seulement ; nous savons tous qu'il a une autre sémantique.)
[...]
Parmi les « specifiers » en C++, on a :
[...]
cv qualifiers (const, volatile)
Dans le C++ réformé de mes fantasmes, on écrirait ça ainsi :
double(double)* f;
Moi, je préfèrerais :
function * f( d : inout double ) returns x : double ;
ou quelque chose de ce genre. Tant que faire. Mais alors, je ferais que
l'affectation soit une instruction, et non un opérateur, et je
supporterai les affectations multiples. Disons :
variable x : double ;
variable y : double ;
function f( a : in double )
returns x : double, y : double
{
x := 2 * a ;
y := 3 * a ;
}
x, y := y, x ; // Pas besoin d'une fonction swap.
x, y = f( x, y ) ;
M'enfin, je ne crois pas qu'un nom comme C++ conviendrait au
resultat:-).
De même pour les tableaux :
double[] da;
Tu n'aurais pas fait du Java ?
Pourquoi pas :
variable da : array [] of double ;
Une chose est certaine, si j'avais quelque chose à changer en C++, sans
tenir compte de l'histoire (et donc de la compatibilité C), je ferais
que les declarations commencent par un mot clé, pour qu'il ne puisse
jamais avoir d'ambigüité entre ce qui est une declaration et ce qui est
une expression. Parce que cette ambigüité, c'est vraiment ce qu'il y a
de pire en C++.
Et pour une fois, je ne crois pas que je suis un outsider dans mon point
de vue. Je crois qu'il y en a d'autres à qui la syntaxe actuelle des
declarations ne plaît pas particulièrement.
On abandonne donc la tradition du (et donc la compatibilité avec le)
C
Et voilà où le bat blesse. Au départ, c'est (en partie au moins) la
compatibilité C qui a assuré la réussite de C++. Et maintenant, c'est
la réussite (c-à-d la quantité de code existant) qui rend un
changement difficile --
rendre illégal quelque chose comme :
int i ;
n'est pas près à être adopté.
où la délaration singe l'usage. Ce qui permet de déclarer sans trop
se casser la tête un tableau de deux pointeurs constants sur des
fonctions qui prennent des doubles et renvoient des doubles :
double(double) * const [2] f_pt_a = { fptr1, fptr2 }; Je ne veux même
pas essayer de savoir comment on peut faire ça en C/C++...
typedef double (*PtrFnc)( double ) ;
PtrFnc const f_pt_a[] = { fptr1, fptr2 } ;
voire :
double (*const f_pt_a[ 2 ])( double ) = { fptr1, fptr2 } ;
C'est assez simple, en fait :
En revanche, ça montre une faille dans l'histoire de
typedef/post-position du const. Dans :
typedef double (MaClasse::*PtrMemFnc)( double ) ;
PtrMemFnc const f ;
c'est bien le pointeur qui est const, et non la fonction, ce qui serait
le cas si on écrivait :
double (MaClasse::*f)( double ) const ;
Mais dès que le nom de ce qu'on declare se trouve à l'intérieur de la
declaration, il faut un peu de vrai analyse. Typedef ou non.
Du point de vue de la grammaire, pourtant, « typedef » est un « storage
class specifier », exactement comme static ou extern. (De la grammaire
seulement ; nous savons tous qu'il a une autre sémantique.)
[...]
Parmi les « specifiers » en C++, on a :
[...]
cv qualifiers (const, volatile)
Dans le C++ réformé de mes fantasmes, on écrirait ça ainsi :
double(double)* f;
Moi, je préfèrerais :
function * f( d : inout double ) returns x : double ;
ou quelque chose de ce genre. Tant que faire. Mais alors, je ferais que
l'affectation soit une instruction, et non un opérateur, et je
supporterai les affectations multiples. Disons :
variable x : double ;
variable y : double ;
function f( a : in double )
returns x : double, y : double
{
x := 2 * a ;
y := 3 * a ;
}
x, y := y, x ; // Pas besoin d'une fonction swap.
x, y = f( x, y ) ;
M'enfin, je ne crois pas qu'un nom comme C++ conviendrait au
resultat:-).
De même pour les tableaux :
double[] da;
Tu n'aurais pas fait du Java ?
Pourquoi pas :
variable da : array [] of double ;
Une chose est certaine, si j'avais quelque chose à changer en C++, sans
tenir compte de l'histoire (et donc de la compatibilité C), je ferais
que les declarations commencent par un mot clé, pour qu'il ne puisse
jamais avoir d'ambigüité entre ce qui est une declaration et ce qui est
une expression. Parce que cette ambigüité, c'est vraiment ce qu'il y a
de pire en C++.
Et pour une fois, je ne crois pas que je suis un outsider dans mon point
de vue. Je crois qu'il y en a d'autres à qui la syntaxe actuelle des
declarations ne plaît pas particulièrement.
On abandonne donc la tradition du (et donc la compatibilité avec le)
C
Et voilà où le bat blesse. Au départ, c'est (en partie au moins) la
compatibilité C qui a assuré la réussite de C++. Et maintenant, c'est
la réussite (c-à-d la quantité de code existant) qui rend un
changement difficile --
rendre illégal quelque chose comme :
int i ;
n'est pas près à être adopté.
où la délaration singe l'usage. Ce qui permet de déclarer sans trop
se casser la tête un tableau de deux pointeurs constants sur des
fonctions qui prennent des doubles et renvoient des doubles :
double(double) * const [2] f_pt_a = { fptr1, fptr2 }; Je ne veux même
pas essayer de savoir comment on peut faire ça en C/C++...
typedef double (*PtrFnc)( double ) ;
PtrFnc const f_pt_a[] = { fptr1, fptr2 } ;
voire :
double (*const f_pt_a[ 2 ])( double ) = { fptr1, fptr2 } ;
C'est assez simple, en fait :
En revanche, ça montre une faille dans l'histoire de
typedef/post-position du const. Dans :
typedef double (MaClasse::*PtrMemFnc)( double ) ;
PtrMemFnc const f ;
c'est bien le pointeur qui est const, et non la fonction, ce qui serait
le cas si on écrivait :
double (MaClasse::*f)( double ) const ;
Mais dès que le nom de ce qu'on declare se trouve à l'intérieur de la
declaration, il faut un peu de vrai analyse. Typedef ou non.
On Tue, 23 Sep 2003 09:08:58 -0700, kanze wrote:Du point de vue de la grammaire, pourtant, « typedef » est un «
storage class specifier », exactement comme static ou extern. (De la
grammaire seulement ; nous savons tous qu'il a une autre
sémantique.)
[...]
Parmi les « specifiers » en C++, on a :
Merci pour toutes ces précisions. Je devrais sans doute lire les
normes plus souvent...[...]
cv qualifiers (const, volatile)
Pourquoi « cv » ? Est-ce un nom ad hoc pour regrouper const et
volatile, formé par leurs initiales ?
Dans le C++ réformé de mes fantasmes, on écrirait ça ainsi :
double(double)* f;
Moi, je préfèrerais :
function * f( d : inout double ) returns x : double ;
ou quelque chose de ce genre. Tant que faire. Mais alors, je ferais
que l'affectation soit une instruction, et non un opérateur, et je
supporterai les affectations multiples. Disons :
variable x : double ;
variable y : double ;
function f( a : in double )
returns x : double, y : double
{
x := 2 * a ;
y := 3 * a ;
}
x, y := y, x ; // Pas besoin d'une fonction swap.
x, y = f( x, y ) ;
M'enfin, je ne crois pas qu'un nom comme C++ conviendrait au
resultat:-).
Effectivement, il faudrait mieux l'appeler Pascal/Ada++. Sans doute la
jeunesse qui refait surface ^_^.
Mon idée (sans doute idiote) est en fait de garder le plus possible ce
qui fait la saveur de la syntaxe du C/C++ et sa brièveté, c'est-à-dire
les accolades,
le = pour l'affectation,
le type avant la variable,
etc. En revanche, j'aime bien l'idée de l'affectation multiple, la
virgule servirait alors de constructeur de tuples.
On pourrait alors avoir des déclaration de fonctions comme ceci :
int, int (int, int) eucldiv;
Maintenant, il faudrait trouver une syntaxe agréable pour la
définition de la fonction. (Comment placer les paramètres formels
?...)
De même pour les tableaux :
double[] da;
Tu n'aurais pas fait du Java ?
En fait, non. Je me disais bien que cette syntaxe me rappelait quelque
chose.Pourquoi pas :
variable da : array [] of double ;
Plus de trente lettres contre une douzaine...
C'est sûr que l'information est mieux mise en évidence, mais c'est un
exemple de verbosité que les tenants de la syntaxe C/C++ ont toujours
rejeté, non ?
Une chose est certaine, si j'avais quelque chose à changer en C++,
sans tenir compte de l'histoire (et donc de la compatibilité C), je
ferais que les declarations commencent par un mot clé, pour qu'il ne
puisse jamais avoir d'ambigüité entre ce qui est une declaration et
ce qui est une expression. Parce que cette ambigüité, c'est vraiment
ce qu'il y a de pire en C++.
Certes, mais je ne pense pas qu'il y ait besoin pour cela de
mots-clés.
Et pour une fois, je ne crois pas que je suis un outsider dans mon
point de vue. Je crois qu'il y en a d'autres à qui la syntaxe
actuelle des declarations ne plaît pas particulièrement.
Des noms !
On abandonne donc la tradition du (et donc la compatibilité avec
le) C
Et voilà où le bat blesse. Au départ, c'est (en partie au moins) la
compatibilité C qui a assuré la réussite de C++. Et maintenant,
c'est la réussite (c-à-d la quantité de code existant) qui rend un
changement difficile --
Disons qu'avec ce genre d'argument, aucune réforme ne serait jamais
entreprise, car il y a toujours un existant à préserver.
C'est d'ailleurs un existant précédent qui avait justifié le choix de
la compatibilité avec le C.
Quoiqu'il en soit, dans le cas qui nous occupe, la philosophie du
«@aussi proche que possible du C, mais pas trop » est ce qui a fait
l'esprit et le succès du C++. Ceux qui ne sont pas d'accord peuvent
aller apprendre un des nombreux autres langages existant fondé sur une
autre approche.
On Tue, 23 Sep 2003 09:08:58 -0700, kanze wrote:
Du point de vue de la grammaire, pourtant, « typedef » est un «
storage class specifier », exactement comme static ou extern. (De la
grammaire seulement ; nous savons tous qu'il a une autre
sémantique.)
[...]
Parmi les « specifiers » en C++, on a :
Merci pour toutes ces précisions. Je devrais sans doute lire les
normes plus souvent...
[...]
cv qualifiers (const, volatile)
Pourquoi « cv » ? Est-ce un nom ad hoc pour regrouper const et
volatile, formé par leurs initiales ?
Dans le C++ réformé de mes fantasmes, on écrirait ça ainsi :
double(double)* f;
Moi, je préfèrerais :
function * f( d : inout double ) returns x : double ;
ou quelque chose de ce genre. Tant que faire. Mais alors, je ferais
que l'affectation soit une instruction, et non un opérateur, et je
supporterai les affectations multiples. Disons :
variable x : double ;
variable y : double ;
function f( a : in double )
returns x : double, y : double
{
x := 2 * a ;
y := 3 * a ;
}
x, y := y, x ; // Pas besoin d'une fonction swap.
x, y = f( x, y ) ;
M'enfin, je ne crois pas qu'un nom comme C++ conviendrait au
resultat:-).
Effectivement, il faudrait mieux l'appeler Pascal/Ada++. Sans doute la
jeunesse qui refait surface ^_^.
Mon idée (sans doute idiote) est en fait de garder le plus possible ce
qui fait la saveur de la syntaxe du C/C++ et sa brièveté, c'est-à-dire
les accolades,
le = pour l'affectation,
le type avant la variable,
etc. En revanche, j'aime bien l'idée de l'affectation multiple, la
virgule servirait alors de constructeur de tuples.
On pourrait alors avoir des déclaration de fonctions comme ceci :
int, int (int, int) eucldiv;
Maintenant, il faudrait trouver une syntaxe agréable pour la
définition de la fonction. (Comment placer les paramètres formels
?...)
De même pour les tableaux :
double[] da;
Tu n'aurais pas fait du Java ?
En fait, non. Je me disais bien que cette syntaxe me rappelait quelque
chose.
Pourquoi pas :
variable da : array [] of double ;
Plus de trente lettres contre une douzaine...
C'est sûr que l'information est mieux mise en évidence, mais c'est un
exemple de verbosité que les tenants de la syntaxe C/C++ ont toujours
rejeté, non ?
Une chose est certaine, si j'avais quelque chose à changer en C++,
sans tenir compte de l'histoire (et donc de la compatibilité C), je
ferais que les declarations commencent par un mot clé, pour qu'il ne
puisse jamais avoir d'ambigüité entre ce qui est une declaration et
ce qui est une expression. Parce que cette ambigüité, c'est vraiment
ce qu'il y a de pire en C++.
Certes, mais je ne pense pas qu'il y ait besoin pour cela de
mots-clés.
Et pour une fois, je ne crois pas que je suis un outsider dans mon
point de vue. Je crois qu'il y en a d'autres à qui la syntaxe
actuelle des declarations ne plaît pas particulièrement.
Des noms !
On abandonne donc la tradition du (et donc la compatibilité avec
le) C
Et voilà où le bat blesse. Au départ, c'est (en partie au moins) la
compatibilité C qui a assuré la réussite de C++. Et maintenant,
c'est la réussite (c-à-d la quantité de code existant) qui rend un
changement difficile --
Disons qu'avec ce genre d'argument, aucune réforme ne serait jamais
entreprise, car il y a toujours un existant à préserver.
C'est d'ailleurs un existant précédent qui avait justifié le choix de
la compatibilité avec le C.
Quoiqu'il en soit, dans le cas qui nous occupe, la philosophie du
«@aussi proche que possible du C, mais pas trop » est ce qui a fait
l'esprit et le succès du C++. Ceux qui ne sont pas d'accord peuvent
aller apprendre un des nombreux autres langages existant fondé sur une
autre approche.
On Tue, 23 Sep 2003 09:08:58 -0700, kanze wrote:Du point de vue de la grammaire, pourtant, « typedef » est un «
storage class specifier », exactement comme static ou extern. (De la
grammaire seulement ; nous savons tous qu'il a une autre
sémantique.)
[...]
Parmi les « specifiers » en C++, on a :
Merci pour toutes ces précisions. Je devrais sans doute lire les
normes plus souvent...[...]
cv qualifiers (const, volatile)
Pourquoi « cv » ? Est-ce un nom ad hoc pour regrouper const et
volatile, formé par leurs initiales ?
Dans le C++ réformé de mes fantasmes, on écrirait ça ainsi :
double(double)* f;
Moi, je préfèrerais :
function * f( d : inout double ) returns x : double ;
ou quelque chose de ce genre. Tant que faire. Mais alors, je ferais
que l'affectation soit une instruction, et non un opérateur, et je
supporterai les affectations multiples. Disons :
variable x : double ;
variable y : double ;
function f( a : in double )
returns x : double, y : double
{
x := 2 * a ;
y := 3 * a ;
}
x, y := y, x ; // Pas besoin d'une fonction swap.
x, y = f( x, y ) ;
M'enfin, je ne crois pas qu'un nom comme C++ conviendrait au
resultat:-).
Effectivement, il faudrait mieux l'appeler Pascal/Ada++. Sans doute la
jeunesse qui refait surface ^_^.
Mon idée (sans doute idiote) est en fait de garder le plus possible ce
qui fait la saveur de la syntaxe du C/C++ et sa brièveté, c'est-à-dire
les accolades,
le = pour l'affectation,
le type avant la variable,
etc. En revanche, j'aime bien l'idée de l'affectation multiple, la
virgule servirait alors de constructeur de tuples.
On pourrait alors avoir des déclaration de fonctions comme ceci :
int, int (int, int) eucldiv;
Maintenant, il faudrait trouver une syntaxe agréable pour la
définition de la fonction. (Comment placer les paramètres formels
?...)
De même pour les tableaux :
double[] da;
Tu n'aurais pas fait du Java ?
En fait, non. Je me disais bien que cette syntaxe me rappelait quelque
chose.Pourquoi pas :
variable da : array [] of double ;
Plus de trente lettres contre une douzaine...
C'est sûr que l'information est mieux mise en évidence, mais c'est un
exemple de verbosité que les tenants de la syntaxe C/C++ ont toujours
rejeté, non ?
Une chose est certaine, si j'avais quelque chose à changer en C++,
sans tenir compte de l'histoire (et donc de la compatibilité C), je
ferais que les declarations commencent par un mot clé, pour qu'il ne
puisse jamais avoir d'ambigüité entre ce qui est une declaration et
ce qui est une expression. Parce que cette ambigüité, c'est vraiment
ce qu'il y a de pire en C++.
Certes, mais je ne pense pas qu'il y ait besoin pour cela de
mots-clés.
Et pour une fois, je ne crois pas que je suis un outsider dans mon
point de vue. Je crois qu'il y en a d'autres à qui la syntaxe
actuelle des declarations ne plaît pas particulièrement.
Des noms !
On abandonne donc la tradition du (et donc la compatibilité avec
le) C
Et voilà où le bat blesse. Au départ, c'est (en partie au moins) la
compatibilité C qui a assuré la réussite de C++. Et maintenant,
c'est la réussite (c-à-d la quantité de code existant) qui rend un
changement difficile --
Disons qu'avec ce genre d'argument, aucune réforme ne serait jamais
entreprise, car il y a toujours un existant à préserver.
C'est d'ailleurs un existant précédent qui avait justifié le choix de
la compatibilité avec le C.
Quoiqu'il en soit, dans le cas qui nous occupe, la philosophie du
«@aussi proche que possible du C, mais pas trop » est ce qui a fait
l'esprit et le succès du C++. Ceux qui ne sont pas d'accord peuvent
aller apprendre un des nombreux autres langages existant fondé sur une
autre approche.
| En fait, il serait souhaitable que le type d'instruction soit
| reconnaissable du premier token, ou au moins, à partir d'un nombre fini
| de tokens au début de l'instruction.
c'est le cas en C++ <g>.
| Sinon, il faut du backtracking dans le parser, et ça pose
| également des problèmes d'ambigüité pour les hommes.
|
| Évidemment, on pourrait considérer quelque chose du genre :
| var int x ;
c'est vrai que les gens aiment les mot clés pour faire des greps.
i : int
ne nécessite comme mot-clé que « : ». Mais il y a fort à parier qu'il
servira déjà de séparateur/ponctuateur.
Oh, j'irai même à proposer le lispesque
:i int;
ou [:i int] ou [i : int]
[...]
| Il ne faut pas oublier non plus que pour peu qu'on sait tapper (ce que
| doit savoir tout programmeur), on tappe des lettres jusqu'à dix fois
| plus vite que les caractères spéciaux. Je sais qu'il me faut moins de
| temps à tapper « begin » que de tapper un « { ». Et je parle encore d'un
tout programmeur C++ digne de ce nom sait taper { 20 fois plus que que
begin. <g>
| En fait, il serait souhaitable que le type d'instruction soit
| reconnaissable du premier token, ou au moins, à partir d'un nombre fini
| de tokens au début de l'instruction.
c'est le cas en C++ <g>.
| Sinon, il faut du backtracking dans le parser, et ça pose
| également des problèmes d'ambigüité pour les hommes.
|
| Évidemment, on pourrait considérer quelque chose du genre :
| var int x ;
c'est vrai que les gens aiment les mot clés pour faire des greps.
i : int
ne nécessite comme mot-clé que « : ». Mais il y a fort à parier qu'il
servira déjà de séparateur/ponctuateur.
Oh, j'irai même à proposer le lispesque
:i int;
ou [:i int] ou [i : int]
[...]
| Il ne faut pas oublier non plus que pour peu qu'on sait tapper (ce que
| doit savoir tout programmeur), on tappe des lettres jusqu'à dix fois
| plus vite que les caractères spéciaux. Je sais qu'il me faut moins de
| temps à tapper « begin » que de tapper un « { ». Et je parle encore d'un
tout programmeur C++ digne de ce nom sait taper { 20 fois plus que que
begin. <g>
| En fait, il serait souhaitable que le type d'instruction soit
| reconnaissable du premier token, ou au moins, à partir d'un nombre fini
| de tokens au début de l'instruction.
c'est le cas en C++ <g>.
| Sinon, il faut du backtracking dans le parser, et ça pose
| également des problèmes d'ambigüité pour les hommes.
|
| Évidemment, on pourrait considérer quelque chose du genre :
| var int x ;
c'est vrai que les gens aiment les mot clés pour faire des greps.
i : int
ne nécessite comme mot-clé que « : ». Mais il y a fort à parier qu'il
servira déjà de séparateur/ponctuateur.
Oh, j'irai même à proposer le lispesque
:i int;
ou [:i int] ou [i : int]
[...]
| Il ne faut pas oublier non plus que pour peu qu'on sait tapper (ce que
| doit savoir tout programmeur), on tappe des lettres jusqu'à dix fois
| plus vite que les caractères spéciaux. Je sais qu'il me faut moins de
| temps à tapper « begin » que de tapper un « { ». Et je parle encore d'un
tout programmeur C++ digne de ce nom sait taper { 20 fois plus que que
begin. <g>