ความแตกต่างระหว่างซีแมนติกส์ขนาดเล็กและใหญ่ในการปฏิบัติงาน


28

อะไรคือความแตกต่างพื้นฐานระหว่างความหมายในการดำเนินงานขนาดเล็กและขนาดใหญ่

ฉันมีเวลายากที่จะเข้าใจว่ามันคืออะไรและมีแรงบันดาลใจในการมีสองสิ่งนี้


1
บทความวิกิพีเดียเกี่ยวกับความหมายในการปฏิบัติงานมีแนวโน้ม ... จนกว่าจะมีใครรู้ว่ายอดรวมของข้อมูลในส่วน "ความหมายขั้นตอนใหญ่" คือ "ส่วนนี้ต้องใช้การขยายตัว (กุมภาพันธ์ 2554)"
David Richerby

1
แหล่งเรียนรู้ของคุณคืออะไร มันมีอะไรในเรื่องนี้? คุณคิดอย่างไร? คำแนะนำ: ความหมายของขั้นตอนใหญ่x = 0; while ( true ) { x = x + 1; }คืออะไร?
Raphael

@Raphael ฉันอ่านทำความเข้าใจการคำนวณ ความคิดของฉันคือวิธีการขั้นตอนเล็ก ๆ คือการลดนิพจน์ลงในนิพจน์ย่อยจนกว่าจะไม่สามารถลดได้อีกต่อไปจากนั้นจึงประเมินว่า ขั้นตอนใหญ่ดูเหมือนจะเกี่ยวกับการประเมินสิ่งต่าง ๆ ในทันที แต่ฉันก็ไม่ได้มีความแตกต่างที่น่าสนใจระหว่างทั้งสองวิธีเนื่องจากพวกเขาทั้งคู่ดูเหมือนจะเจาะลึกโครงสร้างที่สูงขึ้น
Simon Morgan

ขั้นตอนใหญ่เกี่ยวกับการเจาะลึกจากการสร้างระดับที่สูงขึ้นโดยการประเมินการสร้างย่อยและขั้นตอนขนาดเล็กโดยการลดการสร้างที่ใหญ่กว่าอีกครั้งลงในโครงสร้างย่อย
Simon Morgan

คำตอบ:


32

ซีแมนทิกส์ขั้นตอนเล็กกำหนดวิธีการประเมินนิพจน์หนึ่งขั้นตอนการคำนวณในแต่ละครั้ง การพูดอย่างเป็นทางการความหมายขั้นตอนเล็ก ๆ สำหรับภาษาการแสดงออกคือความสัมพันธ์เรียกว่าการลดความสัมพันธ์ ความหมายขั้นตอนเล็ก ๆ อธิบายสิ่งที่เกิดขึ้นกับนิพจน์โดยละเอียด มันสามารถที่จะให้แม่นยำของบัญชีแม้กระทั่งโปรแกรมที่ไม่ใช่เลิกกับห่วงโซ่อนันต์\ โปรแกรมการยกเลิกดังกล่าวเป็นหนึ่งที่สิ้นสุดด้วยค่าดังกล่าวว่าe' \ newcommand {\ llbracket} {[\! [} \ newcommand {\ rrbracket} {] \!]}: E × EE→:E×Ee 0e 1ve0e1e2e0e1v e E , v e veE,ve

ในตอนท้าย ๆ ของคลื่นคือความหมาย denotational ความหมายเชิง Denotational กำหนด "ความหมาย" ให้กับแต่ละนิพจน์ มันเป็นฟังก์ชั่นจากการแสดงออกถึง denotations: (เรียกว่าโดเมน) พื้นที่ของ denotations ได้อย่างสมบูรณ์ไม่เกี่ยวข้องกับพื้นที่ประโยคตัวอย่างเช่นอาจจะมีการแสดงออกที่ประเมินตัวเลขและจะเป็นชุดของตัวเลขเช่นหรือ{R}[[]]:EDDEDNR

ซีแมนทิกส์ขั้นตอนใหญ่อยู่ตรงกลาง ความหมายขั้นตอนใหญ่ในภาษาแสดงออกและชุดของค่าเป็นความสัมพันธ์V มันเกี่ยวข้องกับการแสดงออกถึงค่าของมัน (อาจจะมีหลายค่าถ้าภาษาที่ไม่ได้กำหนดไว้) บ่อยครั้งที่ค่าพิเศษใช้สำหรับนิพจน์ที่ไม่สิ้นสุดEV⇓:E×V

