IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Langage de programmation simplifié


Sujet :

Langages de programmation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 21
    Points
    21
    Par défaut Langage de programmation simplifié
    Bonjour à tous,

    J'ai une petite question qui me taraude et je n'ai pas une connaissance assez vaste des langages / solutions existantes, et pas moyen de trouver une réponse sur les nombreux sujets du web (je ne pose peut être pas la bonne question).

    Si je voulais utiliser un langage particulier, destiné à être utilisé uniquement par des utilisateurs finaux, quelle solution devrais-je utiliser ?

    Imaginons un jeu par exemple, style Space engineers (si ça vous dit quelque chose), ce dernier permet de "coder" en jeu des scripts afin d’interagir avec les différents éléments. Ces scripts sont en C#, et il semblerait qu'ils se contentent de bloquer les commandes sensibles.

    Bref, un langage qui puisse être dans une sandbox, ou qui n'aurait aucune directive permettant de faire un rm -rf par exemple, afin d'eviter qu'un utilisateur s'amuse à tout faire planter, mais qui doive s'exécuter coté serveur (imaginons des traitements asynchrones y compris quand le client est hors ligne). Ce langage devant être assez complet, afin de pouvoir déclarer des variables, des fonctions custom etc. En gros un Javascript de navigateur web avec aucune librairie importée par exemple serait parfait.

    Désolé si ma question est assez brouillonne.

    Merci d'avance

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour à toi.

    D'abord C# peut être utilisé de cette façon sous Windows grâce au code access security : cela permet de restreindre les dossiers et fichiers auxquels un plugin a accès, entre autres. C'est très complet et cela repose effectivement sur le blocage des méthodes portant certains attributs (qui ont été ajoutés par MS aux interfaces entre le code dotnet et les appels natifs). A moins d'écrire une appli de très haute sécurité, c'est vraisemblablement bien assez sécurisé. En revanche, attention, mono (utilisé par Unity) ne supporte pas cette fonctionnalité.

    Une autre solution serait d'utiliser un langage de script, dont l'exécution passe par une machine virtuelle qui fera office de chien de garde. Ici on retire plutôt certaines fonctions de la machine virtuelle, au lieu de les bloquer. Le principe n'est finalement pas beaucoup plus sécurisé, toutefois les langages de script ont en général peu de fonctions IO et un interpréteur compact, donc une faible surface d'attaque facile à relire (mais peu relue). Lua est le choix le plus fréquent, je t'invite toutefois à regarder Squirrel comme alternative similaire qui me semble avoir beaucoup d'avantages. Python est quant à lui plus riche et donc difficile à sandboxer ainsi. Enfin cela impose de coder une partie de ton jeu dans un autre langage si tu veux fournir à tes utilisateurs une base de code en exemple ou à réutiliser. A ne pas négliger !

    Enfin tu pourrais tout simplement créer un processus enfant exécutant un code écrit en n'importe quel langage mais en demandant au système d'exploitation de restreindre les droits de ce dernier, ce que fait par exemple Chrome en enfermant chaque page dans un conteneur. Là aussi c'est un blocage de certaines méthodes, la seule différence est que c'est fait par un code système ceinturé de davantage de barrières mais à la surface d'attaque plus grande. Enfin attention car l'interfaçage avec ton code sera plus fastidieux du fait de la communication inter-processus.

    Franchement, si ton code est écrit en C# et que tu ne vises que Windows, la première solution est de la loin la plus facile et la plus simple à mettre en oeuvre. Certes, c'est sans doute la moins sécurisé (ça se discute) mais ça semble bien suffisant. En tout cas ça l'est pour nombre de grandes entreprises.

  3. #3
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    c'était déjà la manière de penser qui a conduit à la création du COBOL. Résultat, seuls les informaticiens font du COBOL. D'une manière générale, ce n'est pas une très bonne idée. L'expérience montre que très vite, les utilisateurs ont des besoins avancés, et soit ils sont doués pour l'informatique(auquel cas un vrai langage leur serait plus adapté), soit ils ne le sont pas, et c'est l'informaticien qui va se taper le langage réduit.

    C'est un serpent de mer qui revient régulièrement. Et au final, on rajoute de plus en plus de fonctionnalités aux langages simples, et ils deviennent comme les autres...
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Il me semble qu'ici c'est surtout une exigence d'innocuité, plutôt que de simplicité. Le cas cité était celui d'un jeu exécutant du contenu librement mis à disposition par les utilisateurs via un réseau tiers (Steam).

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    Il me semble qu'ici c'est surtout une exigence d'innocuité, plutôt que de simplicité. Le cas cité était celui d'un jeu exécutant du contenu librement mis à disposition par les utilisateurs via un réseau tiers (Steam).

    Hello. Merci pour ta réponse complète, j'ai commencé à regarder pour LUA .

    Exactement, en fait, ce n'est pas la problématique de complexité du langage, c'est plutôt sa sécurisation.

    Il ne faut pas qu'il y ait moyen d'exécuter des commandes sensibles. On peut toujours se tourner vers des librairies qui gèrent des sandbox (pour du node.js ou du Python par exemple), mais le jour où ces librairies ont une faille, ou ne sont plus supportées, c'est le drame.

    Mais d'un autre coté, le langage doit être assez poussé pour pouvoir traiter des données, définir des fonctions, et des variables. Si le langage ne peut interagir avec le système, ou dispose d'outils pour limiter son champ d'action, le problème est résolu.

    Du coup, j'avais aussi pensé à un langage de templates, c'est une solution que j'ai déjà vu sur un progiciel. Par exemple le moteur SWIG, permet de créer des variables, fonctions customs, etc.

Discussions similaires

  1. [Questions]Le langage de programmation Binaire existe t-il ?
    Par Nasky dans le forum Langages de programmation
    Réponses: 30
    Dernier message: 16/11/2012, 09h09
  2. [Archive] Quel est votre langage de programmation préféré ? (2004..2008)
    Par Idelways dans le forum Débats sur le développement - Le Best Of
    Réponses: 403
    Dernier message: 04/02/2009, 00h56
  3. Qui a inventé le concept de "langage de programmation?
    Par Biane dans le forum Langages de programmation
    Réponses: 10
    Dernier message: 11/02/2004, 10h11
  4. Création d'un langage de programmation
    Par liquid_stone dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 09/11/2003, 16h44
  5. Nombre de langage de programmation total
    Par Adrael dans le forum Langages de programmation
    Réponses: 16
    Dernier message: 22/07/2003, 00h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo