เหตุใดภาษาการเขียนโปรแกรมเก่าจึงยังคงได้รับการแก้ไข


46

คำถามนี้ไม่ใช่ "ทำไมผู้คนยังใช้ภาษาโปรแกรมเก่าอยู่" ฉันเข้าใจว่าค่อนข้างดี อันที่จริงแล้วภาษาการเขียนโปรแกรมสองภาษาที่ฉันรู้จักดีที่สุดคือ C และ Scheme ซึ่งทั้งสองอย่างนี้ย้อนกลับไปในยุค 70

เมื่อเร็ว ๆ นี้ฉันได้อ่านเกี่ยวกับการเปลี่ยนแปลงใน C99 และ C11 เทียบกับ C89 (ซึ่งดูเหมือนว่าจะยังคงเป็นเวอร์ชัน C ที่ใช้มากที่สุดในทางปฏิบัติและรุ่นที่ฉันเรียนรู้จาก K&R) เมื่อมองไปรอบ ๆ ดูเหมือนว่าภาษาการเขียนโปรแกรมทุกภาษาที่ใช้งานหนักจะได้รับคุณสมบัติใหม่อย่างน้อยหนึ่งครั้งต่อทศวรรษหรือมากกว่านั้น แม้ฟอร์แทรนยังคงได้รับการแก้ไขใหม่แม้ว่าผู้ใช้ส่วนใหญ่จะใช้ฟอร์แทรน 77 ก็ตาม

เปรียบเทียบสิ่งนี้กับแนวทางการพูดระบบเรียงพิมพ์ TeX ในปี 1989 ด้วยการเปิดตัว TeX 3.0, Donald Knuth ประกาศว่า TeX เป็นคุณสมบัติที่สมบูรณ์และการเปิดตัวในอนาคตจะมีเพียงการแก้ไขข้อบกพร่อง ถึงแม้จะเกินกว่านี้เขาก็แจ้งว่าเมื่อเขาตาย "บั๊กที่เหลือทั้งหมดจะกลายเป็นคุณสมบัติ" และจะไม่มีการอัพเดทใด ๆ เพิ่มเติม คนอื่น ๆ มีอิสระในการแยก TeX และทำเช่นนั้น แต่ระบบที่ได้จะถูกเปลี่ยนชื่อเพื่อระบุว่าแตกต่างจาก TeX ที่เป็นทางการ นี่ไม่ใช่เพราะ Knuth คิดว่า TeX นั้นสมบูรณ์แบบ แต่เนื่องจากเขาเข้าใจถึงคุณค่าของระบบที่มั่นคงและสามารถคาดการณ์ได้ซึ่งจะทำสิ่งเดียวกันในห้าสิบปีที่ผ่านมา

ทำไมนักออกแบบภาษาโปรแกรมส่วนใหญ่จึงไม่ปฏิบัติตามหลักการเดียวกัน แน่นอนเมื่อภาษาค่อนข้างใหม่มันทำให้รู้สึกว่ามันจะผ่านช่วงเวลาของการเปลี่ยนแปลงอย่างรวดเร็วก่อนที่จะปักหลัก และไม่มีใครสามารถคัดค้านการเปลี่ยนแปลงเล็กน้อยที่ไม่ได้ทำอะไรมากไปกว่าประมวลมาตรฐานหลอกที่มีอยู่หรือแก้ไขการอ่านที่ไม่ได้ตั้งใจ แต่เมื่อภาษายังคงต้องการการปรับปรุงหลังจากสิบหรือยี่สิบปีทำไมไม่เพียง แต่แยกหรือเริ่มต้นใหม่แทนที่จะลองเปลี่ยนสิ่งที่มีการใช้งานอยู่แล้ว? หากบางคนต้องการทำโปรแกรมเชิงวัตถุใน Fortran ทำไมไม่สร้าง "Objective Fortran" เพื่อจุดประสงค์นั้นและปล่อยให้ Fortran อยู่คนเดียว?

