NewtonScript - NewtonScript

NewtonScript
Paradigme Prototype orienté objet
Conçu par Walter Smith
Développeur ordinateur Apple
Première apparition 1993 ; il y a 28 ans ( 1993 )
Discipline de frappe Dynamique
Influencé par
Soi , Dylan
Influencé
Io

NewtonScript est un langage de programmation basé sur des prototypes créé pour écrire des programmes pour la plate-forme Newton . Il est fortement influencé par le langage de programmation Self , mais modifié pour être plus adapté aux besoins des appareils mobiles et embarqués .

Histoire

Le 3 août 1993, Apple a dévoilé Apple Newton MessagePad . L'appareil avait 640 Ko de RAM et 4 Mo de ROM, fonctionnant sur une machine Acorn RISC à 20 MHz.

L'intention principale du projet Newton était de développer un appareil capable de remplacer un ordinateur tout en étant portable. Avec une batterie et une mémoire limitées, les développeurs recherchaient un langage de programmation capable de relever ces défis.

Les développeurs se sont penchés sur le langage C++ mais ont réalisé qu'il manquait de flexibilité. Ils ont commencé à se concentrer sur les langages basés sur des prototypes et ont été impressionnés par Smalltalk et Self. Parallèlement, Apple développait un autre langage de programmation dynamique appelé Dylan , qui était un candidat sérieux pour la plate-forme Newton.

Cependant, Self et Dylan n'ont pas été pris en considération, car ils étaient tous les deux au stade naissant d'une bonne intégration.

Au lieu de cela, une équipe dirigée par Walter R Smith a développé un nouveau langage appelé NewtonScript. il a été influencé par un langage dynamique comme Smalltalk et un modèle basé sur des prototypes comme Self.

Caractéristiques

Bien que NewtonScript ait été fortement influencé par Self, il y avait quelques différences dans les deux langues.

Des différences sont apparues en raison de trois problèmes perçus avec le Soi.

  1. La première est que l'instantané Self typique nécessite 32 Mo de RAM pour fonctionner, alors que la plate-forme Newton a été conçue pour n'utiliser que 128 Ko pour le système d'exploitation. Cela a nécessité une sérieuse réduction du moteur pour l'adapter et avoir encore de la place pour les applications.
  2. Un autre problème était la performance. Étant donné que le langage serait utilisé pour l'ensemble du système, au lieu de s'exécuter uniquement sur un système d'exploitation existant, il devait fonctionner aussi vite que possible.
  3. Enfin, le système d'héritage dans le moteur Self normal avait un seul objet parent, alors que les interfaces graphiques en ont généralement deux - une pour les objets et une autre pour la disposition de l'interface graphique qui est généralement gérée via l'ajout d'un emplacement dans une sorte d'objet de hiérarchie graphique. (comme Voir ).

La syntaxe a également été modifiée pour permettre un style de programmation plus textuel, par opposition à l'utilisation généralisée par Self d'un environnement GUI pour la programmation. Cela a permis aux programmes Newton d'être développés sur un ordinateur exécutant la boîte à outils, où les programmes seraient compilés puis téléchargés sur un appareil Newton pour être exécutés.

L'un des avantages de l'héritage basé sur un prototype de NewtonScript était l'utilisation réduite de la mémoire, une considération clé dans le Newton de 128 Ko. Le prototype d'un objet GUI pouvait en fait être stocké dans la ROM, il n'était donc pas nécessaire de copier les données ou les fonctions par défaut dans la mémoire de travail.

Contrairement aux langages basés sur des classes, où la création d'un objet implique l'allocation de mémoire à tous ses attributs, l'utilisation de l'héritage de prototype par NewtonScripts lui a permis d'allouer de la mémoire à quelques champs comme _proto et _parent au lieu de créer un tout nouvel objet. Ici, _proto et _parent signifient si l'objet utilise un prototype ou un héritage parent.

