Sortie d'Amber 0.11.0

Posté par . Édité par palm123 et Xavier Claude. Modéré par tuiu pol. Licence CC by-sa
Tags : aucun
29
10
juil.
2013
Technologie

Amber 0.11 est sorti. Amber est une implémentation du langage Smalltalk (langage objet à classes) pour le web qui se compile vers du Javascript efficace. Amber fournit un environnement de développement avec un navigateur de classes, un espace de travail (pour évaluer n'importe quelle expression n'importe quand) et un inspecteur d'objets. Tout cet environnement de développement est écrit en Amber et est donc accessible depuis le navigateur web.

Vous pouvez essayer Amber dès maintenant en allant sur le site web du project et en cliquant sur le gros bouton 'Try Amber in your Browser!'.

Trois mois ont passé depuis l'annonce de la version précédente.

Les changements

La version 0.11.0 en chiffres : 433 commits par 13 personnes, ce qui amène le nombre de contributeurs au projet à 25. Il y a 50 nouveaux tests unitaires pour un total de 313 depuis le début du projet. 60 tickets ont été fermés, pour un total de 499.

Cette nouvelle version inclut beaucoup de corrections de bugs, des améliorations de l'interface en ligne de commande, et une avant-première du futur environnement de développement (voir plus bas). Le compilateur (entièrement ré-implémenté dans la version 0.10.0) a aussi reçu quelques améliorations, notamment des optimisations d'envois de message et d'appels à super.

Quelques changements dans l'API ont eu lieu, voir l'annonce pour les détails.

Instances d'Amber

Amber est déjà utilisée par quelques applications dont certaines sont publiquement accessibles :

  • Smalltalkhub est une plateforme d'hébergement de code source. L'interface de Smalltalkhub est entièrement implémentée côté client en Amber, le serveur n'étant utilisé qu'au travers de requêtes REST pour récupérer et stocker les informations sur les projets.
  • Easnoth est un jeu de stratégie au tour par tour entièrement implémenté en Amber.

Essayer le futur environnement de développement (nom de code Helios)

L'environnement de développement a été complètement récrit. Il est bien plus simple à utiliser, plus beau et tout est accessible par le clavier (le développeur principal d'Amber est un fan d'Emacs). Pour l'essayer :

Depuis votre navigateur favori :

  • visitez le site web du project
  • ouvrez une console javascript sur cette page (dans le menu Outils pour Firefox et Chrome)
  • tapez amber.loadHelios() dans la console et validez — Helios s'ouvre après quelques secondes
  • fermez la console javascript

Quand Helios est chargé, tapez ctrl+espace pour afficher une liste d'actions dans une barre en bas de la fenêtre. Chaque action est précédée d'une lettre qui indique la touche à taper pour activer l'action (vous pouvez aussi utiliser la souris). Le raccourcis ctrl+espace affiche des actions différentes en fonction de ce que vous êtes en train de faire, n'hésitez pas à vous en servir.

Un débuggueur est en cours de préparation : vous pourrez bientôt exécuter vos applications Amber ligne à ligne et étudier la valeur des variables à chaque étape !

Installer Amber depuis NPM

Il n'est pas nécessaire d'installer Amber pour l'utiliser, mais si vous souhaitez faire une application avec, vous pouvez utiliser npm (le gestionnaire de paquets de node.js):

npm install amber

Communauté

