Ziya1995 Ответов: 1

Как лучше всего создавать кросс-платформенные приложения?


Я хочу создать высокопроизводительное приложение один раз и запустить его:

- Рабочий стол Windows
- Linux
- Mac OS
- УСВН
- Андроид

Я не хочу менять код для каждой из платформ отдельно.
Я хочу написать один раз и запустить их все.
Он может быть основан на фреймворке или скомпилирован в собственный машинный код для отдельных платформ.
Производительность важна.

Возможно ли это?
Если это невозможно, дайте мне знать, и я прекращу поиски.

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

Я знаю C# и знаю о Xamarin, но Xamarin разделяет код по всему миру, это не один код, работающий поперек, так что это не то, что я хочу.

Leo Chapiro

Просто для понимания: Windows в вашем списке должна быть "Windows Mobile", не так ли? Что такое Linux и MacOS, в чем здесь разница с Android / iOS?

Ziya1995

> должно быть "Windows Mobile", верно?
Нет, это Windows, как Windows 7 или 8.1.

> В чем здесь разница с Android / iOS?
Я хочу, чтобы мое приложение поддерживало Windows desktop, Android, iOS, потому что я получу больше денег, также было бы довольно круто, если бы они поддерживали Windows Store, Play Store, App Store.

Прямо сейчас я немного сбит с толку из-за 2 основных вещей:
Веб-кросс-платформенные технологии медленны, я не хочу HTML/CSS/Javascript - просто исключите их.
Другие путают меня, потому что я не знаю, что они делятся кодом или он полностью пишется один раз, когда запускается где-либо.

Например, я скачал Xamarin, и оказалось, что я не могу поделиться GUI, мне нужно написать GUI отдельно для всех 3 платформ - я этого не хочу.

Сейчас я этого не делаю, но если вы знаете, возможно ли это или максимальный уровень-это общий доступ к коду и нормализация его отдельно для разных платформ - дайте мне знать)

Leo Chapiro

Это зависит от того, какой язык программирования вы можете использовать. Посмотри: https://www.backblaze.com/blog/10-rules-for-how-to-write-cross-platform-code

Ziya1995

Можете ли вы сказать, можно ли написать когда-то простое графическое приложение и запустить его на указанных платформах?
Или мне всегда нужно менять код, чтобы соответствовать платформам отдельно?

Leo Chapiro

Для простого графического приложения вы можете использовать веб-технологии, с HTML/JavaScript это должно быть возможно.
Если вам, напротив, нужна хорошая/лучшая производительность, вам нужно будет использовать специальные технологии: ObjectiveC для iOS, C# для Windows и Java для Android. Xamarian может помочь избежать ObjectiveC, используя только C#, но это!

Ziya1995

&ГТ; но что это!
было бы здорово, если бы вы ответили на мой вопрос:
Могу ли я написать высокопроизводительное приложение один раз (не веб) и скомпилировать его в машинный код для разных платформ?
Xamarin разделяет код, он не запускает один и тот же код на разных платформах.
Вы можете ответить?

Например, я читал о Adobe Air, и он говорит, что это кросс - платформы, но я не могу понять, что это значит-общий доступ к коду?

Richard MacCutchan

Короткий ответ: Нет, вы не можете этого сделать. Вы можете попробовать Java, но даже это не гарантирует неизменной работы на каждой платформе (и не является действительно высокопроизводительным). Лучше вам определить свои требования и выяснить, какие части вы можете сделать общими, а какие должны быть специфичными для конкретной платформы.

super

Вам действительно нужно понять, что один и тот же код для всех платформ означает, что он не годится ни для одной из них, основываясь на производительности. Если вы хотите, чтобы ваши приложения работали наилучшим образом на конкретной платформе, то вам нужно удовлетворить эту цель. В противном случае у вас будут очень раздутые приложения, которые в лучшем случае являются средними на всех платформах.

Ziya1995

Подождите, есть так много технологий, например Adobe AIR.
Он говорит, что это кросс-платформенный, я понимаю это так, как вы можете написать один раз и запустить в любом месте с помощью Adobe Runtime.
Есть также C++ QT и Unity3D.

Все это означает, что вы можете написать один раз и запустить на всех указанных платформах без нормализации кода для конкретной платформы.
А Unity3D обладает высокой производительностью.

Вы говорите "нет", но C++ QT, Unity3D, Adobe Air говорят наоборот или я чего-то не понимаю?

Что случилось?

Richard MacCutchan

Единственный способ убедиться в этом-попробовать самому и посмотреть, какие результаты вы получите. Но не удивляйтесь, если это не сработает так, как утверждают эти организации.

Ziya1995

-если он не работает так хорошо, как утверждают эти организации.
Вы хотите сказать, что это не работает?
Прямо сейчас я застрял между ними .Net WPF и Adobe AIR.

Richard MacCutchan

Нет, я имею в виду, что есть только один способ убедиться, и это попробовать. Никто не может предсказать, будет ли ваш код работать или нет.

Ziya1995

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

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

Richard MacCutchan

Рискуя наскучить вам еще раз скажу: никто не может предсказать, будет ли ваша программа работать на всех платформах. Единственный способ узнать это-попробовать.

Ziya1995

Я понимаю это так, как вы имеете в виду, что не гарантировано, что это сработает, поэтому были случаи, когда это не сработало.
Хорошо.

Richard MacCutchan

Нет, нет, нет!
Невозможно гарантировать, что он будет работать, так же как вы не можете гарантировать, что любая программа на одной платформе будет работать.

Вы не можете знать, что программа будет работать, пока не попытаетесь запустить ее. Даже если вы скомпилировали его без ошибок или предупреждений, он все равно может потерпеть неудачу при запуске.

Если вы действительно не понимаете этого простого факта, то у вас будет много трудностей как у разработчика.

Ziya1995

Существует так много кросс-платформенных API, но вы говорите, что это невозможно или плохо, я не понимаю, я очень смущен.

Richard MacCutchan

Что вас смущает? Ответ, как я уже неоднократно говорил, довольно прост: невозможно быть уверенным, что кросс-платформенная сборка будет работать, пока вы не попробуете ее. Это единственный способ быть уверенным, и многое будет зависеть от функций, которые использует ваше приложение.

Ziya1995

> Это не хорошо ни в одном из них, основанных на производительности.
Один и тот же код C++ QT компилируется в машинный код для всех перечисленных платформ - какая может быть проблема производительности, когда он является нативным?

Richard MacCutchan

Пожалуйста, смотрите мои ответы выше: никто не может предсказать, с какими проблемами производительности вы можете столкнуться. Единственный способ узнать это-попробовать.

1 Ответов

Рейтинг:
12

Sergey Alexandrovich Kryukov

Неправильный вопрос. Нет такого понятия, как "лучший". Как бы вы определили предикат "лучше"? Если вы можете, пожалуйста, поделитесь с нами. Кроме того, вопрос слишком расплывчатый; существует слишком много различных подходов, имеющих определенные преимущества в зависимости от большого числа факторов.

Итак, я только что упомянул два наиболее широко используемых варианта, которые 1) не являются сценариями, но основаны на компиляции, 2) не требуют перекомпиляции на разных платформах. Это Java (JVM) и CLR (.NET и другие реализации). Пожалуйста, смотрите:

http://en.wikipedia.org/wiki/Java_(programming_language)[^],
http://en.wikipedia.org/wiki/Java_virtual_machine[^].

И
http://en.wikipedia.org/wiki/Common_Language_Runtime[^],
http://en.wikipedia.org/wiki/.NET_Framework[^],
http://en.wikipedia.org/wiki/Mono_%28software%29[^].

Общая тема для потомков: http://en.wikipedia.org/wiki/Just-in-time_compilation[^].

[РЕДАКТИРОВАТЬ]