Un exemple pour illustrer le concept ci-dessus, un développeur peut créer une nouvelle instance de bouton. Si le bouton utilise la police par défaut, l'accès à son "emplacement" de police (c'est-à-dire sa propriété ou sa variable membre) renverra une valeur qui est en fait stockée dans la ROM ; l'instance de bouton dans la RAM n'a pas de valeur dans son propre emplacement de police, donc la chaîne d'héritage du prototype est suivie jusqu'à ce qu'une valeur soit trouvée. Si le développeur modifie ensuite la police du bouton, la définition de son emplacement de police sur une nouvelle valeur remplacera le prototype ; cette valeur de forçage est stockée dans la RAM. L'« héritage différentiel » de NewtonScript a donc fait une utilisation efficace de la mémoire flash coûteuse de Newton en stockant la majeure partie des données et du code par défaut dans la ROM moins chère et beaucoup plus grande du PDA .

Termes importants

Vues : ce sont des objets créés par Newton View System, qui sont créés au moment de l' exécution pour rendre les vues.

Modèle : Il s'agit d'un plan à partir duquel les vues sont créées.

Protos : Ils peuvent être le modèle d'un modèle ou d'une vue, et sont des éléments des bibliothèques de code NewtonScript.

Frame et Slot : Frame est une collection dynamique de slots, et un élément de frame est appelé slot. Un emplacement est composé d'un nom et d'une valeur. La valeur peut être de n'importe quel type. Il est intéressant de noter que tous les objets de NewtonScript sont des cadres.

Soupe et entrée : il s'agit d'une collection connexe de cadres/données. L'entrée est un cadre individuel dans une soupe.

Frame Heap : RAM allouée dynamiquement par NewtonScript.

Vue de base : C'est la vue principale de l'application, composée de toutes les variables et méthodes utilisées dans l'application.

Avantages et inconvénients

Avantages

  • NewtonScript est un langage de programmation dynamique basé sur un prototype, qui utilise l'héritage différentiel. Cela signifie qu'il est très efficace d'utiliser l'espace mémoire. Étant dynamique, il est facile de modifier les objets, de vérifier le type, etc. au moment de l'exécution, offrant une grande flexibilité aux développeurs.
  • Les objets créés peuvent être stockés dans une mémoire permanente comme une carte flash ou une mémoire interne. La RAM est utilisée uniquement pour stocker les attributs dont les valeurs changent au cours de l'exécution. Cela réduit la consommation de mémoire.
  • L'écriture d'interfaces pour les applications GUI peut être implémentée efficacement à l'aide du modèle prototype, car nous pouvons directement écrire un objet pour un contrôle GUI plutôt que de créer une classe et de l'instancier.
  • La collecte des ordures est effectuée automatiquement par le système. Cela a aidé les développeurs à se concentrer davantage sur le développement d'applications plutôt que sur la gestion de la mémoire. La collecte des ordures a également aidé à atténuer le problème des pointeurs pendants où un pointeur pointe par erreur vers un emplacement de mémoire qui a été désalloué.

Désavantages

  • Comme le code NewtonScript était écrit sur une plate-forme et exécuté sur une autre, il était pratiquement impossible à déboguer. Un meilleur code de débogage dans le moteur Newton aurait permis de compenser ce problème dans une certaine mesure, mais la mémoire limitée a rendu cela difficile. Au lieu de cela, le développeur obtiendrait une vague indication avec un code d'erreur, sans aucune possibilité de le faire correspondre aux lignes du code d'origine.
  • Un autre inconvénient est que la variable dynamique réduit la vitesse de fonctionnement car un simple déréférencement de pointeur ne peut pas être utilisé comme dans les types statiques comme C++ et Java.

Influences

Avec l'annulation du projet Newton par Apple en 1998, tous les autres développements grand public sur NewtonScript ont été arrêtés. Cependant, les fonctionnalités utilisées dans NewtonScript continueraient à inspirer d'autres modèles et langages de programmation.

Le modèle objet basé sur un prototype de Self et NewtonScript a été utilisé dans JavaScript , le langage le plus populaire et le plus visible pour utiliser le concept jusqu'à présent.

NewtonScript est également l'un des ancêtres conceptuels (avec Smalltalk, Self, Act1, Lisp et Lua ) d'un langage de programmation à usage général appelé Io qui implémente le même modèle d'héritage différentiel, qui a été utilisé dans NewtonScript pour conserver la mémoire.

Voir également

Les références

Liens externes