ฉันคิดว่าอาจกล่าวได้ว่าไม่ว่าจะมีการแก้ไขในอนาคต C89 เป็นมาตรฐานอยู่แล้วและไม่มีอะไรหยุดผู้คนจากการใช้งานต่อไป นี่เป็นเรื่องจริง แต่ความหมายแฝงนั้นมีผลตามมา GCC ในโหมด pedantic จะเตือนเกี่ยวกับไวยากรณ์ที่เลิกใช้แล้วหรือมีความหมายที่แตกต่างกันเล็กน้อยใน C99 ซึ่งหมายความว่าโปรแกรมเมอร์ C89 ไม่สามารถเพิกเฉยต่อมาตรฐานใหม่ทั้งหมดได้ ดังนั้นจะต้องมีประโยชน์ใน C99 ที่เพียงพอที่จะกำหนดค่าใช้จ่ายนี้ให้กับทุกคนที่ใช้ภาษา

นี่เป็นคำถามจริงไม่ใช่คำเชิญให้โต้แย้ง เห็นได้ชัดว่าฉันมีความเห็นเกี่ยวกับเรื่องนี้ แต่ในขณะนี้ฉันแค่พยายามที่จะเข้าใจว่าทำไมมันไม่ได้เป็นเพียงแค่สิ่งที่ทำไปแล้ว ฉันคิดว่าคำถามคือ:

อะไรคือข้อดี (จริงหรือที่รับรู้) ของการอัปเดตมาตรฐานภาษาซึ่งต่างจากการสร้างภาษาใหม่โดยใช้ภาษาเก่า


2
คอมไพเลอร์จำนวนมากสามารถเรียกใช้ด้วยสวิตช์ที่จะบังคับใช้มาตรฐานที่เก่ากว่า (เช่น--std=xสวิตช์ของ GCC ) ดังนั้นจึงไม่เหมือนกับการสร้างมาตรฐานที่ใหม่กว่าส่งผลให้เครื่องมือที่ทำให้รหัสเก่าเสถียร
Blrfl

2
คุณจะกำหนด "ภาษาใหม่ตามภาษาเดิม" ได้อย่างไร ฉันจะโต้แย้ง Fortran 90 เป็น "ภาษาใหม่" ตาม F77 เก่า มันเปลี่ยนวิธีการที่โปรแกรมของคุณ - แหล่งที่มาคงที่เทียบกับฟรี, หน่วยความจำแบบคงที่เทียบกับคงที่, และอื่น ๆ คุณสามารถยืนยันได้ว่า Fortran 2003 เป็น "ภาษาใหม่" บนพื้นฐานของ F90 - มันเพิ่มการเขียนโปรแกรมเชิงวัตถุ ดูเหมือนความสัมพันธ์ระหว่าง C ++ และ C
tpg2114

1
ฉันคิดว่าคำถามนี้สำคัญมากและฉันไม่เข้าใจว่าทำไมบางคนถึงอยากปิด มันเป็นปรากฏการณ์ที่น่าสนใจมากที่อาจมีคำอธิบายบางอย่าง ไม่กี่ปีที่ผ่านมาฉันอ่านเกี่ยวกับคุณสมบัติใหม่ของ Fortran และถามตัวเองว่า: หากโปรแกรมเมอร์ของ Fortran ต้องการคุณสมบัติเหล่านี้ทำไมพวกเขาถึงไม่เปลี่ยนเป็น C เมื่อเร็ว ๆ นี้ฉันมีการพิจารณาที่คล้ายกันเกี่ยวกับ C ++: หากนักพัฒนา C ++ ต้องการใช้ lambdas ทำไมไม่เปลี่ยนเป็นพูด OCaml ( linux-nantes.org/~fmonnier/ocaml/ocaml-wrapping-c.php )? ทำไมพวกเขาถึงต้องการสร้างภาษาใหม่และยังคงเรียกมันว่า C ++
Giorgio

3
@ tpg2114 ความแตกต่างระหว่าง (FORTRAN 77: Fortran 90) และ (C: C ++) คือ Fortran 90 นั้นถูกพิจารณาว่ามี FORTRAN 77 แทนที่ FORTRAN 77 จนถึงจุดที่ผู้คนบอกว่า "ถ้าคุณต้องการเรียนรู้ Fortran ให้เรียนรู้ Fortran 2003 หรือ อย่างน้อย 90 เพราะมาตรฐานตอนนี้ " ไม่มีใครพูดอะไรเช่น "ถ้าคุณต้องการเรียนรู้ C เรียนรู้ C ++ เพราะนั่นเป็นมาตรฐานใหม่" เพราะพวกเขามีสองภาษาที่แตกต่างกัน ดังที่ฉันได้กล่าวไว้ความหมายแฝงมีผลตามมา

6
เพราะ C ไม่เคยตาย
Adel

คำตอบ:


13

ฉันคิดว่าแรงจูงใจสำหรับนักออกแบบภาษาในการแก้ไขภาษาที่มีอยู่คือการแนะนำนวัตกรรมในขณะที่มั่นใจว่าชุมชนนักพัฒนาเป้าหมายของพวกเขาอยู่ด้วยกันและใช้ภาษาใหม่: การย้ายชุมชนที่มีอยู่ไปสู่การแก้ไขภาษาใหม่ที่มีอยู่นั้นมีประสิทธิภาพมากกว่าการสร้างชุมชนใหม่ รอบ ๆ ภาษาใหม่ แน่นอนว่าสิ่งนี้บังคับให้นักพัฒนาบางคนนำมาตรฐานใหม่มาใช้แม้ว่าพวกเขาจะดีกับคนเก่า: ในชุมชนบางครั้งคุณต้องกำหนดการตัดสินใจบางอย่างเกี่ยวกับชนกลุ่มน้อยหากคุณต้องการให้ชุมชนอยู่ด้วยกัน

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

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

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

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

เป็นความคิดเห็นด้านฉันคิดว่าอาร์กิวเมนต์ของการอนุญาตให้วิวัฒนาการในขณะที่รักษาความเข้ากันได้กับรหัสดั้งเดิมค่อนข้างอ่อนแอ: Java สามารถเรียกรหัส C, Scala สามารถรวมกับรหัส Java ได้อย่างง่ายดาย C # สามารถรวมกับ C ++ มีตัวอย่างมากมายที่แสดงว่าคุณสามารถเชื่อมต่อกับรหัสดั้งเดิมที่เขียนในภาษาอื่นได้อย่างง่ายดายโดยไม่ต้องใช้ความเข้ากันได้ของซอร์สโค้ด

บันทึก

จากคำตอบและความคิดเห็นฉันดูเหมือนจะเข้าใจว่าผู้อ่านบางคนตีความคำถามว่า "ทำไมภาษาการเขียนโปรแกรมจำเป็นต้องมีวิวัฒนาการ"

ฉันคิดว่านี่ไม่ใช่ประเด็นหลักของคำถามเนื่องจากเป็นที่ชัดเจนว่าภาษาการเขียนโปรแกรมจำเป็นต้องพัฒนาและทำไม (ข้อกำหนดใหม่ความคิดใหม่) คำถามคือ "ทำไมวิวัฒนาการนี้ต้องเกิดขึ้นในภาษาการเขียนโปรแกรมแทนที่จะวางไข่ภาษาใหม่มากมาย?"


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

@ SunAvatar: เท่าที่ฉันรู้ Lisp มีหลายภาษา แต่บางคนก็ประสบความสำเร็จมากกว่าคนอื่น ๆ (Common Lisp, Scheme, Racket, Clojure) เมื่อใดก็ตามที่คุณเริ่มต้นภาษาใหม่คุณต้องเสี่ยงที่จะมีเพียงชุมชนเล็ก ๆ เท่านั้นที่จะมารวมตัวกัน ในชุมชนเสียงกระเพื่อมสิ่งนี้ดูเหมือนเป็นการปฏิบัติทั่วไป: ถ้ามีคนมีความคิดใหม่พวกเขาจะแยกและดูว่าเกิดอะไรขึ้น สำหรับผู้สร้างภาษาอื่น ๆ การสูญเสียชุมชนไม่ใช่ตัวเลือก
Giorgio

@SunAvatar: ฉันไม่เห็นการสืบทอดไลบรารีที่มีอยู่เป็นอาร์กิวเมนต์ที่แข็งแกร่ง คุณไม่ต้องการความเข้ากันได้ของซอร์สโค้ดสำหรับสิ่งนั้น ดูเช่นวิธี Clojure และ Scala สามารถใช้รหัส Java
Giorgio

1
ภาษาไม่ตายมีเพียงโปรแกรมเมอร์ที่ใช้งานเท่านั้น
Evan Plaice

@SunAvatar: นอกจากนี้ยังมีชุมชนที่พยายามทำตามนโยบายที่แตกต่าง: ชื่อระบุภาษาและหากส่วนหนึ่งของชุมชนสร้างภาษาที่แตกต่างกันมากเกินไปพวกเขาใช้ชื่อใหม่เพื่อหลีกเลี่ยงความสับสน ดูเช่นracket-lang.org/new-name.html
Giorgio

21

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

โปรดทราบว่าภาษาที่อัปเดตจำนวนมากได้รับการอัปเดตน้อยลงจน "ติดตั้งบิตใหม่ที่เป็นประกาย" สัตว์สมัยก่อนยังคงแฝงตัวอยู่ภายใน

เท่าที่ Knuth ดำเนินไปโปรดจำไว้ว่าเขาเป็นนักวิชาการและ TeX นั้นได้รับการพิสูจน์แล้วว่าถูกต้องเท่านั้นไม่ใช่ข้อมูลล่าสุด


14
โดเมนปัญหาของ Tex = จัดรูปแบบข้อความในกระดาษวิทยาศาสตร์ไม่ได้เปลี่ยนแปลงอะไรมากมาย โดเมนของภาษาการเขียนโปรแกรม = ค้นหาการใช้งานใหม่สำหรับคอมพิวเตอร์เครื่องใหม่นั้นค่อนข้างกว้างกว่า มันเป็นเหตุผลเดียวกันที่ละตินไม่ได้เพิ่มคำศัพท์ใหม่ ๆ มากมายในภาษาอังกฤษ
Martin Beckett

ฉันไม่คิดว่าความเข้ากันได้แบบย้อนหลังเป็นเหตุผลที่ถูกต้อง: Scala สามารถรวมเข้ากับโค้ด Java ที่มีอยู่ได้อย่างง่ายดาย แต่ไม่ใช่ชุดซุปเปอร์ของ Java ดังนั้นฉันคิดว่าโดยทั่วไปแล้วมันไม่จำเป็นสำหรับภาษาใหม่ที่จะเข้ากันได้กับภาษาเก่าที่ระดับซอร์สโค้ด มันเพียงพอแล้วที่จะมีกลไกที่กำหนดไว้อย่างดีสำหรับการเรียกใช้รหัสดั้งเดิมจากรหัสใหม่
Giorgio

@Martin Beckett: "โดเมนปัญหาของ Tex = รูปแบบข้อความทางวิทยาศาสตร์ของกระดาษไม่เปลี่ยนแปลงมากนัก": ฉันคิดว่าคุณหายไปจากจุดของคำถาม OP ไม่ได้ถามว่าควรจะมีนวัตกรรมในภาษาการเขียนโปรแกรมหรือไม่ (ไม่มีใครสามารถปฏิเสธได้ว่าจำเป็นต้องมีนวัตกรรม) แต่ทำไมภาษาเก่าจึงได้รับการแก้ไขแทนที่จะสร้างใหม่
Giorgio

ระบบถูกสร้างขึ้นจากการลงทุนทั้งเวลาเงินและความเชี่ยวชาญ (ประสบการณ์ที่ได้รับในภาษาเฉพาะ) ความพยายามใหม่มีค่านัยสำคัญมากกว่าความพยายามในการบำรุงรักษา หากไม่มีการปรับปรุงภาษาและแพลตฟอร์มโดยทั่วไปค่าใช้จ่ายในการบำรุงรักษาก็จะเพิ่มขึ้นและค่าใช้จ่ายของระบบใหม่นั้นน่าดึงดูดยิ่งขึ้นและโฮสติ้งของแท้ที่แอพ COBOL ลงบนแพลตฟอร์มที่แตกต่างกันอย่างสิ้นเชิงเป็นครั้งที่แปด ชอบมากอีกต่อไป
JustinC

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

