คำถามติดแท็ก programming-languages

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

3
ทำไมการใช้ lexer / parser กับข้อมูลไบนารีจึงผิด?
ฉันมักจะทำงานร่วมกับlexer / parsersซึ่งต่างจากผู้รวบรวม parser และเห็นคนที่ไม่เคยเรียนในการแยกวิเคราะห์ถามเกี่ยวกับการแยกวิเคราะห์ข้อมูลไบนารี โดยทั่วไปแล้วข้อมูลไม่เพียง แต่เป็นไบนารี แต่ยังคำนึงถึงบริบทด้วย โดยทั่วไปจะนำไปสู่การมีโทเค็นประเภทเดียวเท่านั้นโทเค็นสำหรับไบต์ บางคนสามารถอธิบายได้ว่าทำไมการแยกวิเคราะห์ข้อมูลไบนารีด้วย lexer / parser นั้นมีความชัดเจนเพียงพอสำหรับนักเรียน CS ที่ไม่ได้ทำการแยกวิเคราะห์ แต่มีพื้นฐานทางทฤษฎี

1
IO monad ทางเทคนิคไม่ถูกต้องหรือไม่?
บนวิกิ Haskell มีตัวอย่างต่อไปของการใช้งานตามเงื่อนไขของ IO monad (ดูที่นี่) when :: Bool -> IO () -> IO () when condition action world = if condition then action world else ((), world) โปรดทราบว่าในตัวอย่างนี้คำจำกัดความของIO aถูกนำไปใช้RealWorld -> (a, RealWorld)เพื่อทำให้ทุกอย่างเข้าใจง่ายขึ้น ตัวอย่างนี้เรียกใช้การกระทำใน IO monad แบบมีเงื่อนไข ตอนนี้สมมติว่านั่นconditionคือFalseการกระทำที่actionไม่ควรดำเนินการ ใช้ความหมายสันหลังยาวนี่จะเป็นกรณี อย่างไรก็ตามมีการบันทึกไว้ที่นี่ว่า Haskell พูดถึงเทคนิคที่ไม่เข้มงวด ซึ่งหมายความว่าคอมไพเลอร์ได้รับอนุญาตให้รันaction worldบนเธรดอื่นที่แตกต่างกันและจากนั้นทิ้งการคำนวณนั้นเมื่อพบว่าไม่ได้ต้องการมัน อย่างไรก็ตามตามจุดนั้นผลข้างเคียงจะเกิดขึ้นแล้ว ในตอนนี้เราอาจนำ IO monad ไปใช้ในลักษณะที่ผลข้างเคียงจะแพร่กระจายเมื่อโปรแกรมทั้งหมดเสร็จสิ้นและเรารู้ว่าควรใช้ผลข้างเคียงใด อย่างไรก็ตามนี่ไม่ใช่กรณีเนื่องจากเป็นไปได้ที่จะเขียนโปรแกรมที่ไม่มีที่สิ้นสุดใน …

