หนังสือเกี่ยวกับความหมายของภาษาโปรแกรม


31

ฉันอ่าน " ความหมายกับแอปพลิเคชัน " ของ Nielson & Nielson แล้วและฉันก็ชอบวิชานี้มาก ฉันต้องการมีหนังสืออีกหนึ่งเล่มเกี่ยวกับความหมายของภาษาการเขียนโปรแกรม - แต่ฉันสามารถรับหนังสือเล่มเดียวได้จริงๆ

ฉันดูหนังสือTurbak / Giffordแต่มันยืดยาวเกินไป ฉันคิดว่าวินสเคลจะใช้ได้ แต่ฉันไม่สามารถเข้าถึงได้ (มันไม่ได้อยู่ในห้องสมุดมหาวิทยาลัยของเราและฉันขาดเงิน) และฉันก็ไม่แน่ใจด้วยซ้ำว่ามันไม่ได้ลงวันที่แล้ว Slonnegerดูโอเค แต่ส่วนที่ใช้ได้จริงทำให้มันค่อนข้างยาวเกินไปและฉันไม่ค่อยสบายใจกับสไตล์ของเขา

ดังนั้นคำถามของฉันคือ - หนังสือวินสเคลเป็นหนังสือที่ดีหรือไม่ และมันเป็นวันที่?

นอกจากนี้ยังมีหนังสือเล่มอื่น ๆ ที่กระชับเกี่ยวกับเรื่องนี้หรือไม่


5
เพิ่มลิงก์ไปยังหน้าผู้จัดพิมพ์ของหนังสือทุกเล่ม อาจเป็นประโยชน์สำหรับผู้อื่นที่กำลังมองหาการค้นหา
Suresh Venkat

2
คุณสนใจความหมายประเภทใด denotational? การดำเนินงาน? ภาพรวม?
Ohad Kammar

@Ohad Kammar: ฉันสนใจทั้งคู่
Jay

คำตอบ:


31

ทุกอย่างขึ้นอยู่กับว่าคุณต้องการไปลึกแค่ไหนและคุณรู้มากแค่ไหน สำหรับผู้เริ่มต้นหนังสือของ Winksel นั้นดีจริง ๆ แต่ใช่มันไม่ได้แนะนำคุณเกี่ยวกับสถานะของศิลปะในความหมายเหมือนที่เขียนไว้เมื่อ 20 ปีก่อน อย่างไรก็ตามมันก็ยังเป็นการแนะนำครั้งแรกที่ดีเกี่ยวกับเรื่องนี้ นอกจากนี้ยังอาจจะคุ้มค่าที่ชี้ให้เห็นว่า T. Nipkow ได้กรงเล็บอันสำคัญของหนังสือเล่ม Winskel ในอิสซาเบล / HOL ดูที่นี่ ดังนั้นหากคุณต้องการเรียนรู้โดยใช้ผู้ช่วยพิสูจน์แบบโต้ตอบร่วมกับการทำความเข้าใจความหมายของภาษาการเขียนโปรแกรมคุณมีเนื้อหาที่สอดคล้องกันมากมายในการวาด

หนังสืออื่น ๆ ที่มีความก้าวหน้ายิ่งกว่าคือ:

  • Gunter, ซีแมนทิกส์ของ Programming Languages , หนังสือขั้นสูงที่มุ่งเน้นเกี่ยวกับอรรถศาสตร์ denotational, วิธีการในความหมายซึ่งยังไม่เป็นไปตามที่คาด เพ่งความสนใจไปที่ lanugages ทำงานได้อย่างหมดจดและละเว้นการทำงานพร้อมกัน นี่คือหนังสือที่ฉันสอนตัวเองความหมายจากระดับปริญญาตรีและย้อนหลังฉันหวังว่าฉันจะใช้หนังสือของ Winksel แทน Gunter ไม่ใช่เรื่องง่ายสำหรับผู้เริ่มต้นอ่าน

  • โดเมนและแลมบ์ดาแคลคูลัสโดย Amadio and Curien หนังสืออีกเล่มหนึ่งที่เขียนขึ้นมาเพิ่มเติมในประเพณีโดเมน - ทฤษฎีแม้ว่ามันจะกล่าวถึงกระบวนการนิรนัย

  • หนังสือของ John Mitchell ซึ่งถูกกล่าวถึงข้างต้นแล้ว พวกเขายังเป็นส่วนใหญ่เกี่ยวกับการคำนวณตามลำดับ

หนังสือเช่น TAPL ของ Pierce นั้นดีมาก แต่ให้ความสำคัญกับภาษาการเขียนโปรแกรมอย่างหนึ่งคือประเภทต่างๆมีความสำคัญเท่าที่ควร ฉันจะไม่แนะนำว่าเป็นการแนะนำครั้งแรกเกี่ยวกับพื้นที่ทั่วไปของภาษาการเขียนโปรแกรม แต่มันเป็นข้อบังคับที่จะอ่านสำหรับทุกคนที่ต้องการเรียนรู้เกี่ยวกับประเภท

ความจริงได้รับการบอกฉันคิดว่าขณะนี้ไม่มีหนังสือแนะนำเกี่ยวกับความหมายทางภาษาที่ทันสมัยซึ่งสะท้อนให้เห็นถึงความคืบหน้าอย่างมากในทศวรรษที่ผ่านมาโดยมีการเปลี่ยนแปลงอย่างเด็ดขาดจากวิธีการเชิงลบและการคำนวณตามลำดับ ความหมาย axiomatics และการใช้ผู้ช่วยพิสูจน์แบบโต้ตอบในการตรวจสอบ

อัปเดต 22 เมษายน 2014: Tobias Nipkow และ Gerwin Klein ได้ตีพิมพ์หนังสือเล่มใหม่แล้ว

ซึ่งสามารถมองเห็นเป็น 'Winskel ใน Isabelle / HOL' เป็นการแนะนำความหมายของภาษาการเขียนโปรแกรม (ส่วนใหญ่เป็นการปฏิบัติและสัจพจน์) แต่แตกต่างจากวิธีการแบบใช้ปากกาและกระดาษเล่มก่อนหน้านี้หนังสือเล่มนี้เป็นการแสดงออกถึงคณิตศาสตร์ทั้งหมดใน Isabelle / HOL กล่าวอีกนัยหนึ่งมันเป็นหนังสือเกี่ยวกับการพิสูจน์ทฤษฎีบทในเวลาเดียวกัน

หนังสือเล่มนี้เป็นหนังสือเล่มใหม่ดังนั้นฉันไม่ได้ใช้สำหรับการสอน แต่มันก็ดูเหมาะสมสำหรับการแนะนำที่ตั้งระดับต่ำกว่าฐานรากซอฟต์แวร์ โดย Pierce และคณะ


2
มีการเปลี่ยนแปลงไปจากวิธีการ denotational หรือไม่? ดูเหมือนกับฉันมากกว่าคนประเภทที่ก่อนหน้านี้จะใช้การพิสูจน์ด้วยมือแบบหยักปัจจุบันคาดว่าจะสร้างการพิสูจน์ที่เป็นทางการ เนื่องจากวิธีการทาง denotational ยังไม่สามารถจำลองแบบได้ง่ายทุกอย่างที่เราทำและต้องการสิ่งที่จำเป็นเพิ่มเติมอีกมากมายนักวิจัยเหล่านั้นจึงใช้วิธีการที่เข้าถึงได้ง่ายกว่าเช่นเกม, กระบวนการคำนวณ, ผู้ช่วยพิสูจน์ ฉันไม่แน่ใจว่ามีวิธีการปฏิเสธแบบปฏิเสธหรือไม่
Ohad Kammar

4
กรุณาอย่าสับสนdenotationalความหมายกับทฤษฎีโดเมน ความหมายของเกมสามารถและมักจะเป็น denotational อย่างสมบูรณ์แบบคือความหมายของโปรแกรมเป็นฟังก์ชั่นของความหมายของส่วนต่างๆ
Andrej Bauer

2
ฉันได้เปิดกระทู้ใหม่เกี่ยวกับความคิดเห็นนี้ แต่ถึงแม้ว่าฉันไม่แน่ใจว่าฉันเห็นด้วยกับคำจำกัดความของคุณความหมายของเกมนั้นเป็นเรื่องไร้สาระในธรรมชาติ ฉันคิดว่าฉันควรแทนที่ "เกม" ด้วย "ความหมายปฏิบัติการ" ในความคิดเห็นของฉันและรวมถึงความหมายของเกมเป็นอีกรูปแบบหนึ่งของการวิจัยเชิงอรรถศาสตร์เชิงอรรถศาสตร์อีกรูปแบบหนึ่ง cstheory.stackexchange.com/questions/3577/…
Ohad Kammar

1
ฉันไม่เชื่อว่ามีการเปลี่ยนแปลง เห็นความคิดเห็นแรกของฉันตามความเห็นของ Andrej
Ohad Kammar

1
มีการเปลี่ยนแปลงหรือไม่? คำถามที่น่าสนใจ เราจะวัดกะได้อย่างไร มีเกณฑ์มากมายที่เราสามารถนำไปใช้ได้ตั้งแต่สิ่งที่เป็นรูปธรรมเช่นจำนวนเงินช่วยเหลือที่มอบให้แก่วิธีการต่าง ๆ ไปจนถึงความคิดที่คลุมเครือเช่นการแบ่งปันความคิด ในฐานะที่เป็นนักวิจัยในฐานะพนักงานในฐานะผู้สมัครขอเงินช่วยเหลือนั้นเป็นผลมาจากคำถามดังกล่าวจึงไม่น่าเป็นไปได้ที่เราจะเห็นด้วยกับคำตอบ
Martin Berger

20

นี่คือตัวอย่างแบบสุ่มของวัสดุสำหรับออนไลน์ฟรี:

  • Winskel, ความหมายอย่างเป็นทางการของการเขียนโปรแกรมภาษา , ตัวอย่างของ Google หนังสือ ฉันไม่รู้อะไรเกี่ยวกับหนังสือเล่มนี้ มันอยู่ในรายการเพราะคำถามถามโดยเฉพาะเกี่ยวกับเนื้อหาของมันซึ่งออนไลน์ส่วนใหญ่
  • มอร์แกน, การเขียนโปรแกรมจากข้อมูลจำเพาะ , รายชื่อของไฟล์ PS หัวเรื่องนั้นมีการปรับแต่งซึ่งเป็นกระบวนการเริ่มต้นด้วยคำอธิบายที่ไม่สามารถเรียกใช้งานได้ในระดับสูง แน่นอนว่าทุกขั้นตอนของการปรับแต่งจะต้องรักษาซีแมนทิกส์ดังนั้นจึงกล่าวถึงซีแมนติกบางประเภทด้วยเช่นกัน
  • ฮาร์เปอร์ มูลนิธิการปฏิบัติของการเขียนโปรแกรมภาษา , รูปแบบ pdf ร่าง ดูความคิดเห็นโดย Dave Clarke ด้านล่าง
  • เรมี่ใช้ความเข้าใจและไข OCaml ภาษา ,รูปแบบไฟล์ PDF นี่คือหนังสือจากการที่ผมได้เรียนรู้การเขียนโปรแกรมการทำงาน (OCaml อย่างแม่นยำมากขึ้น) และฉันชอบมันมาก มันนำเสนอความหมายของคุณสมบัติภาษาพื้นฐานในวิธีที่ดีมากและในกระบวนการนำเสนอแคลคูลัสแลมบ์ดาและทฤษฎีการพิมพ์บนพื้นฐาน `ต้องการรู้ '
  • เพย์ตันโจนส์ การดำเนินงานของหน้าที่ Programming ภาษา , DjVu บทแรกอธิบายถึงแคลคูลัสแลมบ์ดา (และ `ความหมายปฏิบัติการของมัน) และความสามารถของระดับภาษาที่สูงขึ้นใน desambared ลงในแคลคูลัสแลมบ์ดา ในแง่นี้กระดาษให้ความหมายการดำเนินงานสำหรับภาษาทำงาน
  • Pierce (ed), หัวข้อขั้นสูงในประเภทและภาษาการเขียนโปรแกรม , ตัวอย่างของ Google หนังสือ
  • Slonneger, ไวยากรณ์และความหมายของภาษาโปรแกรม , รายชื่อของไฟล์ PDF ฉันดูเมื่อไม่นานมานี้และไม่ชอบมันมาก มันอยู่ในรายการเพราะมันถูกกล่าวถึงในคำถาม
  • บรูกส์ความหมายเพื่อแยกพร้อมกันลอจิก , รูปแบบไฟล์ PDF นี่เป็นบทความใหญ่ (80 หน้า) ไม่ใช่หนังสือ ฉันรวมไว้เพราะเป็นการพัฒนาที่ค่อนข้างเร็วซึ่งฉันพบว่าน่าสนใจ

1
ที่มากของการเชื่อมโยง :)
Suresh Venkat

3
สิ่งนี้จะมีประโยชน์มากขึ้นถ้ามันถูกนำเสนอเป็นรายการ อย่างไรก็ตามฉันขอแนะนำหนังสือฮาร์เปอร์: คลิก "อาจ"
Dave Clarke

ฉันเห็นด้วย. Radu คุณช่วยเขียนรายการหนังสือเพื่อให้เรารู้ว่าเรากำลังคลิกอะไรอยู่? นี่จะเป็นทรัพยากรที่ยอดเยี่ยม
Suresh Venkat

ตอนนี้มันเป็นรายการ (รุ่นแรกถูกโพสต์ประมาณตี 2 หลังจากนอนประมาณ 5 ชม. เมื่อคืน: P)
Radu GRIGore

16

ฉันจะแบ่งหนังสือเกี่ยวกับความหมายของภาษาโปรแกรมออกเป็นสองชั้น: ผู้ที่เน้นการสร้างแบบจำลองแนวคิดภาษาโปรแกรมและผู้ที่มุ่งเน้นด้านพื้นฐานของความหมาย ไม่มีเหตุผลที่หนังสือทำไม่ได้ทั้งสองอย่าง แต่โดยทั่วไปมีเพียงมากที่คุณสามารถใส่ลงไปในหนังสือและผู้เขียนยังมีความชอบของตัวเองเกี่ยวกับสิ่งที่สำคัญ

หนังสือของวินสเคลได้กล่าวถึงแล้วทั้งสองด้าน และเป็นหนังสือสำหรับผู้เริ่มต้นที่ดี หนังสือที่ดีพอ ๆ กันบางทีอาจจะดีกว่าก็คือหนังสือที่ฉันเริ่มต้นด้วย: คำอธิบายเชิงลบของ Gordon เกี่ยวกับภาษาการเขียนโปรแกรมของการเขียนโปรแกรมภาษา นี่เป็นหนังสือเล่มแรกของฉันเกี่ยวกับความหมายซึ่งฉันอ่านไม่นานหลังจากที่ฉันเรียนจบปริญญาตรี ฉันต้องบอกว่ามันทำให้ฉันมีความมั่นคงในความหมายและฉันไม่เคยสงสัยเลยว่าความหมายเชิงลบแตกต่างจากความหมายเชิงปฏิบัติการหรือความหมายเชิงสัจพจน์เป็นต้นหนังสือเล่มนี้จะยังคงเป็นที่โปรดปรานตลอดกาลของฉันเกี่ยวกับความหมายเชิง Denotational

หนังสืออื่น ๆ ที่มุ่งเน้นด้านการสร้างแบบจำลองมากกว่าด้านพื้นฐานคือต่อไปนี้:

  • ความหมายของ Tennent ของภาษาการเขียนโปรแกรมซึ่งเป็นหนังสือ uptodate มากหรือน้อยในความหมายของภาษาการเขียนโปรแกรมที่จำเป็น อ่านง่าย อย่างไรก็ตามมันมีแนวโน้มที่จะเป็นนามธรรมในส่วนหลังของหนังสือและคุณอาจต้องดิ้นรนเพื่อดูว่าทำไมสิ่งต่าง ๆ จึงถูกทำในลักษณะเฉพาะ

  • นาดส์ทฤษฎีการเขียนโปรแกรมภาษา ใครที่มีความเชี่ยวชาญในความหมายควรอ่านหนังสือเล่มนี้อย่างแน่นอน มันเป็นเพราะทั้งหมดโดย Reynolds (เดวิดชามิดท์เคยพูดกับฉันว่า "แม้ว่า Reynolds กำลังอ่านหนังสือพิมพ์ฉบับเช้าถึงคุณคุณต้องการฟังอย่างระมัดระวังเพราะคุณอาจเรียนรู้สิ่งที่สำคัญ"!) มันมีความครอบคลุมที่ดีทั้งด้านการสร้างแบบจำลองและพื้นฐานด้านต่างๆ

หนังสือที่ดีที่สุดในด้านพื้นฐานคือ Gunter's (ซึ่งฉันถือว่าเป็นตำราเรียนระดับบัณฑิตศึกษา) และ Mitchell's (ซึ่งเป็นหนังสืออ้างอิงที่ดีที่มีอยู่ในชั้นวางหนังสือของคุณเนื่องจากค่อนข้างครอบคลุม)


เป็นเรื่องดีมากที่มีคุณอยู่ที่นี่ Uday!
Radu GRIGore

ฉันดีใจที่ได้อยู่ที่นี่เช่นกัน นี่เป็นแหล่งข้อมูลที่ดีมาก!
Uday Reddy

วิธีการเกี่ยวกับ: การเปลี่ยนผ่านและต้นไม้: ความรู้เบื้องต้นเกี่ยวกับความหมายของโครงสร้างการดำเนินงานจาก Hans Hüttel 2010 ดูเหมือนว่าจะมีบทวิจารณ์ goood แต่ไม่มีใครพูดถึงที่นี่
Arturo Hernandez

1
@Uday: ขอบคุณสำหรับคำตอบ "การสร้างแบบจำลองแนวคิดการเขียนโปรแกรมภาษา" และ "พื้นฐานด้านความหมาย" หมายถึงอะไร? ความแตกต่างและความสัมพันธ์ของพวกเขาคืออะไร
ทิม

1
@Tim: เพื่อให้ความหมายของภาษาการเขียนโปรแกรมคุณจำเป็นต้องมีโครงสร้างทางคณิตศาสตร์บางรูปแบบเช่นกำหนดในกรณีที่ง่ายที่สุด แต่โครงสร้างที่ซับซ้อนเช่นโดเมนหมวดหมู่ Coalgebras เป็นต้นสำหรับปัญหาที่ไม่สามารถจัดการได้ โดย "พื้นฐานด้าน" ฉันหมายถึงทฤษฎีของโครงสร้างที่ซับซ้อนมากขึ้นเหล่านี้ ในกรณีก่อนเน้นภาษาโปรแกรมและในกรณีหลังมันอยู่บนพื้นฐานทางคณิตศาสตร์
Uday Reddy

8

ฉันสนุกมากที่ได้อ่าน Winskel เมื่อฉันเรียนหลักสูตรปริญญาตรีเรื่องอรรถศาสตร์ ฉันไม่สามารถบอกได้ว่ามันลงวันที่หรือไม่เพราะฉันไม่ได้ทำการวิจัยในสาขานี้ ข้อดีของ Winskel คือคุณสามารถค้นหามันแปลเป็นภาษาอื่น ๆ นอกเหนือจากภาษาอังกฤษ

สำหรับการอ่านเพิ่มเติมมากขึ้นในระดับบัณฑิตศึกษาผมขอแนะนำให้จอห์นมิทเชลล์หนังสือ ฐานรากสำหรับการเขียนโปรแกรมภาษาและแนวคิดในการเขียนโปรแกรมภาษา หากคุณอ่านเฉพาะบทแรกฉันคิดว่าพวกเขายังตอบสนองความต้องการของคุณในการกระชับ

คุณจะไม่พบฉบับร่างหนังสือเหล่านี้ฟรีดังนั้นหากคุณมีงบประมาณ จำกัด สำหรับคำว่า "อาจ" ในคำตอบของ Radu


6

ฉันไม่ใช่ผู้เชี่ยวชาญในเรื่องนี้ แต่มีคำแนะนำทั่วไปที่ฉันสามารถให้ได้

ก่อนมีคนบางคนที่ได้อ่านหนังสือแล้วและให้ความเห็นเกี่ยวกับมัน ตัวอย่างเช่นสำหรับหนังสือ Winskel ความหมายอย่างเป็นทางการของภาษาโปรแกรม (ดู[1]และ[2] ) ฉันพบบทวิจารณ์ใน Amazon

