С++ и муки проникновения

Всем известно, что дехканину доступны три пути: вебкам, закладки и айти.

Давненько подумывал о том, чтобы сбросить задницу с дивана и попробовать последний вариант, но все как-то было недосуг.

Интереса ради, решил хотя бы составить хотя бы первичное приблизительное представление о таком всем известном монстре, как С++, и для начала рискнул перевести на него имеющийся мини-проект пазлов, реализованный в старом добром Дельфи.

Выбрал естественно эмбаркадеровскую IDE, благо она процентов на 99 идентична их же дельфийской. Соответственно оказалось достаточно просто скопировать форму со всей мешаниной контролов на ней, и вставить в новый проект, не прибегая к утомительному растаскиванию кнопок и других компонентов.

Неделя страданий и вуаля:

С++ и муки проникновения Разработка, Программирование, C++, Delphi, Программист, IT, Длиннопост

Имею два идентичных ехешника разного размера, скачать которые можно по ссылкам:


С++ вариант:

https://mega.nz/file/ZEEzGLJQ#3htC3RMzhlbw0-xS9DZ0SwtyqPOhXV...

Delphi:

https://mega.nz/file/RVl1wKQI#frhBOl5nGsrT_dVGbPYM3e7dOg4rMp...


Каких-то особых отличий в эффективности и скорости и не заметил. По-моему вариант на Delphi более стабилен и работает чуть быстрее. С другой стороны С++ вариант весит меньше, но не критично.

Осталось еще попробовать зафигачить алгоритм на Яве, чтобы сделать браузерный вариант игры.


Сам перевод с одного языка не оказался прям уж сложным, но в паре мест, пришлось даже обратиться за помощью к старшим товарищам, которые сходу стали предлагать многокилометровые варианты решений.

Ну и собственно немного размышлений на тему.

Первое впечатление - C++ это неудобный и отвратительный язык, непонятно зачем существующий. Он не является достаточно низкоуровневым, и при этом неудобен для конечного пользователя.

При переводе с обычного Паскаля на си, возникло множество явных трудностей, начиная с невозможности напрямую обращаться ко многим используемым в библиотеках объектах, и заканчивая идиотским компилятором (ну это скорее вопросы к Эмбаркадеро), который запросто пропускает недостачу знака "=" в результате чего алгоритм начинает работать просто непредсказуемым образом.

Что выбесило:

Опять же, невозможность использовать многие нужные классы и методы напрямую, только через указатели, причем опытные сиплюсплюисты рекомендовали использовать умные указатели, из-за которых код начинает превращаться в какой-то маловразумительный гипертекст

Отсутствие динамических массивов - не, ну так-то по факту они есть, но объявляются опосредованно, по типу:

int a[lenght]; где lenght требуемая длина из переменной, но по факту это все то же самое статическое объявление в процедуре, поскольку не зная конкретно значение, объявить массив глобальным, доступным для других процедур не получится. Для Дельфи - это вообще не проблема. Можно объявлять когда угодно и где угодно.

Исключение векторы - но с ними опять же заметно усложняются самые простые вещи.

Массив, тем более многомерный, вообще является одним из основных элементов любого языка, поскольку на практике приходится их часто использовать в самых разных задачах.

Такое отношение к нему считаю недопустимым.

Далее циклы:

Тот же for по сути является все тем же while, для которого просто вынесена в заголовок операция изменения условия (счетчика цикла).

Цикл от нуля до десяти:

for (i==0;i<=10;++i) {}

это все то же самое

while (i<=10) с заранее заданным значением i, у которого операция со счетчиком осуществляется внутри тела.

Отвратительное сравнение ==. Я потратил почти целый день, не понимая почему программа вдруг стала вести себя непредсказуемым образом. Оказалось, пропустил одно "=" в условии.

Смешение типов. То, что является вполне себе реализуемым в других языках, здесь превращается в пляски с бубном.

Если разделить целое i на вещественное j, есть шанс получить округленное значение (в моем случае до нуля). Приходится сначала приводить целое к вещественному типу, а только потом уже делить его.

Отвратительный синтаксис. Как же осточертело вместо точек рисовать стрелочки. Тем более, что для некоторых объектов нужно все-таки использовать точки. Это невозможно понять, это нужно запомнить. Вообще в этом языке отсутствует логика. Если в Дельфи ты точно знаешь, как работать с методами, то тут возможны варианты - в некоторых случаях так, в других этак, в третьих вообще никак, ну или через дядю Васю из соседней деревни.

