Journal Bellard strikes again: QuickJs, un moteur JavaScript

Posté par . Licence CC by-sa.
Tags :
38
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 (page perso) . Évalué à 4 (+4/-2).

    On va pouvoir virer NodeJS et compiler en natif ?

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

      Posté par . Évalué à 4 (+3/-0).

      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 (page perso) . Évalué à 3 (+1/-0).

        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é à 3 (+1/-0).

          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 . Évalué à 3 (+0/-0).

            A priori, cela compile vers une machine à pile (bytecode comme java) car c'est simple.

            "La première sécurité est la liberté"

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

      Posté par (page perso) . Évalué à 4 (+2/-0).

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

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

      Posté par (page perso) . Évalué à 3 (+1/-0).

      arf, bellard ou pas, t'auras toujours ton node_modules :D

  • # Lua ?

    Posté par . Évalué à 8 (+6/-0). Dernière modification le 15/07/19 à 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 (page perso) . Évalué à 7 (+7/-2).

      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 . Évalué à 1 (+1/-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.

        • [^] # Re: Lua ?

          Posté par (page perso) . Évalué à 5 (+2/-0).

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

          Incubez l'excellence sur https://linuxfr.org/board/

        • [^] # Re: Lua ?

          Posté par (page perso) . Évalué à 10 (+10/-0).

          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 :)

          l'azerty est ce que subversion est aux SCMs

        • [^] # Re: Lua ?

          Posté par . Évalué à 2 (+1/-1).

          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 (page perso) . Évalué à 4 (+2/-0).

            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 . Évalué à 5 (+5/-1).

      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é à 4 (+2/-0).

        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é à 2 (+0/-0).

          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…)

  • # But ?

    Posté par (page perso) . Évalué à 3 (+1/-0).

    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 . Évalué à 3 (+2/-0).

      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.

  • # Inception

    Posté par . Évalué à 2 (+1/-0).

    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é à 4 (+3/-0).

      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 (page perso) . Évalué à 8 (+6/-0).

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

        Python 3 - Apprendre à programmer en Python avec PyZo et Jupyter Notebook → https://www.dunod.com/sciences-techniques/python-3

Envoyer un commentaire

Suivre le flux des commentaires

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