и приложение не запустится» (если говорить про компилируемые языки программирования). Ведь ОС получается все же может быть частью архитектуры, и если она сменится, то приложение может не запуститься. Так что они имеют в виду под архитектурой?
рассматривай это всё как 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, но насколько мне известно реже.
И еще вопрос. Я правильно понимаю, что даже если нет ОС-specific штук (пусть программа просто складывает два числа), то все равно нужно скомпилировать код отдельно для каждой комбинации архитектура процессора/ОС? Потому что в разных ОС разные API, а в разных архитектурах процессоров разные ABI? То есть для Windows нужно скомпилировать программу (которая складывает два числа) для x32 (хотя с такой разрядностью компов почти не осталось) и x64, потому что там все процессоры CISC и отличаются только разрядностью, а для macOS нужно компилировать для Intel (CISC) и для M1 (RISC)?
Да, но есть пара моментов: x32 программа, которая не использует 64х битную адресацию будет работать и нам 32х битных процах и на современных. Це обратная совместимость у х86. На чисто х64 скорее всего не взлетит, но тут таких машин уже и нет давно. И на маках современных не взлетит Да, нужна компиляция под разные оси. Для мака можно и собрать под интел, а потом через розетку запустить на м1, но я тут не скажу за корректность результатов.
Только пара моментов, запуск 32 бита в 64 системе работает в винде, но на линуксе нет, про мак не в курсе, думаю что тоже нет Ну и да, если бы был ia64, то вариантов не было бы
На маке было, выпилили вот совсем недавно в бигсюре Не знал, что в линуксе поддержке не было. Спасибо за поправку
Это с каких пор запуск 32-битных приложений не работает на 64-битном линуксе?
Да, ошибся, по умолчанию не работает, забыл про multilib CC @csepanda
Обсуждают сегодня