คำถามติดแท็ก computer-science

วิทยาการคอมพิวเตอร์หรือวิทยาศาสตร์คอมพิวเตอร์ (ย่อ CS หรือ CompSci) เป็นวิธีการทางวิทยาศาสตร์เพื่อการคำนวณและการประยุกต์ใช้

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

2
การนอนด้ายทำงานอย่างไร
เมื่อคุณนอนหลับสิ่งที่เกิดขึ้นจริงคืออะไร? ผมเห็นว่าการนอนหลับหัวข้อ"หยุดเธรดปัจจุบันเป็นระยะเวลาที่กำหนดของเวลา" แต่มันทำงานอย่างไร ตามที่Thread.sleep () ทำงานภายในและThread.sleep ทำงานอย่างไรจริง ๆ : ระยะเวลาสลีปจะขึ้นอยู่กับความละเอียดเฉพาะของระบบ การนอนหลับกำลังปิดกั้น เธรดออกจาก CPU และหยุดการทำงาน เธรดไม่ใช้เวลา CPU ในขณะหลับ ฉันไม่เข้าใจกลไกภายในและพื้นฐานของความหมายทั้งหมดนี้ ฉันเข้าใจว่ามีบางสิ่งที่เรียกว่าตัวกำหนดตารางเวลาที่รับผิดชอบในการสลับระหว่างเธรด ดูเหมือนแหล่งที่มาจะบ่งบอกว่าสิ่งนี้จะแตกต่างกันไปตามระบบปฏิบัติการ (หรือฮาร์ดแวร์?) และเธรดส่วนใหญ่จะได้รับ 1ms - 60ms หรือมากกว่านั้นเพื่อดำเนินการบางอย่างก่อนที่ CPU จะเปลี่ยนไปใช้เธรดอื่น แต่เมื่อเธรดหลับ (เช่นหลายวินาที) มันจะทำงานต่อได้อย่างไร? ฉันคาดเดาว่าตัวจับเวลามีส่วนเกี่ยวข้องอย่างใดอย่างหนึ่งมันเป็นนาฬิกาของเมนบอร์ดหรือไม่ มันเกี่ยวข้องกับอัตราสัญญาณนาฬิกาของ CPU หรือไม่ และแม้ว่าจะมีการจับเวลาก็ตามซีพียูรู้ได้อย่างไรว่าถึงเวลาที่ต้องใส่ใจกับเธรดอีกครั้ง มันจะไม่ต้องตรวจสอบในด้ายอย่างต่อเนื่องเพื่อดูว่ามันพร้อมหรือไม่ ไม่ได้ที่มีประสิทธิภาพการลงคะแนนเลือกตั้งและดังนั้นจึงชนิดของการจะใช้เวลานาน CPU? กำลังนอนหลับภาษาเฉพาะของเธรดหรือระบบปฏิบัติการรับผิดชอบหรือไม่หรือเป็นสิ่งที่จำเพาะกับ CPU ใครช่วยอธิบายสิ่งนี้ให้ฉันด้วยคำอธิบายพื้นฐานของสิ่งต่าง ๆ เช่นตัวกำหนดตารางเวลาและซีพียูกำลังทำอะไรอยู่ในระหว่างนี้?

