Каковы различные понятия языка программирования и какие языки показывают их в чистом виде - PullRequest
5 голосов
/ 03 ноября 2010

Я не эксперт по языкам, но недавно я изучил языки и пытаюсь получить представление об основных понятиях и «их» языках. Это похоже на другой вопрос о книгах . Итак, во-первых, каковы основные понятия языка программирования, например

  • структурированный
  • процессуальное
  • объектно-ориентированный
  • объектно-ориентированный - на основе прототипа (например, Java Script)
  • функционал (например, Haskell)
  • логическая ориентация (например, пролог)
  • мета (если это чистая концепция?)
  • на основе стека (например, Forth)
  • математический / ориентированный на массив (например, APL)
  • декларативный
  • конкатенация (например, PostScript)
  • (определенно неполный список ...)

и, во-вторых, чтобы хорошо разбить эти концепции, какой язык программирования будет основываться на / реализовывать его базовую концепцию наиболее естественно и чисто?

  • Например, Java - это ОО, но это не очень хороший пример, потому что это не чистый ОО из-за атомов.
  • Lisp, как известно, является функциональным языком, но он мультипарадигмальный, поэтому он не чистый. Но Лисп может быть чистой реализацией «на основе списка» (если это считается концепцией).
  • Существует ли структурированный язык (без GOTO), но не процедурный? (Возможно XSLT v1.x)

Ответы [ 3 ]

8 голосов
/ 03 ноября 2010

Вы ищете здесь термин «парадигма программирования», и существует их очень много .Вы можете получить список языков, которые поддерживают каждый из них, на этой странице Википедии и ее последующих ссылках.

Для «чистых» воспроизведений любого из них это сложнее, потому что это зависит от того, на каком уровне чистоты вы находитесьищу.

  • Для чисто структурированного (при любом достаточно свободном определении здесь "чистого") вы можете, например, взглянуть на Модула-2 .
  • Для чистой объектно-ориентированной ориентации вы прежде всего смотрите на Smalltalk и его аналог, если вы хотите, чтобы абсолютно все обрабатывалось единообразно (на самом деле не требуется в большинстве распространенных определений!) Или вы смотрите на языкикак Java и Eiffel , если вы примете примитивные типы под этим заголовком.
  • Для функциональности вы, скорее всего, ищете Haskell .
  • Для логического программирования архетипическим языком является Пролог , но он не совсем чистый.Единственный (в основном) чистый логический язык, о котором я знаю, это Меркурий , и это только в том случае, если вы рассматриваете его функциональные блоки как по существу совместимые с его логическими фрагментами.

...И так далее, и так далее.Вы поняли.

2 голосов
/ 18 ноября 2010

Я думаю, что Паскаль является каноническим процедурным языком.

Я также думаю, что Лисп (как ни странно, не ML) является каноническим "мета-языком".

С одной стороны, макрос - это фрагмент программы.который изменяет структуру данных, которая представляет фрагмент программы - так что вы используете язык для настройки языка.Во-вторых, общепринятой практикой является написание интерпретаторов с самостоятельным размещением, традиционно называемых метациркуляционными оценщиками: это программы, которые программируют и запускают их.

Конечно, любой другой язык может это делать.В Python у вас есть доступ к компилятору python, а PyPy - это реализация на python.Но у Лиспа, я думаю, самая сильная традиция делать это.

Но я аутсайдер Лиспа, так что я знаю ... 'надежда-это-помогает; -)

0 голосов
/ 15 января 2011

Благодаря ПРОСТО МОЕ правильное МНЕНИЕ ответом меня указали в правильном направлении. Я дам список парадигм вместе с их чистыми языками, насколько я узнал до сих пор:

  • императив
    • неструктурированный --- ранний бейсик, сборка
    • структурированный ---?
    • процессуальное ---?
    • модульная --- Модула-2, может Паскаль
    • объектно-ориентированного
      • на основе класса --- Smalltalk
      • на основе прототипа --- Self, может быть Java Script, Lua
  • декларативный --- SQL, регулярные выражения, CSS
    • логика --- Меркурий, может Пролог
    • функционал --- Схема, Хаскелл
      • молчаливая / точка-бесплатно
        • конкатенация --- Радость, Кот
        1036 **

На другой "оси" имеем

  • скалярные --- большинство из них
  • массив --- APL

Не знаю, где его поставить:

  • на основе стека --- Forth, Postscript
...