프로그래밍 언어 의미론에 관한 책


31

나는 Nielson & Nielson의 " Semantics with Applications "를 읽었으며 , 그 주제를 정말 좋아합니다. 프로그래밍 언어 의미에 대한 책을 하나 더 갖고 싶지만 실제로는 하나만 얻을 수 있습니다.

나는 한 번 봐했다 Turbak / 포드의 책을,하지만 너무 장황한이다; 나는 Winskel이 괜찮을 것이라고 생각했지만 그것에 접근 할 수 없었습니다 (대학 도서관에 없으며 돈이 부족합니다). Slonneger괜찮은 것처럼 보이지만 실제적인 부분은 너무 길어서 그의 스타일에 익숙하지 않습니다.

그래서 제 질문은 -Winskel 이 좋은 책입니까? 그리고 그것은 데이트입니까?

또한 주제에 관한 다른 간결한 책이 있습니까?


5
모든 도서의 발행인 페이지에 대한 링크를 추가했습니다. 탐색하려는 다른 사용자에게 유용 할 수 있습니다.
Suresh Venkat

2
어떤 의미에 관심이 있습니까? Denotational? 운영? 개요?
Ohad Kammar

@Ohad Kammar : 저는 둘 다에 관심이 있습니다.
Jay

답변:


31

그것은 모두 당신이 가고 싶은 깊이와 이미 알고있는 정도에 달려 있습니다. 초보자의 경우 Winksel의 책은 정말 훌륭하지만 20 년 전에 작성된 의미론의 최신 기술을 소개하지는 않습니다. 그럼에도 불구하고 여전히 주제에 대한 좋은 첫 번째 소개입니다. T. Nipkow가 Isabelle / HOL에서 상당량의 Winskel의 책을 공식화했음을 지적하는 것도 가치가있을 수 있습니다 ( 여기 참조) . 따라서 프로그래밍 언어의 의미를 이해하면서 대화 형 교정 지원을 사용하는 방법을 배우려면 일관성있는 자료가 많이 있어야합니다.

더 발전된 다른 책들 :

  • Gunter, 프로그래밍 언어의 의미론 (Semantics of Programming Languages ). 순전히 기능적인 언어에 중점을두고 동시성을 무시합니다. 이것은 제가 학부생으로서 의미론을 가르친 책이며, 회고에서는 Winksel의 책을 대신 사용했으면합니다. Gunter는 초보자에게는 쉬운 책이 아닙니다.

  • Amadio와 Curien의 도메인과 람다 계산법 . 또 다른 책은 과정 이론에 대해 논하고 있지만, 도메인 이론 전통에서 더 많이 쓰여졌다.

  • 위에서 언급 한 존 미첼의 책. 또한 대부분 순차적 계산에 관한 것입니다.

Pierce의 TAPL과 같은 책은 매우 훌륭하지만 프로그래밍 언어의 한 측면, 즉 유형만큼 중요합니다. 프로그래밍 언어의 일반적인 영역에 대한 첫 번째 소개로 권장하지는 않지만 유형에 대해 배우려는 사람은 반드시 읽어야합니다.

사실, 저는 현재 10 년 동안 상당한 진보를 반영하는 언어 의미론에 관한 최신 소개 책이 없다고 생각합니다. , axiomatics 의미론 및 검증에 대화 형 증거 지원 사용.

2014 년 4 월 22 일 : Tobias Nipkow와 Gerwin Klein이 새로운 책을 출판했습니다

'Isabelle / HOL의 Winskel'로 볼 수 있습니다. 이 책은 프로그래밍 언어 (주로 운영 및 공리)의 의미론을 소개하지만 이전의 펜 및 종이 기반 접근 방식과 달리이 책은 모든 수학을 Isabelle / HOL로 표현합니다. 다시 말해, 동시에 정리 증명에 관한 책입니다.

이 책은 아주 새롭기 때문에 가르치는 데 사용되지는 않았지만 Pierce et al.의 Software Foundations 보다 낮은 수준으로 소개되는 소개로 적합 합니다.