О других подходах (некоторые из них были упомянуты другими участниками, пожалуйста, смотрите мой прошлый ответ:
написание визуальных программ на c/c++ (кросс-платформенных) с помощью какой IDE и компилятора?[^],
http://www.codeproject.com/Answers/258139/Visual-Studio-Application-for-Target-OS-Windows-an#answer1[^],
Как скомпилировать Visual studio C++ в linux и os-mac[^],
В чем проблема с этой сюжетной программой win32[^].

Я бы не стал рассматривать что-либо от Adobe как что-то серьезное, но это решать вам.

—СА


Ziya1995

Ни одна из сказанных вами платформ не поддерживает все указанные платформы одновременно.
Итак, ваш ответ неверен.

Итак, я только что упомянул два наиболее широко используемых варианта, которые
Я все это знаю, я задал конкретный вопрос, но вы также можете описать множество других способов, которые не поддерживают платформы, перечисленные в этом вопросе.

Adobe AIR пишется один раз и запускается на всех указанных платформах, за исключением Linux, и это здорово, и я хочу знать, правда ли это? Я слышал, что он не работает нормально, делает ошибки и так далее, можете ли вы объяснить? Я был бы счастлив счастлив)

Sergey Alexandrovich Kryukov

Я даже не понимаю, о чем вы говорите...
Я не виноват, что вы "все это знаете"; вы никогда не указывали, что знаете, а что нет. Вы не сказали ни единого слова против моих заявлений.
А то, что вы говорите о Xamarin, - это тарабарщина.
Саман... Все, что создано компанией Adobe, является патентованным и в определенном смысле некачественным. Я недавно избавился от последнего продукта Adobe и хочу держаться от него подальше...
—СА

Ziya1995

Я хочу создать высокопроизводительное приложение один раз и запустить его:

- Рабочий стол Windows
- Linux
- Mac OS
- УСВН
- Андроид

Вы советуете Java и .Net:
поддержка Java:
Вдовы
Линукс
Mac OS

Поддержка .Net:
Окна

-я не виноват, что ты "все это знаешь"; ты никогда не указывал, что знаешь, а что нет.
Я друг, а не враг, мы не должны показывать, что мы знаем и чего не знаем, потому что мы знаем так много вещей) и чтобы сделать вопрос легким для получения, я делаю его конкретным, спрашивая, какой кросс-платформенный способ, фреймворк является лучшим или, по крайней мере, в топе.
Это просто, я новичок, я не знаю, какие кросс-платформенные способы существуют, и я прошу вашей помощи.

-а то, что вы говорите о Xamarin, - это тарабарщина.
Так объясните мне, что он разделяет код на Android, iOS, Mac OS и не имеет графического интерфейса для 3 из них одновременно, он должен быть общей логикой и отдельным графическим интерфейсом.

& gt; Adobe... Все, что создано компанией Adobe, является патентованным и в определенном смысле некачественным.
Это то,что мне нужно от вас, больше информации о Adobe AIR, хорошо, что это низкое качество.
Но Unity3D-это кросс-платформа, и она не низкого качества, просто посмотрите на игры, которые она сделала.

Я знаю C# Windows Forms и хочу выбрать WPF, но мне бы хотелось что-то кросс-платформенное.

Sergey Alexandrovich Kryukov

Предоставляя свою информацию, я пытаюсь относиться к людям как к друзьям, как же иначе? На некоторые подобные вопросы не так-то просто ответить, используя расплывчатые или неправильные понятия как "лучшее". Это в ваших интересах понять эту неправильность, а не в моих. Чем больше вы понимаете, тем лучше.

Так вот," Xamarin делится кодом поперек, это не один код, Бегущий поперек " - это высказывание, которое не имеет никакого определенного смысла и, конечно же, не может быть правдой. Вы упускаете некоторые моменты о CLR. .NET-это не единственная реализация CLR, есть и другие. Nono охватывает Windows, Linux, Mac OS X и многое другое для различных архитектур набора команд процессора, а Xamarine добавляет к нему некоторые недостающие платформы. Полученный CIL-код работает на разных платформах без перекомпиляции.

