2010-12-09 32 views
9

Có gần đây đọc lên trên Objective-C nó tấn công tôi như một ngôn ngữ khá gọn gàng với nhiều tính năng thú vị.Phát triển Windows bằng cách sử dụng Objective-C

Tôi không có ý định thực hiện bất kỳ phát triển iPhone nào, tuy nhiên tôi hiểu rằng GCC có thể biên dịch mã Objective-C và vì vậy tôi muốn biết - Mục tiêu-C là ngôn ngữ thay thế khả thi đối với C99 để phát triển Windows?

Đặc biệt:

  • Có ai hiện đang làm phát triển Windows sử dụng Objective-C?
  • Có bất kỳ thành phần thời gian chạy nào cần được phân phối cùng với các ứng dụng của tôi không?
  • Tôi hiểu rằng Mục tiêu-C là phần siêu của C, điều này có nghĩa là có thể sử dụng bất kỳ thư viện tương thích C nào không? (ví dụ: API Windows)
  • Tôi có nhận được bộ sưu tập rác trong các ứng dụng của mình không?
  • Tôi đã tìm thấy CocotronGNUstep thường được đề cập khi nói về việc sử dụng Objective-C trên các nền tảng khác, tuy nhiên GCC có thể đã được sử dụng để biên dịch Objective-C Tôi thực sự không hiểu tại sao tôi cần những thứ này.
  • Có bất kỳ cạm bẫy hoặc bẫy nào khác mà tôi có thể chạy khi thử phát triển Windows bằng Objective-C không?
+0

tôi đã tìm thấy các câu hỏi [Objective C cho Windows] (http://stackoverflow.com/questions/56708/objective-c-for-windows) đó là thú vị, tuy nhiên không thực sự trả lời câu hỏi của tôi về khả năng tồn tại, các thành phần thời gian chạy hoặc thực sự bất kỳ điểm nào trong dấu hỏi. – Justin

+0

Để có được lợi ích tối đa của Objective C như bạn thấy trong môi trường Mac, thì bạn cần sử dụng các thư viện Cocoa. Khác chỉ của nó trông giống như một ngôn ngữ hỗ trợ hướng đối tượng trên đầu trang của C. Bạn chỉ nhận được các tính năng trong xây dựng của ngôn ngữ. – boring

Trả lời

8

liên quan đến câu hỏi đầu tiên của bạn Với, tôi không biết nếu có ai là nghiêm túc làm phát triển trên cửa sổ với Objective-C, nhưng có thể có, mặc dù những con số có lẽ sẽ ít hơn những người làm việc nghiêm túc với một ngôn ngữ như whitespace.

Thứ hai, bạn sẽ cần, tối thiểu là thời gian chạy mục tiêu-c. Có hai thời gian chạy, thời gian chạy của NeXT (giờ là của Apple) và thời gian chạy của Objective-C của GNU. Chúng không tương thích. Nếu bạn đang sử dụng nền tảng không phải là NeXT và không phải của Apple, chẳng hạn như các cửa sổ, bạn không có lựa chọn nào, chỉ có thời gian chạy GNU.

Mục tiêu-C là bộ siêu của C, và có, bạn có thể sử dụng API Win32 nếu bạn mong muốn trực tiếp trong mã khách quan-c của mình. Đồng thời, bạn sẽ chỉ nhận được bộ sưu tập rác nếu bạn sử dụng một bộ sưu tập bảo thủ và nó liên kết với các thư viện bạn đang sử dụng. Tóm lại: Số

GCC có hỗ trợ ngôn ngữ khách quan-c và thời gian chạy, không có thư viện chuẩn. Thời gian chạy của GNU objc cung cấp cho bạn điều gì về một thư viện chuẩn, là hai đối tượng: Object và lớp NXConstantString, cần thiết để hỗ trợ cú pháp @"". Object chỉ đơn thuần là một lớp cơ sở. Không phải là rất hữu ích, eh? Đây là lý do tại sao các khung như Cocotron và GNUstep tồn tại - để cung cấp cho bạn quyền truy cập vào việc triển khai OPENSTEP/Cocoa.

Liên quan đến cạm bẫy hoặc bẫy, vâng: Ứng dụng của bạn, ngay cả khi sử dụng Cocotron hoặc GNUstep có thể không bao giờ được di chuyển sang Mac chẳng hạn, hoặc bạn có thể nhận được một chút bằng những thứ như bộ chọn được nhập trong thời gian chạy GNU objc. các vấn đề. Hãy để tôi kết thúc việc trả lời câu hỏi này bằng cách đặt ra một câu hỏi khác: Bạn có thể gặp phải những cạm bẫy hoặc bẫy nào trong việc nhắm mục tiêu .NET? Tôi chắc chắn một số nếu không phải là hầu hết những người áp dụng trong trường hợp này quá. Cạm bẫy tiêu chuẩn và bẫy áp dụng.

Tôi hy vọng điều này sẽ hữu ích.

+0

Tôi sẽ đăng bài này, nhưng bạn đánh tôi với nó. 1 để nắm bắt ý tưởng chính: Mục tiêu-C là vô ích nếu không có các thư viện thời gian chạy, đó là những gì Cocotron và GNUStep cung cấp. Tuy nhiên, chúng không thực sự khả thi khi sử dụng trong bất kỳ chương trình nghiêm túc nào, và nằm ngoài thư viện thời gian chạy của Apple. Trong ngắn hạn, không có sử dụng thực sự cho Objective-C ngoài Mac và iPhone với thư viện thời gian chạy của Apple. –

+2

@Kragen Nếu không có thư viện thời gian chạy, Objective-C không thể làm gì cả. Phần lớn Objective-C phụ thuộc vào việc làm mọi thứ trong thời gian chạy (ngoài các khung công tác cần thiết: Foundation, CoreFoundation, AppKit), và không có các thư viện cần thiết, nó không hiệu quả. Để sử dụng ví dụ của bạn, nó giống như C mà không có bất kỳ thư viện nào cả. Nếu bạn muốn làm bất cứ điều gì, bạn sẽ phải thực hiện nó cho mình (một cái gì đó bạn không thể thực sự làm với Objective-C). –

+0

Thời gian chạy GNU không còn là lựa chọn thay thế duy nhất - bây giờ có libobjc2, hỗ trợ khá nhiều thứ mà thời gian chạy của Apple thực hiện. Các thư viện GNUStep vẫn còn tụt hậu, đặc biệt là cho các công cụ giao diện người dùng, nhưng cốt lõi của ngôn ngữ được cập nhật. – user57368

0

Chưa có giải pháp cho người trưởng thành. Nếu bạn tự phát triển giải pháp, bạn vẫn có thể làm điều đó. Nhưng nếu bạn không, đó không phải là thời gian.

Đối với các công cụ biên dịch, có LLVM/Clang là mã nguồn mở theo giấy phép BSD. Trình biên dịch được tài trợ bởi Apple, do đó, nó biên dịch Objective-C hoàn toàn và đang trở thành trình biên dịch chính cho Apple. Vì vậy, trình biên dịch không còn là vấn đề nữa.

Sự cố là thư viện môi trường thời gian chạy. Ngôn ngữ Objective-C phụ thuộc vào thời gian chạy của nó để thực thi. Thời gian chạy xác định tất cả các hành vi của hệ thống đối tượng và một số chi tiết. Thư viện môi trường thời gian chạy là hệ thống cốt lõi và khác với thư viện khung như Cocoa hoặc Quartz. trong .NET, đó là CRE, không phải thư viện lớp .NET framework. Nếu không có thời gian chạy, chương trình không thể được thực thi như chương trình .NET được thực thi trên Windows mà không có thời gian chạy .NET.

Để biết thêm chi tiết, kiểm tra cuộc trò chuyện này: http://lists.cs.uiuc.edu/pipermail/cfe-dev/2010-January/007593.html

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