2
denotational 방법에서 멀리 이동이 있습니까? 이전에는 손으로 구부러지는 증거를 사용했던 사람들과 비슷하게 보이며 오늘날에는 공식적인 증거를 제시 할 것으로 예상됩니다. denotational 방법은 여전히 ​​우리가하는 모든 것을 쉽게 모델링 할 수없고, 더 많은 전제 조건이 필요하기 때문에, 연구자들은 게임, 프로세스 계산법, 교정 보조와 같은 접근하기 쉬운 방법을 사용합니다. 의학적 방법의 감소가 있는지 확실하지 않습니다.
Ohad Kammar

4
변칙적 의미론을 도메인 이론 과 혼동하지 마십시오 . 게임 의미론은 완벽하게 부정적 일 수 있으며 일반적으로 프로그램의 의미는 그 부분의 의미의 함수입니다.
Andrej Bauer

2
이 의견과 관련하여 새로운 스레드를 열었습니다. 그러나 당신의 정의에 동의하지 않더라도 게임 시맨틱은 본질적으로 변칙적입니다. 내 의견에 "게임"을 "작동 의미론"으로 바꾸고 다른 의미 론적 의미 론적 연구 형태로 게임 의미론을 포함시켜야한다고 생각합니다. cstheory.stackexchange.com/questions/3577/…
Ohad Kammar

1
나는 변화가 있다고 확신하지 못한다. Andrej의 의견에 비추어 첫 번째 의견을보십시오.
Ohad Kammar

1
교대가 있습니까? 흥미로운 질문입니다. 변화를 어떻게 측정 할 수 있습니까? 서로 다른 접근 방식에 부여 된 재조정 보조금의 양과 같은 상대적으로 구체적인 것부터 정신 분담과 같은 아이디어를 모호하게 할 수있는 많은 기준이 있습니다. 연구자, 직원, 보조금 신청자로서의 이러한 참여가 그러한 질문의 결과에 얼마나 관련되어 있는지를 고려할 때, 우리가 답변에 동의하지는 않을 것입니다.
Martin Berger

20

다음은 온라인에서 무료로 제공되는 임의의 재료 샘플입니다.

  • Winskel, 프로그래밍 언어의 공식 의미 , Google 도서 미리보기 . 나는이 책에 대해 아무것도 모른다. 질문은 특히 온라인에있는 내용에 대해 질문하기 때문에 목록에 있습니다.
  • Morgan, 사양의 프로그래밍 , ps 파일 목록 . 주제는 구체화인데, 이는 높은 수준의 실행 불가능한 설명으로 시작하여 체계적으로 실행 가능한 것으로 변형하는 프로세스입니다. 물론 모든 세분화 단계는 의미를 보존해야하므로 특정 유형의 의미도 논의합니다 (주로 술어 treansformers를 기반으로 함).
  • Harper, 프로그래밍 언어의 실질적인 기초 , 초안 pdf . 아래의 Dave Clarke의 코멘트를 참조하십시오.
  • 레미, 사용하여, 이해하고, OCaml의 언어 해결했습니다 , PDF를 . 이 책은 함수형 프로그래밍 (OCaml,보다 정확하게)을 배운 책 으로 많이 좋아했습니다 . 기본 언어 기능의 의미론을 아주 좋은 방법으로 제시하고 그 과정에서 람다 미적분학과 유형 이론을 '필요한 것'으로 제시합니다.
  • Peyton Jones, 기능적 프로그래밍 언어의 구현 , djvu . 첫 번째 장에서는 람다 미적분학 (및``작동 의미론 '')과 고급 언어 기능이 람다 미적분학으로 탈당하는 방법에 대해 설명합니다. 이런 의미에서이 논문은 기능적 언어에 대한 작동 의미론을 제공합니다.
  • 피어스 (ed), 유형 및 프로그래밍 언어의 고급 주제 , Google 도서 미리보기 .
  • 프로그래밍 언어의 Slonneger, 구문 및 의미 , pdf 파일 목록 . 나는 오래 전에 이것을 간략하게 보았고별로 좋아하지 않았습니다. 질문에 언급되었으므로 목록에 있습니다.
  • Brookes, 동시 분리 논리의 의미론 , pdf . 이것은 책이 아니라 큰 기사 (80 페이지)입니다. 제가 최근에 개발 한 것이 흥미로워 서 포함 시켰습니다.

