Да, но учтите, что рост быстродействия эту непредсказуемость делает несмертельной для большего и большего числа применений.
Самый тупой вариант — для GUI если средняя задержка отклика на событие занимает 10мс, а изредка есть пик до 200мс, то вы этот пик не заметите (тогда как на компьютере, работающем в 10 раз медленнее числа будут 100мс и 2 секунды — и пики очевидны).
В комментариях есть ссылка на gui работающим на процессоре с десятком mhz.
Если гуй тормозит на современном ПК, я не знаю, тогда на, что там такты ЦПУ уходят.
Так со всякой древнотой проблема во всяких концепциях типа far-pointer для понимания которой я слишком молод.
Как-то колдовал кросс-платформу на эмбеде и кучу раз пнулся о 16 битные инты которые вырастают тут и там.
Far и near концепция не сложная. Так как LDL собирается из одной репы, завёл файлик config.hpp в нём не только макросы переопределяющме тот или иной функционал для совместимости кода для разных компиляторов, но и переопределение типов из stdint.h
В итоге всё собирается в том числе и под Ms-dos.
Я такой концепт выбрал для лучшей портируемрсти кода. Конечно это сильно ограничивает меня как разработчика, нет шаблонов и всяких плюшек. Но работает.
Так что, мне кажется, гораздо проще сделать с нуля язык без UB, хотя бы относящегося к памяти, чем пытаться определить вообще всё поведение в C++. Rust, Carbon, Nim и прочие товарищи чем-то таким и занимаются.
Согласен.
Замечу, что новый язык долго взлетает, да он решает серьезные роблемы, но инфраструктурой и поддержкой или очень долго обрастает Rust или просто забывается как пример D. А софт нужен именно сейчас, потому и берут как пример С++.
Но шуруповерт удобнее отвертки для кучи саморезов, хотя и отвертка будет с нами еще долго)Думаю, что аналогия ясна)
Я бы рассматривал язык как ящик инструментов. Ну и любая аналогия ложна.
С++ и Rust это универсальные языки, было бы расточительно, создавать ПО на разных яызках для каждой платформы. К примеру на Windows C++, на Linux Rust, Mac Cobject, IOS Kotlin, Android Java
Это прям, распыление ресурсов. Так же и для других общих задач. Удобно когда это один язык + фреймворки и библиотеки.
Да не, просто забыл. Да я с этим столкнулся. Просто использую I, j, k.
Всё ради совместимости со старыми компиляторами.
Я сначала разрабатывал под windows, потом под Linux с максимальным уровнем предупреждений + pedantic. Исправлял код. Потом уже портировали под Ms-dos и опять правил код.
Я постоянно собираю под разные компиляторы и системы, что бы выявить проблемы. Пока получается. И ещё на всех системах запускаю обязательно тесты. Они должны полностью проходить под портируемую ОС.
Вы полностью правы. И ваш доклад я смотрел несколько раз. Все приведённые доводы из практики. Что сказать, имеем некоторые проблемы:)
Я и правда при профессиональной деятельности на С++, имел дело с разработкой под Linux и другим проектом под Windows. И для каждого проекта использовали только один компилятор поэтому и не сталкивался с описанными вами ошибками.
Правильно понимаю, что бы вылечить С++ от UB, нужно править ядро языка, что повлечёт нарушение обратной совместимости, в том числе и с С?
И вот, у меня большой проект на Python и JavaScript :) За эти языки (платформы), теперь, в смысле, сейчас, на данный момент, любого порву! :P
Я фуллстек разработчик, со всеми вытекающими. И тоже приходится знать кучу языков и технологий, фреймворков и остального вебовского. И знаете, я хотел бы всё это упразднить в какой то единый язык. Что бы не приходилось на каждой новой или другой системе, платформе разрабатывать на нескольких других языках.
Графику рисует видеокарта, просто юзаю API opengl, под капотом абстрактного 2D API поэтому move семантика тут ни как не даст перформанса. Но да, остальные участки можно ускорить.
LDL работает на Ms dos 16 бит и памяти требует примерно 45 кб библиотека + 64 кб буфер ну и ещё 20 кб на внутренние буферы.
Уже и не знаю, за счёт чего повысить производительность. Улучшить софт рендер только.
Я читал о таком способе. Пишут на современном С++, после транслируют в ассемблер и уже этот ассемблер транслируют поддерживаемой версией, tasm или masm. Сразу скажу, я сам не экспериментировал.
Совместимость с С это убер фича. Думаю, что никогда не разойдутся, возможно добавят в стандарт некоторый режим, который бы убирал совместимость, упрощал язык С++. Что то подобное.
В комментариях есть ссылка на gui работающим на процессоре с десятком mhz.
Если гуй тормозит на современном ПК, я не знаю, тогда на, что там такты ЦПУ уходят.
Будем считать, что С++ это unsafe {} :)
Да, да слышали. И Пифагор ругался в своё время на молодежь. Им бы на свирелях играть и спать под виноградной лозой, ленивые они жопы:)
В принципе С++ 11 доступен и для Ms-dos, если юзать openWatcom.
Far и near концепция не сложная. Так как LDL собирается из одной репы, завёл файлик config.hpp в нём не только макросы переопределяющме тот или иной функционал для совместимости кода для разных компиляторов, но и переопределение типов из stdint.h
В итоге всё собирается в том числе и под Ms-dos.
Я такой концепт выбрал для лучшей портируемрсти кода. Конечно это сильно ограничивает меня как разработчика, нет шаблонов и всяких плюшек. Но работает.
Спасибо за содержательный ответ.
Согласен.
Замечу, что новый язык долго взлетает, да он решает серьезные роблемы, но инфраструктурой и поддержкой или очень долго обрастает Rust или просто забывается как пример D. А софт нужен именно сейчас, потому и берут как пример С++.
Я бы рассматривал язык как ящик инструментов. Ну и любая аналогия ложна.
С++ и Rust это универсальные языки, было бы расточительно, создавать ПО на разных яызках для каждой платформы. К примеру на Windows C++, на Linux Rust, Mac Cobject, IOS Kotlin, Android Java
Это прям, распыление ресурсов. Так же и для других общих задач. Удобно когда это один язык + фреймворки и библиотеки.
Я беру всё компиляторы с данного сайта.
Я взял именно Borland C++ Builder 6.0, о чем и написал.
Ещё там есть просто Borland C++, я взял версию 2.0 под Ms-dos.
Я не жду пока мой код станет легаси, я сразу пишу легаси код:)
Да не, просто забыл. Да я с этим столкнулся. Просто использую I, j, k.
Всё ради совместимости со старыми компиляторами.
Я сначала разрабатывал под windows, потом под Linux с максимальным уровнем предупреждений + pedantic. Исправлял код. Потом уже портировали под Ms-dos и опять правил код.
Я постоянно собираю под разные компиляторы и системы, что бы выявить проблемы. Пока получается. И ещё на всех системах запускаю обязательно тесты. Они должны полностью проходить под портируемую ОС.
Вы полностью правы. И ваш доклад я смотрел несколько раз. Все приведённые доводы из практики. Что сказать, имеем некоторые проблемы:)
Я и правда при профессиональной деятельности на С++, имел дело с разработкой под Linux и другим проектом под Windows. И для каждого проекта использовали только один компилятор поэтому и не сталкивался с описанными вами ошибками.
Правильно понимаю, что бы вылечить С++ от UB, нужно править ядро языка, что повлечёт нарушение обратной совместимости, в том числе и с С?
Всё верно. Как и данный случай. Всё ради поддержки Borland C++ 2.0 Как бы это не выглядело безумно в 2024:)
Это уже я не уследил. Надо будет порефакторить проект на эту тему.
Стараюсь не использовать макросы. Использую когда вообще невозможно без них обойтись.
Не читайте мою статью на которую я ссылаюсь:)
Я понимаю о чëм вы говорите.
Я фуллстек разработчик, со всеми вытекающими. И тоже приходится знать кучу языков и технологий, фреймворков и остального вебовского. И знаете, я хотел бы всё это упразднить в какой то единый язык. Что бы не приходилось на каждой новой или другой системе, платформе разрабатывать на нескольких других языках.
У вас питон и js. У меня c# и js.
Графику рисует видеокарта, просто юзаю API opengl, под капотом абстрактного 2D API поэтому move семантика тут ни как не даст перформанса. Но да, остальные участки можно ускорить.
LDL работает на Ms dos 16 бит и памяти требует примерно 45 кб библиотека + 64 кб буфер ну и ещё 20 кб на внутренние буферы.
Уже и не знаю, за счёт чего повысить производительность. Улучшить софт рендер только.
Открою и вам секрет. Есть такое понятие как аналогия. Как вы живете без знания этого?
Возможно реально, после каждого абзаца, открывать скобочки и писать, с каим смысловым посылом я это написал. Вроде [сарказм], [аналогия] и т. д
Я читал о таком способе. Пишут на современном С++, после транслируют в ассемблер и уже этот ассемблер транслируют поддерживаемой версией, tasm или masm. Сразу скажу, я сам не экспериментировал.
Что вы пишите на расте? Это часть работы или хобби?
Совместимость с С это убер фича. Думаю, что никогда не разойдутся, возможно добавят в стандарт некоторый режим, который бы убирал совместимость, упрощал язык С++. Что то подобное.
Расскажите плиз, как юзать современный С++ под древние системы? Кросс компиляция?