การเปรียบเทียบที่สมเหตุสมผลคือการเรียนรู้ที่จะขับรถ
มีกฎ ระเบียบปฏิบัติที่ต้องปฏิบัติตาม และมาตรฐานด้านคุณภาพและความทนทานในตัวรถและผู้ขับขี่
- รถยนต์มีพวงมาลัย
- บางคันมีเกียร์ธรรมดาและบางคันเป็นเกียร์อัตโนมัติ
- คุณ (ในประเทศส่วนใหญ่) ขับรถทางขวามือของถนน
- ป้ายบอกวิธีการขับขี่บนถนนสายใดสายหนึ่ง
- หน่วยการวัด (ส่วนใหญ่) เป็นกม./ชม.
- เชื้อเพลิงที่ใช้ในรถเป็นส่วนผสมและมาตรฐานที่แน่นอน
- ผู้ขับขี่ได้รับการฝึกอบรมและคาดว่าจะปฏิบัติตามมาตรฐานการขับขี่ที่กำหนด
ตอนนี้ คุณอาจแนะนำ (ฉันไม่ใช่คนที่มีวัฒนธรรมแบบนั้นและให้ใบอนุญาตบทกวีแก่ตัวเอง) ว่าถนนในยุโรปนั้น "เป็นไปตามมาตรฐาน" ซึ่งกันและกัน เช่น ถ้าคุณเรียนรู้ที่จะขับรถในสเปน คุณสามารถขับรถได้ทุกที่ในยุโรป อาจใช้กับรถคันเดียวกันหรืออย่างน้อยก็อาจเป็นรถคนละคันโดยที่ส่วนต่อท้ายและไม้ทั้งหมดอยู่ในตำแหน่งที่คุณคาดว่าจะเป็น
ตัวอย่างเช่น คุณสามารถคิดค้นวิธีการขับรถแบบใหม่ทั้งหมด โดยอาจใช้ป้ายที่แตกต่างกันโดยสิ้นเชิง โดยคุณขับรถข้างใดข้างหนึ่งของถนน ใช้จอยสติ๊กในการขับรถ และคุณวัดระยะทางเป็นหน่วยลูกบาศก์ต่อชั่วโมง อย่างไรก็ตาม การโยกย้ายไปยังระบบดังกล่าวจาก สิ่งที่คุณคุ้นเคยต้องใช้ความพยายามมากขึ้น
POSIX นั้นเหมาะกับรุ่นที่คล้ายกัน แต่แทนที่จะเป็นรถยนต์ ถนน ความเร็ว และจุดหมายปลายทาง มันอ้างอิงถึงอินพุต ข้อความ โปรแกรม เอาต์พุต และคุณสมบัติต่างๆ
โดยทั่วไปแล้ว ดีที่สุด (ในฐานะโปรแกรมเมอร์และผู้ใช้) ที่จะมีกฎบางอย่างที่ควบคุมคุณลักษณะ/ฟังก์ชันและอินพุต/เอาต์พุตที่มีให้สำหรับคุณ ดังนั้นคุณอาจเขียนโปรแกรมที่เหมาะกับมาตรฐานเหล่านี้ จากนั้นจึงสร้างโปรแกรมเดิมขึ้นมาใหม่เพื่อให้ทำงานต่อไปได้โดยไม่ต้องใช้ความพยายามมากนัก ระบบอื่นซึ่งใช้อินพุต/เอาต์พุตเดียวกันด้วย
ตัวอย่างเช่น ระบบ Linux เรียก อ่าน และ เขียน เป็นไปตามมาตรฐาน posix พวกเขารับอินพุตบางอย่างในลำดับที่แน่นอนและส่งคืนเอาต์พุตบางอย่างพร้อมกฎที่ควบคุมว่าเอาต์พุตนั้นอาจเป็นหรือเป็นตัวแทนในบางสถานการณ์
คุณสามารถเขียนโปรแกรมบน Linux ที่เปิดไฟล์สองไฟล์ได้ อ่าน
และ เขียน
เพื่อถ่ายโอนข้อมูลระหว่างกันและปิดอีกครั้ง จากนั้นอาจสร้างใหม่เพื่อให้ทำงานบน Mac ได้โดยไม่ต้องเขียนซอร์สโค้ดพื้นฐานใหม่
อย่างไรก็ตาม คุณยังสามารถดำเนินการแบบเดียวกันได้ -- เร็วขึ้นมาก -- โดยการเปิดไฟล์สองไฟล์โดยใช้ไฟล์ ส่งไฟล์
การเรียกของระบบเพื่อย้ายข้อมูลระหว่างกันและปิดอีกครั้ง (เว้นแต่คุณจะใช้เคอร์เนลที่เก่ามาก) ปัญหาที่นี่คือว่า ส่งไฟล์
การโทรของระบบ ไม่ใช่ สอดคล้องกับ POSIX -- คุณไม่สามารถรับประกันได้ว่าการเรียกระบบดังกล่าวมีอยู่อย่างถูกต้องบนระบบเพื่อทำสิ่งที่คุณต้องการ
ในความเป็นจริง หากคุณตรวจสอบหน้าคนของ Mac สำหรับ ส่งไฟล์
การโทรแม้ว่าจะเรียกว่าการดำเนินการเดียวกัน แต่ก็ใช้ชุดพารามิเตอร์ที่แตกต่างกันและมีคุณสมบัติที่แตกต่างกัน (นอกจากนี้ ในทางเทคนิคคุณไม่สามารถใช้มันเพื่อคัดลอกจากไฟล์หนึ่งไปยังอีกไฟล์หนึ่งบนดิสก์ได้)
ดังนั้นคุณจึงไม่สามารถรันโปรแกรมโดยใช้ลินุกซ์ได้ ส่งไฟล์
คาดเดาได้ในระบบอย่างน้อยโดยไม่ต้องเปลี่ยนโปรแกรมหรือใช้ชั้นความเข้ากันได้อื่น ๆ
นี่คือเหตุผลที่ผู้คนสนใจเกี่ยวกับ POSIX หลีกเลี่ยงการประดิษฐ์วงล้อใหม่และอาจอนุญาตให้คุณย้ายไปยังระบบปฏิบัติการ 'ที่สอดคล้องกับ posix' โดยรวมที่ดีขึ้น หรืออย่างน้อยก็มุ่งเน้นไปที่การส่งมอบผลิตภัณฑ์ของคุณแทนที่จะกังวลเกี่ยวกับคุณภาพของวัสดุที่ใช้สร้างรากฐาน
ฉันได้ข้ามสิ่งที่เกี่ยวกับเมื่อ POSIX ไม่ได้รับการปฏิบัติตามอย่างแท้จริงและสมบูรณ์แม้แต่โดยผู้ที่อ้างว่าระบบของพวกเขาเป็นไปตาม POSIX แต่นั่นคือแนวคิดของแนวคิดนี้
ประเด็นสุดท้ายที่ฉันอยากจะทำให้ชัดเจน หากคุณเขียนโค้ดเป็นตัวส่วนร่วมที่ต่ำที่สุดของมาตรฐาน (เช่น POSIX) คุณจะพลาดประสิทธิภาพที่เพิ่มขึ้นอย่างมาก มิฉะนั้น คุณอาจใช้ประโยชน์จากส่วนขยายที่ไม่ได้มาตรฐานบนระบบปฏิบัติการที่คุณกำลังเขียนโค้ด
ดังนั้นมันจึงเป็นทางเลือกในการออกแบบด้วย หากคุณตั้งเป้าไปที่ประสิทธิภาพสูง/ปริมาณงานสูง เพื่อให้ได้สิ่งนั้น คุณอาจไม่เขียนโค้ดให้สอดคล้องกับ POSIX
แม้ว่าการจ้างโปรแกรมเมอร์ที่รู้วิธีเขียนโปรแกรม 'Posixally' (รู้วิธี เปิด
, อ่าน
, เขียน
เธรด
และ ปิด
ทำงานใน POSIX) จะตรงไปตรงมามากกว่าการจ้างคนที่เขียนโปรแกรมเฉพาะมาตรฐานที่ไม่ได้ใช้แปลกๆ
ดังนั้นมันจึงไม่ใช่แค่เรื่องสมรรถนะ (รถยนต์) แต่ยังรวมถึงศักยภาพในการปรับตัว (ความชำนาญในการขับขี่รถยนต์ด้วย)