5

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


ดังนั้นหาก "มีคนมากพอที่ใส่ใจเกี่ยวกับภาษาเก่า" เป็นเหตุผลคุณจะบอกว่าคำตอบของคุณสามารถถูกใช้ถ้อยคำใหม่เป็น ฉันไม่ได้บอกว่าดูถูกเพียงพยายามเข้าใจคำตอบของคุณ
Avner Shahar-Kashtan

ไม่ฉันหมายถึงภาษายังคงมีการใช้งานอยู่และพวกเขากำลังใช้งานโดยผู้ที่ต้องการใช้ประโยชน์จากเทคนิคล่าสุด ฉันไม่คิดว่าจะมีใครเพิ่มการสนับสนุนมัลติเธรดให้กับ ALGOL เพราะ (AFAIK) มันไม่ได้ถูกใช้อย่างแข็งขัน อย่างไรก็ตาม FORTRAN และ COBOL ยังคงใช้ในการพัฒนาระบบใหม่ดังนั้นข้อกำหนดภาษาของพวกเขาจะได้รับการปรับปรุงเป็นระยะเพื่อรวมเทคนิคและเทคโนโลยีใหม่ ๆ
TMN

1

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

วิธีการแสดงอัลกอริทึมในภาษาจะไม่เปลี่ยนแปลงแม้ว่ามันอาจต้องการการสนับสนุนที่สะอาดกว่าสำหรับชนิด 64 บิตหรือการสนับสนุนการแสดงออกปกติมาตรฐานหรือการสนับสนุนที่แข็งแกร่งสำหรับระบบไฟล์ชนิดใหม่

มีบางกรณีที่มีการเพิ่มคุณสมบัติ 'ใหม่' ลงในภาษาที่มีอยู่ แต่ในหลายกรณีการเปลี่ยนแปลงเหล่านั้นมีผลต่อความเรียบง่ายของสิ่งที่ผู้คนกำลังทำอยู่อย่างยากลำบาก (ดู C ++ โดยใช้ฟังก์ชันลำดับสูงแทนฟังก์ชันพอยน์เตอร์และฟังก์ชั่น)


1
การเปลี่ยนแปลงที่คุณอธิบายไว้ในย่อหน้าที่สองนั้นค่อนข้างน่ารังเกียจ (ซึ่งฉันหมายถึงไม่ใช่ว่าฉันไม่คัดค้าน แต่ไม่มีใครสามารถคัดค้านอย่างจริงจัง) สำหรับลูกแกะฉันไม่สามารถแสดงความคิดเห็นเกี่ยวกับประโยชน์ของมันใน C ++ แต่ทำไมต้องเพิ่มพวกเขาหากไม่เปลี่ยนวิธีการแสดงอัลกอริทึม?

โอ้พวกเขามีประโยชน์อย่างเหลือเชื่อ อย่าเข้าใจฉันผิด สิ่งนี้เป็นส่วนที่สำคัญที่สุดใน C ++ (IMO) ฉันคิดว่าฉันไม่ชัดเจนเกี่ยวกับสิ่งที่ฉันหมายถึงที่นั่น โดยทั่วไปจะเลือก C ++ เพื่อเข้าถึงหน่วยความจำโดยตรงประสิทธิภาพที่กำหนดไว้และมีศักยภาพในการเพิ่มประสิทธิภาพสูงสุด แต่นั่นไม่ได้เปลี่ยนแปลงกับการเพิ่มเติมล่าสุด เราทำให้งานการเขียนโปรแกรมอื่น ๆ ง่ายขึ้นหลายอย่างเกี่ยวกับสาเหตุที่คุณเลือก C ++ แต่ C ++ ยังคงใช้ได้และมีประโยชน์ด้วยเหตุผลเดียวกัน โครงการมีการอัปเดตอย่างสม่ำเสมอ แต่โค้ดตามข้อมูลและ lispy-ness ไม่เปลี่ยนแปลงดังนั้นคุณจึงเลือกรูปแบบด้วยเหตุผลเดียวกันในวันนี้เมื่อ 20 ปีก่อน
เบ็น

