Combien de types de langages de programmation existe-t-il? [fermé]

Fermé . Cette question doit être plus ciblée . Il naccepte pas les réponses actuellement.

Commentaires

  • Ne serait pas ' quil vaut mieux dire " Qui type .. " au lieu de combien?
  • Eh bien, jai appris que quelque chose comme Prolog et C sont fondamentalement différents, donc je pensais que chacun deux correspond à un autre type de langage de programmation, et jespérais avoir une idée de combien types.
  • 2: le type qui fait ce que vous voulez et le type qui ne ' t
  • Apprendre les différents types de langages de programmation absolument est constructif ! Vous pourriez prétendre que cela devrait être fermé en tant que duplication de ceci mais je pense quils ' sont des questions suffisamment distinctes pour restent séparés.
  • @Sova, je ' vous recommande de faire votre premier choix de nouvelles langues pour essayer quelque chose qui ne ' t utilise une syntaxe basée sur C. Cela vous permettra de vous concentrer davantage sur son fonctionnement et sur la manière dont il ' est différent de celui que vous connaissez le mieux.

Réponse

Cela dépend de la manière dont vous souhaitez classer les langues. Fondamentalement, les langues peuvent être divisées en deux types: imperative langues dans lesquelles vous indiquez à lordinateur comment pour effectuer une tâche et déclarative langues dans lesquelles vous dites à lordinateur ce de faire. Les langages déclaratifs peuvent être décomposés en langages fonctionnels , dans lesquels un programme est construit en composant des fonctions, et logic langages de programmation, dans lesquels un programme est construit via un ensemble de connexions logiques. Les langages impératifs se lisent davantage comme une liste détapes pour résoudre un problème, un peu comme une recette. Les langages impératifs incluent C, C ++ et Java; les langages fonctionnels incluent Haskell; les langages de programmation logique incluent Prolog.

Les langages impératifs sont parfois divisés en deux sous-groupes: procedural langages comme C et langages orientés objet . Les langages orientés objet sont cependant un peu orthogonaux aux regroupements, car il existe des langages fonctionnels orientés objet (OCaml et Scala étant des exemples).

Vous pouvez également regrouper les langages en tapant: static et dynamic . Les langages à typage statique sont ceux dans lesquels le typage est vérifié (et généralement appliqué) avant dexécuter le programme (généralement pendant une phase de compilation); les langages dynamiquement typés reportent la vérification de type au runtime. C, C ++ et Java sont des langages de type statique; Python, Ruby, JavaScript et Objective-C sont des langages à typage dynamique. Il existe également des langages non typés, qui incluent le langage de programmation Forth.

Vous pouvez également regrouper les langues par leur discipline de frappe: faible typage, qui prend en charge les conversions de type implicites, et strong typage, qui interdit les conversions de type implicites. Les lignes entre les deux sont un peu floues: selon certaines définitions, C est un langage faiblement typé, tandis que dautres le considèrent comme fortement typé. La discipline de frappe nest pas vraiment un moyen utile de regrouper les langues, de toute façon.

Commentaires

  • Jallais poser quelque chose de similaire, mais +1 et ajoutez des commentaires à la place. Chaque catégorie ou combinaison a également de nombreuses retombées créées en se concentrant sur des éléments particuliers. La POO, par exemple, engendre: la POO basée sur un prototype, la programmation orientée aspect, la programmation basée sur les composants, etc. Paradigmes fonctionnels également ont des spin-offs, tels que des langages où un processus ou un thread asynchrone est lunité de base et vous programmez en composant des processus parallèles ensemble.
  • Comment les langages de script, par exemple VBScript, sinscriraient-ils dans cela? un peu procédural et un peu OO car on peut créer différents types, est-ce que cela en ferait un hybride?
  • Cest exactement ce que je cherchais. Merci beaucoup.
  • @ Les langages JB King OOP sont généralement procéduraux, au moins dans les corps de méthode.En outre, ' est une idée fausse courante selon laquelle POO signifie " objets ". De nombreux langages ont des types de données et des objets. Il y a ' beaucoup de débats sur la définition exacte de la POO, mais elle inclut généralement lhéritage et / ou lencapsulation (état privé) comme thèmes majeurs. Une langue sans lun ou lautre sous une forme ou une autre serait difficile à classer comme une langue POO.
  • @sova Je ne peux penser quà deux langues qui fonctionnent un peu comme ça. Erlang est fortement basé sur le traitement parallèle, mais si vous voulez plus comme ce dont je parlais exactement, vous devriez vous pencher sur Polyphonic C #. Il ' est un langage de recherche (maintenant plié en C-omega) basé sur Pi-Calculus (comme comment FP est basé sur lambda calc) Pi-calc est basé autour de lunité dun processus , et vous déclarez des processus et une combinaison dappels synchrones et asych. Regardez également les flèches dans FP, en particulier Haskell. Les flèches ressemblent beaucoup à ça.

