170 похожих чатов

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

и приложение не запустится» (если говорить про компилируемые языки программирования). Ведь ОС получается все же может быть частью архитектуры, и если она сменится, то приложение может не запуститься. Так что они имеют в виду под архитектурой?

7 ответов

9 просмотров

рассматривай это всё как breaking change в API / ABI. На уровне машиных команд у тебя есть ABI, есть API операционной системы, есть тоже самое у jvm и стандартной библиотеки дзявы (и любых других либ). Конкретно в твоем примере — можно задать допвопрос про что именно обсуждают в плане переносимости. Но я склонен предположить, что тут обсужают именно архитектуру набора команд процессора: CISC (Intel x86), RISC (Arm). Так же вопрос может стоять про битность адресов, к примеру написали 64-битную софтину, а потом нужно портировать по какое-то 32-хбитное древнее зло. > Ведь ОС получается все же может быть частью архитектуры, и если она сменится, то приложение может не запуститься Да, если ты используешь platform-specific штуки, то код у тебя будет непортируемый. Тут фишка в том, что ты архитектуру своей вычислительной системы (весь комплекс из аппаратуры, ОС, твоей прикладной команды) можешь вбить гвоздями привязку к ОС, а можешь и не вбивать. Однако, на обывательском уровне под “сменится архитектура и приложение не запустится” имеют ввиду то, что используешь что-то CPU specific. К примеру юзаешь (твой код или код внешних зависимостей) конкретные SIMD инструкции от Intel’вский процессоров — AVX / MMX. Под Arm придется переписывать или даже под интелловский процессор без их поддержки. Про использование ОС-specific штук обычно говорят про смену платформы (тут очень субъективное мнение, так как лично я привык читать / слышать / говорить именно про них). Про архитектуру процов тоже говорят как hardware platform, но насколько мне известно реже.

Ivan-N Автор вопроса
Andrey Bova
рассматривай это всё как breaking change в API / A...

И еще вопрос. Я правильно понимаю, что даже если нет ОС-specific штук (пусть программа просто складывает два числа), то все равно нужно скомпилировать код отдельно для каждой комбинации архитектура процессора/ОС? Потому что в разных ОС разные API, а в разных архитектурах процессоров разные ABI? То есть для Windows нужно скомпилировать программу (которая складывает два числа) для x32 (хотя с такой разрядностью компов почти не осталось) и x64, потому что там все процессоры CISC и отличаются только разрядностью, а для macOS нужно компилировать для Intel (CISC) и для M1 (RISC)?

Ivan N
И еще вопрос. Я правильно понимаю, что даже если н...

Да, но есть пара моментов: x32 программа, которая не использует 64х битную адресацию будет работать и нам 32х битных процах и на современных. Це обратная совместимость у х86. На чисто х64 скорее всего не взлетит, но тут таких машин уже и нет давно. И на маках современных не взлетит Да, нужна компиляция под разные оси. Для мака можно и собрать под интел, а потом через розетку запустить на м1, но я тут не скажу за корректность результатов.

Andrey Bova
Да, но есть пара моментов: x32 программа, которая ...

Только пара моментов, запуск 32 бита в 64 системе работает в винде, но на линуксе нет, про мак не в курсе, думаю что тоже нет Ну и да, если бы был ia64, то вариантов не было бы

Alexandr ∨∧‾ Emelyanov
Только пара моментов, запуск 32 бита в 64 системе ...

На маке было, выпилили вот совсем недавно в бигсюре Не знал, что в линуксе поддержке не было. Спасибо за поправку

Alexandr ∨∧‾ Emelyanov
Только пара моментов, запуск 32 бита в 64 системе ...

Это с каких пор запуск 32-битных приложений не работает на 64-битном линуксе?

Danila Maslennikov
Это с каких пор запуск 32-битных приложений не раб...

Да, ошибся, по умолчанию не работает, забыл про multilib CC @csepanda

Похожие вопросы

Обсуждают сегодня

#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
У меня вопрос попроще, почти нубский: нужно заставить сайт эво 1.4.34 перевести с PHP 7.4 на 8.2. Понятное дело, что дополнения обновить-проверить, а с основной системой как ...
Вячеслав Кузьменко
5
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
Карта сайта