Теория языков программирования
-
Каррирование функций: Преобразование функций с несколькими аргументами
Каррирование функций: преобразование функции с несколькими аргументами в последовательность функций с одним аргументом. Математика, программирование, частичное применение.
-
Ленивые вычисления в программировании
Ленивые вычисления в программировании: отложенная оценка выражений, избежание повторных вычислений, работа с бесконечными структурами данных и ошибками.
-
Меркурий: Функциональный язык логического программирования
Меркурий – функциональный логический язык программирования, сочетающий Prolog и Haskell. Строгая типизация, надежность и подходит для реальных задач.
-
Взаимная рекурсия: определение и применение
Взаимная рекурсия в математике и программировании: определение, примеры (деревья, парсеры). Оптимизация хвостовых вызовов для глубокой рекурсии.
-
Рекурсия: самоповторяющиеся процессы и определения.
Рекурсия: определение, примеры в математике и программировании. Самоповторяющиеся концепции и процессы, избегающие бесконечных циклов.
-
Референциальная прозрачность в программировании и философии языка
Референциальная прозрачность в программировании и философии: замена выражений эквивалентными значениями не меняет результат. Различия и примеры.
-
Машина SECD: Виртуальная машина для компиляции функциональных языков программирования
SECD-машина: виртуальная машина для компиляторов функциональных языков. Основана на лямбда-исчислении, разработана Питером Ландином в 1964 году.
-
Нотация Z: Формальное описание вычислительных систем
Z-нотация: формальный язык спецификаций для моделирования компьютерных систем. Разработан Ж.-Р. Абриалем, применяется для чёткого описания программ и систем.
-
Алгоритмическое решение уравнений: унификация в логике и информатике
Унификация – алгоритм решения уравнений в логике и информатике. Ключевые понятия: подстановка, типы данных, системы типов, алгоритм Хинли-Милнера.
-
Денотационная семантика языков программирования: математическое представление
Денотационная семантика: формализация языков программирования через математические объекты. Определение значений выражений, композиционность семантики.
-
Теоретические вычислительные модели: абстрактные машины
Абстрактные машины в информатике: теоретические модели вычислений, анализ работы систем, математическая основа программ. Независимость от железа.
-
Формальные языки спецификаций в информатике
Языки спецификаций в информатике: описание систем на высоком уровне, анализ требований и проектирование. Отличаются от языков программирования.
-
Unlambda: Минималистичный функциональный язык программирования
Unlambda: минималистичный функциональный язык программирования, основанный на комбинаторной логике. Turing-полный, без переменных и лямбда-выражений.
-
Комбинаторная логика: формализм без переменных
Комбинаторная логика: формализм без переменных. Основана на комбинаторах, заменяющих кванторы. Модель вычислений и база функциональных языков программирования.
-
Комбинатор фиксированной точки Y в комбинаторной логике
Фиксированные точки в комбинаторной логике и лямбда-исчислении: определение, применение для рекурсивных функций, комбинатор Карри Y. Основы функционального программирования.
-
Clean: Функциональный язык программирования с уникальной системой типов
Clean – функциональный язык программирования, разработанный с 1987 года. Похож на Haskell: прозрачность, ленивые вычисления, сборка мусора.
-
Уникальные типы в функциональном программировании
Уникальные типы в программировании: гарантия однопоточного использования объектов, оптимизация кода и повышение эффективности функциональных языков.
-
Формальные методы в разработке программного обеспечения
Формальные методы в Computer Science: математические техники для разработки и верификации ПО и оборудования. Логика, семантика, типы – повышение надежности!
-
LCF: Автоматический доказыватель теорем 1970-х годов.
LCF: интерактивный автоматический доказатель теорем 1970-х. Основан на логике вычислимых функций, ввёл язык ML для тактик доказательства и абстрактных типов данных.
-
ACL2: Язык программирования и автоматический доказатель теорем
ACL2: язык программирования и автоматический теорем-доказатель для верификации ПО и оборудования. Основан на Common Lisp, открытый исходный код.
-
Логика Хоара: Правила проверки корректности программ
Логика Хоара: формальная система для проверки корректности программ. Правила Хоара, тройки Хоара, доказательство правильности кода, формальные методы.
-
Программирование с ограничениями
Программное обеспечение с ограничениями (CP): парадигма решения задач, где связи между переменными задаются в виде ограничений. ИИ, компьютерные науки.
-
Система Mizar: Формализация математических знаний и доказательств.
Mizar: формальный язык для математических доказательств, ассистент проверки и библиотека формализованной математики. Проект Mizar – крупнейшая база верифицированных теорем.
-
Декартово замкнутые категории: теория и приложения
Декартово замкнутая категория в теории категорий: определение, связь с лямбда-исчислением и логикой. Обобщение – замкнутые моноидальные категории.
-
Функции высшего порядка
Функции высшего порядка: определение, примеры в математике и программировании. Принимают/возвращают функции. Операторы, функционалы, HOF.
-
Коммуницирующие последовательные процессы (CSP): формальная модель конкурентности.
CSP: язык для описания параллельных систем. Теория конкурентности, разработка языков программирования (occam, Erlang, Go). Применение в промышленности.
-
Формальная верификация аппаратного и программного обеспечения
Формальная верификация: доказательство корректности алгоритмов и систем с помощью математических методов. Безопасность, надежность ПО и оборудования.
-
Операционная семантика языков программирования: подходы и классификация
Операционная семантика языков программирования: формальное описание выполнения программ, доказательство корректности и безопасности. Структурная и естественная семантика.
-
Сопоставление с образцом в программировании
Сопоставление с образцом в программировании: проверка последовательностей на соответствие заданному шаблону. Точное соответствие, регулярные выражения, поиск и замена.
-
Автоматическое определение типов выражений в формальных языках.
Автоматическое определение типов выражений в формальных языках: программирование, математика, лингвистика. Вывод типов и их роль в использовании объектов.
-
Алгебраические типы данных
Алгебраические типы данных (ADT) в программировании: объединение типов, продуктовые (кортежи, записи) и суммовые типы (варианты). Основы теории типов.
-
Состояние системы в информатике и вычислительной технике.
Состояние системы в IT: что это такое? Узнайте о запоминании данных, пространствах состояний и принципах работы stateful систем в компьютерных науках.
-
Строгость функций в программировании: определение и анализ
Строгие и нестрогие функции в программировании: определение, семантика, влияние на завершение вычислений и языки программирования. Объяснение "bottom".
-
Проверка моделей в компьютерных науках
Проверка моделей в компьютерных науках: метод подтверждения соответствия систем заданным требованиям (безопасности и живости) с помощью логики.
-
Теоретическая информатика: Основы и направления исследований
Теоретическая информатика: основы вычислений, алгоритмы, теория формальных языков и лямбда-исчисление. Математические основы компьютерных наук.
-
Теория областей: Частично упорядоченные множества и семантика программирования
Теория доменов: раздел математики, изучающий частично упорядоченные множества (posets) и их применение в информатике, особенно в семантике языков программирования.
-
Типизированные лямбда-исчисления: обзор и классификация
Лямбда-исчисление с типами: основы функционального программирования, ML, Haskell. Типизация для безопасности и надежности программного кода.
-
Бисимуляция и системы переходов состояний
Бисимуляция в компьютерных науках: отношение между системами переходов, моделирующими поведение. Определение, примеры и уточнения понятия.
-
Математические основы семантики языков программирования
Семантика языков программирования: математическое изучение смысла кода. Определение вычислений, связь входных и выходных данных, модели вычислений.
-
Исчисление процессов: π-исчисление и его применения
π-исчисление: формальная система для описания параллельных вычислений и обмена сообщениями. Применяется в теории игр, криптографии и моделировании процессов.
-
Действия как основа семантики программирования: подход Уатта и Моссеса.
Действия семантики: формальная спецификация семантики языков программирования. Объединяет денотационную, операционную и алгебраическую семантику, масштабируемость и модифицируемость.
-
Синтез программ: от математических требований к автоматическому построению кода.
Синтез программ: автоматическое создание кода по формальной спецификации. Методы, применение в оптимизации и проверке корректности. Автоматизация разработки.
-
Представление состояния управления компьютерной программой
Континуации в программировании: абстрактное представление состояния программы. Реализация контроля, исключений, корутин. Сохранение и возобновление выполнения.
-
Монады в функциональном программировании: от теории категорий к практике
Монады в функциональном программировании: обобщенные типы, объединение функций и управление побочными эффектами. Основы из теории категорий.
-
Типы функций в информатике и математической логике
Тип функции в информатике: определение, свойства и обозначения (A → B, B^(A)). Важный концепт в математической логике и языках программирования.
-
Исчисление конструкций: Теория типов Тьерри Коканда
Калькулус конструкций (CoC): теория типов, созданная Тьерри Кокан. Основа для Coq и других систем доказательства. Математика, программирование, логика.
-
Питер Ландин: Пионер функционального программирования и информатики
Питер Ландин: британский ученый-компьютерщик, пионер функционального программирования и семантики. Разработал применение лямбда-исчисления в языках программирования.
-
Lispkit Lisp: Чистая функциональная среда для исследований
Lispkit Lisp: чистый функциональный диалект Lisp для исследований. Реализация на SECD-машине, портативность, ленивые вычисления, расширения языка.
-
Системы эффектов в программировании
Эффектные системы в программировании: формальное описание побочных эффектов, проверка на этапе компиляции, расширение типов для контроля операций.
-
Расширенная статическая проверка Java: ESC/Java и OpenJML
ESC/Java – инструмент статического анализа Java, выявляющий ошибки компиляции. Проверка корректности кода, границ массивов и условий с помощью теоремного решателя.
-
Охраняемый язык команд: Основы и применение.
GCL: язык программирования от Дейкстры для разработки и доказательства программ. Компактный синтаксис, недетерминизм и возможность вычисления частей кода.
-
Стиль продолжений в функциональном программировании
Стиль программирования CPS: передача управления через продолжения. Подробно о продолжениях, прямом и непрямом стилях в функциональном программировании.
-
Система F: Типизированное лямбда-исчисление второго порядка
Лямбда-исчисление с типами (System F): формализация полиморфизма в языках программирования, таких как Haskell и ML. Основа для теории типов и функций.
-
Логика вычислений с ветвлением времени (CTL) и ее применение в верификации
Логика вычислений CTL: проверка безопасности и живости программного и аппаратного обеспечения. Ветвление времени, моделирование, формальная верификация.
-
Процесс-алгебры: Моделирование и анализ конкурентных систем
Процесс-алгебры: формальное моделирование конкурентных систем в computer science. CSP, CCS, π-исчисление и др. для анализа и синхронизации процессов.
-
Функциональное программирование: уровень функций и математические объекты
Функциональное программирование: парадигма от Джона Бэкуса, альтернатива объектно-ориентированному подходу. Эволюция языков и повышение надежности кода.
-
Функциональное программирование: FP, FL и FP84
Функциональное программирование (FP): история, основы (лямбда-исчисление), отличия от парадигмы Backus. Язык FL как развитие FP в IBM.
-
Лямбда-куб: измерения зависимостей в исчислении конструкций.
Лямбда-куб: математическая логика, теория типов. Исследование обобщений лямбда-исчисления через зависимости типов и термов (зависимые типы, полиморфизм).
-
Связанная логика: ресурсы, композиция и верификация программ.
Банчевая логика: субструктурная логика для анализа ресурсов и композиционного анализа систем. Применение в верификации программ и моделировании систем.
-
Клэр: Функциональный и объектно-ориентированный язык программирования с возможностями обработки правил.
Claire: функциональный язык программирования с объектно-ориентированными возможностями и системой правил. Open source, CLAIRE4 на Go. Разработка с 2004.
-
Оператор управления потоком call/cc в функциональном программировании
Оператор управления потоком call/cc в Scheme: применение к текущей континуации, эквивалентность (lambda (c) (c e2)). Функциональное программирование.
-
Абстрактные семантические графы: представление выражений в компиляторах
Абстрактный семантический граф (ASG): что это такое? Представление кода в виде графа, более компактное и сложное, чем AST. Используется компиляторами.
-
Функции как объекты первого класса в программировании
Функции первого класса в программировании: передача функций как аргументов, возврат из функций, присваивание переменным. Обзор и история концепции.
-
Машина X: Теория, варианты и применение в тестировании программного обеспечения.
X-машина: теоретическая модель вычислений, предложенная Эйленбергом. Структурно схожа с конечным автоматом, оперирует отношениями X→X. Применение в лексической семантике.
-
Система Maude: Логика переписывания для формальной верификации и анализа.
Maude – мощная система переписывания, альтернатива C, Java. Бесплатное ПО для моделирования и метапрограммирования с поддержкой рефлексии. Обучение онлайн.
-
Эстерель: Синхронный язык программирования для реактивных систем.
Esterel: язык программирования для реактивных систем. Параллелизм, прерывания, разработка моделей управления. Компиляция в C, VHDL, Verilog.
-
Корекурсия в информатике: синтез данных против анализа
Корекурсия в информатике: двойственная рекурсии операция. Создание сложных данных из простых, итеративное построение структур, потоки данных.
-
Теорема о структурированных программах и вычислимость функций
Теорема Бёма-Якопини: любые вычисления возможны с помощью 3 структур управления – последовательность, выбор, повторение. Основа структурированного программирования.
-
Уточнение программного обеспечения: методы и подходы.
Уточнение программного обеспечения: формальная верификация, разработка по методу Scrum, поэтапное преобразование спецификаций в код. Повышение качества ПО.
-
Логическое программирование с ограничениями: язык CHR
CHR: декларативный язык логического программирования с ограничениями. Применение: от грамматической индукции до верификации. Правила, ограничения, мультиагентные системы.
-
Семантические кодировки: Сохранение выразительности и поведения языков
Семантическая кодировка: перевод между формальными языками, компиляция кода (TeX, LaTeX, OCaml). Преобразование форматов и языков программирования.
-
Эпиграм: Функциональный язык с зависимыми типами
Epigram: функциональный язык программирования с зависимыми типами и IDE. Поддержка спецификаций, доказательств и верификации компилятором. Основан на теории типов.
-
Зависимые типы: типы, зависящие от значений
Зависимые типы в программировании: типы, зависящие от значений. Уменьшают ошибки, кодируют логические кванторы (∀, ∃) в Agda, Coq, Idris и др.
-
Коалгебры в теории категорий и их применение в информатике.
Коалгебра в теории категорий: определение, свойства, связь с алгебрами и ковариетами. Применение в информатике: ленивые вычисления, потоки данных, системы переходов.
-
Просто типизированное лямбда-исчисление: формальная система и семантика
Лямбда-исчисление с простой типизацией: формальная система математической логики, предложенная Алонзо Чёрчем. Основы теории типов и избежание парадоксов.
-
Twelf: Логический фреймворк LF для формализации теории языков программирования.
Twelf: логическое программирование и теория языков. Реализация логической основы LF от CMU. Объявление типов, констант и определение натуральных чисел.
-
Теория акторов: Счетность, причинность и порядок прибытия сообщений.
Актерная модель: теория конкурентных вычислений. Принципы работы акторов, создание сообщений и локальные решения. Основы и модели акторных систем.
-
Акторная модель и исчисления процессов: Сравнение и различия.
Акторная модель и исчисления процессов: сравнение подходов к моделированию конкурентных вычислений. Различия, вдохновение, применение в ИТ.
-
Рекурсивные типы данных
Рекурсивные типы данных в программировании: определение, примеры (списки, деревья). Динамические структуры, растущие во время выполнения. Индуктивные типы.
-
Лямбда-подъём: Метапроцесс реструктуризации программного кода
Лямбда-подъём: оптимизация кода, преобразование локальных функций в глобальные. Устранение свободных переменных, расширение области видимости функций.
-
Стрелки в информатике: обобщение монады и декларативное программирование.
Стрелки в информатике: тип классов для декларативного описания вычислений. Обобщение монады, функциональное реактивное программирование, парсеры.
-
Метод B и Event-B: формальные методы разработки программного обеспечения
Метод B: формальная разработка ПО. Основан на нотации абстрактных машин, применяется в критически важных системах (Ariane 5, Парижское метро). Инструменты и доказательства.
-
Коррадо Бём: вклад в теорию программирования и информатику
Коррадо Бём: биография и вклад в информатику. Структурное программирование, лямбда-исчисление, теорема Бёма-Жакопини и кодировка Бёма-Берардуччи.
-
Высший порядок абстрактного синтаксиса: представление связывания переменных
Высокоуровневый абстрактный синтаксис (HOAS) в информатике: представление деревьев синтаксиса с переменными. Структура связывания переменных и их областей видимости.
-
Неограниченная недетерминированность в конкурентных системах
Неограниченная недетерминированность в конкурентных системах: задержки обработки запросов могут быть произвольными, но запрос будет выполнен. Теория вычислений.
-
Язык спецификаций JML для Java-программ
JML: язык спецификаций для Java. Описывает поведение программ с помощью предусловий, постусловий и инвариантов. Повышает надежность кода и упрощает отладку.
-
Области степеней в денотационной семантике и теории доменов.
Power domains в семантике и теории доменов: недетерминированные вычисления, множества значений функций, параллельные системы. Сложные понятия для корректности.
-
Неопределенность в параллельных вычислениях: дедукция против акторной модели.
Неопределенность в параллельных вычислениях: влияние арбитров, связь вычислений и дедукции (Хейс, Ковальски). Важно для многоядерных систем и сетей.
-
Джон Чарльз Рейнольдс: Жизнь и вклад в информатику
Джон Чарльз Рейнольдс (1935-2013) – американский ученый-компьютерщик, профессор Сиракузского и Карнеги-Меллона. Теоретическая физика, информатика.
-
Strictness analysis
-
Филип Ли Вадлер: вклад в теорию и практику программирования
Филип Вадлер – американский ученый-компьютерщик, эксперт в теории типов и языков программирования (Haskell, Java, XQuery). Разработки в области функционального программирования.
-
Evaluation strategy
-
Анонимная рекурсия: вызов функции без имени
Анонимная рекурсия в программировании: реализация без явного вызова функции по имени. JavaScript, функции высшего порядка, рефлексия. Плохой стиль.
-
Проверка во время выполнения: анализ и мониторинг работающих систем
Проверка во время выполнения: анализ систем, выявление ошибок и соответствия свойствам. Формальные спецификации, логика, регулярные выражения для надёжности ПО.
-
Основы параметрического полиморфизма
Параметрический полиморфизм в программировании: обобщенные типы, функции для разных типов данных (списки, и т.д.). Основы generic programming.
-
Единичный тип данных в программировании
Единичный тип в теории типов: определение, свойства и роль в математической логике и программировании. Обозначает тип с единственным значением.
-
Денотационная семантика акторной модели и композиционность программ
Денотационная семантика акторной модели: теория, композиционность и анализ программ. Развитие и применение акторов в современных языках программирования.
-
Процедурные параметры в программировании: история и применение
Процедурные параметры в программировании: передача функций как аргументов. Мощный инструмент для модификации кода библиотек без изменений в них. Pascal, C.
-
Рекурсия в программировании: принципы и применение
Рекурсия в программировании: метод решения задач через самовызов функций. Основа компьютерной науки, поддерживаемая большинством языков программирования.
-
Актерная модель: история развития и первые реализации.
Актерная модель: история развития (1973-наст.вр.). Параллельные вычисления, реализация, приложения, теория доказательств. Автоматическая сборка мусора.