"สำหรับ lambdas ฉันไม่สามารถให้ความเห็นเกี่ยวกับประโยชน์ใน C ++ แต่ทำไมต้องเพิ่มถ้าไม่เปลี่ยนวิธีการแสดงอัลกอริทึม?": ฉันไปไกลกว่านี้: ทำไมเพิ่มไป C ++ แทนที่จะเปลี่ยนเป็นภาษาที่ มีพวกเขาตั้งแต่ต้น?
Giorgio

2
@Giorgio เพื่อให้สามารถควบคุมแคชและคุณสมบัติที่เป็นนามธรรมในภาษา หากไม่มีภาษาที่มีอยู่ให้ทั้งสองอย่างคุณจะไม่สามารถสลับภาษาโดยไม่ต้องเสียสละ คุณต้องแก้ไขภาษาหรือสร้างใหม่
mike30

@mike: คุณหมายถึงอะไรโดย "คุณสมบัติแคช"?
Giorgio

-2

นี่เป็นข้อพิจารณาด้านภาษาพูดเล็กน้อย

ในอดีตมีคำที่ไม่ได้ใช้บ่อยเท่าที่เป็นอยู่ในปัจจุบัน (หรือใช้เพื่อความหมายที่แตกต่าง)

เช่น. ดี: ใน (เก่ามาก) ภาษาอังกฤษมีความหมายเกือบตรงกันข้ามกับสิ่งที่เราใช้ในวันนี้โดยเฉพาะเมื่อใช้เพื่ออธิบายตัวละครใครบางคน

ไม่ดี: ไม่นานที่ผ่านมาไม่ดีมีเพียงความหมายเดียวตอนนี้มันอาจหมายถึงบางสิ่งที่ "สุดยอดเยี่ยม" (มันถูกใช้ในลักษณะที่เป็น fesicous (ฉันอาจพลาดการสะกด fesicous)!

การพัฒนาใหม่อีกอย่างคือโทรศัพท์มือถือ 'Text speak' สำหรับภาษาเขียน

ฉันไม่เห็นด้วยตนเองว่าทำไมภาษาการเขียนโปรแกรมจะไม่พัฒนาในทำนองเดียวกันคำและ funcions ได้ระบุความหมาย / การกระทำและจำเป็นต้องเปลี่ยนเพื่อที่จะรวมแนวคิดใหม่วิธีการใหม่

ฉันรู้จักผู้คนที่พูดหลายภาษาและบ่อยครั้งที่พวกเขาแนะนำว่าหลังจากวันที่ 3 หรือ 4 มันจะง่ายต่อการเรียนรู้ภาษาใหม่

ฉันไม่รู้ว่ามีโปรแกรมเมอร์ที่มีประสบการณ์คล้ายกันหรือไม่ฉันจะไม่แปลกใจถ้ามี

ฉันรู้ว่าฉันรู้สึกมีความสุขในการเขียนโปรแกรม JAVA (เท่าที่ฉันรู้สึกมีความสุขที่พูดภาษาอังกฤษ) นี่ไม่ได้หมายความว่าฉันไม่สามารถสื่อสารใน 'อเมริกันอังกฤษ' หรือ 'ออสเตรเลียอังกฤษ' แม้ว่าจะมี 'gotchas' ระวัง . เหมือนกับการไปจาก Java ไปเป็น PHP ถึง Perl โครงสร้างนั้นคล้ายกัน แต่มี gotchas เล็กน้อยที่จะไล่ฉันออกและทำให้ฉันทุบหัวของฉันกับผนัง

สิ่งนี้แตกต่างจากการย้ายจากภาษาอังกฤษเป็นภาษาฝรั่งเศสหรือ Java เป็น SAS เหล่านี้แตกต่างกันมากใช้เวลาพอสมควรที่จะชำนาญ

อย่างไรก็ตามที่ฉันใช้เวลานี้


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