3
เหตุใดครอบครัว c จึงเป็นมาตรฐานการศึกษา CS สำหรับโปรแกรมคณิตศาสตร์ / CS แทนที่จะเป็นตระกูล LISP [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันทำความคุ้นเคยกับ LISP เพื่อการพัฒนาตนเอง หนึ่งในสิ่งที่ฉันสังเกตเห็นคือเสียงกระเพื่อมมากขึ้นในกระบวนทัศน์ของคณิตศาสตร์กว่าพูด C. โครงสร้างไวยากรณ์และการออกแบบดูเหมือนจะสะท้อนโดยตรงแบบจำลองทางคณิตศาสตร์จริงของอัลกอริทึม ฉันไม่เข้าใจว่าทำไมแม้แต่โปรแกรม CS ที่ดีทางคณิตศาสตร์ก็ยังเรียน C แทน LISP ฉันคิดว่า LISP ใช้แนวคิดทางคณิตศาสตร์ที่สูงกว่า C โดยตรงฉันไม่ได้บอกว่าคุณไม่สามารถสร้างแบบจำลองโครงสร้างทางคณิตศาสตร์ใน C. ฉันแค่สังเกตเห็นว่า LISP ดูเหมือนจะยากสำหรับนักคณิตศาสตร์ ฉันได้อ่านคำด่าของ Joel Spolsky หลายคนในโรงเรียน JAVA และสิ่งที่ไม่ - และฉันเห็นด้วยกับการประเมินของเขา - แต่โรงเรียนของฉันไม่ได้สอน JAVA ด้วยเหตุผลอย่างนั้น พวกเขาเข้มงวดในการสอนแนวคิดพื้นฐานเช่นพอยน์เตอร์การออกแบบอัลกอริทึมการเรียกซ้ำและแม้แต่คำแนะนำการประกอบ อย่างไรก็ตามพวกเขาทำสิ่งนี้ทั้งหมดใน C และ c ++ ไม่มีใครรู้เหตุผลของเรื่องนี้และ / หรือประวัติของมัน?

6
เหตุใด Perl จึงถูกใช้อย่างมากในชีวสารสนเทศศาสตร์? [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา มันเกี่ยวกับ Perl อะไรที่ทำให้มีประโยชน์ในด้านชีวสารสนเทศศาสตร์? ทำไม C ++ หรือ Matlab หรือ Python ไม่ใช่ภาษาใหญ่

7
หากมีคนเสนอข้อความที่ไม่ได้รับการยืนยันเกี่ยวกับแนวทางการพัฒนาซอฟต์แวร์คุณตอบกลับด้วย "การอ้างอิงที่จำเป็น" หรือไม่? [ปิด]
เป็นการยากที่จะบอกสิ่งที่ถูกถามที่นี่ คำถามนี้คลุมเครือคลุมเครือไม่สมบูรณ์กว้างเกินไปหรือโวหารและไม่สามารถตอบได้อย่างสมเหตุสมผลในรูปแบบปัจจุบัน สำหรับความช่วยเหลือในการทำความเข้าใจคำถามนี้เพื่อที่จะสามารถเปิด, ไปที่ศูนย์ช่วยเหลือ ปิดให้บริการใน9 ปีที่ผ่านมา เมื่อเร็ว ๆ นี้ฉันเข้าร่วมบรรยายโดยGreg Wilson (หัวหน้านักวิทยาศาสตร์ของ Software Carpentry) จากนามธรรม: แนวคิดที่อ้างว่าเกี่ยวกับการพัฒนาซอฟต์แวร์ควรเป็นไปตามหลักฐานยังคงเป็นของต่างประเทศสำหรับนักพัฒนาซอฟต์แวร์ แต่ในที่สุดก็เริ่มมีการเปลี่ยนแปลง: นักวิชาการที่อ้างว่าเครื่องมือหรือแบบฝึกหัดเฉพาะใด ๆ ทำให้การพัฒนาซอฟต์แวร์เร็วขึ้นราคาถูกลง คาดว่าจะสำรองข้อมูลที่อ้างว่ามีการศึกษาเชิงประจักษ์ โดยรวมแล้วการบรรยายนั้นให้ข้อมูลมากและทำให้ฉันคิดอย่างลึกซึ้งเกี่ยวกับแนวทางการพัฒนาของฉัน โดยเฉพาะตอนนี้ฉันพบว่าตัวเองกำลังมองหาการอ้างอิงเพื่อสำรองข้อความจำนวนมาก ก่อนหน้านี้ฉันเคยแอบติดนิสัยของความจริงที่เสนอซ้ำ ๆ โดยอาจจะเป็นโน้ตทางจิตใจที่จะไปตรวจสอบในภายหลัง วางไว้โผงผางฉันถูกใจง่าย นี่คือตัวอย่างที่นำมาจากการบรรยาย: "หากรหัสมากกว่า 25% ต้องการการปรับโครงสร้างใหม่จะสามารถเขียนได้เร็วขึ้น" ฟังดูน่าเชื่อถือ แต่จริงหรือ? การศึกษาสำรองอยู่ที่ไหน จริงหรือไม่สำหรับทุกภาษา? และอื่น ๆ ตกลงเป็นไปได้ค่อนข้างมากที่จะนำสิ่งนี้ไปสู่สุดโต่งและไม่เชื่ออะไรโดยใครนอกจากคุณจะได้รับมาจากหลักการแรก ด้วยวิธีนี้คือความบ้าคลั่ง (หรืออาจเป็นคณิตศาสตร์ ;-)) แต่ถ้ามีใครบางคนเข้ามาหาคุณพร้อมกับแถลงการณ์ตามบรรทัดของ "เฮ้การทำสิ่งนี้ใน [เลือกภาษาของช่วงเวลา] เราจะสามารถเพิ่มประสิทธิภาพการทำงานโดย [เลือกหลาย 10]%" คุณมีแนวโน้มที่จะเพียงแค่ ยอมรับหรือคุณจะขอหลักฐานที่พิสูจน์แล้ว? ถ้าเป็นแบบหลัง (และฉันหวังว่าจะเป็น) …

9
ฉันจะบูตชุมชนการพัฒนาซอฟต์แวร์ที่โรงเรียนของฉันได้อย่างไร
ฉันเป็นนักเรียนที่มหาวิทยาลัยเซาท์ฟลอริดาที่ผิดหวังกับสภาพแวดล้อมทางการศึกษาในโปรแกรมวิทยาศาสตร์คอมพิวเตอร์ ตอนนี้ฉันกำลังใช้ "การออกแบบโปรแกรม" ฉันควรจะเรียนรู้วิธีการจัดระเบียบซอร์สโค้ดของฉันลงในฟังก์ชั่นและโมดูลเพื่อให้โปรแกรมของฉันสามารถอ่านและบำรุงรักษาได้ แต่ฉันเรียนรู้เกี่ยวกับอาร์เรย์และการเรียกซ้ำใน C. ภาคการศึกษาถัดไปฉันต้องใช้ "การออกแบบเชิงวัตถุ" ซึ่งสอนผ่าน C ++ ( ตัวสั่น ) สองปีที่แล้วฉันตกหลุมรักการเขียนโปรแกรมและฉันเรียนรู้มากที่สุดตั้งแต่นั้นมา ความคาดหวังของการเรียน C ++ อีกครั้งทำให้ฉันแทบน้ำตา ด้วยเหตุนี้ฉันจึงคิดว่าฉันจะเริ่มชมรมการเขียนโปรแกรมเพื่อพบนักเรียนที่มีความทะเยอทะยานในทำนองเดียวกันเรียนรู้ภาษาใหม่อภิปรายหัวข้อการพัฒนาซอฟต์แวร์และทำงานร่วมกับนักพัฒนานักเรียนคนอื่น ๆ อย่างไรก็ตามฉันเริ่มตระหนักว่าอาจไม่มีนักเรียนคนอื่นที่แบ่งปันประสบการณ์การพัฒนาซอฟต์แวร์ของฉัน ไม่ใช่เพราะขาดแรงจูงใจ แต่ขาดโอกาส: ฉันรู้ว่ามีอีกหนึ่งคลาสการเขียนโปรแกรม ("ภาษาโปรแกรม") และไม่มีคลาสในการพัฒนาซอฟต์แวร์ในโลกแห่งความเป็นจริง ทุกคนอื่นมีประสบการณ์เขียนสคริปต์เล็กน้อยใน C และ C ++ ฉันรู้ว่าถ้าฉันต้องการทำงานกับนักพัฒนาซอฟต์แวร์นักเรียนคนอื่นฉันจะต้องฝึกพวกเขาเอง ตอนนี้ฉันวางแผนที่จะทำให้สโมสรเป็น bootcamp การพัฒนาซอฟต์แวร์สอนสมาชิกถึงวิธีการพัฒนาซอฟต์แวร์ด้วยเครื่องมือและภาษาที่ทันสมัย เห็นได้ชัดว่าการเริ่มต้นหลักสูตรการพัฒนาซอฟต์แวร์อย่างไม่เป็นทางการเป็นงานที่ยิ่งใหญ่ที่มีแนวทางที่เป็นไปได้มากมาย คำถามของฉันกับคุณผู้อ่านที่รักคือ แผนการโจมตีของฉันคืออะไร ฉันควร บรรยายสโมสรด้วยตัวเองพยายามสร้างสมดุลระหว่างการทำงานของสโมสรกับการบ้าน? ขอให้คณาจารย์ CS สอนในหัวข้อที่มีความเชี่ยวชาญซึ่งอาจน้อยกว่าที่เกี่ยวข้องกับสมาชิก? พยายามหาผู้พัฒนาที่เห็นอกเห็นใจมีประสบการณ์ทั้งในและนอกโรงเรียนที่สามารถแบ่งปันภาระงานของฉันได้หรือไม่ แสดงวิดีโอการบรรยาย (จากMIT OpenCourseWare , Google …

2
แคลคูลัสแลมบ์ดากับภาษาการเขียนโปรแกรมมีความสัมพันธ์กันอย่างไร? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน5 ปีที่ผ่านมา ฉันเริ่มปีแรกของฉัน (ในวิทยาลัย) ในวิทยาการคอมพิวเตอร์ในปีหน้าและฉันเขียนส่วนใหญ่ใน C (ถ้าเป็นเรื่อง) ฉันได้ลองค้นหาแล้ว แต่สิ่งที่ฉันพบส่วนใหญ่ถือว่ามีความรู้เกี่ยวกับแลมบ์ดาแคลคูลัส ทำไมแคลคูลัสแลมบ์ดาจึงถูกพิจารณาว่ามีประโยชน์มากกว่าแคลคูลัสแบบแปรผันเพียงตัวเดียวในการเริ่มโปรแกรม มีความสัมพันธ์ระหว่างการแสดงออกแลมบ์ดากับโปรแกรมการทำงานหรือไม่? มันเป็นงานของ Alonzo Church ในแลมบ์ดาแคลคูลัสที่มีอิทธิพลต่อการพัฒนาภาษาการเขียนโปรแกรมหรือไม่? ทุกคนที่อยู่นอกโรงเรียนยังคงคึกคักเกี่ยวกับเรื่องนี้และฉันก็ไม่รู้เลยว่าพวกเขาจะพูดถึงอะไรถึงแม้ว่าฉันกระตือรือร้นที่จะเรียนรู้และดูว่ามันเกี่ยวข้องโดยตรงกับการเขียนโปรแกรมและความเข้าใจภาษาโปรแกรมของฉันอย่างไร

4
Backtrack“ การศึกษา” ของฉัน [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Software Engineering Stack Exchange ปิดให้บริการใน4 ปีที่แล้ว เมื่อไม่นานมานี้ฉันตัดสินใจเริ่มเขียนโปรแกรม ฉันแค่กระโดดเข้าสู่ภาษา (Perl) แล้วก็ไปจากที่นั่น สิ่งที่ฉันเสียใจคือฉันเพิ่งกระโดดเข้า: ฉันไม่ได้เรียนรู้พื้นฐาน (ถ้าคุณจะเรียกพวกเขาว่าพื้นฐาน) ฉันไม่ได้เรียนรู้เกี่ยวกับวิทยาการคอมพิวเตอร์ ฉันเชื่อว่าปัญหานี้กำลังดึงฉันกลับจากศักยภาพที่แท้จริง ฉันจะ "เริ่มใหม่" ได้ที่ไหน มีหนังสือบทความ ฯลฯ ที่ฉันควรอ่านไหม มีหัวข้อใด ๆ ที่โปรแกรมเมอร์ผู้มีประสบการณ์ควรรู้หรือไม่? คุณมีคำแนะนำอะไร?

7
ใครช่วยแนะนำโครงการสำหรับฉันเขียนเพื่อช่วยให้ฉันเข้าใจเธรด
ตอนนี้ฉันเป็นนักพัฒนา C # ด้วยความเข้าใจที่สั่นคลอนของการทำเกลียว ลิงก์ทั้งสองนี้ได้รับการแนะนำในโพสต์อื่น ๆ : http://www.yoda.arachsys.com/csharp/threads/ http://www.albahari.com/threading/ ฉันควรกลับไปสู่พื้นฐานและอาจดูตำราวิทยาการคอมพิวเตอร์บางเรื่องในเรื่องนี้หรือไม่? ฉันรู้สึกว่าถ้าฉันกระโดดเข้ามาและใช้ห้องสมุด c # ฉันจะไม่มีพื้นฐานความรู้ที่แข็งแกร่งในการสร้าง ฉันคิดว่าฉันต้องเรียนรู้เรื่องนี้ตั้งแต่เริ่มต้นเหมือนนักเรียน com sci จากนั้นใช้ห้องสมุด C # ทุกคนสามารถแนะนำวิธีการเรียนรู้การทำเกลียวบางทีอาจจะมีลิงค์และหรือความคิดโครงงานบ้าง ขอบคุณล่วงหน้า! แก้ไขขอบคุณสำหรับคำตอบทั้งหมด บางคนกล่าวว่าหนังสืออาจเป็นความคิดที่ดีใคร ๆ ก็สามารถแนะนำได้บ้าง ฉันชอบภาษาที่ไม่เชื่อเรื่องพระเจ้า ไม่มีใครรู้ว่าสิ่งที่ชั้นนี้จะครอบคลุมในการศึกษาระดับปริญญาวิทยาศาสตร์คอมพิวเตอร์? ฉันพยายาม google เพื่อรับโน้ตและการบ้านออนไลน์ฟรี

3
เปลี่ยนเป็นอาชีพในการเรียนรู้ของเครื่อง [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน8 ปีที่ผ่านมา งานประจำวันของฉันคือการพัฒนาซอฟต์แวร์แบบเก่า ฉันกำลังทำปริญญาโทของฉันใน CS ด้วย (นอกเวลาตามหลักสูตร) ฉันเรียนหลักสูตร AI และพบว่าการเรียนรู้เครื่องค่อนข้างน่าสนใจ แต่หลักสูตรส่วนใหญ่เป็นเพียงการแนะนำเบื้องต้นเท่านั้น ฉันตั้งใจจะเรียนรู้เพิ่มเติมเกี่ยวกับการเรียนรู้ของเครื่องและถ้าเป็นไปได้หางานในสาขานั้น เมื่อฉันดูโพสต์งานในสาขานี้เป็นที่ชัดเจนว่าต้องมีการเรียนรู้ปริญญาเอกด้านเครื่องจักร (หรือมีประสบการณ์ก่อนหน้านี้ในสาขาที่มีความเชี่ยวชาญเป็นพิเศษ) สำหรับพวกเขาส่วนใหญ่ ฉันกำลังมองหาคำแนะนำเกี่ยวกับการเรียนรู้ด้วยตนเองเพื่อรับประสบการณ์ที่จะเป็นประโยชน์ในอุตสาหกรรม อย่างน้อยก็มีประสบการณ์มากพอที่จะก้าวเข้ามาฉันจะทำสิ่งที่ชัดเจนเช่นการอ่านหนังสือข้อความเอกสาร ฯลฯ บางทีความพยายามโอเพนซอร์สที่ฉันสามารถมีส่วนร่วมหรืออะไรที่ฉันสามารถทำได้ด้วยตัวเอง ขอโทษถ้าฉันคลุมเครือที่นี่ แต่ฉันหวังว่าจะมีพวกคุณอย่างน้อยสองคนที่ทำการสลับที่คล้ายกันและสามารถให้คำแนะนำได้ ขอบคุณมาก!

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

2
เราสามารถสร้างคอมพิวเตอร์ที่ใช้งานได้หรือไม่?
ในท้ายที่สุดแล้วโปรแกรมทั้งหมดของเรามีโครงสร้าง นั่นคือมันไม่สำคัญว่าเราจะสร้างมันให้บริสุทธิ์หรือใช้ประโยชน์ได้อย่างไร - พวกมันถูกแปลเป็นชุดประกอบเสมอดังนั้นสิ่งที่จริง ๆ แล้วสิ่งที่วิ่งอยู่หลังหมวกคือคำแนะนำรัฐและลูป พวกเราเลียนแบบ FP ในฐานะที่เป็นฮาร์ดแวร์ noob คำถามของฉันคือ: ทำไมเราไม่ใช้สถาปัตยกรรมคอมพิวเตอร์ที่คำนวณสิ่งต่าง ๆ ในรูปแบบที่ใช้งานได้จริง? ตัวอย่างเช่นคอมพิวเตอร์อาจประกอบด้วย "functional chips" ดั้งเดิมเช่น "concat", "map" และ "ลด" และโปรแกรมจะบอกคอมพิวเตอร์ว่าจะไหลของข้อมูลระหว่างชิปเหล่านั้นอย่างไรเพื่อคำนวณผลลัพธ์ที่ต้องการ เช่นในภาษาที่ต่อกัน สิ่งนี้ไม่สมเหตุสมผล แต่อาจแสดงสิ่งที่ฉันคิด

1
แคลคูลัสλคืออะไร?
ฉันมีสิ่งที่ฉันจะเรียกคำถามปรัชญาเกี่ยวกับ calcul-แคลคูลัส เมื่อคุณสำรวจ calcul-แคลคูลัสคุณจะประหลาดใจเมื่อเห็นทุกสิ่งที่คุณทำได้ คุณสามารถกำหนดจำนวนเต็มการดำเนินการทางคณิตศาสตร์บูลีนคำสั่ง if-then-else ลูปฟังก์ชั่นวนซ้ำ ฯลฯ ฉันเชื่อว่ามันได้รับการพิสูจน์แล้วว่าคำนวณเสร็จสมบูรณ์ แต่ในอีกด้านหนึ่งถ้าคุณพิจารณาว่าคุณสามารถทำอะไรกับฟังก์ชั่นใน calcul-แคลคูลัสได้คุณจะรู้ว่าสิ่งเดียวที่คุณทำได้คือการให้อาหารมันฟังก์ชั่นและมันจะส่งกลับฟังก์ชันอื่น และกระบวนการนั้นไม่สิ้นสุด ดังนั้นคุณจะแยกผลลัพธ์จากการคำนวณได้อย่างไร fสมมติว่าผลที่ตามมาของการแสดงออกเป็นฟังก์ชั่น คุณต้องการตรวจสอบว่าfเป็นสิ่งที่คุณคาดหวังหรือไม่ คุณสามารถทดสอบได้ใช้ฟังก์ชั่นที่คุณรู้จักใช้มันและได้รับf gแต่การตรวจสอบgนั้นถูกต้องตอนนี้คุณต้องตรวจสอบสิ่งที่gทำ และคุณเริ่มต้นใหม่ทั้งหมด ดังนั้นวิธีที่คุณสามารถบอกอะไรเกี่ยวกับf? ฉันคิดว่าคุณสามารถแทนที่ฟังก์ชั่นทั้งหมดใน us-แคลคูลัสด้วยฟังก์ชั่นเดียว, ฟังก์ชั่นเอกลักษณ์I = λx.xและทุกอย่างยังคงทำงานตามที่อธิบายไว้ในλ-แคลคูลัส คริสตจักรตัวเลข3เมื่อได้รับfและผลตอบแทนx f(f(f(x)))แต่เนื่องจากfและxจะไม่สามารถจะส่งกลับ I นำไปใช้และยังให้ผลตอบแทน ดังนั้นตอบสนองความหมายของ “การบูลีน” และความต้องการ 2 ข้อโต้แย้งซึ่งจะเป็นและเพื่อให้ทั้งสอง booleans จะกลับมา แต่ละคนจะเทียบเท่ากับตัวตนแม้ว่าพวกเขาจะปฏิบัติตามคำจำกัดความของพวกเขาIIIIII3(λxy.x)(λxy.y)III ดังนั้นคุณจะสร้างความแตกต่างได้อย่างไร คุณแสดงให้เห็นว่า calcul-แคลคูลัสเกี่ยวข้องกับฟังก์ชันมากกว่าฟังก์ชันเดียวได้อย่างไร มีแนวคิดของตัวตนหรือไม่? คุณสามารถระบุฟังก์ชันได้ทันทีโดยไม่ทำการประเมินหรือไม่? ฉันเชื่อว่าได้รับการพิสูจน์แล้วว่าไม่มีวิธีทดสอบ 2 ฟังก์ชั่นเพื่อความเท่าเทียมกัน หรือ calcul-แคลคูลัสไม่เกี่ยวกับฟังก์ชั่น แต่เกี่ยวกับคำอธิบายอย่างเป็นทางการของสิ่งที่พวกเขาทำ? นั่นหมายถึงว่านิพจน์ not ไม่เพียง …

2
มีการศึกษาทางวิทยาศาสตร์เกี่ยวกับ TDD ที่ใช้ต้นทุนการเป็นเจ้าของโดยรวมสำหรับผลิตภัณฑ์ในการวัดหรือไม่?
เมื่อฉันอ่านบทสรุปของงานก่อนหน้านี้ในDogsa T, Batic D. ประสิทธิผลของการพัฒนาด้วยการทดสอบ: กรณีศึกษาอุตสาหกรรม วารสารคุณภาพซอฟต์แวร์ 2011; 19 (4): 643-661 มันทำให้ฉันหลงไหลว่าการวัดที่ใช้ในการศึกษาจำนวนมากรอบ ๆ TDD นั้นขึ้นอยู่กับสิ่งต่าง ๆ เช่นบรรทัดของรหัสข้อบกพร่องและเวลาที่ใช้ในการพัฒนา มีการศึกษาใดบ้างที่มุ่งเน้นไปที่ต้นทุนการเป็นเจ้าของโดยรวมสำหรับผลิตภัณฑ์ที่ได้รับการพัฒนาโดยใช้ TDD กับการพัฒนาแบบดั้งเดิมหรือการทดสอบแบบดั้งเดิมหรือไม่? ฉันสนใจเป็นพิเศษในค่าใช้จ่ายทั้งหมดในการได้มาและต้นทุนการดำเนินงาน

4
บรรทัดของโค้ดถูกเรียกใช้งานโดย CPU อย่างไร
ฉันพยายามที่จะเข้าใจจริงๆว่าภาษาระดับสูงถูกแปลงเป็นรหัสเครื่องอย่างไรและดำเนินการโดย cpu ฉันเข้าใจว่ารหัสถูกรวบรวมเป็นรหัสเครื่องซึ่งเป็นรหัสระดับต่ำที่ CPU สามารถใช้ได้ ถ้าฉันมีคำสั่งมอบหมายพูด: x = x + 5; y = x - 3; CPU ดำเนินการทีละบรรทัดหรือไม่? ดังนั้นก่อนจะดำเนินการ x = x + 5; คำสั่งแล้วคำสั่งถัดไปที่ CPU จะดำเนินการคือ y = x- 3; ฉันพยายามเข้าใจขั้นตอนการดำเนินการจริง ๆ และวิธีการที่โค้ดที่ฉันเขียนนั้นถูกใช้งานจริงโดย CPU

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