Depuis un moment d�j�, j'aimerais faire �voluer le javascript.
Javascript est un bon langage , son cot� fonctionnelle par exemple est excellent, mais il manque de rigueur via notamment un typage fort
Le principe serait donc de garder le mod�le � prototype dynamique , mais aussi d'inclure un syst�me de classe a h�ritage multiple, permettant le refactoring, l�auto-compl�tion, et l'aide � la programmation et au d�bogage via un IDE.Des valeurs par d�fauts pour les arguments aussi , et pourquoi pas du sucre syntaxique comme on peux le voir en phyton ou ruby par exemple.
Le langage serait donc une surcouche au javascript, sa compilation devrait donc �tre ais�.
La compilation ne devrait pas tant prendre en compte la visibilit�s des membres (public, private , protected ... ), mais bien de se servir de se nouveau langage pour am�liorer ses d�veloppements via l'ide, sans trop att�nuer les performances.
Bien sur il faudrait une gestion de package, modules , ou l'on puisse identifi� qu'elle seront les membre exportable.
Et pourquoi pas inclure les g�n�riques ...
un exemple de se nouveau langage pourrait �tre :
La red�finition d'un membre avec la m�me signature, ou l'ajout de nouveau membres d'une classes ou module pourrait logiquement se faire sans perturber le travaille de l'ide.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 //un fichier est en faite un module et un package //si celui ci est inclue dans le package org.jo.malibrairie //et que ce fichier se nomme Utils, //toute les variable publique du fichier apparaîtront dans l'espace de nom org.jo.malibrairie.Utils //une gestion des importation est nécessaire const maLibrairie = import org.jo.maLibrairie; //des variable et constante typé public ou privé public var String:maString = "une string"; private const Number:monNombre = 10; public var RegExp:maRegExp= /^[a-z]#/; //et des générics var Array<String> = ["a", "b", "c"]; //des variable dynamique var maVarDynamic = {}; //des fonctions typé public public function Number:test(Number:a=5, Number:b=15){ return a + b; } //des fonctions non typé privé private function test2(a, b){ return a + b; } //une classe public public class Test { //constructeur public constructor(Integer:a, Integer:b){ var Integer:c = a + b; } // variable typé public String:maString; // variable non typé protected Dynamic = {}; //methode typé public function void:concat(String:a="hello", String:b="world"){ this.maString = a + b } //methode non typé private function doWhat(a = {}, b = 10){ ... } //methode non typé, mais arguments typé , dont une fonction private function doWhatThat(Function(Number:a)->Number:a = function(a){return a}, Number:b = 10){ ... } } //une classe abstraite private abstract class Test2 { public abstract function Number:test(Number:a=5, Number:b=15); protected function String:test(String:a, String:b){ return a + b; } } //une classe multi hérité public class Test3 extends Test as Test , Test2 as Test2, maLibrairie.Test3 as Test3 { public constructor(Integer:a, Integer:b){ .... super.Test(a, b); .... super.Test3(); } //implémente la methode de Test2:test2 public function Number:test(Number:a=5, Number:b=15){ return a+b; } public function Number:test2(Number:a=5, Number:b=15){ ... return super.Test3.test(a, b), } //en cas de conflie d'héritage, la fonction teste pouvant hérité de Test et Test3 , alors on la définit comme telle //sinon l'ordre de définition des classe étendue prendera le dessus test -> Test3 }
C'est bien sur un projet tr�s tr�s tr�s ambitieux. Comme je l'ai dis la partie compilation ne pause pas de probl�me, mais celle de l'int�gration dans un IDE , beaucoup plus.
Ce projet n'est qu'une �bauche, et je cherche des gens pour m'aider, et ou, proposer de nouvelle id�es.
Je sais qu'il existe d�j� certain projet de ce type, mais peux me satisfont vraiment. Notamment � cause de l�h�ritage multiple.
Ce projet m'est venue gr�ce au projet xtext, un plugin d'eclipse, qui permet de facilement (tout est relatif ) d�velopper ce genre de langage.
Un article d'introduction � �t� d�pos� sur dvp icihttp://gkemayo.developpez.com/eclipse/intro-xtext/
J'esp�re que certains d'entre vous seront int�rr�ss�... il me faudra des mois voir des ann�es pour aboutir � un tel projet, si je ne l'abandonne pas, malgr�s qu'il me tiens � coeur. Alors si vous vous sentez pret ....![]()
Partager