Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2011, 02h03   #1
Membre éclairé
 
Avatar de kimjoa
 
Inscription : février 2009
Messages : 318
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 318
Points : 360
Points : 360
Par défaut Un nouveau javascript?

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 :

Code :
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
 
}
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.

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 ....
kimjoa est déconnecté   Envoyer un message privé Réponse avec citation 31
Vieux 23/12/2011, 02h34   #2
Expert Confirmé
 
Avatar de emmanuel.remy
 
Emmanuel REMY
Inscription : novembre 2005
Messages : 2 844
Détails du profil
Informations personnelles :
Nom : Emmanuel REMY
Âge : 43

Informations forums :
Inscription : novembre 2005
Messages : 2 844
Points : 3 589
Points : 3 589
Par défaut Pourquoi ?

Salut,

Gros projet en perspective. Je suis d'accord pour dire que Javascript est loin d'être parfait... Mais pourquoi le complexifier ainsi ? Et pour quel résultat ? Du Java indigeste ?
Je trouve formidable que les langages comme Java ou C# proposent aujourd'hui des côtés dynamiques mais fortement typés (Groovy, Scala) alors pourquoi Javascript devrait il aller en sens inverse (encore une fois je suis concient que ce n'est pas parfait) ?
Code :
1
2
3
4
5
6
7
8
9
10
 
//c'est du C#, pas du javascript
var items = from item in cat
     where (item % 2 == 1)
     select item;
 
	foreach (var item in items)
	{
	    Console.WriteLine(item);
	}
Notons aussi que la dernière version de JS livrée avec Firefox supporte l'inférence de type, ce qui va se généraliser. Ensuite il existe aujourd'hui la possibilité de faire des packages (ou modules) simplement (il y a des articles sur le site) et des frameworks tels Dojo le proposent en standard. Idem pour l'héritage multiple.

Par contre je suis d'accord pour améliorer l'édition dans les IDE, même si là aussi de très gros progrès ont été réalisés, il suffit de voir IntelliJ Idea ou Webstorm de Jetbrains pour s'en convaincre.

Enfin, des outils comme CoffeeScript proposent des compléments à JS intéressants, et ne perdons pas de vue que Javascript est aussi apprécié par un nombre important d'"amateurs" qui le pratiquent en partie par copier-coller... Alors de là à ce qu'ils maitrisent la notion de génériques...

Bon courage pour ce projet. Bon dev.

ERE

PS: où en est DART de Google ? Un raz de marée ?
__________________
Quand une tête pense seule, elle devient folle.
emmanuel.remy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 04h22   #3
Membre éclairé
 
Avatar de kimjoa
 
Inscription : février 2009
Messages : 318
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 318
Points : 360
Points : 360
Par défaut parceque :)

Je suis d'accord avec toi sur le fait qu'il existe déjà de nombreuse alternative pour contourner les limites de javascript. Coffeescript, Haxe, GWT,...
une liste non exhaustive se trouve ici

Citation:
Je trouve formidable que les langages comme Java ou C# proposent aujourd'hui des côtés dynamiques mais fortement typés (Groovy, Scala)
J'aimerais beaucoup pouvoir développer en c# et surtout en scala. Ce sont d’excellent langage de haut niveaux, mais qui malheureusement ne sont pas actuellement adaptée à mes travaux, et surtout, pas adapté au web.
La compilation du java, du c#, et même depuis peux de scala, vers javascript n'est pas ce que l'on peux dire optimisé. Il faut voir le code source généré pour sans convaincre. Des milliers de ligne pour un simple hello world en Dart (affaire à voir dans quelque mois quand même .... Un exemple aussi révélateur de GWT illustre bien ces problèmes. Que ce soit dans les temps de compilation, ou des performances.
Ce sont des langages évolué , dans le sens ou ils fournissent des librairies et fonctionnalités standard très fournie, à l'inverse du javascript.

C'est pourquoi je pense qu'il ne faille pas partir de tels langage , bien que très attrayant comme un scala ou un c#, mais bien de juste faire évoluer le javascript.

Il ne s'agira pas des faire quelque chose de trop complexe. Introduire un typage optionnelle , des arguments nommés , avec valeur par défauts, et des générics, ne devrait pas nuire au performance en soi, mais beaucoup aider les développement lourd... Surtout en ce moment, de la mode du cloud, et de web applications.

Xtext permet tout ceci, c'est fonctionnalité sont impressionnante. Et sincèrement, depuis deux jours que je suis dessus, je suis convaincue du la faisabilité du projet.

J'en ai même plein la tête ! Étendre les css avec des variables et mixins, faire du fonctionnelle et de l'héritage multiple en java etc...Et surtout construire un vrai framework GUI via mes nouveaux langage web ....y'a du boulot !

Citation:
Par contre je suis d'accord pour améliorer l'édition dans les IDE
En faite c'est tout l’intérêt du projet...

Citation:
où en est DART de Google ? Un raz de marée ?
Pas de nouvelle depuis un moment , y'a eu des fuites qui les ont forcé à présenter leur langage, mais pour le moment beaucoup de chose manque. Ils se sont précipité... dommage , mais à suivre , pour sur !!
kimjoa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 12h57   #4
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 422
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 422
Points : 2 809
Points : 2 809
objective-J par exemple

franchement je ne vois absolument pas l'intérêt

le typage de JS est fonctionnel et souple. il offre comme la plus part des langage à typage faible la possibilité de vérifier les type effectif des objets.

je suis toujours étonné de voir ce genre de projet. à chaque fois
j'ai plus l'impression qu'il s'agit de volonté de se rapprocher d'un autre langage connu de l'initiateur du projet qu'une réelle réflexion sur le besoin.

je ne dis pas que c'est ton cas. mais j'ai toujours cette impression.
comme celle de vouloir faire de javascript un langage à base de classe. alors que la notion de prototype est très puissante et efficace dans un contexte de scripting.

écrire un DSL (Domain Spécific Language) est très facile avec les langage comme EcmaScript. du coup spécialiser le langage pour un besoin est très facile.

toute cette souplesse et la principale force du langage. son typage faible est pour moi un atout à exploiter et non une tare à corriger.

je développe aussi dans d'autres langages et quand je vois les contraintes et les centaines de lignes de code que je dois produire parfois car justement le typage fort est plus un problème qu'un bénéfice, je me dis qu'un typage faible est bien pratique.

un exemple pour illustrer mon propos
L'OASIS nous a pondu une norme SDO pour les objets destiné à transporter de l'info (en opposition aux classes qui contiennent de la logique applicative)
les implémentations de ces SDO sont des lib assez conséquentes.
en fait il s'agit simplement de définir des structures de données mais les contraintes des langages à typage fort impose de définition complexe.

Le typage faible de JS face à un tel besoin est une vrai bénédiction.
je dirais donc
explore bien tout ce qui se fait dans d'autre domaine, ne perds pas de vu le contexte dans lequel le langage est destiné à s'exécuter et bon courage.

A+JYT
sekaijin est actuellement connecté   Envoyer un message privé Réponse avec citation 30
Vieux 23/12/2011, 15h48   #5
Membre éclairé
 
Avatar de kimjoa
 
Inscription : février 2009
Messages : 318
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 318
Points : 360
Points : 360
Citation:
le typage de JS est fonctionnel et souple. il offre comme la plus part des langage à typage faible la possibilité de vérifier les type effectif des objets.
Ou bien sur, mais cette vérification ce fait au moment de l'interprétation. Avec tyage fort, l'ide le fait pour nous.