ส่วนหนึ่งของความเห็นอ่าน:

หนังสือเล่มนี้สร้างความสับสนระหว่างไวยากรณ์และความหมายตั้งแต่ต้นเช่นแยกตัวอักษรออกจากค่าของมัน ไม่มีการใช้สัญลักษณ์พิเศษเพื่อแยกความแตกต่าง นี่เป็นปัญหาสำคัญที่ผู้เขียนควรกล่าวถึงในหัวข้อเช่นนี้ นอกจากนี้เครื่องหมายอื่น ๆ ที่เขาใช้ค่อนข้างสับสนเช่นการแสดงสถานที่และข้อสรุป

ผู้เขียนคิดว่าคุณมีสิ่งที่จำเป็นต้องมีทั้งหมดในขณะที่เขาอธิบายวัสดุพื้นหลังในบทแรก ๆ (เช่นทฤษฎีเซตความหมายเชิงปฏิบัติการการเหนี่ยวนำคำจำกัดความอุปนัย) สั้นมาก รูปแบบที่ผู้เขียนใช้ในการแนะนำคือการใส่ข้อความสองหรือสามย่อหน้าและใส่สูตรบางอย่างจากนั้นให้แบบฝึกหัด ซึ่งสำหรับฉันค่อนข้างน่าผิดหวัง ...

18/20 คนคิดว่ารีวิวมีประโยชน์ คุณสามารถค้นหา Amazon (หรือแหล่งอื่น ๆ ) เพื่อดูความเห็นเพิ่มเติม

ประการที่สอง Amazon เสนอประเภทและภาษาการเขียนโปรแกรมและทฤษฎีหมวดหมู่พื้นฐานสำหรับนักวิทยาศาสตร์คอมพิวเตอร์พร้อมกับหนังสือเล่มนี้ ในอีกหัวข้อหนึ่ง Dave Clarke เสนอหนังสือเหล่านี้ว่ายอดเยี่ยมในเรื่อง "ประเภทระบบและความหมายของภาษาโปรแกรม" อีกครั้งฉันไม่ใช่ผู้เชี่ยวชาญ แต่สิ่งเหล่านี้อาจมีประโยชน์สำหรับคุณ


TaPL ช้าไปหน่อยสำหรับรสนิยมของฉัน มันเป็นหนังสือที่ดี แต่ฉันพูดถึงเรื่องนี้เพราะคนที่ถามดูเหมือนจะกังวลเกี่ยวกับหนังสือ "ที่ยืดยาว"
Radu GRIGore

@Radu: TAPL ค่อนข้างช้า แต่มันก็เป็นการแนะนำที่ดี หนังสือฮาร์เปอร์ที่คุณกล่าวถึงในลิงก์ของคุณนั้นเร็วกว่ามากและครอบคลุมพื้นที่มากขึ้นแม้ว่าจะยังไม่เสร็จสมบูรณ์
Dave Clarke

4
อ่านรีวิว Amazon ของหนังสือ Winskel ด้วยเกลือนิดหน่อย มันมักจะใช้เป็นข้อความที่แนะนำในหลักสูตรความหมายระดับปริญญาตรีและอาจดึงดูดนักเรียนที่ไม่พอใจ ฉันอ่านหนังสือแล้วพบบทแนะนำมากเกินพอ สัญกรณ์ของเขาตลอดดูเหมือนจะเป็นมาตรฐานอย่างสมบูรณ์เช่นกัน
Dominic Mulligan

4

ฉันต้องการเพิ่มหนังสือสองเล่มที่ไม่พบในคำตอบที่ให้ไว้ตอนนี้:

สมุดของตอมีความกระชับ แต่ชัดเจนมาก


3

สำหรับการเริ่มต้นที่สมบูรณ์แบบการศึกษาความหมายในการดำเนินงานที่ผมจะแนะนำการเขียนโปรแกรมภาษาและความหมายในการดำเนินงานโดยMaribel Fernández ทุกอย่างถูกอธิบายอย่างเรียบง่ายซึ่งเข้าใจได้ง่าย http://www.springer.com/computer/swe/book/978-1-4471-6367-1

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.