@a2NaF

Как делают компиляции для разных платформ?

Как я понимаю, если написать программу, например, на языке C++, то её вполне можно скомпилировать под разные платформы: Windows, Linux, Mac, Android, но тогда необходим слой абстракции. Этот слой подразумевает обращение к API через ту функцию, которой соответствует данная на необходимой платформе? Условно говоря: у Windows для отображения окна функция a, у Linux - b, и нужно на каждой платформе выбирать соответствующую. Получается, что достаточно заменить такие функции, выбрать другой компилятор и программа для другой платформы готова? Если да, то почему нельзя везде использовать один язык программирования?
  • Вопрос задан
  • 131 просмотр
Решения вопроса 1
@stratosmi
Во первых "использовать один язык программирования" и кросс-платформенность - это две разные вещи. Параллельные.

У языков есть свои плюсы и минусы (и это еще безотносительно кросс-платформенности). Иначе давным-давно был бы один-единственный язык. Идеальный. Хотя бы в пределах одной платформы. Но нет. Языки продолжают появляться.

А теперь про кросс-платформенность:

Платформы сильно разные.
Ну вот, скажите, зачем вам "оконное API" для серверной платформы, где нет GUI?

Попытки написать универсальное решение имеются. Но получаем ограниченную функциональность где-либо. Не учитывание нюансов где либо. Потому что нельзя объять необъятное.

Условно говоря: у Windows для отображения окна функция a, у Linux - b, и нужно на каждой платформе выбирать соответствующую.


Вы забыли, что desktop на Linux может быть сильно-сильно различным.
И даже для Linux нет нормальной кросс-платформенности в GUI.

Если да, то почему нельзя везде использовать один язык программирования?

Почему нельзя.
Можно.
На JavaScript или с QT или использовать JDK.
Однако применимость этих решений - ограничена. Уж очень много где они не идеально вписываются и не подходят ко всем деталям платформы.

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

но тогда необходим слой абстракции. Этот слой подразумевает обращение к API через ту функцию, которой соответствует данная на необходимой платформе? Условно говоря: у Windows для отображения окна функция a, у Linux - b, и нужно на каждой платформе выбирать соответствующую.

Примерно так и делают.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы