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

ภาษาประดิษฐ์สำหรับสั่งคอมพิวเตอร์ให้ทำขั้นตอนการคำนวณเพื่อให้งานสำเร็จ อนุญาตให้โปรแกรมเมอร์สื่อสารกับคอมพิวเตอร์

4
เพราะเหตุใดประเภทจึงตามหลังชื่อตัวแปรในภาษาการเขียนโปรแกรมสมัยใหม่
ทำไมในภาษาการเขียนโปรแกรมสมัยใหม่เกือบทุกภาษา (Go, Rust, Kotlin, Swift, Scala, Nim หรือ Python เวอร์ชันล่าสุด) มักเกิดขึ้นหลังชื่อตัวแปรในการประกาศตัวแปรและไม่ใช่มาก่อน? ทำไมx: int = 42ไม่int x = 42? สิ่งหลังไม่สามารถอ่านได้มากกว่าในอดีตหรือไม่ มันเป็นเพียงเทรนด์หรือมีเหตุผลที่มีความหมายจริงๆที่อยู่เบื้องหลังโซลูชันนี้หรือไม่?

23
เหตุใดจึงไม่มีภาษาการเขียนโปรแกรม“ สากล” ที่ตอบสนองทุกวัตถุประสงค์ [ปิด]
ทำไมไม่รวมคุณสมบัติที่ดีที่สุดของภาษาการเขียนโปรแกรมที่มีอยู่ทั้งหมดเข้าด้วยกันในภาษาสากล

14
รักษาภาษาการเขียนโปรแกรมไว้ด้านหลังและแก้ไขข้อบกพร่อง
ขั้นแรกให้บริบท (สิ่งที่คุณส่วนใหญ่รู้อยู่แล้ว): ภาษาการเขียนโปรแกรมยอดนิยมทุกภาษามีวิวัฒนาการที่ชัดเจนเวลาส่วนใหญ่ถูกทำเครื่องหมายโดยเวอร์ชัน: คุณมี Java 5, 6, 7 ฯลฯ , PHP 5.1, 5.2, 5.3 ฯลฯ การปล่อยเวอร์ชันใหม่ทำให้ API ใหม่พร้อมใช้งานแก้ไขข้อบกพร่องเพิ่ม คุณสมบัติใหม่กรอบใหม่ ฯลฯ ดังนั้นทั้งหมด: ดี แต่ปัญหาของภาษา (หรือแพลตฟอร์ม) เกี่ยวกับอะไร? หากและเมื่อมีสิ่งผิดปกติในภาษานักพัฒนาอาจหลีกเลี่ยง (ถ้าพวกเขาสามารถ) หรือพวกเขาเรียนรู้ที่จะอยู่กับมัน ตอนนี้ผู้พัฒนาภาษาเหล่านั้นได้รับข้อเสนอแนะมากมายจากโปรแกรมเมอร์ที่ใช้ภาษาเหล่านั้น ดังนั้นจึงเป็นเรื่องที่เข้าใจได้ว่าเมื่อเวลา (และหมายเลขเวอร์ชั่น) ผ่านไปปัญหาในภาษาเหล่านั้นจะช้าลง แต่จะหายไปอย่างแน่นอน ก็ไม่ได้จริงๆ ทำไม? ความเข้ากันได้ย้อนหลังนั่นเป็นเหตุผล แต่ทำไมถึงเป็นเช่นนั้น? อ่านด้านล่างสำหรับสถานการณ์ที่เป็นรูปธรรมมากขึ้น วิธีที่ดีที่สุดที่ฉันสามารถอธิบายคำถามของฉันคือการใช้ PHP เป็นตัวอย่าง: PHP เป็นที่รักและเกลียดชังคนหลายพันคน ทุกภาษามีข้อบกพร่อง แต่เห็นได้ชัดว่า PHP นั้นพิเศษ ลองดูโพสต์บล็อกนี้ มันมีรายการที่ยาวมากของข้อบกพร่องที่เรียกว่าใน PHP …

5
“ ไม่มีบริบท” หมายถึงอะไรในคำว่า "ไวยากรณ์ที่ไม่มีบริบท"
ด้วยจำนวนเนื้อหาที่พยายามอธิบายว่าไวยากรณ์ที่ปราศจากบริบท (CFG) คืออะไรฉันพบว่ามันน่าประหลาดใจที่น้อยมาก (ในตัวอย่างของฉันน้อยกว่า 1 ใน 20) ให้คำอธิบายว่าทำไมไวยากรณ์ดังกล่าวเรียกว่า "บริบท - ฟรี". และในใจของฉันไม่มีใครประสบความสำเร็จในการทำเช่นนั้น คำถามของฉันคือทำไมไวยากรณ์ที่ไม่มีบริบทเรียกว่าไม่มีบริบท "บริบท" คืออะไร? ฉันมีสัญชาตญาณว่าบริบทอาจเป็นภาษาอื่น ๆ ที่อยู่รอบ ๆ โครงสร้างที่วิเคราะห์อยู่ในปัจจุบัน แต่ดูเหมือนจะไม่เป็นเช่นนั้น ใครช่วยอธิบายได้อย่างแม่นยำ?

6
การวนรอบเหตุการณ์เป็นเพียงการวนรอบ / ขณะที่การหยั่งสัญญาณที่ปรับปรุงแล้ว
ฉันพยายามเข้าใจว่าวงเหตุการณ์คืออะไร บ่อยครั้งที่คำอธิบายคือในเหตุการณ์วนรอบคุณทำบางสิ่งบางอย่างจนกว่าคุณจะได้รับแจ้งว่ามีเหตุการณ์เกิดขึ้น จากนั้นคุณจัดการกับกิจกรรมและทำสิ่งที่คุณเคยทำมาก่อน เพื่อแมปคำจำกัดความข้างต้นด้วยตัวอย่าง ฉันมีเซิร์ฟเวอร์ที่ 'คอยฟัง' ในเหตุการณ์ลูปและเมื่อตรวจพบการเชื่อมต่อซ็อกเก็ตข้อมูลจากมันจะถูกอ่านและแสดงหลังจากนั้นเซิร์ฟเวอร์จะกลับมาทำงาน / เริ่มฟังเหมือนเดิม อย่างไรก็ตามเหตุการณ์นี้เกิดขึ้นและพวกเราได้รับแจ้งว่า 'แบบนั้น' นั้นเป็นเรื่องที่ฉันต้องรับมือ คุณสามารถพูดได้ว่า: "ไม่ใช่" แบบนั้น "คุณต้องลงทะเบียนผู้ฟังเหตุการณ์" แต่สิ่งที่ฟังเหตุการณ์ แต่ฟังก์ชั่นที่ด้วยเหตุผลบางอย่างจะไม่กลับมา มันอยู่ในวงของตัวเองกำลังรอการแจ้งเตือนเมื่อมีเหตุการณ์เกิดขึ้น? ผู้ฟังเหตุการณ์ควรลงทะเบียนผู้ฟังเหตุการณ์ด้วยหรือไม่ มันจะจบที่ไหน? เหตุการณ์เป็นสิ่งที่เป็นนามธรรมที่ดีในการทำงานด้วย แต่เป็นเพียงสิ่งที่เป็นนามธรรม ฉันเชื่อว่าในท้ายที่สุดการเลือกตั้งไม่สามารถหลีกเลี่ยงได้ บางทีเราไม่ได้ทำมันในรหัสของเรา แต่ระดับที่ต่ำกว่า (การใช้ภาษาการเขียนโปรแกรมหรือระบบปฏิบัติการ) กำลังทำเพื่อเรา โดยทั่วไปแล้วจะมากับรหัสเทียมต่อไปนี้ซึ่งทำงานอยู่ในระดับต่ำพอจึงไม่ทำให้เกิดการรอคอย: while(True): do stuff check if event has happened (poll) do other stuff นี่คือความเข้าใจของฉันของความคิดทั้งหมดและฉันต้องการที่จะได้ยินว่ามันถูกต้อง ฉันเปิดกว้างในการยอมรับว่าความคิดทั้งหมดนั้นผิดอย่างสิ้นเชิงซึ่งในกรณีนี้ฉันต้องการคำอธิบายที่ถูกต้อง


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

12
ภาษาการเขียนโปรแกรมใดที่สร้างบั๊กที่หายากได้น้อยที่สุด? [ปิด]
ในความเห็นของคุณว่าภาษาใดที่อนุญาตให้โปรแกรมเมอร์โดยเฉลี่ยให้คุณสมบัติการส่งออกที่มีข้อบกพร่องที่ยากต่อการค้นหาน้อยที่สุด? แน่นอนว่าเป็นคำถามที่กว้างมากและฉันสนใจคำตอบและภูมิปัญญาที่กว้างและกว้างมาก โดยส่วนตัวฉันพบว่าฉันใช้เวลาน้อยมากในการค้นหาข้อผิดพลาดที่แปลกประหลาดในโปรแกรม Java และ C # ในขณะที่รหัส C ++ มีชุดข้อผิดพลาดที่เกิดซ้ำและ Python / คล้ายคลึงกันมีชุดของตัวเองของข้อผิดพลาดทั่วไปและโง่ ๆ ในภาษาอื่น ๆ นอกจากนี้ฉันคิดว่ามันยากที่จะพิจารณาภาษาที่ใช้งานได้ในเรื่องนี้เพราะฉันไม่เคยเห็นโปรแกรมขนาดใหญ่และซับซ้อนที่เขียนด้วยรหัสการทำงานทั้งหมด โปรดป้อนข้อมูลของคุณ แก้ไข: การชี้แจงข้อผิดพลาดที่หายากโดยพลการอย่างสมบูรณ์: ใช้เวลามากกว่า 15 นาทีในการสร้างซ้ำหรือมากกว่า 1 ชั่วโมงเพื่อค้นหาสาเหตุและการแก้ไข ยกโทษให้ฉันหากนี่เป็นสิ่งที่ซ้ำกัน แต่ฉันไม่พบสิ่งใดในหัวข้อเฉพาะนี้

9
ทำไม Java มีวิธีการ 'โมฆะ'?
Java / ทำไมต้องมีvoidวิธีการ? เอกสารอ้างอิง : วิธีการใด ๆ ที่ประกาศเป็นโมฆะจะไม่ส่งคืนค่า เท่าที่ผมสามารถคิดว่าการใช้งานของทุกคนจะได้รับการบริการที่ดีขึ้นโดยการกลับธงสถานะวัตถุที่ถูกเรียกหรือvoidnull สิ่งนี้จะทำให้การเรียกใช้คำสั่งที่กำหนดได้และจะช่วยให้รูปแบบการสร้างและวิธีการผูกมัด วิธีการที่ถูกเรียกใช้เฉพาะกับเอฟเฟกต์ของพวกเขามักจะส่งคืนบูลีนหรือSuccessประเภททั่วไปหรือส่งข้อยกเว้นเมื่อล้มเหลว

15
ทำไมมีภาษาการเขียนโปรแกรมมากมาย ทำไมภาษาใหม่ถึงยังคงถูกสร้างขึ้นมา? [ปิด]
ทำไมมีภาษาการเขียนโปรแกรมมากมาย และอะไรที่กระตุ้นให้บางคนสร้างภาษาการเขียนโปรแกรมทั้งๆที่มีภาษาอื่นอยู่แล้ว?