Réponse

  • Assemblée
  • Procédural
    • Basique
    • C
  • Orienté objet
    • C #
    • Java
  • Déclaratif
    • Prologue
    • SQL
  • Fonctionnel
    • Lisp
    • Haskell

Ce sont les principaux, mais il y a « beaucoup dautres paradigmes là-bas, et il y a beaucoup de chevauchements entre eux.

Commentaires

  • Et déclarative (par exemple Prolog, SQL)?
  • @Bruce, je les ai maintenant.
  • Oui, cétait lidée générale que jai apprise quelque part en cours de route.
  • Ne devrait pas t que lassembly soit considéré comme procédural?
  • Que diriez-vous des langages de programmation concaténatifs (basés sur la pile), tels que Forth et Factor? Vous pourriez le considérer comme un type de programmation fonctionnelle, mais elle ' est probablement assez distincte pour mériter dêtre mentionnée. en.wikipedia.org/wiki/Concatenative_programming_language

Réponse

Pour les types de langages de programmation (Paradigmes), regardez ici:
http://en.wikipedia.org/wiki/Programming_paradigm

Pour dautres caractéristiques des langages de programmation (par exemple, Type Systems), regardez ici: http://en.wikipedia.org/wiki/Programming_language

Commentaires

  • ah! " paradigme " quel bon mot! merci
  • @sova Jaccepterais cela comme la meilleure réponse, car il y a tout simplement trop de paradigmes à énumérer dans une réponse P.SE, encore moins pour décrire les nuances de chacun.

Réponse

Cliquez sur limage pour voir le PDF. Affiche des paradigmes de programmation

Vous devriez regarder Paradigmes de programmation pour les nuls: ce que tout programmeur devrait savoir par Peter Van Roy. Cela vous donnera un aperçu de la façon dont cela se passe à l’extérieur.

Si vous souhaitez aller plus loin, vous pouvez lire Concepts, techniques et modèles de Programmation informatique . Vous napprendrez pas un groupe de langues de cette manière, mais vous apprendrez des paradigmes qui se cachent derrière différents types de langues. Donc, apprendre une nouvelle langue sera plus facile pour vous.

Réponse

  • Procédure: Assemblage, Java, C #, F #, Lisp, Fortran.

  • Basé sur un ensemble: SQL.

  • Basé sur des modèles: Perl, Regex, Snobol.

  • Basé sur un arbre: XSLT.

  • Basé sur un tableau: APL.

Commentaires

  • +1 pour utiliser un autre type de classification, et aussi pour reconnaître que ' procédural ' contient en fait la plupart des autres classifications de '. (bien sûr cela signifie seulement que le mot a très peu de sens, et que la viande est dans de telles subdivisions)

Réponse

Il existe différentes manières de répondre à cette question, mais elles peuvent être catégorisées comme suit:

Langage machine: Le langage machine est un langage de programmation de bas niveau. Il est facilement compris par les ordinateurs mais difficile à lire par les gens. Cest pourquoi les gens utilisent des langages de programmation de plus haut niveau. Les programmes écrits dans des langages de haut niveau sont également compilés et / ou interprétés en langage machine afin que les ordinateurs puissent les exécuter.

Langage dassemblage: Le langage dassemblage est une représentation du langage machine. En dautres termes, chaque instruction de langage dassemblage se traduit par une instruction de langage machine. Bien que les instructions en langage assembleur soient lisibles, les instructions sont toujours de bas niveau. Un inconvénient du langage dassemblage est quil nest pas portable, car chaque plate-forme est livrée avec un langage dassemblage particulier.

Langage de haut niveau: Les langages de haut niveau sont ce que la plupart des programmeurs utilisent de nos jours. Les langages tels que C, C ++ et Java sont tous des langages de haut niveau. Les avantages des langages de haut niveau sont quils sont très lisibles et portables. Un inconvénient des langages de haut niveau est quils sont moins puissants que les langages dassemblage. Parce quune seule instruction dans un langage de haut niveau est traduite en plusieurs instructions en langage machine.

Les langues de haut niveau peuvent être classées comme suit:

  1. Langues fonctionnelles: En langage fonctionnel, un programme est divisé en définitions de fonctions. Les langages fonctionnels sont une sorte de langage déclaratif. Ils sont principalement basés sur le lambda-calcul typé avec des constantes. Certains des langages Function célèbres sont Scala, F #, Clojure et Lisp.

  2. Langages procéduraux: Dans les langages procéduraux, un programme est écrit en une séquence détapes à suivre pour produire un résultat. COBOL, FORTRAN et C sont des langages procéduraux.

  3. Langages de programmation orientés objet: Dans les langages POO, un programme est divisé en objet contenant des données ainsi que des méthodes qui opèrent sur les données. Java, C # et C ++ sont des langages OOP.

  4. Langages de programmation logique: Les langages logiques sont utilisés pour créer des programmes qui permet à lordinateur de raisonner logiquement. Par exemple: Langage logique