1
그것은 많은 링크입니다 :)
Suresh Venkat

3
목록으로 제시된 경우 더 유용합니다. 어쨌든, Harper book을 추천합니다 : "might"를 클릭하십시오.
Dave Clarke

동의한다. Radu, 책을 나열 해 주시면 클릭하는 내용을 알 수 있습니까? 이것은 훌륭한 자료가 될 것입니다.
Suresh Venkat

지금은 목록입니다. (첫 번째 버전은 전날 밤 약 5 시간 자고 오전 2 시경에 게시되었습니다. : P)
Radu GRIGore

16

프로그래밍 언어 의미론에 관한 책을 프로그래밍 언어 개념 모델링에 중점을 둔 책 과 의미론 의 기본 측면 에 중점을 둔 책으로 나눌 것 입니다. 책이 둘 다 할 수없는 이유는 없습니다. 그러나 일반적으로 책에 넣을 수있는 것은 너무 많으며 저자는 중요한 것에 대한 자신의 성향도 가지고 있습니다.

이미 언급 한 Winskel의 책은 두 가지 측면을 모두 수행합니다. 그리고 그것은 좋은 초보자 책입니다. 똑같이 좋고 아마도 더 좋은 책은 내가 시작한 책입니다 . 프로그래밍 언어에 대한 Gordon의 Denotational description . 이것은 시맨틱 스에 관한 첫 번째 책으로 학부 작업을 마친 직후에 읽었습니다. 나는 그것이 의미론에 확고한 근거를 주었다고 말하고, 의미 론적 의미론이 운영 의미론이나 공리적 의미론 등과 어떻게 다른지 궁금 할 필요가 없었다.

기초적인 측면보다는 모델링 측면 에 초점을 둔 다른 책 들은 다음과 같습니다.

  • 테넌트의 프로그래밍 언어 의 의미론은 명령형 프로그래밍 언어의 의미론에 대한 최신 책입니다. 읽기 쉽다. 그러나이 책의 뒷부분에서 추상적이되는 경향이 있으며, 왜 특정한 방식으로 일이 이루어지고 있는지 알아보기 위해 노력해야 할 수도 있습니다.

  • 레이놀즈의 프로그래밍 언어 이론 . 의미론을 전문으로하는 사람이라면 누구나이 책을 읽어야합니다. 결국 레이놀즈에 의해입니다. 데이비드 슈미트 (David Schmidt)는 "레이놀즈가 당신에게 모닝 신문을 읽는다고해도 중요한 것을 배울 수 있기 때문에주의 깊게 듣고 싶다"고 말했다.

기초적인 측면에서 가장 좋은 책은 Gunter (저는 대학원 교과서로 간주)와 Mitchell (책장에 가지고있는 훌륭한 참고서입니다).


Uday, 여기에 와서 정말 반갑습니다!
Radu GRIGore 11

나도 여기있어 기쁘다. 이것은 매우 좋은 자료입니다!
Uday Reddy

전환과 나무 : Hans Hüttel 2010의 구조적 동작 의미론 소개. 리뷰를 한 것으로 보이나 여기에 언급 된 사람은 없습니다.
Arturo Hernandez

1
@Uday : 답변 주셔서 감사합니다. "프로그래밍 언어 개념 모델링"과 "의미론의 기본 측면"은 무엇을 의미합니까? 차이점과 관계는 무엇입니까?
Tim