แล้วทำไมเราถึงมีสามแนวคิดนี้ แนวคิดทั้งหมดนี้สามารถสร้างแบบจำลองซึ่งกันและกัน แต่แบบจำลองนี้เพิ่มระดับความซับซ้อน

  • รับ semantics เล็กขั้นตอน , คุณสามารถกำหนดความหมายขั้นตอนที่สอดคล้องกันขนาดใหญ่ที่เกี่ยวข้องแต่ละการแสดงออกถึงมูลค่าของมัน (หรือค่าถ้าการลดลงไม่ใช่แบบไม่กำหนด): iff มีห่วงโซ่และไม่สามารถลดได้อีก โปรดทราบว่าโดยทั่วไปคุณไม่สามารถสร้างความหมายขั้นตอนเล็ก ๆ จากความหมายขั้นตอนขนาดใหญ่ ตัวอย่างเช่นนิพจน์ที่ไม่สิ้นสุดทั้งหมดแยกไม่ออกภายใต้ซีแมนทิกส์ขั้นตอนใหญ่evee1vv
  • กำหนดขั้นตอนใหญ่ความหมายคุณสามารถพูดได้ว่ามันเป็นความหมายขั้นตอนเล็ก ๆ บนV สิ่งนี้ไม่มีประโยชน์อย่างยิ่ง⇓:E×VEV
  • รับ semantics ขั้นตอนเล็ก ๆคุณสามารถกำหนดซีแมนทิกส์ denotational ที่สอดคล้องกันที่ denotation ของนิพจน์เป็นชุดของเชนการลดเริ่มต้นจากมัน สิ่งนี้ตอบสนองความหมายอย่างเป็นทางการ แต่มันไม่มีประโยชน์อย่างยิ่งเพราะมันเพิ่มค่าใช้จ่ายเชิงทฤษฎีที่กำหนดไว้ในวัตถุที่ง่ายต่อการให้เหตุผลด้วยการดูที่ไวยากรณ์โดยตรง
  • เมื่อกำหนด semanticsคุณสามารถกำหนดซีแมนทิกส์ขั้นตอนเล็ก ๆ โดยเพิ่ม denotation ที่เป็นไปได้ทั้งหมดเป็นค่าในภาษา ที่ต้องสร้างค่าที่ไม่ได้เป็นส่วนหนึ่งของไวยากรณ์ที่โปรแกรมเมอร์สามารถเขียนซึ่งหมายความว่าผลลัพธ์ที่น่าสนใจบางอย่างต้องระบุ“ สำหรับโปรแกรมทั้งหมดที่โปรแกรมเมอร์สามารถเขียน” แทนที่จะเป็น“ สำหรับโปรแกรมทั้งหมด” อันนี้ก็ไม่ได้มีประโยชน์มากเช่นกัน[[]]
  • กำหนดขั้นตอนใหญ่ความหมายคุณสามารถกำหนดความหมายที่สอดคล้อง denotational ที่โดเมนคือชุดของชุดของค่า:\} หากซีแมนทิกส์ขั้นตอนใหญ่กำหนดขึ้น (แต่ละนิพจน์จะลดลงเป็นค่าเดียว) คุณสามารถกำหนดซีแมนทิกส์ denotational ที่ง่ายกว่าซึ่งโดเมนคือชุดของค่า[[e]]={vev}
  • ตรงกันข้ามได้รับ denotational อรรถศาสตร์คุณสามารถกำหนดขั้นตอนใหญ่ความหมาย\ อีกครั้งหนึ่งนี้ไม่มีจุดหมายเล็กน้อย[[]]E[[]]

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

ความหมายขั้นตอนเล็ก ๆ เป็นสิ่งที่ชัดเจนที่สุด ชัดเจนให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับโปรแกรมที่ไม่สิ้นสุด โดยทั่วไปแล้วจะให้ข้อมูลรายละเอียดเกี่ยวกับพฤติกรรมของโปรแกรม

ความหมายเชิง Denotational แปลงโครงสร้างประโยคให้เป็นวัตถุทางคณิตศาสตร์ตามอำเภอใจ มันสามารถแสดงสิ่งที่นักวิทยาศาสตร์ต้องการ (คุณสามารถกำหนด denotation ของนิพจน์ให้เป็นโซ่การลดที่เป็นไปได้ทั้งหมด) แต่มีค่าใช้จ่ายในการเพิ่มระดับของความซับซ้อน มันถูกใช้เมื่อเราต้องการสรุปรายละเอียดบางอย่างออกไปเช่นการประเมินการแสดงออก

