Что такое язык программирования?
Определение Языка Программирования
«Формальная знаковая система, предназначенная для записи компьютерных программ. ЯП определяет набор лексических, синтаксических, семантических правил, задающих вид программы и действия, которые выполнит исполнитель (компьютер) под её управлением.»
«формальная знаковая система…» - определение для курса «Теория компиляторов»;
Лексика – часто умещается в одну страницу,
Синтаксис. Полная КС-грамматика для C++ занимает несколько печатных листов. Для программиста синтаксис – лишь малая часть языка.
Семантика:
i. Ключевая часть языка. «Смысл программы» == «Результат выполнения»; ii. Определяющая часть. Языки с разным синтаксисом, но одинаковой семантикой, по сути, не отличаются; iii. Наиболее изменяемая часть. Наследование. Move-семантика.
Язык – выразительные средства, которые использует программист.
Область применения языков программирования
a. Системное программирование, коммерческие приложения, искусственный интеллект, научные расчёты, скрипты, специализированные языки.
Критерии оценки ПО
a. Все хотят Быстро && Недорого && Качественно, b. Разные требования к срокам, стоимость ошибки, стоимость эксплуатации; c. Многие качества определяются не столько языком, сколько инфраструктурой: технологии, библиотеки, фреймворки, методология разработки.
Критерии оценки ЯП:
a. Читабельность: i. Читаем чаще, чем пишем; ii. Поиск ошибки; iii. Переиспользование кода; iv. Концепция Write-Only-Language. Языки J, APL. b. Скорость разработки определяют фреймворки и библиотеки; c. Надёжность определяется методологиями: i. Перепутать AND и OR можно в любом ЯП; ii. Unit-тесты; iii. Автотесты; iv. Code Review; v. Парное программирование. d. Стоимость: i. Стоимость инженеров (разработчиков и QA), ii. Обучение, iii. Стоимость среды разработки и коммуникации команды, iv. Стоимость выполнения, v. Стоимость ошибки. vi. Априори просуммировать и сравнить, не имея опыта подобной работы, невозможно.
Сравнения языков программирования – holywar
a. Лучший язык – тот, на котором ты напишешь быстрее и без ошибок; b. Скорость работы приложения вторична и может быть повышена за счёт конкретных оптимизаций.
Парадигма программирования:
a. Свод принципов и концепций, определяющих образ мыслей программиста, пишущего программу на данном языке. b. Не путать с парадигмами проектирования. Их всего 2: структурное и ООП.
c. Надпарадигмы: Императивное vs Декларативное. d. Императивные Парадигмы: i. Процедурное; • Структурное ii. Объектно-Ориентированное; • Прототипное наследование, • Аспекты, • Компоненты, • Агенты. e. Декларативные парадигмы i. Декларативное; ii. Функциональное программирование; iii. Логическое программирование • DSL для конкретного инструмента?