2009-05-17 35 views
22

Tôi không biết Objective-C nhưng với tôi nó xuất hiện một ngôn ngữ tốt đẹp. Nhưng bối cảnh duy nhất tôi biết nó là tất cả mọi thứ của Apple. Nhưng Objective-C thậm chí còn trong Bộ sưu tập GNU Compiler.Mục tiêu-C chỉ được sử dụng để phát triển trên Mac OS/iPhone?

Có điều gì đó bị thiếu trong các ứng dụng đang mở không? Hoặc là đã có một cơ sở rộng hơn cho Objective-C? Tôi quan tâm nếu có những công ty đã chọn Objective-C để phát triển sản phẩm của họ.

Trả lời

36

Tôi nghĩ ObjC đã bị cô lập với thế giới của Apple thông qua một điều bí ẩn về lịch sử và bản chất của các hệ thống độc quyền.

Trước tiên, bạn cần tách ObjC khỏi Cocoa. ObjC là một ngôn ngữ rất thô sơ. Tôi nghĩ đó là một ngôn ngữ rất thanh lịch, nhưng nó cực kỳ cơ bản. Bạn có thể triển khai ObjCv1 trong bộ xử lý trước C. C++ và ObjC được phát triển cùng một lúc. C++ đặt một số lượng lớn cơ sở hạ tầng tại chỗ để mang lại một cú pháp C giống như những gì về cơ bản là một ngôn ngữ hoàn toàn khác nhau. ObjC mang một cú pháp giống Smalltalk đến C, hầu như không có gì khác. Ngay cả những thứ như +alloc-release không phải là yếu tố ngôn ngữ của ObjC. Chúng là các trình bao bọc khá đơn giản xung quanh malloc()free(). * Thường trực, ObjC không thực sự thú vị (tao nhã như tôi nghĩ). Điều này rất giống với bản chất của Smalltalk. Nếu không có thư viện đối tượng của nó, không có nhiều bạn có thể làm với nó. Với các thư viện đối tượng của nó, nó cực kỳ mạnh mẽ.

NeXT cung cấp toàn bộ khung này trên đầu trang của ObjC được gọi là NeXTSTEP. Kể từ khi máy tính NeXT không phải là một thành công thương mại rộng rãi, và NeXTSTEP là độc quyền, không có nhiều người học được khuôn khổ hoặc ngôn ngữ cơ bản. Khi Apple mua nó và biến nó thành Cocoa, nó tiếp tục là một hệ thống độc quyền.

GNUStep ở ngoài đó, nhưng chúng chưa bao giờ phát triển bất kỳ thứ gì đủ thú vị để mang lại nhiều nhà phát triển (trình duyệt web chính hoặc trình xử lý văn bản hoặc tương tự). Và Ca cao đã vượt qua GNUStep trong vài năm qua. Có thể với sự gia tăng quan tâm đến ca cao do iPhone, GNUStep có thể hồi sinh và mang lại một khuôn khổ phát triển đa nền tảng tốt đẹp, nhưng tôi nghi ngờ điều đó.Những người có nền trong C++ nhìn vào C# và thấy một sự cải thiện rõ ràng. Khi họ nhìn vào ObjC, họ thấy rất nhiều dấu ngoặc vuông mà họ không mong đợi họ. Đối với những người lớn lên trên mô hình "phương pháp gọi", mô hình Smalltalk của "thông điệp đi qua" là người ngoài hành tinh và thậm chí một chút đáng sợ. Nhiều nhà phát triển cho rằng họ cần một ngôn ngữ được đánh máy mạnh để tránh các lỗi và không thoải mái với một hệ thống dựa chủ yếu vào kỷ luật lập trình viên và tính nhất quán cẩn thận. Nó dễ dàng hơn nhiều để hack một cái gì đó mà "chỉ hoạt động" trong C# hơn trong ObjC. ObjC thực sự mong đợi rất nhiều nhà phát triển hiểu được những gì đang xảy ra và không dựa vào trình biên dịch để bảo vệ bạn khỏi các hack của bạn.

Về cơ bản, mọi người biết C từ Unix và C++ có ý nghĩa về mặt C và Java có ý nghĩa về C++ và C# chỉ làm sạch Java. ObjC không phải là một trong số này. Đó là Smalltalk, và không ai học Smalltalk nữa.

* Gần đây tôi đã trò chuyện với anh chàng đã viết +alloc về lịch sử của nó và anh ấy có thể phản đối việc tôi gọi đó là trình bao bọc đơn giản cho việc bao gồm các khu vực. Vì vậy, đối với những người biết sự khác biệt, hãy thay thế +alloc tại đây bằng +new.

+1

Cảm ơn thông tin chi tiết. Tôi muốn tìm hiểu nó bởi vì nó là smalltalk mà tôi yêu –

+3

Ah, sau đó bạn đang nửa đường đến Cocoa Nature rồi. Nếu ngành công nghiệp của chúng tôi nhớ một nửa số bài học mà chúng tôi đã học trong Smalltalk, chúng tôi sẽ gấp đôi so với ngày hôm nay. Tôi có một đội ngũ những sinh viên tốt nghiệp Khoa học Máy tính mới được đào tạo từ các trường xuất sắc, và tôi vẫn phải dạy và dạy lại những kiến ​​thức cơ bản về Model-View-Controller. –

16

Vâng, cũng có khung GNUStep mà một số người vẫn phát triển. Tuy nhiên, tôi không biết cộng đồng đó hoạt động như thế nào.

Nhưng đối với hầu hết các phần, Objective-C bây giờ là ngôn ngữ của Apple, được minh họa bằng thực tế là phiên bản "2.0" của ngôn ngữ đã được phát hành như một phần của OSX 10.5 và dường như là một phát triển hoàn toàn trong nhà nỗ lực tại Apple.

Chỉnh sửa: Apple, như bạn có thể biết, có một cái gì đó gọi là khung Cocoa, về cơ bản đề cập đến toàn bộ chồng thư viện cho Objective-C, bao gồm cả basOlass chung NSObject. Ca cao là sự tiếp nối của thư viện NextStep, mà GNUStep là phiên bản mã nguồn mở của. Vì vậy, bạn sẽ tìm thấy nhiều lớp NS-prefixed cả hai nơi, nhưng Apple đã không giữ lại trong việc thêm các lớp mới hoặc thay đổi chúng trong Cocoa, do đó khả năng tương tác ở cấp GUI thực sự chỉ là một khả năng lý thuyết.

+0

Đánh bại tôi bằng GNUstep trước 6 giây! – Zifre

+0

Tôi không biết nếu vẫn còn GNUStep phát triển nhưng một thời gian trước đây tôi tìm thấy hệ điều hành etoile trên web đang hoạt động. Câu hỏi của tôi chỉ có ý nghĩa khác.Tôi sẽ điều chỉnh câu hỏi –

+1

Ban đầu nó được phát triển bởi Brad Cox và Tom Love, mặc dù Wikipedia trích dẫn nó là Apple là nhà phát triển (http://en.wikipedia.org/wiki/Objective-C), vì nó được cấp phép từ họ ban đầu bởi NeXT và sau đó được mua lại bởi Apple –

4

GNUstep. Ngoài ra còn có Étoilé là một hệ điều hành được xây dựng với GNUstep.

Tôi nghĩ nhiều người giống như C hay C++ tốt hơn, và nếu họ muốn có một ngôn ngữ hiện đại hơn, họ sẽ sử dụng C# hoặc Java.

+3

Tôi nghĩ trích dẫn ngược lại. Bạn có thể làm phát triển mức hệ thống với mục tiêu-c và có thể tích hợp một phần hiện đại vào nó. Với tôi nó xuất hiện thực sự mạnh mẽ –

+1

Tại sao bạn nghĩ rằng Etoile là một hệ điều hành. Tôi chỉ biết nó như môi trường máy tính để bàn –

+0

@Norbert Hartl: nó là nhiều hơn một môi trường máy tính để bàn (như GNOME hoặc KDE), nhưng địa chỉ web chính nó thậm chí còn nói nó là một hệ điều hành. – Zifre

1

Tôi nghĩ việc triển khai Apple chỉ được hỗ trợ tốt hơn và vẫn đang trong quá trình phát triển tích cực. Có một số nơi khác, chẳng hạn như GNUStep, nhưng chúng vẫn trông rất nhiều ở cấp NextStep/OpenStep. Thật không may rất nhiều đã xảy ra kể từ đó!

6

GNUstep thực sự hoạt động hơn nhiều so với hầu hết mọi người nghĩ rằng đó là và rất đáng để mắt đến. Nó không khó để tạo ra các ứng dụng làm việc trên GNUstep và Cocoa (có nghĩa là có khả năng trên OSX, Win, Linux, BSD ...)

Các liên kết chắc chắn giá trị kiểm tra ra cho bất cứ ai quan tâm đến chủ đề này:

http://www.gnu.org/software/gnustep/information/aboutGNUstep.html

http://etoileos.com/news/

http://www.nongnu.org/gap/

Sau đó, có Cocotron, một "dự án mã nguồn mở nhằm thực hiện một nền tảng Objective-C API tương tự như mô tả bởi các tài liệu Cocoa của Apple Inc. ":

http://www.cocotron.org/

EDIT: Đối với một ví dụ về một sản phẩm đa nền tảng thương mại được xây dựng với GNUstep, hãy kiểm tra Eggplant.

0

Nhóm Mono đang làm điều gì đó với sự phát triển của iPhone cho phép các ứng dụng iPhone được viết trong .NET và được biên dịch chéo với trình biên dịch Mono .NET. Hãy khám phá tại số http://www.mono-project.com/Mono:Iphone

.NET Rocks podcast mới nhất có Rory Blythe nói về những thứ anh ta đang làm trong phát triển mục tiêu C và iPhone.

10

@Stephen: Tôi liên tục ngạc nhiên về cách mọi người không bao giờ đọc trang web của chúng tôi hoặc thậm chí kiểm tra tiến độ của dự án trước khi nói những điều như thế này. :) GNUstep sau Cocoa chặt chẽ bây giờ và chúng tôi đang có nhiều hơn OpenStep tại thời điểm này. Nếu bạn, hoặc những người khác, muốn có một ý kiến ​​thực sự về chủ đề này, hãy lấy GNUstep từ SVN, cài đặt nó và thử nó. Giáo lý về điều gì đó mà bạn không biết gì (như được chứng minh bằng câu trả lời của bạn ở đây) là vô nghĩa.

Greg C. Nhà phát triển dự án GNUstep

Các vấn đề liên quan