2012-09-27 27 views
6

Trong WWDC 2012 Apple đã giới thiệu cú pháp mới cho các chữ số NSNumber và các bộ sưu tập, trong 405 nói chuyện có tên là "Mục tiêu hiện đại-C". Tôi đã học Objective-C từ cuốn sách về mục tiêu-C 2.0 của Stephen G. Kochan."Mục tiêu hiện đại-C" thực sự là phiên bản mới, tức là Mục tiêu-C 2.1?

"Mục tiêu hiện đại-C" sẽ là Mục tiêu-C 2.1, hay cú pháp mới của Apple được coi là một thay thế, cú pháp cụ thể của Apple (viết tắt) cho các cấu trúc hiện có được xử lý bởi trình biên dịch?

(Tôi đã thực hiện một số nghiên cứu trực tuyến, nhưng chỉ tìm thấy các thuật ngữ "hiện đại" và "cũ" trong ngữ cảnh Thời gian chạy mục tiêu-C. Tôi muốn hiểu chính xác ngôn ngữ, hướng dẫn tiền xử lý là gì, và chỉ thị biên dịch là gì.)

Trả lời

10

Objective-C được định nghĩa là một phần mở rộng của hướng dẫn C. Preprocessor, chỉ thị biên dịch là chính xác những gì họ đang cho C.

không có "chính thức" định nghĩa của Objective- Ngôn ngữ C (không chuẩn). Apple xuất bản một tài liệu mà, ít nhiều, giải thích nó. Cũng không có "số phiên bản" thực của ngôn ngữ. Apple đôi khi thêm một tính năng mới và đó là nó. Tại một thời điểm nào đó, Apple đã quyết định quảng bá một bộ tính năng nhất định là "Mục tiêu-C 2.0", nhưng điều này không có nghĩa là tất cả các phiên bản trước đó đều có cùng một tính năng hoặc không có nghĩa là tất cả các phiên bản tiếp theo sẽ có cùng một tính năng. Các biệt danh gần đây nhất của Apple đã được sử dụng là "hiện đại Mục tiêu-C" và đề cập đến một ngôn ngữ hỗ trợ tất cả các tính năng hiện đang được xác định.

Lưu ý rằng một số tính năng được xác định ở cấp trình biên dịch, các tính năng khác được xác định ở cấp thư viện và một số khác là kết hợp cả hai. Nếu bạn sử dụng một tính năng được triển khai hoàn toàn ở mức trình biên dịch (như cú pháp chữ mới), nó sẽ làm việc cho bất kỳ chương trình nào bạn viết và biên dịch với trình biên dịch đó. Nhưng nếu bạn sử dụng một tính năng được định nghĩa ở mức thư viện hoặc yêu cầu cả hỗ trợ trình biên dịch và thư viện, nó sẽ chỉ hoạt động cho các chương trình chạy trên các hệ thống có sẵn thư viện gần đây (Apple không cho phép bạn liên kết tĩnh các thư viện ngôn ngữ) . Ví dụ là những thứ như GC, ARC và ngữ nghĩa zeroing gắn liền với weak.

Vì vậy: có, "Mục tiêu hiện đại-C" là đủ khác so với mục tiêu C trước đó mà bạn nên xem xét phiên bản mới, tuy nhiên không, không có số phiên bản kèm theo và hoàn toàn có thể là Apple sẽ thêm mới các tính năng cho ngôn ngữ và vẫn gọi nó là "Objective-C hiện đại". Bên cạnh đó chính xác những gì các tính năng là một phần của ngôn ngữ không chỉ phụ thuộc vào trình biên dịch mà còn trên hệ thống đích bạn đang biên dịch cho. Do đó, một chương trình "Mục tiêu-C" hiện đại nhắm mục tiêu iOS 4 sẽ có thể sử dụng một bộ tính năng khác với một chương trình "Mục tiêu-C" hiện đại nhắm mục tiêu OsX 10.8.

+0

Cảm ơn, tốt để có một số quan điểm lịch sử. Tôi bắt đầu phát triển trong K & R C và ANSI C thời đại, và dự kiến ​​một tiêu chuẩn tương tự cho Objective-C. Rõ ràng nó không phải như thế. –

+3

Lưu ý rằng các tính năng mới yêu cầu hỗ trợ thời gian chạy thường chỉ được giới thiệu với các phiên bản chính của OS X hoặc iOS; người ta sẽ nhận được nó đầu tiên và khác bắt kịp trong phiên bản tiếp theo. Các tính năng biên dịch chỉ có thể hơi lỏng hơn. Bây giờ phát triển đó tập trung vào LLVM, bạn có thể theo dõi dự án nguồn mở LLVM để có được cảm nhận về những gì sắp tới. – bbum

+0

Thật không may là Apple đã không thông qua số phiên bản cho những thay đổi này đối với mục tiêu-C. Phiên bản tiếp theo sẽ được gọi là gì? Mo 'Mục tiêu hiện đại-C? – ThomasW

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