Есть ли список возможностей для автоматического языка программирования?

Я ищу такие вещи, как Dynamic typing, Static Typing, Weak Typing и Strong Typing.

Помимо функций OO, таких как полиморфизм, наследование, вложенные классы, внутренние классы, абстрактные классы, чистые виртуальные функции.

Кроме того, такие вещи, как отражение, статическое связывание, динамическое связывание и т.д.

Однако я не ищу такие вещи, как поток управления, встроенные типы или синтаксический сахар, т.е. A [5] против A.get(5). Хотя, это не помешает.

Было бы замечательно, если бы что-то подобное существовало, а также отображало эти понятия на определенные языки.

Я знаю, что многие из этих функций уже объяснены в Википедии, но не доступны быстро, если я уже не знаю, что эти функции (и я помню), или просто найти взаимосвязанные ссылки. Фактически единственный раз, когда я использую Википедию для чего-то вроде этого, я просто вижу, что кто-то ссылается на идею, которую мне нужно искать.

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

Если что-то вроде этого не существует, почему?

Это потому, что разные языки программирования решили назвать некоторые из этих вещей по-другому, но на самом деле делают то же самое? (т.е. Чистая виртуальная функция (С++) против абстрактных методов (Java)). В то время как другие могут называть вещи одинаковыми, но делать что-то немного другое? (Ключевое слово Protected в Java против С++). Другая причина может заключаться в том, что языки просто не имеют достаточно общих компонентов для компиляции списка, подобного этому, и лучше изучить язык, и он включает в себя по одному за раз? В этом случае я, вероятно, скомпилирую свой "список функций", когда узнаю язык...

Спасибо за чтение!:)

Ответы

Ответ 1

Очень хорошие объяснения парадигм программирования и концепций программирования, из которых построены эти парадигмы, найдены в работах Питера ван Роя. Особенно в книге Концепции, методы и модели компьютерного программирования Питера Ван Роя и Сеифа Хариди. (Здесь сопутствующая вики.) CTM (как это общеизвестно в отрасли) использует multi-paradigm Язык распределенного языка Oz, чтобы представить все основные парадигмы программирования.

Питер ван Рой также сделал этот удивительный плакат, который показывает 34 основные парадигмы, их отношения и позиции на разных осях. Плакат в основном представляет собой невероятно сжатую версию CTM. Более подробное объяснение этого плаката содержится в статье Программирование парадигм для чайников: что должен знать каждый программист, которая появилась в качестве главы в книге New Вычислительные парадигмы для компьютерной музыки, под редакцией Г. Ассаяга и А. Герцо. Это объясняет, например, очень кратко и легко понять, что такое парадигма программирования, какова концепция программирования и как эти два связаны.

Еще одна замечательная книга, демонстрирующая несколько основных парадигм программирования, - это Структура и интерпретация компьютерных программ Гарольда Абельсона и Джеральда Джей Суссмана. Эта книга была основой MIT Introduction to Programming (6.001) для студентов в течение нескольких десятилетий. Курс, преподаваемый самими Абельсоном и Суссманом, был записан на корпоративном обучении Hewlett-Packard в 1986 году.

Вы можете найти видеозаписи и учебные материалы из курса Spring 2005 на веб-сайте MIT OpenCourseWare. Еще одна запись курса из маломасштабного проекта Университета АрсДигита MIT. SICP также преподавался в других университетах, фактически курс 2010 года в Беркли только что закончился.

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

Основное различие между SICP и CTM - это дидактический подход: CTM демонстрирует большинство основных парадигм, используя чрезвычайно мощный язык с несколькими парадигмами, который уже поддерживает их (в основном распределенные Oz, но также и некоторые другие). SICP OTOH демонстрирует их, реализуя их на языке, который не поддерживает их изначально (подмножество Схемы). IOW: CTM научит OO показывать программы, написанные на языке OO, SICP, внедряя систему OO на Схеме. Увидев Object-Orientation, реализованную в дюжине строк кода, это потрясающе.

Концепции дизайна на языках программирования (Франклин А. Турбак и Дэвид К. Гиффорд с Марком А. Шелдоном) - еще одна замечательная книга.

Концепции языков программирования (Роберт В. Себесто) объясняет, ну, концепции языков программирования, начиная с Konrad Zuse Plankalkül, продолжая первые реальные языки программирования, такие как Fortran, Lisp, Cobol, Algol, BASIC и на C, С++, Java и Ada.

Понятия на языках программирования (Джон К. Митчелл) - это еще одна книга, которая часто цитируется, но я еще не читал себя, к сожалению.

То же самое для Основы языков программирования (Daniel P. Friedman и Mitchell Wand) aka EoPL.

Язык программирования Pragmatics (Майкл Л. Скотт) больше посвящен внедрению концепций языка программирования, однако он также говорит о них таким образом, что как сообщается, очень доступно. (Опять же, я не читал этого.)

Поскольку вы много спрашивали о типизации, я бы отказался не упоминать Типы и языки программирования (Бенджамин К. Пирс), или TaPL, как его обычно называют. Это в основном книга о Теории Типа, относящаяся к Языки программирования. Обратите внимание, однако, что его представление о типах не является бесспорным: например, он довольно плоский, отрицает существование динамического набора текста.

Чтобы сбалансировать это очень строгое определение Пирса, вы обязательно должны прочитать блестящее Типовое программирование от Luca Cardelli. В статье он утверждает, что программирование, использующее типы как конструкцию моделирования и структурирования вместо простой системы безопасности, является самостоятельной программной парадигмой. (Это, например, резко контрастирует с плакатом и книгой Питера ван Роя, которые сознательно игнорируют типизацию.)

Отличным ресурсом является Lambda the Ultimate (на самом деле я познакомился со всеми вышеперечисленными материалами для чтения. )

Ответ 2

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

Понятия OO, а также концепции других парадигм можно найти в соответствующих подкатегориях http://en.wikipedia.org/wiki/Category:Programming_paradigms

http://en.wikipedia.org/wiki/Category:Programming_constructs содержит много терминов, связанных с программированием.

Аналогично, http://en.wikipedia.org/wiki/Category:Type_theory содержит такие известные термины, как статический/динамический/слабый/сильный ввод текста и многое другое, если вы интересно.

И так далее...