11
เหตุใด C ++ จึงมี 'พฤติกรรมที่ไม่ได้กำหนด' (UB) และภาษาอื่น ๆ เช่น C # หรือ Java ไม่
โพสต์สแต็คโอเวอร์โฟลว์นี้แสดงรายการสถานการณ์ที่ค่อนข้างครอบคลุมซึ่งข้อกำหนดภาษา C / C ++ ประกาศว่าเป็น 'พฤติกรรมที่ไม่ได้กำหนด' อย่างไรก็ตามฉันต้องการเข้าใจว่าทำไมภาษาสมัยใหม่อื่น ๆ เช่น C # หรือ Java ไม่มีแนวคิดของ 'พฤติกรรมที่ไม่ได้กำหนด' มันหมายความว่าผู้ออกแบบคอมไพเลอร์สามารถควบคุมสถานการณ์ที่เป็นไปได้ทั้งหมด (C # และ Java) หรือไม่ (C และ C ++)?

3
ระบบประเภทคืออะไร?
พื้นหลัง ฉันกำลังออกแบบภาษาเป็นโปรเจคต์ด้านข้าง ฉันมีแอสเซมเบลอร์ทำงานตัววิเคราะห์แบบคงที่และเครื่องเสมือนสำหรับมัน เนื่องจากฉันสามารถรวบรวมและเรียกใช้โปรแกรมที่ไม่น่าสนใจโดยใช้โครงสร้างพื้นฐานที่ฉันได้สร้างขึ้นฉันจึงคิดที่จะนำเสนอที่มหาวิทยาลัยของฉัน ในระหว่างการพูดคุยของฉันฉันบอกว่า VM ให้ระบบประเภทถูกถามว่า " ระบบประเภทของคุณคืออะไร " หลังจากตอบฉันได้รับเสียงหัวเราะจากผู้ที่ถามคำถาม ดังนั้นแม้ว่าฉันเกือบจะเสียชื่อเสียงในการถามคำถามนี้ แต่ฉันกลับไปที่โปรแกรมเมอร์ ความเข้าใจของฉัน ตามที่ฉันเข้าใจแล้วระบบประเภทถูกใช้เพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับเอนทิตีในโปรแกรมเพื่อให้รันไทม์หรือคอมไพเลอร์หรือเครื่องจักรอื่น ๆ รู้ว่าต้องทำอย่างไรกับสตริงของบิตที่ทำงาน พวกเขายังช่วยรักษาสัญญา - คอมไพเลอร์ (หรือตัววิเคราะห์โค้ดหรือรันไทม์หรือโปรแกรมอื่น ๆ ) สามารถตรวจสอบว่า ณ จุดใดก็ตามที่โปรแกรมทำงานกับค่าโปรแกรมเมอร์ที่คาดหวังว่ามันจะทำงาน ประเภทยังสามารถใช้เพื่อให้ข้อมูลกับโปรแกรมเมอร์มนุษย์เหล่านั้น ตัวอย่างเช่นฉันพบประกาศนี้: function sqrt(double n) -> double; มีประโยชน์มากกว่านี้ sqrt(n) ก่อนหน้านี้ให้ข้อมูลมากมาย: sqrtตัวระบุเป็นฟังก์ชั่นรับdoubleอินพุตหนึ่งตัวและสร้างอีกdoubleอันเป็นเอาต์พุต หลังบอกคุณว่ามันอาจเป็นฟังก์ชั่นการใช้พารามิเตอร์เดียว คำตอบของฉัน ดังนั้นหลังจากถูกถามว่า "ระบบประเภทของคุณคืออะไร" ฉันตอบดังนี้: ระบบประเภทเป็นแบบไดนามิก (ประเภทถูกกำหนดให้กับค่าไม่ใช่ตัวแปรที่เก็บไว้) แต่มีความแข็งแกร่งโดยไม่มีกฎบังคับที่น่าแปลกใจ (คุณไม่สามารถเพิ่มสตริงลงในจำนวนเต็มเนื่องจากมันเป็นประเภทที่เข้ากันไม่ได้ แต่คุณสามารถเพิ่มจำนวนเต็มเป็นจำนวนจุดลอยตัว) . ระบบชนิดถูกใช้โดย VM …