Еще один подход, упомянутый другими участниками, - это использование машинного кода с кросс-платформенными библиотеками. Вы можете рассмотреть Qt, GTK+, FreePascal и многое другое.

—СА

Ziya1995

так вот," Xamarin делится кодом поперек, это не один код, Бегущий поперек " - это высказывание, которое не имеет никакого определенного смысла и, конечно же, не может быть правдой.
Xamarin делится кодом, у него нет единой библиотеки GUI для всех 3 платформ, вы делаете логику и создаете отдельный пользовательский интерфейс.
О чем ты говоришь?

& gt; использование расплывчатых или неправильных понятий как "лучшее". Вам полезно понять эту неправильность,
Я просто сказал "Лучше всего", чтобы получить какой-то совет, не совсем номер один на рынке, я мог бы сказать:
Какие существуют кросс-платформенные библиотеки?
Надеюсь, теперь вы поняли, что значит" лучший".

Sergey Alexandrovich Kryukov

1. Да, это не имеет смысла. Нет пользовательского интерфейса? Неправда: http://developer.xamarin.com/guides/cross-platform/xamarin-forms. В конце концов, смотреть недостаточно, нужно видеть.

2. нет, "Лучший" не означает ничего определенного. Что-то может быть "лучше" для тебя, а не для меня.

Я дал вам хороший список кросс-платформенных решений в ответе после [EDIT]. Ты собираешься игнорировать это?

—СА

Ziya1995

- в конце концов, смотреть недостаточно, нужно видеть.
Он не поддерживает Windows.
Ксамарин.Формы не поддерживаются Mac OS.

2. нет, "Лучший" не означает ничего определенного. Что-то может быть "лучше" для тебя, а не для меня.
Лучшее означает что - то хорошее, не совсем номер один, Слушай, ты действительно шутишь, пропусти эту часть, если ты не знаешь, что значит "лучшее", ты можешь пропустить этот вопрос, я трачу свое время на разговоры о том, черт возьми, что значит "лучшее"?!
Я мог бы сказать:
Какие существуют кросс-платформенные API?
Я не собираюсь играть в философские игры.

-ты собираешься игнорировать это?
Конечно, нет, я собираюсь посмотреть на них.

Sergey Alexandrovich Kryukov

Поддерживаются моно-формы. Вы упускаете все моменты. Единственная проблема в том, что вы не даете себе труда что-либо понять. Зачем я вообще трачу на тебя время?
—СА

Sergey Alexandrovich Kryukov

Видите ли, если вы хотите сосредоточиться на Adobe и настаиваете на том, чтобы ответы были сосредоточены на ней, зачем задавать вопрос, который вы задали? Если вам не нужны другие альтернативы, спросите только об Adobe. Моя цель не в том, чтобы убедить вас, как раз наоборот: возьмите на себя ответственность за свои решения.

Удачи,
—СА

Ziya1995

- зачем задавать тот вопрос, который вы задали?
Я задал этот вопрос, чтобы получить информацию о кросс-платформенных библиотеках, таких же, как те, которые я нашел в интернете.
Но вы ничего о них не сказали(
Но вы сказали, что это невозможно, вы имели в виду, что они не работают, я собираюсь проверить их.

Sergey Alexandrovich Kryukov

Ничего полезного? Хотите ли вы сохранить это утверждение в других членах CodeProject? Я прихожу к выводу, что ничто не может помочь вам с вашим отношением. Вы говорите, что я не давал информацию в кросс-платформенных библиотеках? Я говорю: "они не будут работать?" Ты знаешь, что лгать плохо? Действительно, какой позор. Послушайте, все здесь могут прочитать все ваши комментарии. Ты об этом думал?

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

—СА

Ziya1995

> Вы можете рассмотреть Qt, GTK+, FreePascal и многое другое.
Отличный.

я проверяю ваш [EDIT].

-я бы не стал рассматривать что-либо от Adobe как что-то серьезное, но это решать вам.
Совет есть, спасибо.

-ничего полезного?
Я не борюсь, пропустите это, я понятия не имею, как объяснить, что Java, .Net и Xamarin не поддерживают перечисленные платформы, что лучше всего означает и так далее.

Вы сказали:
1. Qt
2. GTK+
3. FreePascal
и ваш [править].
Это выглядит многообещающе, отлично, это то, что я хотел, теперь вы понимаете, чего я хочу, спасибо.

- давайте договоримся о прекращении этого разговора.
После всего разговора вы сказали "отличные полезные технологии", спасибо.

Sergey Alexandrovich Kryukov

Хорошо. Конечно, я не собирался драться или что-то в этом роде.
Теперь: Java поддерживается везде. Я понятия не имею, как вам удается исключать некоторые платформы.
С Xamarin вы упускаете главное. Вам нужно написать общий код, который работает на Xamarin в одной системе, Mono в другой, .NET в Microsoft. Без перекомпиляции. Ты понимаешь? А Microsoft обещает мультиплатформенный .NET в конце этого года.
—СА

Ziya1995

> Теперь: Java поддерживается везде. Я понятия не имею, как вам удается исключать некоторые платформы.
Windows, Linux, Mac OS.
Ни Android, ни iOS.
http://java.com/en/download/help/sysreq.xml

> с Xamarin вы упускаете главное. Вам нужно написать общий код
Я это знаю, я тоже проверил Xamarin, общий код-это не графический интерфейс, это логика, мне все равно нужно будет писать коды для конкретной платформы отдельно

> и Microsoft обещает мультиплатформенный .NET в конце этого года.
Звучит здорово, я знаю C# Windows Forms.
Я выписался .Net Core, у него нет графического интерфейса.
Смогу ли я написать код C# один раз и запустить его на всех указанных платформах, не исправляя код для платформ отдельно, как в Xamarin?

Sergey Alexandrovich Kryukov

Будьте серьезны. Java.com? Как вы думаете, они должны перечислять все платформы?
Как насчет проверки Android и Mac OS? На Android это основной язык. :-)
Я уже говорил вам, что Java доступна на всех этих платформах.

"Я знаю это, я тоже проверил Xamarin, общий код-это не графический интерфейс, это логика".
Опять же, неправда. Я не уверен, что вы поняли суть.

Слушай,с твоим вниманием к источникам мы можем потратить слишком много времени. Пожалуйста, дайте себе задание приложить гораздо больше усилий в чтении. Вы совершаете обход...

—СА

Ziya1995

> На Android это основной язык. :-)
Android Java отличается, и вы не можете запустить Oracle Java, работающую в Windows на Android.

Sergey Alexandrovich Kryukov

В этом весь смысл: вы должны написать совместимый код...
Что вы хотите от этих платформ, которые были разработаны, чтобы быть несовместимыми? Пытаешься найти что-то получше? Я пытаюсь предложить что-то, вероятно, самое совместимое, что вы можете найти, даже не пытаясь удовлетворить свой аппетит к идеальному миру, пожалуйста, поймите это... :-)
—СА

Ziya1995

> На Android это основной язык. :-)
C++ QT (без Mac OS), Adobe AIR (без Linux) поддерживают почти все указанные платформы - Windows, Android, iOS.
Но другие 2 парня сказали, что это невозможно
короткий ответ: Нет, вы не можете этого сделать.
> Это не хорошо ни в одном из них, основанных на производительности

C++ QT компилируется в native + performance.
Adobe AIR также может компилироваться в родной язык.
В чем проблема?

И некоторые люди говорят, что быть кросс-платформенным не работает, это глючит.

Sergey Alexandrovich Kryukov

Ладно,у вас есть все шансы протаранить все это...
—СА

Sergey Alexandrovich Kryukov

Старайтесь не игнорировать детали, это помогает. Там написано v2 17 часов назад...
Добро пожаловать.
—СА