Книги з семантики мови програмування


31

Я читав " Семантику з додатками " Нільсона та Нільсона , і мені дуже подобається тема. Я хотів би мати ще одну книгу з семантики мови програмування - але я дійсно можу отримати лише одну.

Я поглянув на книгу Турбака / Гіффорда , але це занадто довго. Я думав, що Вінскел буде добре, але я не маю доступу до нього (його немає в нашій університетській бібліотеці, і мені не вистачає грошей), і я навіть не впевнений, чи не датується він. Slonneger здається нормальним, але практична частина робить його занадто довгим, і мені не дуже комфортно з його стилем.

Тож моє запитання - чи хороша книга Вінскел ? І чи датована вона?

Також чи є інші стислі книги з цього приводу?


5
додано посилання на сторінки видавців для всіх книг. може бути корисним для інших, хто прагне переглядати.
— Суреш Венкат

2
Яка семантика вас цікавить? Денотаційний? Оперативні? Огляд?
— Охад Каммар

@Ohad Kammar: Мене цікавлять обидва.
— Джей

Відповіді:


31

Все залежить від того, наскільки глибоко ви хочете пройти і скільки ви вже знаєте. Для початківця книга Вінкселя - це справді приємно, але так, це не знайомить вас із найсучаснішою семантикою, як це було написано близько 20 років тому. Тим не менш, це все-таки хороше перше вступ до цієї теми. Можливо, варто також зазначити, що Т. Ніпков формалізував значну частину книги Вінскеля в Ізабелі / HOL, дивіться тут . Тож якщо ви хочете навчитися використовувати інтерактивних помічників доказування разом із розумінням семантики мов програмування, у вас є багато узгодженого матеріалу.

Інші більш досконалі книги:

  • Гантер, « Семантика мов програмування» , більш досконала книга, присвячена денотаційній семантиці, підходу до семантики, який не виправдав очікувань. Зосереджується на суто функціональних заходах і ігнорує одночасність. Це книга, з якої я навчав себе семантиці як студент, і заднім часом я хотів би використати книгу Вінкселя. Gunter не є легким для читання для новачків.

  • Домени та лямбда-калькулятори від Amadio та Curien. Ще одна книга, написана більше в доменно-теоретичній традиції, хоча в ній обговорюються процеси обчислення.

  • Книги Джона Мітчелла, про які вже згадувалося вище. Вони також здебільшого стосуються послідовних обчислень.

Книги, такі як TAPL Pierce, дуже приємні, але вузько зосереджені на одному аспекті мов програмування, а саме на типах, настільки важливих, як це є. Я б не рекомендував це як перше вступ до загальної області мов програмування, але його обов’язково читати для всіх, хто хоче дізнатися про типи.

Правду кажучи, я думаю, що наразі не існує сучасної вступної книги з мовної семантики, яка відображає суттєвий прогрес останніх десятиліть: її рішучий відхід від денотаційних методів та послідовних обчислень до паралельності (обчислення процесів та семантика ігор) , семантика аксіоматики та використання інтерактивних асистентів доказування в верифікації.

Оновлення 22. квітня 2014 року: Тобіас Ніпков та Гервін Кляйн опублікували нову книгу

який можна розглядати як "Вінскель в Ізабелі / HOL". Це вступ до семантики мов програмування (в першу чергу операційних та аксіоматичних), але на відміну від попередніх підходів на основі паперу та паперу, ця книга виражає всю свою математику в Ізабелі / HOL. Іншими словами, це водночас книга про доказ теореми.

Книга є абсолютно новою, тому я не використовував для викладання, але вона виглядає справді підходящою як вступ, який знаходиться на нижчому рівні, ніж Software Foundation від Pierce et al.


2
Чи є відступ від денотаційних методів? Мені це здається більше схожим на людей, які раніше застосовували б хвилясті докази, сьогодні, як очікується, вони отримають офіційні докази. Оскільки методи денотації все ще не можуть легко моделювати все, що ми робимо, і вимагають ще багатьох передумов, ці дослідники використовують більш доступні методи, такі як ігри, обчислення процесів, помічники доказів. Я не впевнений, чи є зниження денотаційних методів.
— Охад Каммар

4
Будь ласка, не плутайте денотаційну семантику з теорією домену . Ігрова семантика може бути і, як правило, ідеально денотаційною, тобто значення програми - це функція значень її частин.
— Андрій Бауер

