Основы большинства процедурных языков почти одинаковы.
Они предлагают:
- Скалярные типы данных: обычно логические, целые числа, числа с плавающей запятой и символы
- Составные типы данных: массивы (строки - особый случай) и структуры
- Базовые конструкции кода: арифметика над скалярами, доступ к массиву / структуре, присваивания
- Простые структуры управления: if-then, if-then-else, while, для циклов
- Пакеты кодовых блоков: функции, процедуры с параметрами
- Области применения: области, в которых идентификаторы имеют конкретные значения
Если вы понимаете это, вы хорошо понимаете 90% языков на планете. Что делает эти языки немного более сложными для понимания, так это невероятное разнообразие странного синтаксиса, который люди используют, чтобы говорить одни и те же базовые вещи. Некоторые используют краткие обозначения, включающие нечетную пунктуацию (APL - крайность). Некоторые используют много ключевых слов (COBOL - отличный представитель). Это не имеет большого значения. Важно то, что язык достаточно самодостаточен, чтобы выполнять сложные задачи, не заставляя вас рвать на себе волосы. (Попробуйте написать код серьезного взлома строк в сценарии оболочки Windows DOS: он способен на Тьюринга, но на самом деле плохо во всем).
Более интересные процедурные языки предлагают
- Вложенные или лексические области, пространства имен
- Указатели, позволяющие одному объекту обращаться к другому, с динамическим распределением памяти
- Упаковка связанного кода: пакеты, объекты с методами, признаки
- Более сложный контроль: рекурсия, продолжения, замыкания
- Специализированные операторы: операции со строками и массивами, математические функции
Хотя это технически не свойство языка, а свойство экосистемы, в которой живут такие языки, это библиотеки, которые легко доступны или снабжены языком как часть инструмента разработки. Наличие широкого спектра библиотечных средств упрощает / ускоряет написание приложений просто потому, что не нужно заново изобретать то, что делают библиотеки. Хотя Java и C # считаются хорошими языками сами по себе, их действительно полезны огромные библиотеки, которые поставляются с ними, и легко доступные библиотеки расширений.
Языки, которые труднее понять, являются непроцедурными:
- Чисто функциональные языки, без заданий или побочных эффектов
- Языки логики, такие как Пролог, в которых происходят символьные вычисления и унификация
- Языки сопоставления с образцом, в которых вы указываете фигуры, которые соответствуют задаче, и часто действия инициируются совпадением
- Языки ограничений, которые позволяют вам определять отношения и автоматически решать уравнения
- Языки описания оборудования, на которых все выполняется параллельно
- Специфичные для домена языки, такие как SQL, цветные сети Петри и т. Д.
Существует два основных стиля представления языков:
- Основанный на тексте, в котором идентификаторы именуют объекты и информационные потоки неявно кодируются в формулах, которые используют идентификаторы для именования объектов (Java, APL, ...)
- Графический, в котором сущности рисуются как узлы, а отношения между сущностями рисуются как явные дуги между этими узлами (UML, Simulink, LabView)
Графические языки часто допускают текстовые подъязыки как аннотации в узлах и дугах. Графические языки Odder рекурсивно позволяют графы (с текстом :) в узлах и на дугах. Действительно странные графические языки позволяют графам аннотаций указывать на аннотируемые графы.
Большинство из этих языков основаны на очень небольшом количестве моделей вычислений:
- Лямбда-исчисление (основа для Lisp и всех функциональных языков)
- Почтовые системы (или методы переписывания строк / деревьев / графиков)
- Машины Тьюринга (изменение состояния и выбор новых ячеек памяти)
Учитывая, что большинство специалистов отрасли уделяют внимание процедурным языкам и сложным структурам управления, вы хорошо справляетесь, если хорошо изучаете один из наиболее интересных языков в этой категории, особенно если он включает в себя некоторый тип объектной ориентации.
Я настоятельно рекомендую изучить Scheme, в частности, из действительно замечательной книги:
Структура и интерпретация компьютерных программ . Это описывает все эти основные понятия. Если вы знаете это, другие языки покажутся довольно простыми, за исключением глупого синтаксиса.