Tôi nên sử dụng ngôn ngữ nào để tạo thư viện đa nền tảng? [đóng cửa]


10

Tôi muốn xây dựng thư viện phân tích SyncML ( không có UI ) để có thể xây dựng các thông báo dựa trên thông tin được cung cấp bởi ứng dụng máy chủ, được cung cấp bởi các phương thức của thư viện. Ngoài ra, thư viện sẽ có thể thực hiện các cuộc gọi lại đến các phương thức trong ứng dụng máy chủ.

Tôi muốn có thể biên dịch cái này và có sẵn trên nhiều nền tảng nhất có thể: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry. Về cơ bản càng nhiều nền tảng càng tốt.

Ưu tiên là có sẵn điều này trên các thiết bị di động.

Câu hỏi:

  1. Tôi nên sử dụng thiết lập nào? (ngôn ngữ lập trình, trình biên dịch, IDE, v.v.)
  2. Làm cách nào để tôi biên dịch thư viện này cho các nền tảng khác nhau này và làm cách nào để kết nối với nó?
  3. Bất kỳ thông tin khác? ví dụ các bài viết đề cập đến chủ đề phát triển đa nền tảng?

Tôi chưa từng thực hiện loại dự án đa nền tảng này trước đây, vì vậy mọi thông tin có sẵn để đưa tôi đi đúng hướng sẽ được hoan nghênh.

Bản thân tôi, tôi có một nền tảng về C # /. NET và Objective-C.

Câu trả lời:


8

Sử dụng nền tảng Java / JVM sẽ là lựa chọn rõ ràng - nó có phạm vi bao phủ đa nền tảng rộng nhất của bất kỳ ngôn ngữ nào và nếu bạn có nền tảng C # /. Net, các khái niệm sẽ rất quen thuộc.

Lưu ý rằng bạn không phải sử dụng ngôn ngữ Java để đạt được các lợi ích của nền tảng Java - thực tế hiện nay, nếu bắt đầu một dự án từ đầu, có lẽ tôi sẽ giới thiệu một trong những điều sau đây:

  • Scala - nếu bạn muốn có một ngôn ngữ đa ngôn ngữ mạnh mẽ, được gõ tĩnh, đa mô hình với hiệu suất tuyệt vời trên JVM. Có thể phù hợp với bạn nếu bạn có một nền tảng C #.
  • Clojure - nếu bạn thích lập trình chức năng, thích ngôn ngữ năng động và thích sống trên đỉnh cao. Clojure có khả năng tương tranh thực sự tuyệt vời có thể hấp dẫn - video được liên kết rất đáng xem cho một số hiểu biết sâu sắc.
  • Groovy - nếu bạn muốn một ngôn ngữ kịch bản hướng đối tượng động đơn giản nhưng hiệu quả sẽ cảm thấy rất quen thuộc với các nhà phát triển C # / Java.

Tất cả các ngôn ngữ này nhận được tất cả các lợi ích của việc sử dụng JVM (trình biên dịch JIT tuyệt vời, bộ sưu tập rác rất hiệu quả, một bộ thư viện khổng lồ) nhưng là ngôn ngữ hiệu quả hơn nhiều để hoạt động.

Nhân tiện, đã có một thư viện SyncML mã nguồn mở có sẵn trong Java được gọi là Funambol . Không chắc chắn về mức độ mà điều này hữu ích trực tiếp với bạn nhưng đó là một ví dụ về thực tế là thường có một thư viện Java mã nguồn mở cho hầu hết mọi thứ .......

Suy nghĩ về các lựa chọn khác:

  • C / C ++ chắc chắn có thể hoạt động đa nền tảng, nhưng nó yêu cầu biên dịch lại (và thử nghiệm tiếp theo) thành mã gốc cho mỗi nền tảng. Với các ngôn ngữ JVM không cần thiết vì chính mã byte được biên dịch là có thể mang theo được. Trừ khi bạn thực sự cần C / C ++ để thực hiện hoặc truy cập vào các tính năng phần cứng thô, tôi nghĩ đó là vấn đề đau đầu bạn nên tránh.
  • C # ở dạng Mono có thể hoạt động ( ví dụ chứng kiến ​​sự thành công của Unity với tư cách là thư viện đa nền tảng), nhưng đó không phải là hệ sinh thái JVM về sự trưởng thành, tính sẵn có của thư viện hoặc thậm chí là hiệu năng thô. Ngoài ra, nó sẽ không bao giờ tương thích 100% với Microsoft .Net vì .Net có các tính năng dành riêng cho cửa sổ, là một cơn ác mộng đối với tính di động. Tuy nhiên, đáng để xem xét nếu bạn quyết tâm gắn bó với C #.
  • Javascript có thể là một tùy chọn bên ngoài nếu bạn quan tâm đến việc sử dụng thư viện ở cả phía máy khách và máy chủ.

1
Cảm ơn câu trả lời tuyệt vời. Bạn có biết người ta có thể chuyển Java sang iPhone tốt như thế nào, dưới dạng thư viện hoặc khung không? Ngoài ra, không thể sử dụng Funambol, vấn đề là tạo thư viện của riêng tôi.
Andrei