2
Я відкрив нову тему щодо цього коментаря. Але навіть якщо я не впевнений, що я згоден з вашим визначенням, семантика гри носить денотаційний характер. Я думаю, що я повинен замінити "ігри" на "оперативну семантику" у своєму коментарі, і включити ігрову семантику, як можливо, іншу форму денотаційного дослідження семантики. cstheory.stackexchange.com/questions/3577/…
— Охад Каммар

1
Я не переконаний, що є зрушення. Дивіться мій перший коментар, у світлі коментаря Андрія.
— Охад Каммар

1
Чи є зсув? Цікаве запитання. Як можна виміряти зміну? Ми можемо застосувати так багато критеріїв - від відносно конкретних, таких як кількість грантів на дослідження, що надаються різним підходам, до нечітких ідей, таких як поділ розуму. З огляду на те, наскільки ми, як дослідники, як працівники, як претенденти на грантові гроші, до вирішення такого питання, навряд чи ми погодимось на відповідь.
— Мартін Бергер

20

Ось випадковий зразок матеріалів, доступних безкоштовно в Інтернеті:

  • Вінскель, формальна семантика мов програмування , попередній перегляд книг Google . Я нічого не знаю про цю книгу. Це в списку, оскільки запитання конкретно задає його вміст, який є в Інтернеті.
  • Морган, програмування із специфікації , список файлів ps . Предметом є уточнення, яке є процесом, починаючи з невиконаних описів високого рівня і систематично перетворюючи їх на щось виконуване. Звичайно, кожен етап уточнення повинен зберігати семантику, тому він також обговорює певний тип семантики (на основі переважно предикативних формулювачів тренів).
  • Гарпер, Практичні основи мов програмування , pdf проекту . Дивіться коментар Дейва Кларка нижче.
  • Ремі, використання, розуміння та розгадування мови OCaml , pdf . Це книга , з якої я дізнався , функціональне програмування (OCaml, точніше) , і мені сподобалося це багато . Це дуже приємно представляє семантику основних мовних ознак, і в процесі цього викладається теорія числення лямбда та типу типу на основі "потрібно знати".
  • Пейтон Джонс, реалізація функціональних мов програмування , djvu . Перші глави описують обчислення лямбда (та його `оперативну семантику ') та те, як особливості мови вищого рівня виводяться в обчислення лямбда. У цьому сенсі стаття дає оперативну семантику для функціональних мов.
  • Пірс (ред.), Розширені теми щодо типів та мов програмування , попередній перегляд книг Google .
  • Slonneger, синтаксис та семантика мов програмування , список файлів pdf . Я давно це переглянув коротко і мені це не сподобалось. Це в списку, оскільки це згадується у питанні.
  • Брукс, семантика для паралельної логіки поділу , pdf . Це велика стаття (80 сторінок), а не книга. Я включив його, бо мені здається цікавою досить недавню розробку.

1
це багато посилань :)
— Суреш Венкат

3
Це було б корисніше, якби воно було представлено у вигляді списку. У будь-якому разі, я б рекомендував книгу Харпер: натисніть "Можливо".
— Дейв Кларк

Я згоден. Раду, ти можеш перерахувати книги, щоб ми знали, на що натискаємо? це було б чудовим ресурсом.
— Суреш Венкат

Зараз це список. (Перша версія була розміщена близько 2 години ночі, після сну минулої ночі
— близько

16

Я б розділив книги з семантики мови програмування на два класи: ті, що зосереджені на моделюванні понять мови програмування, і ті, що зосереджені на фундаментальних аспектах семантики. Немає причини, що книга не може робити і те, і інше. Але, як правило, у книзі є лише стільки, що можна скласти, і автори також мають власні схильності щодо того, що важливо.

Книга Вінскеля, вже згадана, трохи відповідає обом аспектам. І, це хороша книга для початківців. Не менш гарна, можливо, навіть краща книга - це та, з якої я почав: Денотаційний опис мов програмування Гордона . Це була моя перша книга з семантики, яку я прочитав незабаром після закінчення моєї студентської роботи. Треба сказати, що це дало мені міцне підґрунтя в семантиці, і мені ніколи не доводилося задаватися питанням, чим денотаційна семантика відрізняється від оперативної семантики або аксіоматичної семантики тощо. Ця книга залишиться моїм улюбленим у денотаційній семантиці.

Інші книги, які зосереджуються на аспектах моделювання, а не на фундаментальних, є такими:

  • " Семантика мов програмування" Теннента , що є більш-менш оновленою книгою про семантику імперативних мов програмування. Це легко читати. Однак у більш пізніх частинах книги вона може бути абстрактною, і вам, можливо, доведеться боротися, щоб зрозуміти, чому все робиться певним чином.

  • Теорії мов програмування Рейнольдса . Кожен, хто спеціалізується на семантиці, обов'язково повинен прочитати цю книгу. Адже саме Рейнольдс. (Девід Шмідт одного разу зауважив мені: "навіть якщо Рейнольдс читає вам ранкову газету, ви хочете уважно вислухати, тому що, можливо, ви дізнаєтесь щось важливе"!) Він добре висвітлює і аспекти моделювання, і основоположні аспекти.

Найкращі книги з основоположних аспектів - це Гунтер (який я вважаю випускником підручника) та Мітчелл (який добре мати довідник на вашій книжковій полиці, оскільки він досить вичерпний).


Дуже приємно тебе тут, Удай!
— Раду ГРИГо

Я радий також бути тут. Це дуже приємний ресурс!
— Удай Редді

Як щодо: Переходи та дерева: вступ до структурної оперативної семантики від Ганса Хюттеля 2010. Здається, є огляди Google, але тут ніхто не згадує про це.
— Артуро Ернандес

1
@Uday: Дякую за відповідь. Що означають "моделювання понять мови програмування" та "основоположні аспекти семантики"? Які їх відмінності та відносини?
— Тім

1
@Tim: Щоб надати семантику мови програмування, вам потрібно створити деякі математичні структури, наприклад, набори в найпростішому випадку, але складні структури, такі як домени, категорії, вуглегебри тощо для питань, з якими задачі не можуть впоратися. Під "основоположними аспектами" я маю на увазі теорію цих більш складних структур. У першому випадку фокус робиться на мовах програмування, а в другому - на математичних засадах.
— Удай Редді

8

Мені дуже подобалося читати Вінськель, коли я брав курс з семантики. Я не можу сказати, чи він датований, оскільки я не займаюся дослідженнями в цій галузі. Плюсом Winskel є те, що ви можете знайти його в перекладі іншими мовами, ніж англійською.

Для подальшого читання, більше на аспірантурі, я б запропонував книги Джона Мітчелла " Основи для програмування мов та понять на мовах програмування" . Якщо ви читаєте лише перші глави, я думаю, вони також відповідають вашій вимозі стислість.

Безкоштовні чернетки цих книг ви не знайдете, тож якщо у вас обмежений бюджет, перейдіть на відповідь Раду у відповідь Раду.


6

Ну, я не фахівець з цього питання, але я можу дати кілька загальних порад.

По-перше, є деякі люди, які вже прочитали книгу та надали рецензії на неї. Наприклад, для книги Вінскель «Формальна семантика мов програмування» (див. [1] та [2] ) я знайшов відгуки про Амазонку.

Частина однієї рецензії говорить:

Ця книга плутає між синтаксисом і семантикою з самого початку, як і відділення букварів від його значень. Для їх розмежування не використовувалися спеціальні позначення. Це найважливіше питання, яке має вирішити автор у такій темі. Крім того, деякі інші позначення, які він використав, досить заплутані, як показ приміщень та висновків.

Автор ніби припускає, що у вас є ВСІ необхідні передумови, оскільки він пояснював довідкові матеріали в перших кількох главах (тобто теорія множин, оперативна семантика, індукції, індуктивні визначення) дуже коротко. Стиль, який автор використовував у вступі, полягає в тому, щоб скласти два-три абзаци текстів і скласти деякі формули, а потім дати вправи. Що для мене досить засмучує ...

18/20 людей вважають відгук корисним. Ви можете шукати Amazon (або інші джерела), щоб побачити більше відгуків.

По-друге, Amazon пропонує типи та мови програмування та базову теорію категорій для вчених-комп'ютерів разом із цією книгою. З іншої теми Дейв Кларк пропонує ці книги як відмінні книги на тему "Системи типових систем та мови програмування". Знову ж таки, я не експерт, але вони можуть бути корисними для вас.


TaPL йде занадто повільно на мій смак. Це гарна книга, але я згадував про це, тому що людина, яка питає, здається, переживає за "довго звиті" книги.
— Раду ГРИГо

@Radu: Безумовно, TAPL повільний, але це досить хороший вступ. Книга про Харпер, яку ви згадали у своїх посиланнях, йде набагато швидше і охоплює набагато більше підстав, хоча вона ще не завершена.
— Дейв Кларк

4
Візьміть цей огляд Amazon на книгу Вінскеля з дрібкою солі. Він часто використовується як рекомендований текст на курсах семантики при бакалавраті та, можливо, привертає незадоволених студентів. Я прочитав книгу і знайшов вступні глави більш ніж достатніми. Також його позначення здавалися абсолютно стандартними.
— Домінік Малліган


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.