Nous espérons que vous nous rejoindrez pour développer Amber et vous éclater ! Vous pouvez cloner le projet (déjà 100 clones recensés sur GitHub) et venir discuter avec nous sur IRC (#amber-lang sur freenode) et la liste de diffusion.

  • # Cool

    Posté par . Évalué à  4 .

    J'ai testé le tutoriel interactif, c'est bien cool, mais on peut pas scroll down, donc quand ya trop de trucs écrit on voit pas la fin du texte :)
    (Firefox 22.0)

    • [^] # Re: Cool

      Posté par (page perso) . Évalué à  2 .

      J'ai le même problème ici.

      C'est bien smalltalk, j'ai eu l'occasion d'en faire à la fac et j'avais vraiment apprécié. Cette news me donne envie d'essayer sur des petits projets personnels (même si je sens que l'adaptation à la syntaxe ne va pas être simple).

      Du coup, quel, ou quels sont les outils correspondant côté serveur ? Un rapide recherche m'indique Seaside ? Quelque chose permettant de proposer du JSON par exemple, que je lirais côté client avec amber.

      • [^] # Re: Cool

        Posté par . Évalué à  3 .

        La syntaxe s'apprend vraiment vite car il n'y a quasiment rien à savoir. Toute la syntaxe (+ des infos sur l'environnement de développement Pharo) tient sur un flyer.

        Côté serveur, n'importe quoi qui fait du REST convient. Pharo par exemple avec Zinc ou Seaside. JSON est parfaitement supporté côté client et côté serveur. Voir par exemple la documentation de Zinc .

    • [^] # Re: Cool

      Posté par . Évalué à  1 .

      Le bug est connu. Il paraît que ça marche avec d'autres navigateurs, mais je n'ai pas essayé.

  • # semble sympa.

    Posté par . Évalué à  2 . Dernière modification : le 11/07/13 à 13:43

    Mais j'ai un petit doute sur la mise en pratique parce qu'il faut jongler entre deux environnements en permanence pour réaliser le même livrable.

    1 premier environnement pour développer le balisage et la charte
    2ieme environnement dédié à javascript

    Du coup, j'ai des doutes sur l'expérience utilisateur du développeur au final.

    Sinon, n'étant pas versé dans les langages tels que smalltalk, dans cet exemple,
    begin
    "Makes me say hello to the user."

    | msg button |
    msg := 'Hello world!'.
    button := '#sayHello' asJQuery.
    button click: [button after: '<p>' , msg , '</p>'].
    

    Sexy au demeurant. Je me demande quand même si le code reste aussi pur avec des exemples plus avancés. Les tutoriaux sont un peu léger, et j'avoue que j'ai la flemme d'inspecter les classes présentées par l'ide, trop abstraites à mon égard pour que j'y comprenne grand chose rapidement amha.

    • [^] # Re: semble sympa.

      Posté par . Évalué à  2 .

      Pour la première question sur les 2 environnements, je ne sais pas trop. Avec Amber, toute la partie graphique du site est rendue dynamiquement et il n'y a donc pas un fichier HTML qui représente la charte. Je pense que c'est la problème avec beaucoup de technologie web modernes (comme JQuery) qui manipulent le DOM HTML.

      En ce qui concerne la qualité du code, je vais être beaucoup plus affirmatif : oui, le code peut rester propre même pour les très grosses applications, il suffit juste que ça soit un des objectifs des développeurs. Regarde par exemple le code d'Helios ou celui du compilateur.

      • [^] # Re: semble sympa.

        Posté par . Évalué à  2 . Dernière modification : le 14/07/13 à 03:56

        Écoutes, je suis aller voir. J'ai plus de questions que de réponses.

        Oui le code est assez pure quand je plisse mes yeux, mais quand je regarde plus près, c'est pire que du chinois… du coup se sera ptet mon troisième langage de l'année.

        Ceci dit je parle bien de pureté, pas de qualité. Le code qui exprime le plus clairement possible l'intention.
        Mais ceci dit oui le rendu que j'ai pu expérimenter sur le debugger l'ide était extrêmement qualitatif.

        • [^] # Re: semble sympa.

          Posté par . Évalué à  2 .

          Tu as des exemples de code à montrer ? As-tu regardé le flyer ?

          • [^] # Re: semble sympa.

            Posté par . Évalué à  2 .

            Faut que j'apprenne le langage.

            Là je butes sur des trucs comme ça :

            
            model: aModel
                model := aModel
            ! !
            
            

            Aucune idée de ce à quoi cela sert.
            Déclare un model, hérité de aModel ? Mais après, aModel est assigné à model ? model.model est un constructeur ? Une instance ? et qu'est que ce second aModel ? Un type , une instance ?
            Des subtilités que j'apprendrais en temps et en heure.

            Ou celui ci,

            onClassMoved: anAnnouncement
                | class oldPackage |
            
                class := anAnnouncement theClass.
                oldPackage := anAnnouncement oldPackage.
            
                (oldPackage = self model selectedPackage or: [
                    class package = self model selectedPackage ])
                        ifFalse: [ ^ self ].
            
                oldPackage = self model selectedPackage ifTrue: [ 
                    self 
                        selectedItem: nil;
                        selectItem: nil ].
            
                self setItemsForSelectedPackage.
                self refresh
            !
            

            Je n'ai qu'une vague idée de ce que cela fait.
            Surtout à cause de ce truc
            ^ self

            Le PDF est sympa parce que syntétyque. Mais je croît j'ai besoin de sortir du lourd, du beaucoup plus lourd ; )

            a+

            • [^] # Re: semble sympa.

              Posté par . Évalué à  5 .

              model: aModel
                  model := aModel
              

              La première ligne permet de définir la méthode. Le nom de la méthode est model:. Cette méthode possède un paramètre dont le nom est aModel. On ne connaît pas le type du paramètre ni le type de retour de la méthode. La deuxième ligne affecte la valeur de l'argument aModel à la variable d'instance model. Cette méthode est donc tout simplement un setter.

              onClassMoved: anAnnouncement
              

              définition d'une nouvelle méthode dont le nom est onClassMoved: et qui prend un paramètre nommé anAnnouncement.

                  | class oldPackage |
              

              déclaration de 2 nouvelles variables temporaires. En Smalltalk on doit déclarer toutes les variables que l'on utilise.

                  class := anAnnouncement theClass.
              

              assignation à la variable temporaire class de la valeur résultante de l'envoie du message theClass (sans argument) à l'objet anAnnouncement.

                  oldPackage := anAnnouncement oldPackage.
              

              même chose.

                  (oldPackage = self model selectedPackage or: [
                      class package = self model selectedPackage ])
              

              expression qui retourne un booléen. L'expression est un OR entre 2 égalités.

                          ifFalse: [ ^ self ].
              

              ifFalse: est un message envoyé au booléen (de la ligne précédente) qui prend un block en paramètre. Le block n'est évalué que si le booléen vaut false. L'accent circonflexe ^ signifie "return". Ici, on retourne l'objet courant (self = this en Java). C'est donc pareil que return this en Java. En Smalltalk, toutes les méthodes retournent un objet, et self est retourné par défaut. Donc, si la condition est fausse, on quitte la méthode.

                  oldPackage = self model selectedPackage ifTrue: [ 
                      self 
                          selectedItem: nil;
                          selectItem: nil ].
              

              La première ligne définie une condition. Si la condition est vraie, on envoie 2 messages à self (= this). Le premier message est selectedItem: avec un argument à nil (= null). Le deuxième message est selectItem: avec un argument à nil. Il faut noter l'utilisation du ; qui permet d'envoyer plusieurs messages à un même objet.

                  self setItemsForSelectedPackage.
                  self refresh
              

              Ici on envoie 2 messages à self, aucun ne prenant d'argument. On aurait pu utiliser un ; ici aussi.

              • [^] # Re: semble sympa.

                Posté par . Évalué à  2 .

                Merci !

                C'est pas souvent qu'on prend par la main ainsi, en fait jamais, c'est appréciable : )

                Pour le reste yapluka.

                a+

Suivre le flux des commentaires

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