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

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

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

7 ответов

22 просмотра

рассматривай это всё как 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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта