Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
What? A program that turns human-readable scribbles into real machine code?
Какие? Программа, которая превращает читабельные каракули в настоящий машинный код?
конечно, я беру сырой текст из Гугл переводчика и редактирую егои вам за это деньги платят?
Новые технологии будут, но в другом направлении. Не упрощения а стандартизации программирования.
Программисты никуда не денутся, а c/c++ вымрет став лишь одним из вариантов синтаксиса поверх единого для всех языков ядра. Тонкой оптимизацией под конкретное железо займётся компилятор, а интрисинки вымрут окончательно.
AI даже может по завершению работы написать мне напыщенную речь.rant здесь по смыслу ближе к «нытью» чем к «напыщенной речи» или «тираде»
это _aligned_malloc, который имеет совершенно другую семантику (несовместим с free/realloc)
А это по-вашему что?нестандартная функция сишного рантайма мс, не удовлетворяющая требованиям к aligned_malloc?
Ничто не мешает для POSIX-ОС объявить aligned_realloc и aligned_free как синонимы для realloc, и free, и использовать именно эти синонимы при работе с выровненными данными, чтобы получался кроссплатформенный код.мешает то, что _aligned_free не может освобождать память, выделенную через malloc.
мешает то, что _aligned_free не может освобождать память, выделенную через malloc.Это не мешает писать кроссплатформенный код. Выделил память через aligned_malloc/_aligned_malloc? Значит освобождай через algined_free (который под Windows будет синонимом _aligned_free, а под POSIX будет просто free).
Ну вот есть стандарт, а есть реальный мирв этом конкретном случае другим ОС ничто не помешало соответстовать стандарту
В большой программе, если её писали сразу строго под Linux, даже при портировании на MacOS или FreeBSD будет масса проблемесли я написал программу «строго под linux», а потом её пришлось переносить и я огреб проблем, то я сам виноват. Проблема-то в том, что если я написал программу, соответствующую стандарту языка с++ и posix, она будет работать на всех платформах, кроме windows и всяких микрух.
А если заранее задаваться вопросами кроссплатформенности, то и проблема с выделением и освобождением выровненной памяти на всех ОС решается достаточно просто.в том, что на винде не работает aligned_malloc, виноват не программист, который этот метод заиспользовал. А вы сейчас victim blaming'ом занимаетесь.
в этом конкретном случае другим ОС ничто не помешало соответстовать стандартуЭти другие ОС не заботятся так о совместимости. Linux/FreeBSD просто целиком со всем ПО пересобирают с новым рантаймом C. MacOS раз в 5 лет дропает поддержку всего старого ПО.
А то что стандарт написали так, что где-то без серьёзных недостатков его не реализовать в полной мере, то это явно недосмотр писателей стандартакак вообще проектировать стандарты для ОС компании, которая намеренно отклоняется от стандартов чтобы сохранить монополию на рынке ОС за счет обеспечения непереносимости кода?
нет, о совместимости как раз таки другие оси заботятся большеИменно поэтому в этих ОС старый софт не работает. Логично.
А еще там не принято тянуть все недостающие библиотеки в установщике приложения.Именно поэтому и придумали snap и flatpak. Логично.
как вообще проектировать стандарты для ОС компании, которая намеренно отклоняется от стандартов чтобы сохранить монополию на рынке ОС за счет обеспечения непереносимости кода?Как вам там в 90-х?
Именно поэтому в этих ОС старый софт не работает. Логично.на винде знаете тоже не любой давности софт работает. И если на линуксе бородатый софт хоть с приседаниями но получится собрать, на винде многие так и сидят на XP потому что на более новых осях уже не запускается
Именно поэтому и придумали snap и flatpak. Логично.однако их использование не приветствуется.
Как вам там в 90-х?так ничего же не поменялось. Вместо того чтобы двигаться в направлении переносимости кода между windows и linux MS встроили WSL2 в винду, чтобы в ней можно было выполнять линуксовый код, но не наоборот.
на винде знаете тоже не любой давности софт работаетКорректно написанный софт для Windows NT 3.5 или 95 и новее, который не опирается сильно на какие-то недокументированные фичи — отлично работает. У меня огромное количество древнего ПО на компьютере (считайте хобби), в редких случаях были проблемы с запуском на современных версиях ОС, и все решились танцами, чаще всего тривиальными. Самое большое потрясение было при переходе на 64-разрядную версию системы: там нет поддержки 16-разрядных приложений. Да, у меня есть маленькая кучка и 16-разрядных приложений эпохи до Windows 95. Для них держу виртуалку.
однако их использование не приветствуется.Может быть в вашем мире и так, а в жизни я часто вижу такую картину: we strongly recommend that most users install Certbot through the snap.
Вместо того чтобы двигаться в направлении переносимости кода между windows и linux MS встроили WSL2 в винду, чтобы в ней можно было выполнять линуксовый код, но не наоборот.Вот именно, что они добавили ряд вещей в Windows, чтобы упростить написание кроссплатформенного кода под Windows и под Linux. Поддержку UTF-8 в консоль завезли (вместо UTF-16, с которым крайне сложно в Linux), поддержку обычных esc-последовательностей, поддержку unix-сокетов, и т.д. Компилятор свой родной привели в гораздо более соответствующий стандартам вид, вместе с Visual Studio предлагают поставить и Clang для кроссплатформенной разработки. Даже .NET нынче самой Microsoft официально поддерживается и развивается под все популярные платформы.
Корректно написанный софт для Windows NT 3.5 или 95 и новее, который не опирается сильно на какие-то недокументированные фичи — отлично работаетнюанс в том, что в большинстве проектов где-нибудь что-нибудь да написано криво, где-нибудь спрятано использование недокументированных фич, где-нибудь завязка на железо… Это проявляется и в линуксе конечно же.
Вот именно, что они добавили ряд вещей в Windows, чтобы упростить написание кроссплатформенного кода под Windows и под Linux.еще раз. Они сделали возможным запуск linux приложений под виндой, но не наоборот. Вы не видите в этом монопольной практики или не хотите видеть?
Поддержку UTF-8 в консоль завезли (вместо UTF-16, с которым крайне сложно в Linux)это не «в linux крайне сложно с UTF-16», а «какого-то лешего в винде вместо адекватного UTF-8 склеенный соплями веер 16-битных кодировок, которые для вызовов ядра конвертируются в UTF-32».
Компилятор свой родной привели в гораздо более соответствующий стандартам вид, вместе с Visual Studio предлагают поставить и Clang для кроссплатформенной разработки.будь я с++-разработчиком в MS я бы тоже взвыл окажись порт стороннего компилятора под винду лучше нативного по всем фронтам.
нюанс в том, что в большинстве проектов где-нибудь что-нибудь да написано криво, где-нибудь спрятано использование недокументированных фичНо почему я не вижу этого в «большинстве проектов»? Большинство — это хотя бы больше 50%. В моей практике 90% старого ПО работает отлично без танцев, 99% с минимальными танцами, и остальное решается скальпелем.
Они сделали возможным запуск linux приложений под виндой, но не наоборот.Windows как бы ОС этой компании, они её и развивают. Логично же. Линус Торвальдс, когда развивает Linux, не обязан попутно развивать FreeBSD, MacOS, или Windows. Не Canonical добавила поддержку Linux в Windows, а сама Microsoft. Это же логично, что каждый развивает свой продукт. Странно ожидать чего-то другого.
Вы не видите в этом монопольной практики или не хотите видеть?Вы совсем недавно придиралсь к Microsoft что они не позволяют писать кроссплатформенный код, создавая всякие нестандартные расширения. Но когда выяснилось, что они сильно облегчили написание кроссплатформенного кода, вы тут же внезапно повысили требования до того, что хотите, чтобы Microsoft портировала Windows на Linux. Вы вообще в своём уме? Разработчики Linux/FreeBSD/MacOS не могут договориться между собой, чтобы упростить написание совместимого кода сразу под все эти ОС, которые во многом похожи. А тут совершенно непохожая Windows. Это были бы сотни миллионов долларов, выпущенные на ветер совершенно с непонятной целью, так как у такого решения очевидно совместимость будет на порядок хуже, чем у родной ОС.
это не «в linux крайне сложно с UTF-16», а «какого-то лешего в винде вместо адекватного UTF-8 склеенный соплями веер 16-битных кодировок, которые для вызовов ядра конвертируются в UTF-32».Вы явно не в теме. Бесплатный экскурс в историю. Ядро Windows NT использует UTF-16 с самого начала и до сих пор. Когда проектировалась и разрабатывалась Windows NT (начиная с 1989), UTF-8 ещё не существовало в природе (он появился только в 1992). На тот момент UTF-16 было самым прогрессивным видением будущего, казалось что в будущем все на него перейдут, и достаточно долго это отношение к нему сохранялось, даже после появления UTF-8. Тогда он попал в Java, JavaScript, C# (и чуть не попал в PHP, планировалось в невышедшем PHP 6). Авторы UTF-8 ставили целью совместимость с ASCII как раз для того, чтобы было проще старый код адаптировать на новый лад. Но к тому времени Microsoft уже успела пойти по более сложному пути с введением UTF-16, и добавлением слоя совместимости со старыми ANSI-приложениями. Годы спустя многим стало понятно, что UTF-16 был ошибкой, и лучше было следовать по пути совместимости с ASCII, то есть UTF-8, но уже слишком поздно это менять.
Но когда выяснилось, что они сильно облегчили написание кроссплатформенного кода, вы тут же внезапно повысили требования до того, что хотите, чтобы Microsoft портировала Windows на Linuxнет, я хочу, чтобы windows поддерживала posix, имела адекватную system-wide UTF-8 и всё в таком духе. Чтобы совместимость была на уровне сорцов, а не в виде костыля, который позволит MS утилизировать наработки других ОС
Годы спустя стало многим понятно, что UTF-16 был ошибкой, и лучше было следовать по пути совместимости с ASCII, то есть UTF-8, но уже слишком поздно это менять.чет эплу годы не мешают что-то там менять
имела адекватную system-wide UTF-8Ну в Windows 10 приложения уже несколько лет могут использовать UTF-8 в системных вызовах. Эта возможность конечно же должна явно активироваться манифестом приложения, так как иначе сломались бы все существующие ANSI-приложения. Но это упрощает написание новых кроссплатформенных приложений, так как в принципе возможно.
я хочу, чтобы windows поддерживала posixСовместимость на уровне сорсов у POSIX-совместимых ОС так себе. Я вам приводил пример выше. Таких различий полно. А Windows совсем другая ОС, её API уровня пользователя проектировался для совместимости с исходным кодом под Win16, а не POSIX. Подсистема POSIX там тоже была, но не прижилась.
чет эплу годы не мешают что-то там менятьВозьмём Age of Empires II под мак (2001 года выпуска). Есть ли шанс запустить? Давайте подумаем. Сколько раз там сломали совместимость? Даже если не считать поломки совместимости на уровне API, можно ещё вспомнить переход с PowerPC на Intel x86-32, затем на Intel x86-64, а теперь вот на ARM. PowerPC не поддерживается уже забыли сколько лет, от поддержки Intel x86-32 отказались относительно недавно, через пару лет откажутся и от Intel x86-64. На фоне этого то что совместимость API в процессе часто ломалась как-то не очень уже и заметно. У Age of Empires II под мак просто нет шансов.
Подсистема POSIX там тоже была, но не прижилась.не было её там, они формально реализовали пару требований posix 1.0 для получения какого-то крупного госзаказа, а дальше дело не пошло.
Хотя кажется, что они пробуют найти путь, как бы снять с себя эту непростую ношу. Windows RT провалилась, на очереди Windows 10X.еще посмотрим как у ARM получится конкурировать с x86 и как у microsoft получится с адаптацией него. Будет грустно если легаси останется последним конкурентным преимуществом винды
Если же требуется выжать по максимуму, то да, вступаем на территорию конкретного железавы игнорируете пласт задач, для которых спускаться до ассемблера обычно не имеет смысла, но производительность тем не менее важна. Задачи обработки текста, например, вполне себе реализуемы в рамках переносимого с++.
Что случится раньше: умрет С++ или вымрут С++ программисты?