Изучение каждого типа языка программирования


24

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

Я узнал , процедурный язык (Perl), но то , что есть другие типы?

Каковы различия между ними и каковы некоторые примеры каждого?


8
Вы должны знать, что существует множество перекрывающихся способов классификации языков. Наиболее распространенным является программирование парадигмы, но даже в этом случае существуют большие и второстепенные различия, многие из которых полностью отделены друг от друга, и многие языки разделяются на несколько парадигм.

1
Я бы забыл о категориях - если вы действительно заинтересованы в изучении языка, я бы посоветовал и Lisp, и Scala, если вы можете справиться с этими двумя, которые вы уже изучили.
— Билл К

3
Совет Питера Норвига : изучайте как минимум полдюжины языков программирования. Включите один язык, который поддерживает абстракции классов (например, Java или C ++), один, который поддерживает функциональную абстракцию (например, Lisp или ML), один, который поддерживает синтаксическую абстракцию (например, Lisp), один, который поддерживает декларативные спецификации (например, шаблоны Prolog или C ++), один который поддерживает сопрограммы (например, Icon или Scheme), и тот, который поддерживает параллелизм (например, Sisal).
— legends2k

Ответы:


34

Несмотря на то, что терминология далека от стандартизированной, общий способ классифицировать основные парадигмы программирования на

  • процедурный
  • функциональная
  • логический
  • Объектно-ориентированный
  • общий

Вы, кажется, уже знаете, что такое процедурное программирование.

В функциональных языках функции рассматриваются как первоклассные объекты. Другими словами, вы можете передать функцию в качестве аргумента другой функции, или функция может вернуть другую функцию. Функциональная парадигма основана на лямбда-исчислении, и примерами функциональных языков являются LISP, Scheme и Haskel. Интересно, что JavaScript также поддерживает функциональное программирование.

В логическом программировании вы определяете предикаты, которые описывают отношения между сущностями, такие какpresident(Obama, USA) или president(Medvedev, Russia). Эти предикаты могут быть очень сложными и включать переменные, а не только литеральные значения. После того, как вы определили все свои предикаты, вы можете задавать вопросы своей системы и получать логически непротиворечивые ответы.

Основная идея в логическом программировании состоит в том, что вместо того, чтобы сообщать компьютеру, как вычислять вещи, вы говорите ему, что . Пример: ПРОЛОГ.

Объектно-ориентированный парадигма в некотором смысле является расширением процедурного программирования. В процедурном программировании у вас есть ваши данные, которые могут быть примитивными типами, такими как целые числа и числа с плавающей запятой, составными типами, такими как массивы или списки, и пользовательскими типами, такими как структуры. У вас также есть свои процедуры, которые работают с данными. Напротив, в ОО есть объекты, которые включают как данные, так и процедуры. Это позволяет вам иметь хорошие вещи, такие как инкапсуляция, наследование и полиморфизм. Примеры: Smalltalk, C ++, Java, C #.

Общее программирование было впервые введено в Аде в 1983 году и стало широко распространенным после введения шаблонов в C ++. Это идея, что вы можете написать код без указания реальных типов данных, с которыми он работает, и заставить компилятор выяснить это. Например, вместо того, чтобы писать

void swap(int, int);
void swap(float, float);
....

ты бы написал

void swap(T, T);

один раз, и пусть компилятор сгенерирует определенный код для того, что Tможет быть, когда swap()фактически используется в коде.

Общее программирование поддерживается в различной степени C ++, Java и C #.

Важно отметить, что многие языки, такие как C ++, поддерживают несколько парадигм. Также верно и то, что, даже если говорят, что язык поддерживает определенную парадигму, он может не поддерживать все возможности этой парадигмы. Не говоря уже о том, что существует много разногласий относительно того, какие функции требуются для конкретной парадигмы.


2
К какой категории относится SQL?
— Кирк Куйкендалл

@KirkKuykendall SQL будет специализированным или «маленьким» языком.
— Кевин Лаккумент

17
SQL является декларативным языком. Вы говорите, что хотите, он выясняет, как его получить. («Логические» языки, такие как Prolog, представляют собой другое подмножество декларативных языков)
— Izkata

3
Можем ли мы получить описание процедурного, чтобы сделать ответ более полным?
— deworde

3
@Dima Хорошее резюме. Тем не менее, сравнительно небольшая мелочь: «универсальное программирование» появилось не благодаря использованию шаблонов в C ++, а также очень часто используется в функциональных языках, таких как Haskell.
— Андрес Ф.

11

Языки программирования имеют ряд в основном ортогональных особенностей; самый выдающийся лежит в парадигме или парадигмах, которые они поддерживают. Википедии статья охватывает парадигм исчерпывающе; Наиболее важные парадигмы, вероятно, следующие:

  • Процедурный / структурированный
  • функциональная
  • Объектно-ориентированный
  • Событийный и аспектно-ориентированный
  • общий
  • логика

Но языки отличаются и другими способами:

  • Система типирования (динамическая и статическая типизация, сильные и слабые типы)
  • Процесс сборки и среда выполнения (интерпретируемая, скомпилированная с помощью байт-кода, полностью скомпилированная)
  • Управление памятью (ручное, как C / C ++, обязательный автоматический сбор мусора, как Java, необязательный GC, как D, ...)
  • Дисциплина оценки (стремление против ленивых; по умолчанию большинство языков стремятся, но многие предоставляют ленивые конструкции)
  • Правила области видимости (сравните, как работает область действия в PHP, Javascript и C, трех языках, которые в остальном очень похожи с точки зрения синтаксиса)

2

В настоящее время в моде несколько различных программных парадигм:

  • Объектно-ориентированный - VB.NET, C #, Java попадают в эту категорию. Код организован вокруг объектов, которые имеют поведение и связанные данные и которые обмениваются данными друг с другом посредством передачи сообщений.
  • Функциональные - Хаскель, Схема, Лисп и F # попадают в эту категорию. Чистые функции, которые не имеют побочных эффектов. Думайте функции как в математике. Часто можно расширить сам язык через его конструкции.

Это единственные другие типы?
— Динамичный

@ perl.j - Нет, но это основные, которые широко используются в наши дни. Смотрите википедию - парадигма программирования .
— Одед

@ perl.j также существует на основе стека: например, Forth и Postscript. Логика: такая как Пролог.
— Джетти

2
И нулевым типом является C;)
— Yati Sagade

Реальный вопрос заключается в том, сколько из них нужно разработчику для эффективного кодирования большинства проблем программирования.
— JeffO

0

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

Если вы поступаете в колледж, вам следует пройти курс по языкам программирования, поскольку он направлен на представление различных типов языков программирования и того, для чего они лучше всего используются.


0

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

  • Языки электронных таблиц (Excel, Google Forms): предназначены для обработки табличных данных.
  • Языки массивов (APL, J): предназначены для быстрой обработки многомерных массивов. В J (+/ % #)&.:*:вычисляет среднеквадратичное значение массива. Известен тем, что он лаконичен, известен тем, что нечитаем.
  • Языки автоматизации (AutoHotkey, Bash): предназначены для упрощения общих задач, таких как заполнение форм, загрузка файлов и т. Д.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.