Citation:
je suis toujours étonné de voir ce genre de projet. à chaque fois
j'ai plus l'impression qu'il s'agit de volonté de se rapprocher d'un autre langage connu de l'initiateur du projet qu'une réelle réflexion sur le besoin.
Je ne peux pas vraiment dire le contraire, bien qu'étonnement mon langage préféré est le javascript . Plus sincèrement, je veux juste introduire un cadre de développement plus strique, et optionnelle.
Les deux forme de typage ont leurs atouts et leurs défauts , il ne s'agirait là que juste allier les deux.

J'aimerai aussi faire une approche à la ruby permettant de redéfinir ou ajouter des méthodes et attribues après leurs compilations , donnant un coté dynamique au système de classe ...

Citation:
je dirais donc
explore bien tout ce qui se fait dans d'autre domaine, ne perds pas de vu le contexte dans lequel le langage est destiné à s'exécuter et bon courage.
Je me suis intéressé à beaucoup de langage sans forcement les pratiquer, je manque sans doute de connaissance dans les paradigmes de programmation...
Concernant le contexte d’exécution, on le voit de plus en plus , la mode est au web application, au cloud.
Je suis actuellement en train de faire une application sur ext-js de taille moyenne, est un tel cadre de développement m'aurait vraiment aidé. Marre de jongler entre les fichiers pour me rappeler quels attributs sont allouer à tels méthodes, des fautes de frappe que nous fait perdre 15 minutes en débogage ect ...

Encore une fois , le but n'est pas de remplacer le système par prototype dynamique du javascript, mais juste de lui inclure un système par classe, optionnelle.

merci
kimjoa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 18h38   #6
Rédacteur
 
Avatar de danielhagnoul
 
Homme Daniel Hagnoul
Étudiant perpétuel
Inscription : février 2009
Messages : 3 221
Détails du profil
Informations personnelles :
Nom : Homme Daniel Hagnoul
Âge : 61
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant perpétuel
Secteur : Enseignement

Informations forums :
Inscription : février 2009
Messages : 3 221
Points : 6 767
Points : 6 767


Je ne suis pas un professionnel ni un spécialiste des langages, mais j'en ai déjà utilisé quelques-uns.

Pour les besoins courants du web, JS et jQuery me suffisent largement

Pour un programme plus élaboré, la nouvelle norme ES5.1, déjà largement exploitable sur Chrome et Firefox (je n'en suis qu'à explorer les possibilités), offre une notion objet nettement plus puissante et plus souple. On peut faire de la POO (héritage simple, public, privé, statique), avec une facilité dérisoire.

Pour un projet plus complexe, DART pourrait être une solution. Le langage évolue encore, mais avec Chrome et Dart Editor (http://www.dartlang.org/docs/technic...ex.html#editor) on peut déjà facilement tester des bouts de programme.

Mais si l'on devait abandonner le JS et révolutionner le web, je serais en faveur de Python sur le navigateur et sur le serveur.
__________________

FAQ jQuery

Mon cahier d’exercices sur jQuery & Co

Si un message vous a aidé ou vous semble pertinent, votez pour lui !
danielhagnoul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 11h55   #7
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 422
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 422
Points : 2 809
Points : 2 809
GWT est une approche qui peut t'intéresser

en effet tu écrit en java donc avec toutes les vérifs préliminaires de l'IDE et du Compilo.
et le compilateur te produit du javascript qui s'exécute sur le navigateur.

concernant ExtJS il y a aussi Ext GWT

dans le même ordre d'idée utiliser un langage plus strict pour produire du javascript il y a objective-J qui est un langage semblable à objective-c (proche de smalltalk) qui compilé donne du js


enfin tout comme tu l'envisage pour JS la fondation eclipse à démarré un projet basé sur Xtext visant à créer un nouveau langage réunissant les avantages de JS et de Java

le point de départ et à l'opposé du tien Java avec moins de bruit et plus de sucre
http://www.eclipse.org/Xtext/xtend/

A+JYT
sekaijin est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 13h09   #8
Expert Confirmé
 
Avatar de emmanuel.remy
 
Emmanuel REMY
Inscription : novembre 2005
Messages : 2 844
Détails du profil
Informations personnelles :
Nom : Emmanuel REMY
Âge : 43

Informations forums :
Inscription : novembre 2005
Messages : 2 844
Points : 3 589
Points : 3 589
Sympa l'info pour Xtent !

Mais sincèrement ça commence à me faire sourire tous ces langages du monde Java qui apparaissent ! C'est devenu une vraie mode depuis que Groovy a lancé le départ. Groovy, Scala, Phantom, JRuby, Clojure, Kotlin, Ceylon, Xtent, autant de bonnes initiatives mais sincèrement pour quel résultat dans le monde pro (malheureusement peut-être, mais la réalité du marché est aussi là pour en témoigner) ? Prenez les offres d'emploi des Jeudi ou de Monster et regardez... Combien d'offres pour Scala par exemple ? Et essayez de faire comprendre à un DSI que Clojure c'est génial

Evidemment on n'en serait pas là si Java avait su répondre rapidement à des besoins, mais quand même il ne serait pas très bon de reproduire la même chose en JS et commencer à segmenter de la même façon.

ERE
__________________
Quand une tête pense seule, elle devient folle.
emmanuel.remy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 18h14   #9
Membre éclairé
 
Avatar de kimjoa
 
Inscription : février 2009
Messages : 318
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : février 2009
Messages : 318
Points : 360
Points : 360
@danielhagnoul
Code :
Pour un programme plus élaboré, la nouvelle norme ES5.1, déjà largement exploitable sur Chrome et Firefox (je n'en suis qu'à explorer les possibilités), offre une notion objet nettement plus puissante et plus souple. On peut faire de la POO (héritage simple, public, privé, statique), avec une facilité dérisoire.
J'ai lu les spécification ES5.1, elle sont en effet très intéressante. Il est possible de "freezer"un objet, par exemple sur un prototype et sur un constructeur, pour se rapprocher d'un système par class, statique donc.
Les getters permettent aussi de simuler les système de visibilité des membres.
Mais sinon Javascript est déjà un langage orienté objet, mais bien différent que celui par class...

@sekaijin
Citation:
GWT est une approche qui peut t'intéresser ...
J'aurais peut être du esssayer en effet. Ca m'aurait évité quelques soucis on dira

Par contre pour objective-J , et si celui ci ressemble beaucoup à objective-c, j'ai même pas envie d'y jeter un oeil. Trop lourd , une syntaxe spéciale... Tout un langage à apprendre ...

Xtend à l'aire vraiment sympas. Je vais m'y pencher dessus sérieusement, histoire de lui piquer des idées
La syntaxe fait bizarrement penser à celle de xtext, et le nom aussi. Les deux doivent surement être liée...

@emmanuel.remy
Citation:
Prenez les offres d'emploi des Jeudi ou de Monster et regardez... Combien d'offres pour Scala par exemple ? Et essayez de faire comprendre à un DSI que Clojure c'est génial ...
C'est bien malheureux.Je serais dire pourquoi.... La peur du maintient du langage sur le long terme peux être.

@emmanuel.remy
Citation:
Evidemment on n'en serait pas là si Java avait su répondre rapidement à des besoins, mais quand même il ne serait pas très bon de reproduire la même chose en JS et commencer à segmenter de la même façon.
Après, bien sur , c'est à Oracle de réagir, et de faire évoluer java... Combien de temps à attendre encon pour voire des lambda , des mixins ou traits, l'inférence de type, et moins de verbosité.

Le javascript prend la même tournure, la liste que j'ai fournie au début de thread en est la preuve. Je pense pas que ce soit un mal , bien au contraire. D'ailleurs j'en serais pas là sinon ,)
kimjoa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h39.


 
 
 
 
Partenaires

Hébergement Web