เหตุใด Objective-C จึงไม่ได้ใช้อย่างกว้างขวางนอกเหนือจากสภาพแวดล้อมของโกโก้


24

Objective-C มีการวางแนววัตถุที่ดีความเรียบง่ายความสง่างามและ (ในรูปแบบของ C) ความสามารถระดับต่ำ มันอาจเป็นทางเลือกที่ง่ายทันสมัยใน C ++ ที่หลายคนมองหาและลองค้นหาใน Go แต่มันถูกใช้ในสภาพแวดล้อม Cocoa และ post-NextSTEP และแม้แต่ในกรณีนี้ก็ยังถูกมองว่าเป็นภาระด้วยเหตุผลทางประวัติศาสตร์มากกว่าเป็นทางเลือกที่ดีที่สุด

ทำไมมันไม่ใช้กันอย่างแพร่หลายมากขึ้นแล้ว? ปัญหาของมันคืออะไร?


5
"เหตุผลทางประวัติศาสตร์" หมายถึง "ห้องสมุดจำนวนมาก"

@vartec คุณไม่ได้ถูกบังคับให้ทำเช่นนั้น ดู MonoTouch เช่น C # โอ้แล้วคุณมีกฎของ Apple เกี่ยวกับ Objective-C, C และ C ++ ใช่ไหม? พวกเขาละทิ้งไปแล้ว
rightfold

คำตอบ:


28

IMO ปัญหาเกี่ยวกับ Objective-C ไม่ใช่ข้อบกพร่องที่ใหญ่โตอย่างมากเนื่องจากข้อบกพร่องเล็กน้อย (โดยเฉพาะอย่างยิ่งในช่วงต้น) และการขาดความได้เปรียบ

Objective-C เป็น superset แท้ๆของ C ดังนั้นโค้ด C สามารถเปลี่ยนเป็น Objective-C ได้อย่างง่ายดาย ความคิดที่จะใช้ Objective-C แต่แตกต่างจากซีความคิดจำนวนมาก การเปลี่ยนจาก C เป็น Objective-C นั้นง่ายสำหรับโค้ด แต่ไม่ใช่เรื่องง่ายสำหรับโปรแกรมเมอร์จำนวนมาก โปรแกรมเมอร์ AC ไม่เพียงแค่เลือกฟีเจอร์อำนวยความสะดวกใหม่ ๆ ใน Objective-C อย่างง่ายดายและได้ผลผลิตที่ดีขึ้นเกือบจะทันทีเขาต้องเรียนรู้ "สิ่งใหม่" มากมายก่อนที่เขาจะสามารถไปได้ทุกที่

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

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

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

สิ่งเหล่านี้นำไปสู่การถูกนำมาใช้อย่างรวดเร็วเร็วพอที่จะทำให้ "วิกฤตมวลชน" ค่อนข้างเร็วดังนั้น (เหนือสิ่งอื่นใด) จึงกลายเป็นตัวเลือกที่ชัดเจนสำหรับโครงการจำนวนมากเพียงเพราะมันเป็นที่รู้จักกันดีในวงกว้าง ปริมาณ.

วัตถุประสงค์ -C ไม่เคยไปถึงจุดนั้น ในความเป็นจริงมันเป็นไปในทางที่จะจางหายไปสู่ความสับสนเมื่อ Apple ฟื้นขึ้นมาโดยเกือบบังคับให้ใครก็ตามที่ต้องการพัฒนาสำหรับระบบของพวกเขา ส่วนแบ่งการตลาดของ Apple นั้นไม่ใหญ่พอสำหรับการให้มวลที่สำคัญอย่างแท้จริงไม่ว่าจะเป็นเพียงช่องที่ใหญ่กว่า เป็นตัวเลือก "เริ่มต้น" เฉพาะที่ / เพราะ Apple ทำเช่นนั้น

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


การทบทวนทางประวัติศาสตร์ที่ยอดเยี่ยม ฉันเขียนรหัสครั้งแรกใน Objective-C บนกล่องสีขาวเครื่อง NextSTEP ในยุค 90 และได้รับการสอน C ++ ที่มหาวิทยาลัยเกลียดไวยากรณ์ที่แปลกประหลาดของ Objective-C เช่นนี้ฉันสามารถชื่นชมหลายสิ่งที่คุณพูดที่นี่
Mark Booth

ขอบคุณนั่นเป็นคำตอบที่ฉันต้องการอย่างชัดเจน ริตชี่ทำให้ C ทำงานเป็นทีมได้ "C มีข้อผิดพลาดที่แปลกประหลาดและประสบความสำเร็จอย่างมาก"; คำพูดนี้หมายถึงคุณต้องสร้างภาษาที่เรียบง่ายและเรียบง่ายเพื่อให้หลาย ๆ คนสามารถเข้าใจและไม่ได้แปลว่ามันจะต้องเป็นภาษาที่ "ยอดเยี่ยม" ไม่มีใครต้องการที่จะบ่นเกี่ยวกับ objc เพราะไม่มีใครชอบมัน "มีคนพูดถึงภาษาและไม่มีใครใช้ภาษา" bjarne stroustup อย่างน้อย windows ก็สามารถทำให้อุตสาหกรรมคอมพิวเตอร์เติบโตได้แม้จะมีกลุ่มองค์กรและฉันหวังว่าแอปเปิ้ลจะล้มเหลวเพราะพวกเขาไม่สนใจ devs
jokoon

ขออภัยในความโวยวาย แต่ถึงแม้ว่าการเป็นนักพัฒนาหมายความว่าคุณต้องเรียนรู้สิ่งใหม่มันไม่ได้หมายความว่าคุณต้องลืมทุกสิ่งที่คุณรู้แล้ว ฉันได้ยินมาว่าฟังก์ชั่น messenger ของ objc นั้นทำมาพร้อมกับรหัส ASM บางตัว คุณจะบอก devs ให้เข้าใจได้อย่างไร วิธีการเกี่ยวกับไดรเวอร์และเมล็ด devs? Macs เป็นเพียง Cadillac ที่คุณใช้ในการขับรถพวกเขาเป็นเพียงวัตถุแฟนซีราคาแพงที่ขายได้ดังนั้นคุณสามารถตรวจสอบอีเมลดูดีวีดี ต้องการเพิ่มซอฟต์แวร์ลงในสิ่งนั้นหรือไม่? ขอให้โชคดี ลืมความนุ่มนวลที่มีอยู่ทั้งหมดและทำ apple way TM
jokoon

+1 คำอธิบายที่ยอดเยี่ยม!
จันทร์ที่

11

โดยพื้นฐานแล้ว Apple เป็นแรงผลักดันที่อยู่เบื้องหลัง Objective-C ตั้งแต่บางเวลา:

  • ในขณะที่รุ่นสุดท้ายถูกทอดทิ้งจริง Objective-C 2.0 จริง ๆ แล้วเริ่มผูกติดกับชั้นเรียนหลัก / โปรโตคอลพื้นฐานซึ่งหมายความว่ามีการเชื่อมโยงระหว่างคุณสมบัติภาษาและกรอบNSFastEnumerationผุดขึ้นในใจของฉัน ซึ่งจำเป็นสำหรับวัตถุที่จะตอบสนองอย่างถูกต้องสำหรับในลูป ซึ่งหมายความว่ามีการเชื่อมโยงที่เพิ่มขึ้นระหว่างภาษาและแพลตฟอร์ม
  • แทบไม่มีทางเลือกอื่นใดที่แท้จริงสำหรับโกโก้ และในทางกลับกันโกโก้ก็เริ่มที่จะพึ่งพาคุณสมบัติของ OSX มากขึ้นเรื่อย ๆ ในขณะที่ในทางเทคนิคคุณสามารถให้การใช้งาน Objective-C ทำงานบนระบบปฏิบัติการใด ๆ กับเฟรมเวิร์กหลัก ๆ แต่ก็มีสิ่งใหม่ ๆ ไม่มากนักสำหรับแพลตฟอร์มอื่น ๆ

เนื่องจากขณะนี้ Apple สามารถควบคุม Objective-C ได้อย่างเต็มที่และขับเคลื่อนภาษาตามความต้องการขณะที่ไม่มีองค์กรใดในโลกนี้ที่สนใจใช้งาน Objective-C บนอุปกรณ์ที่ไม่ใช่ Apple ซึ่งมีขนาดใหญ่พอที่จะให้บริการ เริ่มต้นด้วยไลบรารี่และชุดเครื่องมือมาตรฐานซึ่งอาจเทียบเคียงกับระบบนิเวศที่นำเสนอโดย. NET / Mono, C ++ หรือ Java


3
มี GNUStep พวกเขาพยายามติดตาม Apple แม้ว่าฉันจะยังไม่ได้ตรวจสอบซักพัก
ต่อ Johansson

1
และก็มี Cocotron เช่นกัน
ysdx

1
ณ จุดที่คำตอบนี้ถูกเขียนขึ้นไม่มีสิ่งใดที่จะสามารถรัน Objective-C 2.0 บนแพลตฟอร์มที่ไม่ใช่ของ Apple อย่างไรก็ตามความพยายามมากมายที่เกิดขึ้นหลังจากนั้นและตอนนี้เราสามารถคาดหวังให้เรียกใช้ Objective-C 2.0 บน FreeBSD โดยใช้ GNUstep ได้อย่างราบรื่น
Eonil
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.