IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Un nouveau javascript?


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    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 : 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
     
    }
    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 ....

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    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

    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 !

    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...

    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 !!

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    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.

    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 ...

    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

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut


    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.

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    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

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 354
    Points : 491
    Points
    491
    Par défaut
    @danielhagnoul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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
    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
    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 ,)

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/06/2009, 00h49
  2. FCKeditor: ajout nouveau bouton javascript
    Par Norhan05 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 18/06/2009, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo