J'ai entendu parler de plusieurs situations dans lesquelles des personnes utilisent, par exemple, JavaScript ou Python (ou quelque chose du genre), dans un programme écrit en C #. Quand utiliser un langage comme JavaScript pour faire quelque chose dans un programme C # serait-il préférable à le faire simplement en C #?
70
Réponses:
Lorsque vous avez un comportement que vous ne voulez pas avoir à recompiler le programme pour le changer. C’est exactement pourquoi tant de jeux utilisent Lua comme langage de script / modding.
la source
Cette technique peut être utilisée pour implémenter une logique centrale facilement portable entre différents environnements linguistiques. Par exemple, j'ai un simulateur de calculatrice dans lequel toute la logique de calculatrice interne est implémentée en JavaScript à 100%. Le code de l'interface utilisateur est bien sûr différent pour chaque plate-forme:
Avec cet arrangement, créer des versions de mon programme pour différents environnements d’exploitation, et en particulier les maintenir à jour, est beaucoup plus simple.
la source
De manière très générale, il existe deux situations dans lesquelles vous appliqueriez ce modèle:
Intérieurement
Un exemple ici serait Lua utilisé dans Adobe Lightroom.
Extérieurement
IBM a utilisé les langages de script avec beaucoup de succès dans son système d’exploitation central, VM-CMS . EXEC , EXEC / 2 et plus tard, Rexx ont été utilisés dans tout le système, à la fois en interne et en externe. Différentes applications (par exemple, XEDIT ) étaient scriptables en utilisant ces mêmes langages et des applications / utilitaires internes (par exemple, des courriers électroniques) ont été écrits dans le langage de script et ont permis une intégration étroite avec le système d'exploitation et d'autres outils. Les clients ont créé et partagé de nombreux outils et applications scriptés. DEC a également fourni DCL . Plus tard, Microsoft a pris en charge VBscript en tant que langage de script dans la plupart de leurs applications et plus récemment, PowerShell(aussi fichiers batch MS / DOS ). Les shells Unix ont également un script .
La tendance actuelle semble exposer les API d’une certaine manière et laisser le choix du langage de script aux utilisateurs qui peuvent utiliser différentes liaisons ou d’autres moyens d’accéder à l’API.
la source
Les exemples du monde réel incluent: -
La plupart des navigateurs Web qui prendront en charge le JavaScript incorporé.
Suite Microsoft Office - Excel Word, etc., prennent en charge les scripts VBA intégrés.
De nombreux routeurs de réseau incluent des API de script, dans une variété de langages TCL, Perl et Lua.
De nombreux périphériques intégrés sont implémentés à l’aide d’un très petit ensemble de fonctions C centrales, qui sont collées à l’aide d’un langage de script tel que Lua. Vous disposez donc d’un ensemble de petites fonctions C rapides qui interagissent avec le matériel, ainsi que d’une grande partie de la logique de contrôle dans un langage de script flexible et facile à modifier.
la source
Parfois, les scripts sont intégrés dans une application, car ils permettent à d'autres développeurs d'étendre l'application hôte. Afin de capturer un éventail de compétences en langage de programmation le plus large possible, l'hôte peut prendre en charge plusieurs langages de script. Par exemple, sur la machine virtuelle Java, vous pouvez intégrer toute une série de langages compatibles JSR-223 , notamment Python, Ruby, JavaScript, etc.
Une autre raison non déjà mentionnée est que le langage incorporé possède une ou plusieurs fonctionnalités hors du commun que le langage hôte ne pourrait pas dupliquer facilement. Un exemple de ceci serait la fonctionnalité Parse ou la création DSL (langage / dialecte spécifique à un domaine) sans effort qui peut être trouvée dans une langue comme Rebol.
la source
Il existe un moyen intéressant d’utiliser un langage de script dans une application qui n’a pas encore été mentionné par les autres.
Si votre langage hôte a une exécution riche et réfléchissante, il est souvent utile d'intégrer un langage simple avec REPL dans vos applications, de le brancher sur un socket et de lui donner un accès à l'ensemble du système.
Il peut être utilisé pour un débogage interactif (et il est naturellement beaucoup plus puissant que votre débogueur habituel), des correctifs de code à chaud, diverses fonctions de surveillance, même des portes dérobées (si rien ne sert à rien).
la source
Ma situation spécifique, lorsque j'utilise un langage de script interprété dans une application majeure:
Il existe un périphérique externe qui remplit plusieurs fonctions. Mesures, contrôle, lectures. C'est assez "stupide" lui-même et nécessite un contrôle précis, étape par étape, incluant de nombreux états d'attente et une prise de décision ad-hoc du côté du mécanisme de contrôle.
Diverses fonctionnalités de l'appareil sont requises à différents moments de l'application principale, à différents moments, souvent à la demande. L'application principale ne permet pas les états d'attente en tant que tels, tout doit être fait avec des machines à états finis.
Maintenant, quiconque a écrit une machine à états finis sait que la mise en œuvre d'un état d'attente correspond effectivement à au moins deux, souvent trois ou quatre états internes de la machine. Mettre en œuvre vingt états d’attente pour diverses fonctions (et attendre leurs réponses et réagir en conséquence) du périphérique externe serait une expérience extrêmement frustrante.
Ainsi, à la place, il existe des états "exécuter une fonction non attendue", "exécuter une fonction de blocage", "exécuter un branchement / conditionnel / saut" dans la machine à états finis, peut-être six états au total. Et il existe des scripts de contrôle dont l'exécution est planifiée, puis exécutée par l'interpréteur contrôlant le périphérique externe, et leurs résultats placés là où ils sont requis.
En résumé, l’application: dans un RTOS, l’utilisation d’un langage de script interprété interne peut considérablement réduire la complexité d’exécution de tâches abondantes dans des états d’attente (fonctions de blocage).
la source
D'après mon expérience, nous avons une fois développé une grande application qui réécrit le code source d'une langue "ancienne" pour la rendre compatible avec Unicode. Le a été fait en C #. J'ai fini par écrire uniquement le moteur (qui crée un modèle de données et fournit les moyens d'effectuer les étapes nécessaires au processus de réécriture) en C # - le "code collant" permettant d'exécuter réellement les tâches est créé dans IronPython.
Le point le plus important pour l'IronPython intégré: supposons que vous ayez chargé un modèle Big Data (temps de chargement d'environ une heure). Ensuite, vous souhaitez collecter manuellement les informations et rechercher des éléments. Faire cela avec un script Python à partir d'une console interactive est bien mieux que de cliquer sur le modèle de données avec le débogueur (en plus, il est rejouable).
la source
Il y a quelques raisons.
la source
Quand? Entre 1948 et 2008, la compilation et la liaison des langages initialement compilés ont pris beaucoup de temps. Il était donc courant de créer un langage de script permettant la personnalisation et la configuration des utilisateurs. Si vous examinez l'historique d'AutoLisp, la réponse est initialement fournie avec un langage de script intégré à AutoCAD, mais cette solution a été progressivement supprimée au profit de l'exposition d'une interface scriptable à VBA, puis à .net.
Avec CLR, l'activation d'un programme C # ou d'un appel de programme Lua dans un système existant ne présente pas de coûts de développement très différents, et le runtime .net est livré avec les outils pour générer et compiler à la volée.
Vous n'avez plus besoin de disposer d'un langage de script dans le programme plus volumineux, mais d'exposez-le plutôt aux fonctions de script du moteur d'exécution.
Dans les environnements qui n'offrent pas la génération et la compilation de code à la volée, et qu'il est jugé souhaitable de proposer un langage d'automatisation à usage général plutôt que spécifique à un domaine, vous obtiendrez toujours un script Lua ou Python. Pour les outils offrant une interface COM, ce langage de script sera alors C # ou VB.net (MS Office, Sparx Enterprise Architect). Donc, avoir un langage de script pour un programme écrit dans un langage qui est lui-même assez simple pour être un langage de script est un inutile.
la source