Pour une étude approfondie, consultez:

Réponse

Jai tendance à penser en termes de fonctionnalités:

Syntaxe:

C-Based ou what-have-you. Java a une syntaxe basée sur C. Je recommande vivement dessayer quelque chose comme Python ou Ruby pour vous sortir de la syntaxe et réfléchir davantage en termes de principes fondamentaux du fonctionnement dun langage donné. Je suis d’avis qu’aucune syntaxe n’a besoin d’être plus volumineuse que celle du langage C et n’a aucun problème à créer des blocs autour des espaces blancs.

Compilé vs. interprété w. Build-Process vs Interpreted / Console:

Je connais très peu les problèmes de compilation et denvironnement dexécution, mais je comprends cela il y a là un tas de problèmes auxquels je pense rarement.

De même, il y a beaucoup de langages interprétés qui ont encore quelque chose dun processus de compilation pour fonctionner à lintérieur dune machine virtuelle comme le fait Java. Il vous reste à reconstruire pour voir les modifications apportées.

Et puis il y a JavaScript et Python que vous pouvez exécuter à la volée, commande par commande dans une console dans un environnement en direct. Les trois peuvent conduire à des manières très différentes décrire du code.

Typage dynamique ou stricte:

Jai tendance à voir les deux comme des compromis de conception. Lorsque vous êtes à un niveau beaucoup plus bas et que les performances sont essentielles, le typage statique a beaucoup de sens. Je nai jamais compris cette notion selon laquelle lun est plus sûr quun autre mais je est venu dans un langage très plastique / dynamique où vous apprenez simplement comment fonctionne le système de frappe et à quoi sattendre, en gros. Les manigances de type sont rarement une préoccupation pour moi dans JS. À certains égards, la flexibilité peut rendre les choses plus robustes, bien que certes un peu plus mystérieuse pour un développeur de niveau plus Jr. si vous ne connaissez pas certains des trous dans le langage.

Portée au niveau du bloc vs portée de la fonction vs?:

Le niveau du bloc est le plus courant (tout entre {} dans la plupart des langages de syntaxe basés sur C). La portée de JavaScript est construite autour de fonctions (qui sont également utilisées pour créer des objets de manière aussi efficace). Il existe également une grande variation dans le type d’accès que vous avez depuis la portée interne à un périmètre extérieur. Je ne suis pas familier avec les autres schémas de cadrage mais je suis sûr quils existent.

POO classique vs POO prototypique vs presque POO (structures en C ?) vs Non-POO:

Même dans la POO basée sur les classes, il y a beaucoup de place pour la variation. Si vous pouvez faire de lhéritage multiple (ew, bien en excès, ew), définir des interfaces, etc …

En JavaScript, nous avons une sorte de POO prototypique hybride rabougrie où les objets sont considérablement plus simples, hautement mutables, mais nous avons toujours la possibilité de séparer linterface des préoccupations internes, ce que lOMI, est laspect important de lencapsulation .

Le truc avec la POO est quil y a vraiment beaucoup de choses que vous pouvez réaliser qui sont essentiellement orientées POO sans être techniquement OOP. Il y a des puristes bien sûr, mais en fin de compte, les Design Patterns visent à réaliser certaines abstractions qui fonctionnent bien dans certaines situations. Ne soyez pas trop rapide pour supposer que les idées dun langage basé sur la POO nont aucune utilité dans quelque chose qui est plus orienté vers la procédure. Et je ne parle pas de JavaScript. Ce nest pas du tout limité par sa version loufoque dun paradigme de POO basé sur un prototype.

Fonctions de première classe :

Ne pas les avoir dans une langue est une chose difficile pour moi dabandonner. Vous pouvez transmettre des fonctions comme sil sagissait de données à utiliser dans dautres contextes. Cela rend les schémas de gestion des événements en particulier très faciles à mettre en œuvre, mais cela rend également très facile dadapter le langage pour quil fonctionne comme vous le souhaitez. Cest, plus que tout ce que je soupçonne, ce qui a fait de JavaScript le succès quil a finalement été conçu en deux semaines et que la syntaxe approximative de Java lui a été appliquée en tant que schéma marketing.

Fermetures:

Je ne sais pas où en est le débat pour Java, mais je sais que beaucoup de développeurs Java réclamaient cette fonctionnalité il y a un an ou deux. Dans un langage sans fermeture, lorsquune fonction se ferme, tout ce qui est en quelque sorte capable de référencer des éléments de cette fonction ne pourra pas y accéder car il a été ramassé. Dans une fermeture, le contexte dexécution est lié de telle sorte que si vous « Pour pouvoir référencer des éléments à lintérieur de cette fonction fermée à partir dune autre portée comme dans un objet ou une fonction retournée, vous obtenez essentiellement ces variables telles quelles étaient lorsque la fonction sest fermée. Cest comme si vous vous coincez le pied dans la porte du ramasse-miettes, même si je soupçonne que cela est plus implémenté comme des copies de ces variables transformées en variables locales de lentité référente.

Rigide / Strict / Sûr ou vous donner à tous la corde que vous voulez:

Les développeurs JS et Java ont tendance à ne pas comprendre chacun autre du tout et je pense que cela a beaucoup à voir avec les deux langues tombant sur des côtés presque opposés de ce spectre de conception particulier. Je ne veux pas que vous me protégiez de moi-même ou des autres développeurs de mon équipe. Je veux faire beaucoup plus avec beaucoup moins de code et tout faire de manière très différente (mais cohérente pour un domaine donné) selon sur la situation. Il y a absolument des compromis entre les deux et beaucoup de langues ont tendance à se situer davantage au milieu.

Commentaires

  • Merci. ' est vraiment sympa de faire leffort dun vote défavorable sans explication.

Réponse

Je pense quun raccourci vers tout cela est dapprendre suffisamment de Lisp pour faire des choses semi-utiles. La plupart de ces paradigmes ont commencé comme des façons dutiliser Lisp, donc cest « un moyen simple pour essayer des choses.

Il existe un certain nombre de « types » de langues, mais de nouvelles peuvent toujours apparaître. Fondamentalement, le but dun langage est de permettre lencodage didées, de concepts ou dexigences, aussi directement que possible. À cette fin, il peut y avoir des situations où des paradigmes existants font défaut, et un nouveau peut être nécessaire.

Une façon de voir est en termes de structure de surface. Dans quelle mesure cela vous permet-il dencoder des idées de manière concise, de sorte que si vous changez davis sur ce que vous voulez, la modification correspondante du code est également facile, avec peu de chances dintroduire des bogues.

Une autre façon de regardez-le en termes de structure de contrôle. Quand la langue est exécutée (si cest le cas) quel est lordre dans lequel les choses se passent, pour accomplir ce que vous voulez? Les exemples sont: exécution directe simple, récursivité, retour en arrière, parallélisme. Un que jai découvert (toux modeste) était l exécution différentielle .

Un autre point de vue utile est que chaque fois quune structure de données est conçue, un langage est née. Les données sont « exécutées » par les programmes dapplication qui les parcourent et font des choses, tout comme un programme nest quun ensemble de données (comme des codes doctets) qui sont utilisées par un interpréteur pour faire des choses.

Commentaires

  • Cool. Japprendrai LISP et serai éclairé. Excitant: D
  • Cependant, si vous dites que le fait dutiliser une structure de données crée un nouveau langage intermédiaire, vous pouvez également affirmer quun nouveau langage est né dans chaque algorithme (toutes les opérations sont nécessairement effectuées sur une donnée structure), et avec la réduction, un nouveau langage est né dans chaque ligne de code. Je pense que vous voulez dire autre chose, mais je ' ne suis pas encore sûr de comprendre?
  • @sova: Pour moi, la théorie de linformation a été une grande révélation (à la fois Shannon et Kolmogorov). Il ' s sur la façon dont les significations sont codées et transmises à travers les canaux, avec des concepts de bande passante, de détection derreurs, de codage minimal, de caractère aléatoire, etc. Ainsi, les données codent les informations et les algorithmes sont des canaux . Les programmes codent les informations et la programmation est un canal. Alors, quelles informations sont encodées? doù vient-il et quand? où va-t-il? quelles sont les sources derreurs (bruit)? comment sont-ils corrigés? Jai trouvé que cétait une perspective utile.
  • @sova: (suite) Vous navez ' pas à maîtriser tous les mathématiques rebutants. Pour moi, ce qui importait, c’était le cadre qu’il m’a donné pour réfléchir.

Réponse

Je dois ajouter quil existe des langages de programmation pour des applications spécifiques. Celui qui me vient à lesprit est APT (Automatic Programmed Tool), un langage utilisé dans la fabrication des machines-outils.

Commentaires

  • Je me souviens de celui-là. Je lai peut-être même utilisé. Garçon, cétait à la pointe de la technologie. Vous navez pas ' à guider manuellement la fraiseuse, appuyez simplement sur le bouton de démarrage. Et sil y avait un bug, tout lenfer se déchaînerait.
  • Jai ' travaillé sur des programmes qui génèrent du gcode pour les fraiseuses. Jai ' littéralement détenu et vu les résultats de bogues de programmation, souvent les miens.
  • Jai passé 20 ans à installer des postprocesseurs sur des tas de systèmes.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *