7
votes

Caractéristiques distinctives des langages de programmation

Au-delà de la syntaxe de chaque langue (E.G. Print c. Echo), quelles sont certaines caractéristiques distinctives clés pour rechercher un langage de programmation?

En tant que débutant dans la programmation, je suis toujours confondu entre les forces et les faiblesses de chaque langue de programmation et comment les distinguer au-delà de leurs alias pour des fonctions natives communes. Je pense qu'il est beaucoup plus facile de classer les langues basées sur un ensemble de caractéristiques distinctives par exemple. Oop v. Fonctionnel.


0 commentaires

8 Réponses :


6
votes

Il y a beaucoup de choses qui définissent un PL, ici i'litez quelques-uns:

  • est-il procédural, OO, impératif?
  • a-t-il une vérification de type forte (C #, C ++, Delphi) ou dynamique (PHP, Pythong, JS)
  • Comment les références sont-elles traitées? (Est-ce que cela masque des pointeurs comme c #?)
  • faut-il un runtime (C #, Java) ou est-il originaire du système d'exploitation (C, C ++)
  • Est-ce qu'il prend en charge les threads (E.G Eiffel a besoin de bibliothèques supplémentaires pour cela)

    Il y a peut-être que d'autres aiment les autres des collectionneurs à déchets, le traitement des paramètres, etc. Le langage Eiffel a une caractéristique intéressante du contrat, je n'ai pas vu cela sur une autre langue (je pense que c # 4.0 a Il est maintenant), mais cela peut être assez utile si bien utilisé.

    Je vous recommanderais de jeter un coup d'œil sur le travail de Bertrand Meyer pour avoir une compréhension plus profonde sur la façon dont le travail de PL et les choses qui les définissent. Une autre chose qui peut définir un PL est le niveau d'interaction avec le système, ce qui fait la différence entre les langages de bas niveau et les langages de haut niveau.

    J'espère que je peux aider


0 commentaires

4
votes

dans un domaine (impératif, fonctionnel, concaténatif, réécriture de termes), parfois de son mieux pour examiner la présence ou l'absence de tout ensemble particulier de fonctionnalités. Par exemple, pour le flux principal impératif.

  1. Fonctions de premier ordre
  2. fermetures
  3. Constancies intégrées, héritage prototypique ou boîte à outils (Exemple: C ++, Self / JavaScript, Lua / Perl)
  4. Types de données complexes (plus que le tableau)
  5. Primitives concurrentielles intégrées
  6. Futures
  7. passe par des valeurs, passe par nom, passe par référence ou une combinaison de ceux-ci
  8. déchets recueillis ou non? Quel genre?
  9. Événement basé sur
  10. Types basés sur l'interface, types basés sur la classe ou aucun type d'utilisateur (Go, Java, Lua)

    etc


0 commentaires

0
votes

Vous pouvez considérer des choses comme:

  • Pouvez-vous appeler des fonctions?
  • Pouvez-vous passer des fonctions à d'autres fonctions?
  • Pouvez-vous créer de nouvelles fonctions? (En C, vous pouvez passer des pointeurs de fonction sur des fonctions, mais vous ne pouvez pas créer de nouvelles fonctions)
  • Pouvez-vous créer de nouveaux types de données?
  • Pouvez-vous créer de nouveaux types de données avec des fonctions qui les utilisent? (La base typique des langues "OO")
  • Pouvez-vous exécuter du code qui n'était pas disponible au moment de la compilation (à l'aide d'une fonction eval , peut-être)?
  • Il faut que tous les types soient connus au moment de la compilation?
  • sont des types disponibles au moment de l'exécution?

0 commentaires

0
votes

la différence entre niveaux de bas niveau langages de haut niveau . (Même si "bas" et "haut" sont des termes relatifs.)

Un langage de haut niveau utilisera une abstraction pour masquer les détails que les langues de bas niveau exposeraient à l'utilisateur. Par exemple, dans Matlab ou Python, vous pouvez initialiser un tableau N-dimensionnel dans une seule commande. Pas le cas en C ou en assemblage.


0 commentaires

0
votes

IMHO La force d'une langue est donnée par le nombre de choses que vous pouvez faire avec cela; à quelle vitesse et à quel point pouvez-vous accomplir les objectifs?

Les faiblesses d'une langue sont la somme des contraintes (de différents types) que vous rencontrez pendant que vous essayez d'atteindre votre objectif.


0 commentaires

0
votes

Il existe de nombreuses fonctionnalités qu'un langage de programmation peut prendre en charge. De plus, ces fonctionnalités ne sont pas toujours mutuellement exclusives. Par exemple, OCAML et F # sont à la fois fonctionnels et orientés objet. Écrire également une liste ici de tous les paradigmes qu'une langue peut soutenir serait exhaustive, mais il y a un livre Pragmatics linguistiques de programmation C'est un traitement complet de nombreux paradigmes trouvés dans les langages de programmation.

Cependant, pour moi, les choses importantes que j'ai besoin de savoir lorsque vous travaillez avec une langue sont les suivantes:

  • est-il dynamiquement ou statiquement typé
  • Est-ce une langue dactylographiée et si elle est dactylographiée est forte ou faible?
  • est-ce la poubelle collectée
  • est-il en charge par la valeur ou passe par la sémantique de référence ou les deux?
  • prend-il en charge les fonctions de première commande (c'est-à-dire que les fonctions peuvent être traitées comme variables)
  • est-il orienté objet
  • polymorphisme. Est-ce paramétrique ou ad-hoc.
  • Comment expressif est le système de type (c'est-à-dire que je peux créer des abstractions non-fuieuses)
  • Méthodes surchargées
  • Generics (Modèles)
  • Manipulation des exceptions.

0 commentaires

0
votes

0 commentaires

0
votes

Vous pouvez considérer d'autres caractéristiques telles que:

  • Strong VS Type dynamique et statique VS STAFT et STATIC, Soutien à la typage générique
  • Comment la mémoire est manipulée (est-elle extraite ou avez-vous un contrôle direct sur vos données, passez par VS Pass par valeur)
  • compilé vs interprété par vs un peu des deux
  • Les formes de types définis par l'utilisateur sont disponibles ... CLASSES, STRUCTURES, NUTLES, LISTES ETC.
  • Si les installations de filetage sont intégrées ou que vous devez vous tourner vers des bibliothèques externes
  • installation de codage génératif ... C ++ Modèle MetaProgrammation est une forme de ce
  • Dans le cas d'OOP, Simple VS Multi Héritage, interfaces, classes anonymes / intérieures, etc.
  • Si une langue est multi-paradigme (c'est-à-dire C # et son soutien à la programmation fonctionnelle)
  • Disponibilité de la réflexion
  • La verbosité d'une langue ou la quantité de «sucre syntaxique» ... E.G. C ++ est assez verbeux lorsqu'il s'agit d'itération d'un vecteur. Java est assez succinct lorsque des classes intérieures anonymes sont utilisées pour la manipulation des événements. Les compréhensions de la liste de Python économisent beaucoup de dactylographie.

0 commentaires