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

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

10
ภาษาที่คอมไพเลอร์เขียนใน C จะเร็วกว่า C ได้อย่างไร?
ลองดูที่หน้าเว็บของ Juliaคุณสามารถดูเกณฑ์มาตรฐานของหลายภาษาในหลาย ๆ อัลกอริทึม (การกำหนดเวลาที่แสดงด้านล่าง) ภาษาที่คอมไพเลอร์เขียนด้วยภาษา C ได้ดีกว่าโค้ด C อย่างไร รูป: เวลามาตรฐานเทียบกับ C (เล็กกว่าดีกว่า, ประสิทธิภาพ C = 1.0)

12
ทำไมมีภาษาการเขียนโปรแกรมมากมาย
ฉันใช้ภาษา C / C ++ ได้อย่างคล่องแคล่วและสามารถใช้ภาษาสคริปต์ต่าง ๆ ได้ (awk / sed / perl) ฉันเริ่มใช้ python มากขึ้นเพราะมันรวมแง่มุมที่ดีของ C ++ เข้ากับความสามารถในการเขียนสคริปต์ของ awk / sed / perl แต่ทำไมมีภาษาการเขียนโปรแกรมที่แตกต่างกันมากมาย ฉันเดาว่าทุกภาษาเหล่านี้สามารถทำสิ่งเดียวกันดังนั้นทำไมไม่ยึดติดกับภาษาใดภาษาหนึ่งและใช้มันกับโปรแกรมคอมพิวเตอร์? โดยเฉพาะอย่างยิ่งมีเหตุผลใดบ้างที่ฉันควรรู้ภาษาการใช้งานในฐานะโปรแกรมเมอร์คอมพิวเตอร์? การอ่านที่เกี่ยวข้องบางส่วน: เหตุใดภาษาการเขียนโปรแกรมใหม่จึงประสบความสำเร็จ - หรือล้มเหลว ยังมีงานวิจัยที่ต้องทำในภาษาโปรแกรมหรือไม่

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

5
เหตุใดภาษาการเขียนโปรแกรมบางภาษาจึง“ เร็วกว่า” หรือ“ ช้ากว่า” กว่าภาษาอื่น
ฉันสังเกตเห็นว่าบางแอปพลิเคชันหรืออัลกอริทึมที่สร้างขึ้นด้วยภาษาการเขียนโปรแกรมกล่าวว่า C ++ / Rust ทำงานได้เร็วขึ้นหรือเร็วกว่าแอปพลิเคชันที่สร้างขึ้นบน Java / Node.js ที่ทำงานบนเครื่องเดียวกัน ฉันมีคำถามสองสามข้อเกี่ยวกับเรื่องนี้: ทำไมสิ่งนี้ถึงเกิดขึ้น อะไรคือสิ่งที่ควบคุม "ความเร็ว" ของภาษาการเขียนโปรแกรม? สิ่งนี้เกี่ยวข้องกับการจัดการหน่วยความจำหรือไม่? ฉันจะซาบซึ้งจริงๆถ้ามีคนทำลายมันลงสำหรับฉัน

9
คุณสมบัติของภาษาการเขียนโปรแกรมที่ทำให้การรวบรวมเป็นไปไม่ได้?
คำถาม: "คุณสมบัติบางอย่างของภาษาการเขียนโปรแกรมอาจต้องการวิธีเดียวที่จะทำให้โค้ดที่ถูกเขียนนั้นถูกเรียกใช้งานโดยการตีความกล่าวอีกนัยหนึ่งไม่สามารถคอมไพล์ไปยังรหัสเครื่องดั้งเดิมของ CPU แบบดั้งเดิมได้คุณสมบัติเหล่านี้คืออะไร" ผู้เรียบเรียง: หลักการและการปฏิบัติโดย Parag H. Dave และ Himanshu B. Dave หนังสือเล่มนี้ไม่มีเงื่อนงำเกี่ยวกับคำตอบ ฉันพยายามค้นหาคำตอบเกี่ยวกับแนวคิดการเขียนโปรแกรมภาษา (SEBESTA) แต่ก็ไม่มีประโยชน์ การค้นหาเว็บก็มีประโยชน์เล็กน้อยเช่นกัน คุณมีเงื่อนงำอะไรบ้าง

