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


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.