ความหมายของขั้นตอนใหญ่อยู่ตรงกลาง: มันสรุปรายละเอียดของการประเมิน แต่ยังคงรักษาลักษณะทางไวยากรณ์ของผลลัพธ์ โดยทั่วไปแล้วแนวคิดนี้จะถูกใช้เมื่อมีความหมายเล็ก ๆ น้อย ๆ ที่ซึ่งเป็นวิธีที่จะอธิบายอย่างย่อ ๆ ว่า " ” เป็น“ ” ในสิ่งปลูกสร้างในขณะที่แนวคิดแตกต่างกันมาก (อันที่หนึ่งช่วยให้เราสามารถพูดคุยเกี่ยวกับแต่ละขั้นตอนการคำนวณและเกี่ยวกับโปรแกรมไม่สิ้นสุดอื่น ๆ ไม่ได้) คำจำกัดความจะมีลักษณะคล้ายกันมากเพราะในกรณีนี้กฎที่กำหนด ซีแมนทิกส์ขั้นตอนใหญ่นั้นเป็นแบบฟอร์ม“ ถ้าและ…และและ(e1,,en),ee1en and e,eneeene1e2envvคือค่าดังนั้น ”e1v


ฉันเรียนรู้สิ่งนี้ด้วยเช่นกัน แต่ฉันมีปัญหากับสิ่งที่คุณพูดในคำตอบของคุณซึ่งฉันต้องการให้คุณชี้แจง คุณพูดว่า "ซีแมนทิกส์ขั้นตอนใหญ่ตรงกลาง" อย่างไรก็ตามขั้นตอนเล็ก ๆ จะไม่เป็นรุ่น 'กลาง' จริงหรือ พิจารณาสำนวน: A: ((5 + 7) + 3) B: (5 + 5) + 5) C: ((1 + 2) + 1) D: ((2 + 1) + 1) Denotational จะแยกประเภท แม้ C และ D ที่มีค่าแตกต่างกัน (อาจเป็น "C" และ "D") และขั้นตอนใหญ่จะจำแนกพวกเขาทั้งสองเป็น "4" และทั้ง A และ B เป็น "15" อย่างไรก็ตามขั้นตอนเล็ก ๆ จะให้คุณ "(12 + 3) "และ" (10 + 5) "สำหรับ A และ B และ" (3 + 1) "สำหรับ C และ D
Timothy Swan

@ TimothySwan สมมติว่าคุณต้องการกำหนดการประเมินผลทางคณิตศาสตร์ตามปกติความหมายเชิง Denotational จะไม่แยกความแตกต่างของ C และ D ความหมายขั้นตอนเล็ก ๆ จะกำหนดห่วงโซ่การลดเช่น . ความหมายขั้นตอนใหญ่จะคล้ายกับความหมาย denotational: VS4 ในความหมายขั้นตอนใหญ่เป็นหนึ่งในไวยากรณ์ภาษาในขณะที่ในความหมาย denotational เป็นหนึ่งจาก metatheory แต่ความแตกต่างที่ไม่สามารถมองเห็นหรือมีความสำคัญในตัวอย่างง่ายๆนี้ ((2+1)+1)3+14((2+1)+1)3[[((2+1)+1)]]=444
Gilles 'หยุดชั่วร้าย'

ดังนั้นเมื่อคุณพูด 'ความหมายเชิง Denotational จะกำหนด "ความหมาย" ให้กับแต่ละนิพจน์' คุณไม่ได้หมายถึงการระบุนิพจน์ที่ไม่ซ้ำกัน แต่ความหมายที่เป็นอิสระจากการประเมินผลบางอย่าง? คุณสามารถให้ตัวอย่างง่ายๆที่แสดงความแตกต่างอย่างชัดเจนระหว่างซีแมนทิกส์ขั้นตอนใหญ่กับความหมายเชิง Denotational ได้หรือไม่? นอกจากนี้โปรดอธิบาย3ใน((2+1)+1)⇓3ฉันคาดเดา 'denotational' เป็นบางสิ้นทั้งหมดค่า แต่ในสิ่งที่จะอินสแตนซ์ 'ขั้นตอนใหญ่' ไม่จำเป็นต้อง map โดยตรงกับที่? ไม่แตกต่างมีสิ่งที่จะทำอย่างไรกับบริบทเช่น(a + 1)ขึ้นอยู่กับสภาพแวดล้อมที่มีa?
Timothy Swan

@TimothySwan ตราบใดที่ไม่มีผลข้างเคียง, ไม่มีการกำหนดและไม่มีฟังก์ชั่น, ความหมายเชิง Denotational ของการแสดงออกเป็นค่าที่ประเมิน Non-Decismism เป็นวิธีที่ดีในการแสดงให้เห็นถึงความแตกต่างระหว่างขั้นตอนใหญ่และ denotational: การแสดงออกของการแสดงออกจะเป็นชุดของค่าที่มันสามารถมี:ในขณะที่ความหมายขั้นตอนใหญ่จะมีการตัดสินที่ยอมรับได้หลายอย่าง:และและ ... นั่นเป็นคำที่พิมพ์ผิด [[rand(1..n)]]={1,2,,n}rand(1..n)1rand(1..n)23
Gilles 'หยุดความชั่วร้าย'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.