6
การตรวจสอบโปรแกรมอย่างเป็นทางการในทางปฏิบัติ
ในฐานะวิศวกรซอฟต์แวร์ฉันเขียนโค้ดจำนวนมากสำหรับผลิตภัณฑ์อุตสาหกรรม สิ่งที่ค่อนข้างซับซ้อนกับคลาส, เธรด, ความพยายามในการออกแบบบางอย่าง แต่ยังมีบางอย่างที่ทำให้ประสิทธิภาพลดลง ฉันทำการทดสอบจำนวนมากและฉันเหนื่อยกับการทดสอบดังนั้นฉันจึงสนใจในเครื่องมือพิสูจน์อย่างเป็นทางการเช่น Coq, Isabelle ... ฉันสามารถใช้สิ่งเหล่านี้เพื่อพิสูจน์อย่างเป็นทางการว่ารหัสของฉันปราศจากข้อบกพร่องและสามารถทำได้ ด้วยหรือ - แต่ทุกครั้งที่ฉันตรวจสอบหนึ่งในเครื่องมือเหล่านี้ฉันเดินออกไปโดยไม่มั่นใจว่าพวกเขาสามารถใช้งานได้สำหรับวิศวกรรมซอฟต์แวร์ทุกวัน ตอนนี้นั่นอาจเป็นฉันเท่านั้นและฉันกำลังมองหาตัวชี้ / ความคิดเห็น / ความคิดเกี่ยวกับที่ :-) โดยเฉพาะฉันได้รับความประทับใจว่าการทำให้หนึ่งในเครื่องมือเหล่านี้ใช้งานได้สำหรับฉันจะต้องใช้เงินลงทุนจำนวนมากในการกำหนดวัตถุวิธีการ ... ของโปรแกรมภายใต้การพิจารณาอย่างเหมาะสม จากนั้นฉันก็สงสัยว่านักปราชญ์จะไม่หมดพลังไอน้ำเพราะขนาดของทุกสิ่งที่มันต้องจัดการด้วยหรือไม่ หรือบางทีฉันอาจต้องกำจัดผลข้างเคียง (เครื่องมือพิสูจน์พวกนั้นดูเหมือนจะทำได้ดีกับภาษาที่ประกาศ) และฉันสงสัยว่ามันจะส่งผลให้ "รหัสที่พิสูจน์แล้ว" ซึ่งไม่สามารถใช้ได้เพราะมันจะไม่เร็วหรือ เล็กพอ นอกจากนี้ฉันไม่มีความหรูหราในการเปลี่ยนภาษาที่ฉันทำงานด้วยมันต้องเป็น Java หรือ C ++: ฉันไม่สามารถบอกเจ้านายของฉันได้ว่าฉันจะใช้รหัสใน OXXXml นับจากนี้ไปเพราะเป็นภาษาเดียวใน ซึ่งฉันสามารถพิสูจน์ความถูกต้องของรหัส ... ใครบางคนที่มีประสบการณ์มากขึ้นเกี่ยวกับเครื่องมือพิสูจน์ความคิดเห็นอย่างเป็นทางการ? อีกครั้ง - ฉันจะรักในการใช้เครื่องมือสอบมาตรอย่างเป็นทางการผมคิดว่าพวกเขาจะดี แต่ผมมีความประทับใจที่พวกเขาอยู่ในหอคอยงาช้างที่ฉันไม่สามารถเข้าถึงได้จากคูต่ำต้อยของ Java / C ++ ... (PS: …

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

10
ภาษาไดนามิกเช่น Ruby / Python สามารถเข้าถึง C / C ++ เหมือนประสิทธิภาพได้หรือไม่?
ฉันสงสัยว่าเป็นไปได้ไหมที่จะสร้างคอมไพเลอร์สำหรับภาษาไดนามิกเช่น Ruby เพื่อให้มีประสิทธิภาพที่คล้ายกันและเทียบเท่ากับ C / C ++? จากสิ่งที่ฉันเข้าใจเกี่ยวกับคอมไพเลอร์ใช้ Ruby เช่นการคอมไพล์โค้ด Ruby นั้นไม่สามารถมีประสิทธิภาพได้เพราะวิธีที่ Ruby จัดการกับการสะท้อนคุณสมบัติต่าง ๆ เช่นการแปลงชนิดอัตโนมัติจากจำนวนเต็มเป็นจำนวนเต็มใหญ่และการขาดการพิมพ์แบบคงที่ สำหรับทับทิมยากมาก เป็นไปได้ไหมที่จะสร้างคอมไพเลอร์ที่สามารถรวบรวม Ruby หรือภาษาไดนามิกอื่น ๆ ไปยังไบนารีที่ทำงานใกล้ชิดกับ C / C ++ มากขึ้น? มีเหตุผลพื้นฐานที่ทำให้คอมไพเลอร์ JIT เช่น PyPy / Rubinius ในที่สุดจะหรือไม่จะไม่ตรงกับ C / C ++ ในการทำงาน? หมายเหตุ: ฉันเข้าใจว่า "ประสิทธิภาพ" อาจคลุมเครือดังนั้นเพื่อล้างสิ่งนั้นฉันหมายความว่าถ้าคุณสามารถทำ X ใน C / C ++ ด้วยประสิทธิภาพ …

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

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

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

8
ตัวแปรถูกจัดเก็บในและดึงข้อมูลจากสแต็กของโปรแกรมอย่างไร
ขออภัยล่วงหน้าสำหรับความไร้เดียงสาของคำถามนี้ ฉันเป็นศิลปินอายุ 50 ปีที่พยายามเข้าใจคอมพิวเตอร์อย่างถูกต้องเป็นครั้งแรก ดังนั้นที่นี่ไป ฉันพยายามเข้าใจว่าประเภทข้อมูลและตัวแปรได้รับการจัดการโดยคอมไพเลอร์อย่างไร (โดยทั่วไปฉันรู้ว่ามันมีจำนวนมาก) ฉันขาดอะไรบางอย่างในการทำความเข้าใจเกี่ยวกับความสัมพันธ์ระหว่างหน่วยเก็บข้อมูลใน "สแต็ก" และประเภทค่าและที่เก็บข้อมูลใน "กอง" และประเภทอ้างอิง (เครื่องหมายคำพูดมีความหมายว่าฉันเข้าใจว่าเงื่อนไขเหล่านี้เป็นนามธรรม ในบริบทที่เรียบง่ายเช่นเดียวกับที่ฉันวางกรอบคำถามนี้) อย่างไรก็ตามแนวคิดง่าย ๆ ของฉันคือประเภทเช่น Booleans และจำนวนเต็มไปที่ "สแต็ค" เพราะพวกเขาสามารถเพราะพวกเขาเป็นที่รู้จักหน่วยงานในแง่ของพื้นที่จัดเก็บและขอบเขตการควบคุมได้อย่างง่ายดายตาม แต่สิ่งที่ฉันไม่ได้รับก็คือแอปพลิเคชันอ่านแล้วว่าตัวแปรในสแต็กถ้าฉันประกาศและกำหนดxเป็นจำนวนเต็มพูดx = 3และที่เก็บถูกสงวนไว้ในสแต็คจากนั้นค่าของ3มันจะถูกเก็บไว้ที่นั่น ฟังก์ชั่นเดียวกันฉันประกาศและกำหนดyเป็นพูด4แล้วจากนั้นฉันก็ใช้xในการแสดงออกอื่น (พูดz = 5 + x) โปรแกรมสามารถอ่านได้อย่างไรxเพื่อประเมินzเมื่อมันอยู่ด้านล่างyบนกอง? ฉันขาดอะไรบางอย่างชัดเจน มันเป็นที่ตั้งบนสแต็คเป็นเพียงเกี่ยวกับอายุการใช้งาน / ขอบเขตของตัวแปรและว่าสแต็คทั้งหมดสามารถเข้าถึงโปรแกรมได้ตลอดเวลา? ถ้าเป็นเช่นนั้นนั่นหมายความว่ามีบางดัชนีอื่น ๆ ที่เก็บที่อยู่ของตัวแปรในสแต็กเพื่อให้สามารถดึงค่าได้หรือไม่? แต่ฉันคิดว่าจุดทั้งหมดของสแต็คคือค่านั้นถูกเก็บไว้ในที่เดียวกับที่อยู่ตัวแปรหรือไม่ ในใจที่อ่อนแอของฉันดูเหมือนว่าหากมีดัชนีอื่นนี้เราก็กำลังพูดถึงบางสิ่งบางอย่างที่มากกว่ากอง ฉันสับสนอย่างชัดเจนและฉันแค่หวังว่าจะมีคำตอบง่ายๆสำหรับคำถามง่าย ๆ ของฉัน ขอบคุณที่อ่านมาไกลขนาดนี้

9
เหตุใดภาษาการเขียนโปรแกรมบางภาษาจึงทัวริงสมบูรณ์ แต่ขาดความสามารถบางอย่างของภาษาอื่น
ฉันพบปัญหาแปลก ๆ เมื่อเขียนล่ามที่ (ควร) hooks ไปยังโปรแกรม / ฟังก์ชั่นภายนอก: ฟังก์ชั่นใน 'C' และ 'C ++' ไม่สามารถขอฟังก์ชั่นแปรผันได้เช่นฉันไม่สามารถสร้างฟังก์ชั่นที่เรียกว่า 'printf' ด้วยอาร์กิวเมนต์เดียวกันที่แน่นอนที่ได้รับและแทนที่จะต้องเรียกใช้เวอร์ชันอื่นที่ใช้วัตถุแปรปรวน นี่เป็นปัญหาอย่างมากเนื่องจากฉันต้องการสร้างวัตถุที่มีตะขอที่ไม่ระบุชื่อ ดังนั้นฉันคิดว่านี่แปลกตั้งแต่Forth , JavaScriptและบางทีภาษาอื่น ๆ สามารถทำได้อย่างง่ายดายโดยไม่ต้องหันไปใช้ภาษาแอสเซมบลี / รหัสเครื่อง เนื่องจากภาษาอื่นสามารถทำสิ่งนี้ได้อย่างง่ายดายนั่นหมายความว่าระดับของปัญหาที่แต่ละภาษาโปรแกรมสามารถแก้ไขได้แตกต่างกันไปตามภาษาแม้ว่าภาษาเหล่านี้จะทัวริงสมบูรณ์หรือไม่

2
pseudocode ของ Tarjan ทำงานอย่างไร (อธิบายต่อคนที่คุ้นเคยกับ C หรือ Java)
เรื่องสั้น Tarjanนักวิทยาศาสตร์คอมพิวเตอร์ชื่อดังเขียนหนังสือเมื่อหลายปีก่อน มันมี pseudocode ที่แปลกประหลาดอย่างแน่นอน ใครช่วยอธิบายหน่อยได้ไหม เรื่องยาว Tarjanเป็นที่รู้จักสำหรับความสำเร็จมากมายรวมทั้งความจริงที่ว่าเขาเป็น coinventor ของต้นไม้ที่กางออก เขาตีพิมพ์หนังสือ " โครงสร้างข้อมูลและอัลกอริทึมเครือข่าย " ในช่วงทศวรรษ 1980 รหัสหลอกทั้งหมดในหนังสือของ Tarjan เขียนด้วยภาษาที่เขาคิดขึ้นเอง อนุสัญญารหัสหลอกมีความน่าเชื่อถือมาก มันเกือบจะเป็นภาษาที่แท้จริงและใคร ๆ ก็จินตนาการได้ว่าสามารถเขียนคอมไพเลอร์ได้ Tarjan เขียนว่าภาษาของเขามีพื้นฐานสามประการดังต่อไปนี้: ภาษาคำสั่งที่ได้รับการปกป้องของ Dijkstra SETL ALGOL ฉันหวังว่าคนที่คุ้นเคยกับหนึ่งหรือสองภาษาข้างต้นหรืองานของ Tarjan จะสามารถตอบคำถามของฉัน ตัวอย่างของฟังก์ชั่นที่เขียนด้วยภาษา Tarjan แสดงอยู่ด้านล่าง: heap function mesh (heap nodes h1, h2); if key(h1) > key(h2) → h1 ⟷ h2 …

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

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