2
Tôi hiểu rằng Apple hiện đang khá hạn chế về Java trên iPhone. Tôi hy vọng áp lực thị trường sẽ khiến nó xảy ra nhiều hơn trong tương lai - bài viết này theserverside.com/discussions/thread.tss?thread_id=63072 ví dụ nói về việc Oracle trình diễn một ứng dụng dựa trên Java trong iPod Touch.
mikera

+1 để giáo dục tôi về việc không cần sử dụng Java mỗi lần, nhưng người ta có thể sử dụng Scala, Clojure, Groovy. Câu trả lời hấp dẫn.
Anthony

3

Bạn có thể muốn dùng thử Java - Môi trường chạy thi hành Java (máy ảo) là nền tảng chéo, Java có thể được sử dụng trong các thiết bị di động với Android (hoặc với Java ME) và .NET rất giống với nó.


3

Đây không phải là một lựa chọn mà là nhiều. Mặc dù thật hấp dẫn khi tìm thấy một thứ đi khắp mọi nơi, nhưng đó không phải lúc nào cũng là cách tốt nhất để làm.

  1. Ví dụ, mặc dù có thể ép mã C ++ trong nền tảng di động Windows, nhưng mọi thứ .NET sẽ luôn dễ dàng hơn ở đây so với phần đối lập của nó theo quan điểm hỗ trợ.

  2. Tương tự như vậy, người ta cần đưa ra một lựa chọn chính cho dù bạn muốn nó là bản địa hay trong thời gian chạy và bạn có bị giới hạn nghiêm ngặt đối với Web trung tâm hoặc mạnh hơn chung chung không? Ví dụ: Adobe Runtime có mặt ở khắp mọi nơi nhưng nó sẽ giới hạn những gì bạn có thể làm so với các ngôn ngữ lập trình cốt lõi.

  3. Điều quan trọng nhất tôi đoán, là loại và cấp độ GUI bạn muốn xây dựng.

Bây giờ đến hầu hết các lựa chọn hứa hẹn.

a. Đối với Symbian, Blackberry, Android, BREW và Bada (samsung) Java / J2ME là cách phổ biến nhất. Mặc dù vậy, trong nhiều trường hợp, bạn có thể tốt hơn với C / C ++, đối với công cụ cốt lõi gốc trong một số nền tảng.

b. Đối với Windows .NET với bất kỳ ngôn ngữ được hỗ trợ sẽ tốt.

c. Đối với iOS - không có lựa chọn nào khác ngoài Objective C. Đây không phải là C ++ nhiều nên tôi sẽ không coi đó là mục tiêu

Dưới đây là một tài liệu tham khảo wiki cho thấy tập hợp tất cả các nền tảng cho bạn thấy tất cả các tùy chọn và nơi chúng áp dụng.

Nhờ câu hỏi của bạn, tôi đã học được từ liên kết wiki ở trên rằng bây giờ đã có SDK, cố gắng giải quyết vấn đề trên. Hai cái gần nhất là:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-pl Platforms hỗ trợ thú vị này hầu hết tất cả các nền tảng. Windows chỉ là về việc thêm vào để tạo vòng tròn hoàn chỉnh.

  2. Mã hạt: http://www.particlecode.com/

Tôi chưa sử dụng chúng, nhưng công việc thú vị.


Android cung cấp Bada và iOS cho phép C ++.
Klaim

3

.NET hầu như không có sẵn trên nhiều nền tảng và Objective-C thậm chí còn tệ hơn, cộng với .NET thì hơi chậm và ObjC về cơ bản không có hỗ trợ bên ngoài Apple. C là một ngôn ngữ về cơ bản thậm chí không đáng xem xét trừ khi một số yếu tố bên ngoài khiến bạn sử dụng nó.

Ngôn ngữ khả thi kết quả duy nhất là C ++.


2
Bạn có biết gì về những lợi ích của việc sử dụng dự án Mono kết hợp với C # không? Tại sao C không đáng để xem xét?
Andrei

2
@Andrei: Theo như tôi biết, Mono hầu như không phải là bức tranh về tính khả dụng trên tất cả các nền tảng bạn đã liệt kê. Và C không đáng để xem xét vì nó giống như C ++, nhưng với tất cả các tính năng tốt, đó rõ ràng là một điều ngu ngốc nếu bạn có thể sử dụng C ++.
DeadMG

4
@DeadMG: Tôi rất muốn thấy bạn tranh luận về điểm đó với Linus Torvalds: thread.gmane.org/gmane.comp.version-control.git/57643/ . - không nói rằng anh ấy phải đúng 100%, tôi chỉ thích xem flamewar.
Michael Borgwardt

2
@DeadMG C không phải là C ++ với các tính năng tốt; C ++ là C với các tính năng khủng khiếp được thêm vào. Không có gì sai với C.
đúng vào

2
@WTP: Anh ấy xin đề nghị chứ không phải chuyện đời tôi. Một thực tế đơn giản là bất cứ điều gì bạn nghĩ về các tính năng bổ sung của C ++, thực tế là chúng tồn tại và chúng tạo ra C ++ - chỉ có mã có thể truy cập, là phần thưởng và C không phải là C ++ - điều ngược lại là không đúng. Khi bạn sử dụng C ++ trên C, bạn chỉ thêm các lựa chọn. Do đó, theo định nghĩa, C ++ là ngôn ngữ ưu việt và bạn luôn có thể chọn không sử dụng các tính năng của C ++. Đó sẽ là sự điên rồ, nhưng bạn có thể.
DeadMG
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.