Какой язык я должен использовать для создания кроссплатформенной библиотеки? [закрыто]


10

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

Я хочу иметь возможность скомпилировать это и сделать его доступным на как можно большем количестве платформ: Windows, ОС Windows Phone 7, OSX, iOS, Linux, Android, BlackBerry. В основном как можно больше платформ.

Приоритет должен быть доступен на мобильных устройствах.

Вопросов:

  1. Какие настройки я должен использовать? (языки программирования, компиляторы, IDE и т. д.)
  2. Как мне скомпилировать эту библиотеку для этих разных платформ и как мне к ней подключиться?
  3. Любая другая информация? например, статьи, которые охватывают тему кроссплатформенной разработки?

Я не делал подобного кроссплатформенного проекта раньше, поэтому любая доступная информация, которая поможет мне в правильном направлении, будет приветствоваться.

У меня самого есть опыт работы в C # / .NET и Objective-C.

Ответы:


8

Использование платформы Java / JVM было бы очевидным выбором - у нее самый широкий кроссплатформенный охват любого языка, и если у вас есть C # /. Net background, концепции будут очень знакомы.

Обратите внимание, что вам не нужно использовать язык 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.
Микера

+1 за то, что научил меня не использовать Java как таковую, но можно использовать Scala, Clojure, Groovy. Увлекательный ответ.
Энтони

3

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


3

Это не один выбор, но много. Хотя заманчиво найти одну вещь, которая встречается повсюду, это не всегда лучший способ сделать это.

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

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

  3. Самая важная вещь, я думаю, это тип и уровень графического интерфейса, который вы хотите построить.

Теперь перейдем к наиболее многообещающему выбору.

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

б. Для Windows .NET с любым поддерживаемым языком было бы хорошо.

с. Для iOS - нет выбора, кроме Objective C. Это не очень C ++, поэтому я не буду считать его целью

Вот справочник вики, который показывает набор всех платформ, который показывает вам все варианты и их применение.

Благодаря вашему вопросу я узнал из вышеупомянутой вики-ссылки, что теперь есть SDK, которые пытаются решить вышеуказанную проблему. Два, которые являются самыми близкими:

  1. Мармелад: http://www.madewithmarmalade.com/marmalade/supported-platforms это интересно поддерживает почти все платформы. Windows только добавляется, чтобы сделать полный круг.

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

Я ими еще не пользовался, но звучит интересная работа.


Android предоставляет Bada, а iOS - C ++.
Klaim

3

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

Единственным результатом жизнеспособного языка является C ++.


2
Знаете ли вы что-нибудь о преимуществах использования проекта Mono в сочетании с C #? Почему С не стоит задумываться?
Андрей

2
@ Андрей: Насколько я знаю, 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.