9
ทำไมการเปรียบเทียบค่าสตริงของโอเปอเรเตอร์ == จึงไม่ทำให้เป็น Java
โปรแกรมเมอร์ Java ทุกคนรู้ดีว่าคุณต้องใช้ String.equals () เพื่อเปรียบเทียบสตริงแทนที่จะเป็น == เพราะ == ตรวจสอบความเท่าเทียมกันอ้างอิง เมื่อฉันจัดการกับสตริงเวลาส่วนใหญ่ที่ฉันกำลังตรวจสอบความเท่าเทียมกันของค่ามากกว่าความเท่าเทียมกันอ้างอิง ดูเหมือนว่าสำหรับฉันแล้วมันจะง่ายกว่านี้หากภาษาอนุญาตให้เปรียบเทียบค่าสตริงโดยใช้ == จากการเปรียบเทียบตัวดำเนินการ == ของ C # จะตรวจสอบความเท่าเทียมกันของค่าสำหรับสตริง s และถ้าคุณต้องการตรวจสอบความเท่าเทียมกันของการอ้างอิงคุณสามารถใช้ String.ReferenceEquals อีกจุดสำคัญคือสตริงไม่เปลี่ยนรูปดังนั้นจึงไม่มีอันตรายใด ๆ ที่จะทำโดยอนุญาตให้ใช้คุณลักษณะนี้ มีเหตุผลใดเป็นพิเศษหรือไม่ที่สิ่งนี้ไม่ได้นำไปใช้ใน Java?

11
ทำไม Lisp ไม่แพร่หลายมากขึ้น? [ปิด]
ฉันเริ่มเรียน Scheme ด้วยวิดีโอ SICP และฉันต้องการย้ายไปยัง Common Lisp ต่อไป ภาษาดูเหมือนจะน่าสนใจมากและผู้คนส่วนใหญ่เขียนหนังสือเกี่ยวกับภาษานั้นเพื่อสนับสนุนว่ามีพลังในการแสดงออกที่ไม่มีใครเทียบ CL ดูเหมือนว่าจะมีไลบรารีมาตรฐานที่ดี ทำไม Lisp ไม่แพร่หลายมากขึ้น? ถ้ามันมีพลังจริงๆผู้คนควรจะใช้มันให้จบ แต่มันแทบจะเป็นไปไม่ได้เลยที่จะหาพูดว่า Lisp job jobs ฉันหวังว่ามันจะไม่ใช่แค่วงเล็บเพราะมันไม่ได้เป็นปัญหาใหญ่หลังจากผ่านไปสักครู่

11
“ ง่ายต่อการให้เหตุผล” - นั่นหมายความว่าอย่างไร [ปิด]
ฉันเคยได้ยินหลายครั้งเมื่อนักพัฒนาซอฟต์แวร์รายอื่นใช้วลีนั้นเพื่อ "โฆษณา" รูปแบบบางอย่างหรือพัฒนาแนวทางปฏิบัติที่ดีที่สุด ส่วนใหญ่วลีนี้จะใช้เมื่อคุณกำลังพูดถึงประโยชน์ของการเขียนโปรแกรมการทำงาน วลี "เหตุผลง่าย ๆ เกี่ยวกับ" ถูกนำมาใช้อย่างที่เป็นอยู่โดยไม่มีคำอธิบายหรือตัวอย่างโค้ด ดังนั้นสำหรับฉันมันจะกลายเป็นเหมือน "buzz" ถัดไปซึ่งเป็นคำที่นักพัฒนา "มีประสบการณ์" ใช้ในการเจรจา คำถาม: คุณสามารถยกตัวอย่างบางส่วนของ "ไม่ง่ายที่จะให้เหตุผลเกี่ยวกับ" ดังนั้นจึงสามารถนำมาเปรียบเทียบกับตัวอย่าง "ง่ายต่อการเหตุผล"

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