Языки программирования, синтаксис, семантика, прагматика, рекомендую к просмотру.



Использовал материалы из этой лекции при подготовке своего доклада (и статьи) 4 года назад. Сохранились заметки:



Свойства человеческого интелекта сильно отличаются от свойств вычислительной машины.



Машина - это большой конечный автомат, точнее конечный преобразователь (трансдьюсер). Ее инструкции - набор переходов(?). Человеку сложно оперировать такими понятиями, особенно в большой программе.



Программные инструменты программиста, особенно ЯП, расчитаны на что бы помочь декомпозировать и повысить уровень абстракции машинного кода.



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



Но чем выше уровень абстракции, тем больше падает эффективность программы (условно, 1 уровен абстракции вдвое понижает вычислительную производительность)



C 28 по 45 минуты продолжая про историю языков программирования:

Алгол68 - имел на тот момент невероятно мощную и математически доказательную систему типов, но слишком сложную в использовании.

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

ПЛ/1 - ЯП со свободным синтаксисом и [уникальной] возможностью управлять точностью вычислений. В нем можно было делать слишком много (приведение разнообразных типов) и разобраться в итоговом коде было сложно.

"логические" языки, вроде PROLOG сложно назвать языками программирования.

Изначально ООП подразумевал концепцию объектов, которые просто обмениваются сообщениями

Будущее программирования - функциональщина

Язык в общем и язык программирования в частности: синтаксис (набор правил формализации), семантика (описание семантического домена - набора функций), прагматика.



Перебор возможных вариантов работы [с данными] программы очень похоже формальное математическое доказательство - это называется Соответствие Карри — Ховарда. Отличие, от математического доказательства, написание программы заключается в том что логика построения программы строится не на формальных доказательствах, а интуитивных умозаключениях программиста (накладывая абстрактный мыслительный процесс на формализацию ЯП).



Семантика позволяет конкретизировать до формального уровня интуитивное представление кода программы. Иначе говоря "с первого взгляда" код может иметь одну логику поведения, но учитывая семантику можно "увидеть" дополнительные аспекты \ ветвления алгоритма.