3
ภาษาโปรแกรมอื่นใดนอกเหนือจาก Python และรุ่นก่อนโดยใช้การเยื้องเพื่อกำหนดบล็อคโค้ด [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Computer Science Stack Exchange ปิดให้บริการในวันที่ 11 เดือนที่ผ่านมา งูใหญ่ค่อนข้างมีชื่อเสียงใช้เยื้องไปsyntacticallyกำหนดกลุ่มของรหัส (ดูคำสั่งผสมในการอ้างอิงภาษา Python) หลังจากใช้ Python มาหลายปีฉันยังคงรู้สึกสนใจและชอบคุณสมบัติทางไวยากรณ์นี้มาก แต่ฉันสงสัยว่า: นอกเหนือจาก Python และภาษา "ก่อนหน้า" (*) ABC แล้ว ซึ่งภาษาการเขียนโปรแกรมอื่น ๆ นั้นมีการใช้การเยื้องสำหรับคำนิยามของบล็อกรหัส ? การบล็อกโค้ดหมายถึง "ข้อความสั่งหลายรายการซึ่งในทางใดทางหนึ่งถือว่าเป็นองค์ประกอบเดียว" ฉันสนใจภาษาการเขียนโปรแกรมเชิงปฏิบัติเป็นพิเศษ แต่ภาษาลึกลับอาจจะคุ้มค่าที่จะกล่าวถึงเช่นกัน (*): " ผู้บุกเบิก " คือตัวเลือกของคำในค่าเริ่มต้นของการรู้ว่าที่นี่ดีกว่า Guido van Rossum ผู้สร้าง Python อธิบายความสัมพันธ์ระหว่าง Python และ ABC เกี่ยวกับการเยื้องในการสัมภาษณ์แบบนี้: " …

1
ทำไมเราไม่ค้นคว้าเพิ่มเติมเกี่ยวกับการรับประกันเวลารวบรวม?
ฉันรักทุกสิ่งที่รวบรวมเวลาและฉันชอบความคิดที่ว่าเมื่อคุณรวบรวมโปรแกรมการรับประกันจำนวนมากเกี่ยวกับการดำเนินการของมัน โดยทั่วไปการพูดระบบประเภทคงที่ (Haskell, C ++, ... ) ดูเหมือนจะให้การรับประกันเวลาคอมไพล์ที่แข็งแกร่งกว่าระบบประเภทแบบไดนามิกใด ๆ จากสิ่งที่ฉันเข้าใจ Ada ดำเนินการตรวจสอบเวลาให้ดียิ่งขึ้นไปอีกและสามารถตรวจจับช่วงของข้อผิดพลาดที่มากกว่าก่อนดำเนินการ มันยังถือว่าปลอดภัยพอสมควร ณ เวลาใดเวลาหนึ่งมันถูกเลือกสำหรับฟิลด์ที่ละเอียดอ่อน (เมื่อข้อผิดพลาดในการเขียนโปรแกรมอาจทำให้เสียชีวิต) ตอนนี้ฉันสงสัยว่า: ถ้าการค้ำประกันแบบคงที่ที่ดีกว่านำไปสู่รหัสที่มีเอกสารและปลอดภัยกว่าแล้วทำไมเราไม่ค้นคว้าเพิ่มเติมในทิศทางนั้น ตัวอย่างของสิ่งที่ดูเหมือนว่าจะหายไปจะเป็นภาษาที่แทนที่จะกำหนดintประเภททั่วไปที่มีช่วงที่กำหนดโดยจำนวนบิตของสถาปัตยกรรมพื้นฐานหนึ่งอาจมีช่วง (ในตัวอย่างต่อไปนี้Int [a..b]อธิบายถึงชนิดจำนวนเต็มระหว่าง รวม a และ b): a : Int [1..24] b : Int [1..12] a + b : Int [2..36] a - b : Int [-11..23] b - a : Int …

2
แคลคูลัสแลมบ์ดา: ความแตกต่างระหว่างบริบทและบริบทการประเมิน
ประการแรกฉันอยากจะบอกว่าข้อความของฉันด้านล่างอาจมีข้อผิดพลาดดังนั้นโปรดชี้ข้อผิดพลาดใด ๆ ในการกำหนดคำถามของฉัน พิจารณาแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ด้วย booleans และ if-statement ซึ่งคำเหล่านี้ให้ไว้โดยไวยากรณ์นี้: t ::= v | t t | if t t t | x v ::= \x.t | #t | #f บริบท C ในกรณีนี้จะได้รับตามไวยากรณ์นี้: C ::= [-] | \x. C | C t | t C | if C t t | if …

3
ความสัมพันธ์ระหว่างทฤษฎีประเภทรัสเซลล์และระบบประเภท
ฉันเพิ่งรู้ว่ามีความสัมพันธ์บางอย่างระหว่างทฤษฎีประเภทรัสเซลล์และระบบประเภทที่พบเช่นใน Haskell อันที่จริงสัญกรณ์บางประเภทใน Haskell ดูเหมือนว่ามีสารตั้งต้นในทฤษฎีประเภท แต่ IMHO แรงบันดาลใจของรัสเซลในปี 1908 คือการหลีกเลี่ยงความขัดแย้งของรัสเซลและฉันไม่แน่ใจว่ามันเกี่ยวข้องกับระบบการพิมพ์ในวิทยาการคอมพิวเตอร์อย่างไร ความขัดแย้งของรัสเซลอยู่ในรูปแบบใดรูปแบบหนึ่งหรือบางสิ่งที่เราจะต้องกังวลเช่นถ้าเราไม่มีระบบที่ดีในภาษาที่กำหนด

4
ใครสามารถยกตัวอย่างง่ายๆ แต่ไม่ใช่ของเล่นของไวยากรณ์ตามบริบท
ฉันพยายามที่จะเข้าใจไวยากรณ์ที่ไวต่อบริบท ฉันเข้าใจว่าทำไมภาษาเช่น { w w ∣ w ∈ A* * * *}{ww∣w∈A∗}\{ww \mid w \in A^*\} {anbncn∣n∈N}{anbncn∣n∈N}\{a^n b^n c^n \mid n\in\mathbb{N}\} ไม่ใช่บริบทฟรี แต่สิ่งที่ฉันอยากรู้ว่าภาษาที่คล้ายกับแคลคูลัสแลมบ์ดาที่ไม่ได้พิมพ์ออกมานั้นเป็นบริบทที่อ่อนไหวหรือไม่ ฉันต้องการดูตัวอย่างของแบบง่าย ๆ แต่ไม่ใช่ของเล่น (ฉันพิจารณาตัวอย่างของเล่นด้านบน) ตัวอย่างของไวยากรณ์ไวตามบริบทที่สามารถสำหรับกฎการผลิตบางอย่างเช่นบอกว่าสัญลักษณ์บางอย่างหรือไม่ อยู่ในขอบเขตปัจจุบัน (เช่นเมื่อสร้างเนื้อหาของฟังก์ชัน) ไวยากรณ์ไวตามบริบทมีพลังมากพอที่จะทำให้ตัวแปรที่ไม่ถูกกำหนด / ไม่ได้ประกาศ / ไม่ถูกผูกไว้เป็นข้อผิดพลาดทางไวยากรณ์ (แทนที่จะเป็นความหมาย) หรือไม่

1
เครื่องมือสร้างต้นแบบความหมายภาษาโปรแกรม
มีเครื่องมือใดสำหรับการสร้างต้นแบบ semantics ภาษาการเขียนโปรแกรมและระบบชนิดและยังช่วยให้การตรวจสอบรูปแบบของคุณสมบัติมาตรฐานเช่นความแข็งแรงของประเภท? ฉันถามสิ่งนี้เพราะฉันกำลังอ่านหนังสือเกี่ยวกับAlloyและมีฟังก์ชั่นที่แน่นอนที่ฉันต้องการ แต่สำหรับรุ่นที่แสดงโดยใช้ตรรกะเชิงสัมพันธ์ ฉันรู้เรื่องOttแต่ไม่มีความสามารถในการ "ตรวจสอบแบบจำลอง" เนื่องจากมันมุ่งเน้นไปที่การสร้างรหัสสำหรับระบบผู้ช่วยที่พิสูจน์ได้ การอ้างอิงถึงการมีอยู่ของเครื่องมือดังกล่าวจะดีมาก

4
มันสมเหตุสมผลไหมที่จะมีทั้งแนวคิดของ 'null' และ 'บางที'?
ในขณะที่สร้างไคลเอนต์สำหรับเว็บ APIใน C # ฉันพบปัญหาเกี่ยวกับnullค่าที่มันจะแสดงถึงสองสิ่งที่แตกต่างกัน: ไม่มีอะไรเช่นfooอาจหรือไม่มีbar ไม่รู้จัก : โดยค่าเริ่มต้นการตอบสนองของ API จะรวมเฉพาะชุดย่อยของคุณสมบัติเท่านั้นคุณจะต้องระบุคุณสมบัติเพิ่มเติมที่คุณต้องการ ไม่ทราบดังนั้นจึงหมายความว่าไม่ได้ขอคุณสมบัติจาก API หลังจากการค้นหาบางอย่างฉันพบเกี่ยวกับประเภทอาจ (หรือตัวเลือก) วิธีการใช้งานในภาษาที่ใช้งานได้และวิธีที่ "แก้ปัญหา" การแก้ปัญหาเป็นโมฆะโดยการบังคับให้ผู้ใช้คิดถึงการขาดค่าที่เป็นไปได้ แต่ทั้งหมดของทรัพยากรที่ผมพบพูดคุยเกี่ยวกับการเปลี่ยนnullด้วยบางที ฉันพบว่ามีเหตุผลสามประการที่มีค่าแต่ฉันไม่เข้าใจอย่างเต็มที่และส่วนใหญ่ที่กล่าวถึงในบริบทของ "มันเป็นสิ่งที่ไม่ดี" ตอนนี้ผมสงสัยว่าถ้ามันทำให้รู้สึกที่จะมีทั้งแนวคิดของnullและอาจจะเพื่อเป็นตัวแทนที่ไม่รู้จักและไม่มีอะไรตามลำดับ นี่เป็นตรรกะสามค่าที่ฉันอ่านหรือมีชื่ออื่นหรือไม่? หรือเป็นวิธีที่ตั้งใจจะทำรังในบางทีใน?

4
ทำไมเราต้องแลกเปลี่ยนนามธรรมเพื่อความรวดเร็ว
ทำไมภาษาระดับสูงถึงไม่สามารถเข้าถึงภาษาระดับต่ำกว่าในแง่ของความเร็วได้? ตัวอย่างภาษาระดับสูง ได้แก่ Python, Haskell และ Java ภาษาระดับต่ำจะยากกว่าที่จะนิยาม แต่สมมติว่า C. การเปรียบเทียบสามารถพบได้ทั่วอินเทอร์เน็ต1และพวกเขาทั้งหมดเห็นด้วยว่า C นั้นเร็วกว่ามากบางครั้งอาจเป็น 10 หรือมากกว่า11^1 อะไรที่ทำให้ประสิทธิภาพแตกต่างกันมากและทำไมภาษาระดับสูงถึงไม่ทัน ตอนแรกฉันเชื่อว่านี่เป็นความผิดพลาดของคอมไพเลอร์และสิ่งต่าง ๆ จะดีขึ้นในอนาคต แต่ภาษาระดับสูงที่ได้รับความนิยมสูงสุดบางภาษาได้ใช้เวลาหลายสิบปีและพวกเขาก็ยังล้าหลังเมื่อพูดถึงความเร็ว พวกเขาไม่สามารถคอมไพล์คล้ายกับแผนผังไวยากรณ์ C แล้วทำตามขั้นตอนเดียวกันที่สร้างรหัสเครื่องได้หรือไม่ หรือบางทีมันเป็นสิ่งที่จะทำอย่างไรกับไวยากรณ์ของตัวเอง? ตัวอย่าง:11^1 เกมเกณฑ์มาตรฐานภาษาคอมพิวเตอร์ หน้ามาตรฐานของ Julia

2
เหตุใดจุดคงที่อย่างน้อย (lfp) จึงมีความสำคัญในการวิเคราะห์โปรแกรม
ฉันพยายามรับภาพรวมเกี่ยวกับความสำคัญของจุดคงที่น้อยที่สุด (lfp) ในการวิเคราะห์โปรแกรม เช่นการตีความเชิงนามธรรมดูเหมือนว่าจะใช้การดำรงอยู่ของ lfp เอกสารการวิจัยจำนวนมากเกี่ยวกับการวิเคราะห์โปรแกรมยังมุ่งเน้นไปที่การหาจุดตายตัวที่น้อยที่สุด โดยเฉพาะอย่างยิ่งบทความในวิกิพีเดีย: ทฤษฎีบท Knaster-Tarskiกล่าวว่า lfp ใช้เพื่อกำหนดความหมายของโปรแกรม ทำไมมันถึงสำคัญ? ตัวอย่างง่ายๆช่วยฉันได้ (ฉันพยายามที่จะได้ภาพใหญ่) แก้ไข ฉันคิดว่าถ้อยคำของฉันไม่ถูกต้อง ฉันไม่ท้าทายความสำคัญของ lfp คำถามที่แน่นอนของฉัน (เริ่มต้น) คือ: การคำนวณ lfp ช่วยในการวิเคราะห์โปรแกรมอย่างไร ยกตัวอย่างเช่นเหตุใดการตีความทางนามธรรมจึงใช้ lfp จะเกิดอะไรขึ้นถ้าไม่มี lfp ในโดเมนนามธรรม? หวังว่าคำถามของฉันจะเป็นรูปธรรมมากขึ้นในตอนนี้

3
อะไรคือความแตกต่างระหว่างประเภทข้อมูลนามธรรมและวัตถุ?
คำตอบ Programmers.SEลักษณะการเขียนเรียงความโดย Cook ( วัตถุที่ไม่ได้ ADTs ) เป็นคำพูด วัตถุทำตัวเหมือนฟังก์ชั่นที่มีลักษณะเหนือค่าของประเภทมากกว่าเป็นพีชคณิต วัตถุใช้นามธรรมกระบวนการแทนที่จะเป็นนามธรรมประเภท ADTs มักจะมีการใช้งานที่ไม่ซ้ำกันในโปรแกรม เมื่อภาษาของคุณมีโมดูลเป็นไปได้ที่จะมีการใช้งาน ADT หลายครั้ง แต่พวกเขาไม่สามารถทำงานร่วมกันได้ สำหรับฉันแล้วดูเหมือนว่าในบทความของ Cook มันเกิดขึ้นเป็นกรณีที่สำหรับตัวอย่างที่เฉพาะเจาะจงของชุดที่ใช้ในกระดาษของ Cook วัตถุสามารถดูได้ว่าเป็นฟังก์ชั่นพิเศษ ฉันไม่คิดว่าวัตถุโดยทั่วไปสามารถดูได้เป็นฟังก์ชั่นที่มีลักษณะเฉพาะ นอกจากนี้กระดาษของ Aldritch พลังแห่งการใช้งานร่วมกันได้: ทำไมวัตถุจึงหลีกเลี่ยงไม่ได้ ¹แนะนำ คำจำกัดความของแม่ครัวระบุว่าการจัดส่งแบบไดนามิกเป็นคุณสมบัติที่สำคัญที่สุดของวัตถุ เห็นด้วยกับเรื่องนี้และกับอลันเคย์เมื่อเขาพูด OOP สำหรับฉันหมายถึงเพียงการส่งข้อความการเก็บรักษาในท้องถิ่นและการป้องกันและการซ่อนกระบวนการของรัฐและการผูกมัดปลายสุดของทุกสิ่ง อย่างไรก็ตามสไลด์บรรยายร่วมเหล่านี้ไปยังกระดาษของ Aldritch แนะนำว่าคลาส Java เป็น ADTs ในขณะที่ส่วนต่อประสาน Java เป็นวัตถุ - และแน่นอนว่าการใช้อินเตอร์เฟซ "วัตถุ" สามารถทำงานร่วมกันได้ (หนึ่งในคุณสมบัติหลักของ OOP ตามที่กำหนด ) คำถามของฉันคือ ฉันถูกต้องหรือไม่ที่จะบอกว่าฟังก์ชั่นพิเศษไม่ใช่คุณสมบัติหลักของวัตถุและ …

5
คำจำกัดความของสถานะของวัตถุใน OOP
ฉันต้องการคำจำกัดความที่กระชับของ "สถานะของวัตถุ" ในการเขียนโปรแกรมเชิงวัตถุ (สำหรับกระดาษ) ประมาณครึ่งวันฉันค้นหากระดาษที่ฉันสามารถอ้างอิงในหัวข้อนี้ แต่ฉันหาไม่เจอ เอกสารทั้งหมดที่ฉันพบส่วนใหญ่เป็นเอกสารทั่วไปเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุและพวกเขาไม่ได้กำหนดสถานะของวัตถุ ฉันไม่แน่ใจ แต่สิ่งที่คาดเดาได้ดีที่สุดคือ: สถานะของวัตถุนั้นถูกกำหนดโดยสถานะของตัวแปรอินสแตนซ์ของวัตถุ ฉันกำลังค้นหาคำจำกัดความของสถานะของวัตถุและ / หรือการอ้างอิงในหัวข้อ (btw ฉันสามารถอ้างถึงแนวคิดเป็น "สถานะวัตถุ" หรือเป็นเรื่องผิดปกตินี้ได้หรือไม่)

1
การแยกประเภทการปรับแต่ง
ที่ทำงานฉันได้รับมอบหมายให้อนุมานข้อมูลบางประเภทเกี่ยวกับภาษาแบบไดนามิก ฉันเขียนลำดับของข้อความไปยังletนิพจน์ที่ซ้อนกันเช่น: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } เนื่องจากฉันเริ่มต้นจากข้อมูลประเภททั่วไปและพยายามอนุมานประเภทที่เฉพาะเจาะจงมากขึ้นตัวเลือกที่เป็นธรรมชาติคือประเภทการปรับแต่ง ตัวอย่างเช่นตัวดำเนินการตามเงื่อนไขส่งคืนการรวมของประเภทของสาขาที่เป็นจริงและเท็จ …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 

1
การอนุมานแบบอิงข้อ จำกัด พร้อมข้อมูลพีชคณิต
ฉันกำลังทำงานกับภาษาที่ใช้แสดงออกของลำดับวงศ์ตระกูล ML ดังนั้นจึงจำเป็นต้องมีการอนุมานแบบตามธรรมชาติ> :) ตอนนี้ฉันกำลังพยายามที่จะขยายการแก้ปัญหาตามข้อ จำกัด ไปสู่ปัญหาประเภทอนุมานตามการใช้งานง่าย ๆ ใน EOPL (Friedman และ Wand) แต่พวกเขามีประเภทข้อมูลพีชคณิตขั้นตอนที่สวยงาม สิ่งที่ฉันมีจนถึงตอนนี้ทำงานได้อย่างราบรื่น; ถ้าการแสดงออกeคือa + b, e : Int, และa : Int b : Intถ้าeเป็นการแข่งขัน match n with | 0 -> 1 | n' -> n' * fac(n - 1)`, ฉันถูกต้องสามารถอนุมานได้ว่าt(e) = t(the whole match expression), t(n) = …

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