Яку мову я повинен використовувати для створення бібліотеки крос-платформ? [зачинено]


10

Я хочу створити бібліотеку розбору SyncML ( без користувальницького інтерфейсу ), яка повинна мати змогу створювати повідомлення на основі інформації, наданої хост-програмою, що подається методами бібліотеки. Також бібліотека повинна мати можливість робити зворотні виклики методам у хост-програмі.

Я хочу мати змогу скласти це і мати його доступним на якомога більше платформах: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry. В основному якомога більше платформ.

Пріоритетним є те, щоб це було доступне на мобільних пристроях.

Запитання:

  1. Яку установку я повинен використовувати? (мови програмування, компілятори, IDE тощо)
  2. Як би я склав цю бібліотеку для цих різних платформ і як би я підключився до неї?
  3. Будь-яка інша інформація? наприклад, статті, що висвітлюють тему розвитку платформ?

Я ще не робив подібного кроссплатформенного проекту, тому будь-яка наявна інформація, яка спрямовувала мене в правильному напрямку, буде вітатися.

Сам я маю досвід роботи в C # /. NET і Objective-C.

Відповіді:


8

Використання платформи Java / JVM було б очевидним вибором - вона має найширше міжплатформене покриття будь-якої мови, і якщо у вас є C # /. Чистий фон, концепції будуть дуже знайомі.

Зауважте, що вам не потрібно використовувати мову Java, щоб отримати переваги платформи Java - адже сьогодні, якщо запускати проект з нуля, я, мабуть, порекомендую одне з наступних:

  • Scala - якщо ви хочете потужний, статичний тип, багатопарадигмальний мовний контент з великою продуктивністю на JVM. Можливо, вам підійде, якщо у вас є C #.
  • Clojure - якщо ви віддаєте перевагу функціональному програмуванню, як динамічні мови та любите жити на передовій. Clojure має справді чудові можливості одночасності, що може бути привабливим - пов’язане відео варто заслуговувати на глибокий огляд.
  • Groovy - якщо ви хочете простий, але ефективний динамічний сценарій, орієнтований на об'єктну мову, який буде відчувати себе дуже знайомим розробникам C # / Java.

Усі ці мови отримують всі переваги, коли вони є на JVM (фантастичний компілятор JIT, дуже ефективна збірка сміття, величезний набір бібліотек), але набагато продуктивніші мови для роботи.

До речі, у Java вже доступна бібліотека SyncML з відкритим кодом під назвою Funambol . Не впевнений, наскільки це вам корисно безпосередньо, але це приклад того, що зазвичай існує бібліотека Java з відкритим кодом для майже нічого .......

Думки про інші варіанти:

  • C / C ++, безумовно, може працювати на крос-платформах, але для цього потрібна перекомпіляція (та подальше тестування) в нативний код для кожної платформи. З мовами JVM, які не потрібні, оскільки перекомпільований самий байт-код є портативним. Якщо ви абсолютно не потребуєте C / C ++ для продуктивності чи доступу до функцій сировинних апаратних засобів, я думаю, що вам слід уникати головного болю.
  • C # у формі Mono може працювати (свідчить, наприклад, про успіх Unity, як бібліотеку між платформами), але це ніде не екосистема JVM з точки зору зрілості, доступності бібліотеки та навіть неробочої продуктивності. Крім того, він ніколи не буде на 100% сумісним з Microsoft .Net, оскільки .Net має особливості Windows, які є кошмаром для портативності. Тим не менш, варто задуматися, чи вирішили ви дотримуватися C #.
  • Javascript може бути зовнішнім варіантом, якщо ви зацікавлені у використанні бібліотеки як на стороні клієнта, так і на сервері.

1
Дякую за чудову відповідь. Чи знаєте ви, наскільки добре ви можете перенести Java на iPhone у вигляді бібліотеки чи фреймворку? Крім того, не можу використовувати Funambol, справа в тому, щоб створити власну бібліотеку.
Андрій

2
Я розумію, що Apple в даний час досить обмежує Java щодо iPhone. Я думаю, що тиск на ринку призведе до того, що в майбутньому це стане більше - ця стаття theserverside.com/discussions/thread.tss?thread_id=63072, наприклад, розповідає про Oracle, що демонструє додаток на базі Java в iPod Touch.
mikera

+1 для того, щоб навчити мене не потребувати використання Java як такої, але можна використовувати Scala, Clojure, Groovy. Захоплююча відповідь.
Ентоні

3

Ви можете спробувати Java - Java Runtime Environment (віртуальна машина) є кросплатформою, Java може використовуватися на мобільних пристроях з Android (або з Java ME), і .NET дуже схожий на неї.


3

Це не один вибір, але багато. Хоча знайти одне , що йде скрізь, спокусливо знайти це не завжди найкраще.

  1. Наприклад, в той час, як можливо можливо видавити код C ++ на мобільній платформі Windows, будь-що .NET завжди буде простішим, ніж його «зустрічна частина» з точки зору підтримки.

  2. Так само потрібно зробити головний вибір, чи хочете ви, щоб він був рідним або під час роботи, і чи ви обмежені обмеженим веб-сайтом чи більш потужним? Наприклад, Adobe Runtime є більш всюдисущим, але це обмежить те, що ви можете зробити, порівняно з основними мовами програмування.

  3. Найголовніше, що я здогадуюсь, це тип та рівень графічного інтерфейсу, який ви хочете створити.

Тепер переходимо до найбільш перспективних виборів.

а. Для Symbian, Blackberry, Android, BREW та Bada (samsung) Java / J2ME - найпоширеніший спосіб. Хоча у багатьох випадках ви можете краще використовувати C / C ++ для рідних речей на якійсь платформі.

б. Для Windows .NET з будь-якою підтримуваною мовою було б добре.

c. Для iOS - вибору немає, окрім цілі C. Це НЕ дуже багато C ++, тому я не буду вважати це ціллю

Ось посилання на вікі, де відображається набір усіх платформ, який показує всі параметри та де вони застосовуються.

Завдяки вашому питанню, я дізнався із вищезгаданого посилання на вікі, що зараз існує SDK, які намагаються вирішити вищезгадану проблему. Найближчі два:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-platforms Цікаво підтримують майже всі платформи. Windows майже збирається додавати, щоб зробити повне коло.

  2. Код частинок: http://www.particlecode.com/

Я їх ще не використовував, але звучить цікава робота.


Android надає Bada та iOS, що дозволяють C ++.
Клайм

3

.NET навряд чи доступний на багатьох платформах, а Objective-C ще гірше, плюс .NET начебто повільний, а ObjC в основному не має підтримки за межами Apple. C як мова, в основному навіть не варто розглядати, якщо якийсь зовнішній фактор не змусить вас її використовувати.

Єдиний результат життєздатної мови - це C ++.


2
Чи знаєте ви щось про переваги використання проекту Mono в поєднанні з C #? Чому C не варто розглянути?
Андрій

2
@Andrei: Наскільки я знаю, Mono навряд чи має уявлення про доступність на всіх перелічених вами платформах. І C не варто замислюватися, тому що це так само, як C ++, але з усіма хорошими можливостями, що, очевидно, дурне, якщо ти можеш використовувати C ++.
DeadMG

4
@DeadMG: Я хотів би бачити, як ви обговорювали цю справу з Лінусом Торвальдсом: thread.gmane.org/gmane.comp.version-control.git/57643/… - не кажучи, що він повинен бути на 100% прав, я б так само, як дивитись полум'яну.
Майкл Боргвардт

2
@DeadMG C не є C ++ з хорошими функціями; C ++ - це C із доданими жахливими функціями. З С. немає нічого поганого
праворуч

2
@WTP: Він попросив рекомендацію, а не мою життєву історію. Простий факт полягає в тому, що що б ви не думали про додаткові можливості C ++, факт полягає в тому, що вони існують, і вони роблять доступним лише C ++ - код, який є бонусом, а C - нічим, C ++ не є - навпаки не вірно. Коли ви використовуєте C ++ над C, ви додаєте лише вибір. Тому, за визначенням, C ++ є вищою мовою, і ви завжди можете не використовувати функції C ++. Що було б божевіллям, але можна.
DeadMG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.