ขั้นแรกให้บริบท (สิ่งที่คุณส่วนใหญ่รู้อยู่แล้ว):
ภาษาการเขียนโปรแกรมยอดนิยมทุกภาษามีวิวัฒนาการที่ชัดเจนเวลาส่วนใหญ่ถูกทำเครื่องหมายโดยเวอร์ชัน: คุณมี Java 5, 6, 7 ฯลฯ , PHP 5.1, 5.2, 5.3 ฯลฯ การปล่อยเวอร์ชันใหม่ทำให้ API ใหม่พร้อมใช้งานแก้ไขข้อบกพร่องเพิ่ม คุณสมบัติใหม่กรอบใหม่ ฯลฯ ดังนั้นทั้งหมด: ดี
แต่ปัญหาของภาษา (หรือแพลตฟอร์ม) เกี่ยวกับอะไร? หากและเมื่อมีสิ่งผิดปกติในภาษานักพัฒนาอาจหลีกเลี่ยง (ถ้าพวกเขาสามารถ) หรือพวกเขาเรียนรู้ที่จะอยู่กับมัน
ตอนนี้ผู้พัฒนาภาษาเหล่านั้นได้รับข้อเสนอแนะมากมายจากโปรแกรมเมอร์ที่ใช้ภาษาเหล่านั้น ดังนั้นจึงเป็นเรื่องที่เข้าใจได้ว่าเมื่อเวลา (และหมายเลขเวอร์ชั่น) ผ่านไปปัญหาในภาษาเหล่านั้นจะช้าลง แต่จะหายไปอย่างแน่นอน ก็ไม่ได้จริงๆ ทำไม? ความเข้ากันได้ย้อนหลังนั่นเป็นเหตุผล แต่ทำไมถึงเป็นเช่นนั้น? อ่านด้านล่างสำหรับสถานการณ์ที่เป็นรูปธรรมมากขึ้น
วิธีที่ดีที่สุดที่ฉันสามารถอธิบายคำถามของฉันคือการใช้ PHP เป็นตัวอย่าง:
PHP เป็นที่รักและเกลียดชังคนหลายพันคน ทุกภาษามีข้อบกพร่อง แต่เห็นได้ชัดว่า PHP นั้นพิเศษ ลองดูโพสต์บล็อกนี้ มันมีรายการที่ยาวมากของข้อบกพร่องที่เรียกว่าใน PHP ตอนนี้ฉันไม่ใช่นักพัฒนา PHP (ยังไม่ได้) แต่ฉันอ่านทั้งหมดและฉันแน่ใจว่ารายการใหญ่ ๆ นั้นเป็นปัญหาจริง (ไม่ใช่ทั้งหมดเพราะมันอาจเป็นอัตวิสัย)
ตอนนี้ถ้าฉันเป็นหนึ่งในคนที่พัฒนา PHP ฉันจะต้องแก้ไขปัญหาเหล่านั้นทีละคน อย่างไรก็ตามถ้าฉันทำอย่างนั้นรหัสที่อาศัยลักษณะการทำงานเฉพาะของภาษาจะแตกถ้ามันทำงานในรุ่นใหม่ สรุปมันขึ้นมาใน 2 คำ: เข้ากันได้ย้อนหลัง
สิ่งที่ฉันไม่เข้าใจ: ทำไมฉันจึงควรใช้ PHP ย้อนหลังได้ ถ้าฉันปล่อย PHP เวอร์ชัน 8 พร้อมแก้ไขปัญหาเหล่านั้นฉันจะเตือนไม่ได้ว่า: "อย่ารันโค้ดเก่าในเวอร์ชั่นนี้!"?
มีสิ่งที่เรียกว่าการคัดค้าน เรามีมันมาหลายปีและใช้งานได้ ในบริบทของ PHP: ดูว่าคนสมัยนี้ไม่สนับสนุนการใช้mysql_*
ฟังก์ชั่น (และแนะนำmysqli_*
และ PDO) การเลิกทำงาน เราสามารถใช้มัน เราควรใช้มัน ถ้ามันใช้งานได้กับฟังก์ชั่นทำไมมันไม่เหมาะกับทั้งภาษา
สมมติว่าฉัน (ผู้พัฒนา PHP) ทำสิ่งนี้:
- เปิดตัว PHP เวอร์ชันใหม่ (สมมุติว่า 8) โดยมีการแก้ไขข้อบกพร่องทั้งหมด
- โครงการใหม่จะเริ่มใช้เวอร์ชันนั้นเนื่องจากจะดีกว่าชัดเจนกว่าปลอดภัยกว่าเป็นต้น
- อย่างไรก็ตามเพื่อที่จะไม่ละทิ้ง PHP เวอร์ชันเก่าฉันจะทำการอัปเดตต่อไปแก้ไขปัญหาด้านความปลอดภัยข้อผิดพลาดและอื่น ๆ สิ่งนี้เหมาะสมสำหรับเหตุผลที่ฉันไม่ได้แสดงรายการไว้ที่นี่ มันเป็นเรื่องธรรมดา: ดูตัวอย่างว่า Oracle ทำการอัปเดตเวอร์ชัน 5.1.x ของ MySQL ได้อย่างไรแม้ว่าส่วนใหญ่จะเน้นที่รุ่น 5.5.x
- หลังจากผ่านไปประมาณ 3 หรือ 4 ปีฉันหยุดอัปเดต PHP เวอร์ชันเก่าแล้วปล่อยให้มันตาย นี่เป็นเรื่องดีเนื่องจากใน 3 หรือ 4 ปีโครงการส่วนใหญ่จะเปลี่ยนเป็น PHP 8 ต่อไป
คำถามของฉันคือ: ขั้นตอนเหล่านี้เหมาะสมหรือไม่ มันยากไหมที่จะทำ? ถ้าสามารถทำได้แล้วทำไมมันไม่ทำ?
ใช่ข้อเสียคือคุณทำลายความเข้ากันได้ไปข้างหลัง แต่นั่นไม่ใช่ราคาที่คุ้มค่าหรือไม่ ในแง่กลับหัวกลับหางใน 3 หรือ 4 ปีคุณจะมีภาษาที่มีปัญหา 90% ของปัญหาได้รับการแก้ไข .... ภาษาที่น่าทำงานมากขึ้น ชื่อของมันจะรับประกันความนิยม
แก้ไข : ตกลงดังนั้นฉันไม่ได้แสดงตัวเองอย่างถูกต้องเมื่อฉันกล่าวว่าใน 3 หรือ 4 ปีผู้คนจะย้ายไปที่สมมุติ PHP 8 สิ่งที่ฉันหมายถึงคือ: ใน 3 หรือ 4 ปีผู้คนจะใช้ PHP 8 ถ้าพวกเขาเริ่ม โครงการใหม่.
mysql_*
ถูกคัดค้านใน 5.5 เช่น), แต่นั่นไม่เกี่ยวข้องหากผู้ให้บริการโฮสติ้งส่วนใหญ่มีหนึ่งหรือสองรุ่นด้านหลัง (5.3 คือ - โชคร้าย - ยังคงเป็นส่วนใหญ่ของ ข้อเสนอของผู้ให้บริการ)