2009-08-05 35 views
13

Tương đương mục tiêu-C của Java Language Specification hoặc C++ Standard là gì?Tương đương mục tiêu-C của đặc tả ngôn ngữ Java hoặc tiêu chuẩn C++?

Đây có phải là: http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html?

(Tôi chỉ tìm kiếm một (chính thức) tài liệu có thẩm quyền sẽ giải thích chút nitty-gritties của ngôn ngữ. Tôi sẽ bỏ qua lý do tại sao bây giờ :)

+0

http://stackoverflow.com/questions/10906767/objective-c-standards -document – gavenkoa

Trả lời

12

Phụ lục A của tài liệu bạn đã liên kết là mô tả tất cả các tính năng ngôn ngữ, gần nhất với đặc điểm kỹ thuật (Phụ lục B là đặc tả ngữ pháp, nhưng chúng đã xóa rõ ràng các phiên bản sau của tài liệu).

Chưa bao giờ có tiêu chuẩn hóa Objective-C và nó luôn nằm dưới sự kiểm soát của một nhà cung cấp duy nhất - bước đầu là StepStone, sau đó NeXT Computer cấp phép (và cuối cùng mua IP) và cuối cùng Apple đã tiêu thụ phần mềm NeXT. Tôi hy vọng sẽ có ít động lực để trải qua quá trình tiêu chuẩn hóa của Apple, đặc biệt khi không có cáo buộc nào về ObjC là một nền tảng chống cạnh tranh mà tiêu chuẩn hóa có thể giảm thiểu.

+0

Phụ lục A là những gì tôi đang tìm kiếm. Cảm ơn. – PlagueHammer

+0

@porneL: Tôi không tin bạn nên tôi nhìn. Các ngoại lệ và @synchronize nằm trong phụ lục, và các giao thức cũng vậy. Tìm trong phần "chỉ thị trình biên dịch". –

+1

OK, nevermind. Tôi đã tìm thấy phiên bản cũ của tài liệu của Apple có tài liệu đó (http://developer.apple.com/legacy/mac/library/documentation/Cocoa/Conceptual/OOPandObjC1/OOPandObjC1.pdf) [Chỉnh sửa lần thứ 10: Tôi đang viết blog trong nhận xét này ;)] – Kornel

1

tài liệu của Apple là khoảng tốt nhất bạn sẽ đi. Giống như nhiều ngôn ngữ khác, Objective-C không có một tiêu chuẩn hoặc đặc tả chính thức; thay vào đó, nó được mô tả chủ yếu bằng cách thực hiện kinh điển của nó.

11

Không có. Liên kết bạn cung cấp là tài liệu 'chính thức' duy nhất, về bản chất là mô tả văn xuôi chứ không phải là đặc tả ngôn ngữ nghiêm ngặt. Nhân viên của Apple cho rằng điều này là đủ cho hầu hết các mục đích, và nếu bạn yêu cầu một cái gì đó chính thức hơn, bạn nên gửi một báo cáo lỗi (!). Đáng buồn thay, các trò đùa đang chạy là tiêu chuẩn Objective-C được định nghĩa bởi bất cứ điều gì trình biên dịch có thể biên dịch.

Nhiều người coi Objective-C là "siêu trầm nghiêm trọng" hoặc "siêu" của C. IMHO, cho mục tiêu 'cổ điển' C (hoặc Mục tiêu-C 1.0), tôi xem đây là sự thật tuyên bố. Đặc biệt, tôi không biết bất kỳ sự bổ sung ngôn ngữ Objective-C nào không ánh xạ tới một câu lệnh "plain C" tương đương. Về bản chất, điều này có nghĩa là các bổ sung Objective-C là đường cú pháp thuần túy, và người ta có thể sử dụng tiêu chuẩn C có hiệu lực với lý do về gritty nitty. Tôi không tin rằng điều này là hoàn toàn đúng đối với mục tiêu-C 2.0 với GC được kích hoạt. Điều này là do con trỏ đến bộ nhớ quản lý GC cần phải được xử lý đặc biệt (trình biên dịch phải chèn các rào cản khác nhau tùy thuộc vào các chi tiết của con trỏ). Vì các loại vòng loại GC, chẳng hạn như __strong, được triển khai dưới dạng __attribute__(()) bên trong gcc, điều này có nghĩa là void *p;void __strong *p;similarly qualified pointers theo tiêu chuẩn C99. Các vấn đề mà điều này có thể gây ra và thậm chí khả năng viết các chương trình hoạt động theo cách xác định, hoặc là hiển nhiên hay không (tham khảo luật sư ngôn ngữ địa phương hoặc nhà biên dịch để biết thêm thông tin).

Một vấn đề khác thỉnh thoảng là ngôn ngữ C tiếp tục phát triển liên quan đến ngôn ngữ Objective-C. Mục tiêu-C ngày trở lại giữa những năm 1980, đó là thời gian chuẩn trước ANSI-C. Hãy xem xét đoạn mã sau:

NSMutableArray *mutableArray = [NSMutableArray array]; 
NSArray *array = mutableArray; 

Đây là mã Objective-C hợp pháp được định nghĩa bằng mô tả văn xuôi chính thức của ngôn ngữ. Đây cũng là một trong những khái niệm chính đằng sau lập trình hướng đối tượng. Tuy nhiên, khi người ta xem xét những tuyên bố đó được đưa ra từ quan điểm của "sự thay thế nghiêm ngặt của C99", người ta gặp phải một vấn đề lớn. Đặc biệt, điều này vi phạm strict aliasing rules của C99. Một đặc tả ngôn ngữ cấp tiêu chuẩn sẽ giúp làm rõ việc điều trị và hành vi của các xung đột như vậy.Thật không may, bởi vì không có tài liệu như vậy tồn tại, có thể có nhiều cuộc tranh luận về các chi tiết như vậy, và cuối cùng dẫn đến lỗi trong trình biên dịch. Điều này đã dẫn đến một lỗi trong gcc có ngày trở lại phiên bản 3.0 (gcc bug #39753).

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