1
@Tim : 프로그래밍 언어의 의미를 부여하려면 가장 간단한 경우의 집합과 같은 수학적 구조를 형성해야하지만 집합이 처리 할 수없는 문제에 대해서는 도메인, 범주, 대수학 등과 같은 정교한 구조가 필요합니다. "파운데이션 측면"이라는 말은 이러한보다 정교한 구조의 이론을 의미합니다. 전자의 경우, 프로그래밍 언어에 중점을두고 후자의 경우 수학적 기초에 중점을 둡니다.
Uday Reddy

8

나는 의미론에 대한 학부 과정을 밟을 때 Winskel을 읽는 것을 정말로 즐겼습니다. 그러나이 분야에서 연구를 수행하지 않기 때문에 날짜가 있는지 알 수 없습니다. Winskel의 장점은 영어 이외의 다른 언어로 번역 된 것을 찾을 수 있다는 것입니다.

더 읽기 위해, 더 대학원 수준에서, 나는 존 미첼의 좋을 것 책의 언어 프로그래밍에 대한 기초를 하고 프로그래밍 언어의 개념 . 첫 장만 읽으면 간결함의 요구 사항도 충족하는 것 같습니다.

이 책의 무료 초안을 찾을 수 없으므로 예산이 제한되어 있으면 Radu의 답변에서 "마지막"으로 이동하십시오.


6

글쎄, 나는 그 주제에 대한 전문가는 아니지만, 내가 할 수있는 몇 가지 일반적인 조언이 있습니다.

먼저, 이미이 책을 읽고 리뷰를 한 사람들이 있습니다. 예를 들어, Winskel 책 The Formal Semantics of Programming Languages ( [1][2] 참조 )에서 Amazon에 대한 리뷰를 찾았습니다.

한 리뷰의 일부는 다음과 같습니다.

이 책은 리터럴을 값에서 분리하는 것처럼 처음부터 구문과 의미를 혼동합니다. 그것들을 구별하기 위해 특별한 표기법이 사용되지 않았습니다. 이것은 저자가 이와 같은 주제에서 다루어야 할 중요한 문제입니다. 또한 그가 사용한 다른 표기법은 구내 및 결론을 보여주는 것과 같이 매우 혼란 스럽습니다.

저자는 처음 몇 장 (예 : 이론, 운영 의미론, 유도, 귀납적 정의)의 배경 자료를 설명 할 때 필요한 모든 전제 조건이 있다고 가정 한 것 같습니다. 저자가 소개에 사용한 스타일은 두세 단락의 텍스트를 넣고 몇 가지 수식을 넣은 다음 연습을하는 것입니다. 나에게는 꽤 실망 스럽습니다 ...

18/20 명이 리뷰가 유용하다고 생각합니다. 더 많은 리뷰를보기 위해 Amazon (또는 다른 출처)을 찾을 수 있습니다.

둘째, Amazon 은이 책과 함께 컴퓨터 과학자위한 유형 및 프로그래밍 언어 및 기본 범주 이론을 제공합니다 . 에 다른 주제 데이브 클라크에 뛰어난 사람으로이 책을 제공합니다 "형식 시스템 및 언어 의미론 프로그래밍을." 다시 말하지만 저는 전문가는 아니지만 유용 할 것입니다.


TaPL은 내 취향에 비해 너무 느리게 진행됩니다. 좋은 책이지만이 질문에 대해 언급 한 사람은 "긴 바람이 부는"책이 걱정되는 것 같습니다.
Radu GRIGore

@Radu : 확실히 TAPL은 느리지 만 좋은 소개입니다. 링크에서 언급 한 Harper 책은 아직 완성되지는 않았지만 훨씬 빠르게 진행되고 훨씬 더 많은 내용을 다룹니다.
Dave Clarke

4
소금 한 덩어리로 아마존의 Winskel의 책을 검토하십시오. 학부 의미론 과정에서 권장 텍스트로 자주 사용되며 불만을 품은 학생들을 유치 할 수 있습니다. 나는 책을 읽었고 소개 장을 충분히 발견했다. 그의 표기법은 완전히 표준적인 것처럼 보였다.
Dominic Mulligan


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.