А еще повсюду указатели, указатели на указатели, указатели указателей, разыменование указателей с указанием разыменованного указателя, указание разыменования с указанием указателя на указатель и так до бесконечности...

Короче, С++, давай до свидания. Чувствую не выйдет из меня айтишника. Уже подумываю о покупке вебки.

Автор поста оценил этот комментарий

Уже не в первый раз вижу на Пикабу замечания, что программа на Дельфи/Паскале работает быстрее, чем на с++. Откуда это берется? P.S. наверняка в любой более или менее продвинутой ИДЕ есть проверка на равенство в условии и функцинал на рассмотрение варнингов, как ошибок. Насчет округления вообще фигня - есть целочисленное деление, есть деление чисел с плавающей точкой. Нужны дроби? используй числа с плавающей точкой.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

а если свойство компонента целочисленное, что тогда?

правильно, придется озаботиться приведением его к вещественному виду, иначе при делении на вещественное число получишь хрен с маслом, а не вот эти ненужные, по мнению компилятора, числа после запятой

Автор поста оценил этот комментарий

Уже не в первый раз вижу на Пикабу замечания, что программа на Дельфи/Паскале работает быстрее, чем на с++. Откуда это берется? P.S. наверняка в любой более или менее продвинутой ИДЕ есть проверка на равенство в условии и функцинал на рассмотрение варнингов, как ошибок. Насчет округления вообще фигня - есть целочисленное деление, есть деление чисел с плавающей точкой. Нужны дроби? используй числа с плавающей точкой.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

а еще, как бы это смешно не звучало, в с++ отвратительное управление памятью, прога на дельфи, при своевременной очистке памяти работает как часы, а вот на с++, даже если специально заморочиться, ой не факт, собственно, уже столкнулся с проблемой нехватки системyых ресурсов на простом приложении, работающем с объектами TBitmap

показать ответы
1
Автор поста оценил этот комментарий

Да ничего, изврат всякий. Всегда модно C++/Java, в частностях куча типа котлина итд.

раскрыть ветку (1)
Автор поста оценил этот комментарий

а питон? щас изо всех щелей питон-то, питон-се

боюсь даже свисток на чайнике скоро засвистит "питонссссссс"

показать ответы
Автор поста оценил этот комментарий

Дабы не гадать, все современные компиляторы умеют бросать ворнинг на присваивание в условиях (https://docwiki.embarcadero.com/RADStudio/Sydney/en/W8060_Possibly_incorrect_assignment_(C++) ). А ворнинги можно сделать ошибками компиляции - достаточно флаги компилятору выставить.

раскрыть ветку (1)
Автор поста оценил этот комментарий

просто  в булевых операциях истина это 1-255, а ложь 0, вот и возникает казус

не проще было убрать эту устаревшую муть и оставить нормальное присваивание/сравнение?

показать ответы
1
Автор поста оценил этот комментарий
Отвратительное сравнение ==. Я потратил почти целый день, не понимая почему программа вдруг стала вести себя непредсказуемым образом. Оказалось, пропустил одно "=" в условии.

Если планируете писать на плюсах вот вам мой совет:

При возможности пишите не так:


if (blabla == func())

а вот так:


if (func() == blabla)

тогда потеря "=" будет заметна при компиляции

раскрыть ветку (1)
Автор поста оценил этот комментарий

дельный совет, приму к сведению

Автор поста оценил этот комментарий

Ну, тут у тебя достаточно пофиг что как. У тебя же VCL основное, в BCB новом ECB он один, и одинаков с Delphi их же, в .NET Forms другой, в VS Windows Forms... И тут на это упор, а язык - да пофиг, не так много кода.

Все типа крутые программисты вечно плюются от делфи, а по факту для RAD , особенно новый, он очень крут. Но ограничений с либами куча, для БД итд очень плохи.

Хочешь к . итд более удобному - смотри на JAVA , но там GUI VCL очень недоразвит в принципе, зато IDE куча, даже eclipse выше крыши.

раскрыть ветку (1)
Автор поста оценил этот комментарий

а что сейчас вообще востребовано, чтоб помучиться полгодика и был бы шанс устроиться на работу?

показать ответы