Journal Bellard strikes again: QuickJs, un moteur JavaScript

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
55
13
juil.
2019

Fabrice Bellard récidive, cette fois ci avec un moteur JavaScript qui a l'air plutôt complet et supportant les dernières versions de la norme.

Son nom est QuickJs.

https://bellard.org/quickjs/

J'adore les moteurs JavaScript que l'on peut enfouir dans un exécutable C++, cela permet d'ajouter une couche scriptable à une application. J'utilise depuis longtemps Duktape, une perle, qui me permet même de gagner des sous.

A tester et benchmarker, ce que je compte faire la semaine prochaine si j'ai le temps.

  • # Oh purée…

    Posté par  (site web personnel) . Évalué à 5.

    On va pouvoir virer NodeJS et compiler en natif ?

    • [^] # Re: Oh purée…

      Posté par  . Évalué à 5.

      Heu non, à priori c'est "juste" un moteur JS que tu peux embarquer comme il en existe déjà, ça transforme pas le JS en exécutable

      • [^] # Re: Oh purée…

        Posté par  (site web personnel, Mastodon) . Évalué à 4.

        Pourtant je vois ça dans la liste des fonctionalités:
        "Can compile Javascript sources to executables with no external dependency."

        Mais ça ne fait pas tout pour node.js, il faut aussi avoir des bindings vers les APIs natives pour tout un tas de trucs.

        • [^] # Re: Oh purée…

          Posté par  . Évalué à 4.

          Potentiellement il « suffit » de compiler l’interpréteur et de mettre le code js dans les données du binaire pour faire un exécutable autosuffisant. Effectivement par contre ça ne mérite pas nécessairement le qualificatif de « compilé » pour le code js.

    • [^] # Re: Oh purée…

      Posté par  (site web personnel) . Évalué à 4.

      NodeJS n'est pas qu'un moteur d'exécution JavaScript donc non.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 4.

      Ce commentaire a été supprimé par l’équipe de modération.

  • # Lua ?

    Posté par  . Évalué à 10. Dernière modification le 15 juillet 2019 à 00:48.

    cela permet d'ajouter une couche scriptable à une application.

    S'il n'y a pas d'obligation de réutiliser du code ou des libs js existants, pourquoi choisir JavaScript et pas un autre langage comme Lua ?
    (C'est une vraie question. Je ne suis pas un grand programmeur, mais de loin il me semble que Lua présente à peu près les mêmes caractéristiques de légèreté que les projets présentés dans ce journal, que ses performances sont très honorables avec luajit, et que le langage lui-même ne se traine pas les tares historiques de js…)

    • [^] # Re: Lua ?

      Posté par  . Évalué à 9.

      Il doit y avoir des dizaines ou des centaines de milliers de fois plus de gens qui connaissent un peu de javascript qu'un peu de lua…

      • [^] # Re: Lua ?

        Posté par  (site web personnel, Mastodon) . Évalué à 1.

        Oui mais d'un point de vue perf tu y gagne avec Lua. Et Lua est un langage assez simple et relativement connu surtout dans le scripting pour jeu.

        Après tout est une questions de compromis et de besoins.

        Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

        • [^] # Re: Lua ?

          Posté par  (site web personnel) . Évalué à 9. Dernière modification le 09 août 2019 à 16:26.

          Dès que l'on creuse un peu, lua n'est pas du tout simple avec ses tables et ses métatables…

          Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

          • [^] # Re: Lua ?

            Posté par  . Évalué à 3.

            Entièrement d'accord. Quiconque a joué avec les tables, s'est obligatoirement arraché quelques cheveux ;)
            C'est assez bien expliqué ici : https://julien.danjou.info/why-not-lua/

            • [^] # Re: Lua ?

              Posté par  . Évalué à 1.

              Quiconque a joué avec les tables, s'est obligatoirement arraché quelques cheveux ;)

              Euh… non! :-D

              J'ajouterais que si tu piges C++ et Python, Lua n'est qu'une formalité.

        • [^] # Re: Lua ?

          Posté par  (site web personnel) . Évalué à 10.

          Oui mais d'un point de vue perf tu y gagne avec Lua.

          LuaJIT oui, Lua pur non.

          Et Lua est un langage assez simple et relativement connu surtout dans le scripting pour jeu.

          C'est un langage simple mais pas spécialement agréable à utiliser pour l'avoir mis dans mes applications. Comparé au Javascript moderne :

          • Pas de support complet de l'unicode (ormis 2-3 fonctions anémiques) ;
          • Orienté objet pénible ;
          • Aucune rétrocompatibilité garantie (et les 3 auteurs ne se retiennent pas à casser plein de choses d'une version à l'autre) ;
          • Pas de continue mais break et goto existent ;
          • Les tableaux commencent à 1 (oui on peut les faire commencer à 0 mais les fonctions standard ne les fonctionneront pas bien avec) ;
          • Syntaxe non égal(e) bizarre ~= ;
          • Les tableau et maps sont le même objet et ça pose pas mal de problèmes et d'incompréhensions ;
          • Expressions régulières maison largement inférieures.

          Et à côté de ça : l'API C est aussi régulièrement cassée d'une version à l'autre rendant tous les modules externes quasiment toujours obsolètes. Un module phare a été longtemps inutilisable en Lua 5.3 : LuaSocket.

          Pour ma part, j'ai fini avec ce langage :)

          git is great because linus did it, mercurial is better because he didn't

        • [^] # Re: Lua ?

          Posté par  . Évalué à 4.

          Un truc que je déteste dans Lua ce sont les index qui commence à 1, dans un langage spécialisé pour les math comme Julia ça peut se défendre, mais dans un langage utilisé en complément du C,C++, c'est vraiment du n'importe quoi.

          • [^] # Re: Lua ?

            Posté par  . Évalué à 4.

            Moi c’est une friture que j’aime bien, c’est plus naturel à interfacer avec mon code Fortran :-)

            Chacun complémente le langage qu’il veut.

    • [^] # Re: Lua ?

      Posté par  (site web personnel) . Évalué à 10.

      Alors oui Lua est une solution tout à fait valable à ce genre de pratiques. Je l'ai fait dans le passé, avant que des moteurs JS à peu près corrects n'existent.

      Sauf que je partage aussi mes algorithmes avec le monde Web. Donc voilà pourquoi j'ai basculé en JS ; l'autre raison que j'ai rencontrée c'est effectivement que beaucoup de monde sait faire du JS.

      • [^] # Re: Lua ?

        Posté par  . Évalué à 5.

        C'est rigolo… L'auteur du logiciel explique un choix et une personne a considéré cela comme "non pertinnent" par rapport au sujet (le logiciel en question) du journal.

        • [^] # Re: Lua ?

          Posté par  . Évalué à 3.

          Je crois que c'est plus l'auteur du journal que l'auteur du logiciel (ce qui ne veut pas dire que le commentaire n'est pas pertinent pour autant…)

          « Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher

    • [^] # Re: Lua ?

      Posté par  . Évalué à 2.

      et que le langage lui-même ne se traine pas les tares historiques de js…

      Enfin Lua traine quand même ses propres tares … On parle quand même d'un langage qui a décidé que ça serait rigolo de ne faire comme personne d'autre et de commencer ses tableaux à l'index 1 …

      C'est d'ailleurs loin d'être le seul point de friction avec lua, mais comme ça fait 5 ans que je n'ai pas eu à y toucher je n'en ai pas mémorisé beaucoup.

      • [^] # Re: Lua ?

        Posté par  (Mastodon) . Évalué à 4.

        ça serait rigolo de ne faire comme personne d'autre et de commencer ses tableaux à l'index 1 …

        C'est triste ton avis sur le FORTRAN.

  • # But ?

    Posté par  (site web personnel) . Évalué à 3.

    Y a-t-il un but particulier derrière l'écriture de ce nouveau moteur ?
    « pour le fun » est bien sûr une réponse valable, mais peut-être y a-t-il d'autres raisons (je ne connais pas nodejs, mais il a sûrement certains défauts).

    • [^] # Re: But ?

      Posté par  (site web personnel, Mastodon) . Évalué à 4.

      QuickJS n'est pas en "concurence" avec NodeJS (V8 de Google) ou le moteur Javascript de Mozilla Firefox. Ces derniers sont de lourds et gros moteur utile quand on a besoin de grosses performances mais aussi quand on dispose d'assez de RAM/CPU et de place pour un gros exécutable.
      QuickJS est plus à comparer avec des petits moteur JS, ils sont léger et rapide sur de petits programmes, avec une consommation RAM limitée, ils sont plus destinés a de l'embarqué pour ajouter une fonctionnalité JS a un petit programme.

      Ca me fait penser au moteur Hermes de Facebook qui a encore une autre visée.

      Sous licence Creative common. Lisez, copiez, modifiez faites en ce que vous voulez.

  • # Inception

    Posté par  . Évalué à 6.

    An online demonstration of the QuickJS engine with its mathematical extensions is available at numcalc.com. It was compiled from C to WASM/asm.js with Emscripten.

    Dans cet exemple il fait tourner un moteur JS dans le moteur JS du navigateur… je suis un peu déçu venant de lui. Il aurait au moins pu lancer sont moteur JS dans sa VM x86 dans le moteur du navigateur.

    • [^] # Re: Inception

      Posté par  . Évalué à 9.

      C'est dommage qu'on ai pas plus de détail sur sa façon de travailler, car vu de l’extérieur c'est limite si c'est humain ce qu'il arrive à faire (seul!?).

      • [^] # Re: Inception

        Posté par  (site web personnel) . Évalué à 10.

        Ben, lui ne perd pas de temps à troller sur LinuxFR :-)

        Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

      • [^] # Pas seul

        Posté par  . Évalué à 2.

        Unless otherwise specified, the QuickJS sources are copyright Fabrice Bellard and Charlie Gordon.

  • # "Je suis une Légende"

    Posté par  . Évalué à 2.

  • # Benchmark

    Posté par  (site web personnel) . Évalué à 3.

    Il a mis à jour ses Benchmark : https://bellard.org/quickjs/bench.html

    Du coup pas besoin de faire le job.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.