Что ты такое язык программирования C++
Я бы мог написать более совершенный язык. Проще и понятнее чем предыдущие, но развитие существующего языка задача гораздо сложнее
Бьерн Страуструп
Язык как таковой интересен сам по себе, его история, трудности технических решений. Про это написано множество книг, статей, взято бесчисленное количество интервью. Попробуем посмотреть на все это с другой стороны какие цели привели к текущему состоянию дел.
На все решения в языке на самом деле влияло два человека сам Бьерн Страуструп, и его лучший друг Александр Степанов. Два человека это два разных мотива развивать язык, Страуструп как прикладной инженер всегда стремился к однозначности языковых конструкций и минимальных издержек на выполнения этих операций. Степанов математик. Как всякий математик мышление котрого заключаеться в лаконичности обработки числовых рядов и символической записи сложных функций.
В таком сложном симбиозе родилась идея создать максимально быстрый язык близкий к аппаратной части компьютера при этом иметь математическую лаконичность. Более 40 лет потребовалось для доведения идей 80-ых годов в конечный вид. Таким стал стандарт C++23, обработка коллекций, контракты функций и многое другое. По мере развития язык вбирал и отдавал идеи и концепции в другие языки, например Haskell умел все то что хотел Степанов, но не умел все то что хотел Страуструп. Теперь в каждом языке есть дженерики, которые в C++ были задуманы как базовая функция.
Тогда и Сейчас
Раньше, нужно было писать циклы чтобы обработать массив. Сейчас нужно вызвать конкретный алгоритм для обработки данных.
Раньше обращались к API операционной системы. Сейчас многое включено в стандартную библиотеку. Например: многопоточность, файловая система и т.д.
Раньше нужно следить за сложностью #include и писать вручную команды для линковщика. Сейчас есть возможность модулей import export
Раньше компилятор был не оптимален в своих решениях, приходилось писать, как на язык Си. Сейчас кроме развития самих компиляторов, язык позволяет управлять компиляцией прямо в коде
Сообщество по информатике и кибернетике на языке C++ в Discord
Помогите выбрать язык программирования
Здравствуйте, стоит задача изучение основ программирования и алгоритмизации. В дальнейшем переход на углубленный уровень для программирования микроконтроллеров. И вот что выбрать: си, с++, си шарп? Приложения нужны будут, но скорее для написания интерфейса для обработки данных с МК, написания сложных приложений не будет.
Посоветуйте, пожалуйста, язык и книгу, которую у нас можно купить.
Область применения: самообучение и обучение детей в дальнейшем в кружке.
Беседа С++ - господ
Беседа С++ - господ
Python VS C++
pov: Вот, что я думал про эти языки.
Все началось с него)
Delphi забыли
Сможете найти на картинке цифру среди букв?
Справились? Тогда попробуйте пройти нашу новую игру на внимательность. Приз — награда в профиль на Пикабу: https://pikabu.ru/link/-oD8sjtmAi
С++ и муки проникновения
Всем известно, что дехканину доступны три пути: вебкам, закладки и айти.
Давненько подумывал о том, чтобы сбросить задницу с дивана и попробовать последний вариант, но все как-то было недосуг.
Интереса ради, решил хотя бы составить хотя бы первичное приблизительное представление о таком всем известном монстре, как С++, и для начала рискнул перевести на него имеющийся мини-проект пазлов, реализованный в старом добром Дельфи.
Выбрал естественно эмбаркадеровскую IDE, благо она процентов на 99 идентична их же дельфийской. Соответственно оказалось достаточно просто скопировать форму со всей мешаниной контролов на ней, и вставить в новый проект, не прибегая к утомительному растаскиванию кнопок и других компонентов.
Неделя страданий и вуаля:
Имею два идентичных ехешника разного размера, скачать которые можно по ссылкам:
С++ вариант:
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, есть шанс получить округленное значение (в моем случае до нуля). Приходится сначала приводить целое к вещественному типу, а только потом уже делить его.
Отвратительный синтаксис. Как же осточертело вместо точек рисовать стрелочки. Тем более, что для некоторых объектов нужно все-таки использовать точки. Это невозможно понять, это нужно запомнить. Вообще в этом языке отсутствует логика. Если в Дельфи ты точно знаешь, как работать с методами, то тут возможны варианты - в некоторых случаях так, в других этак, в третьих вообще никак, ну или через дядю Васю из соседней деревни.
А еще повсюду указатели, указатели на указатели, указатели указателей, разыменование указателей с указанием разыменованного указателя, указание разыменования с указанием указателя на указатель и так до бесконечности...
Короче, С++, давай до свидания. Чувствую не выйдет из меня айтишника. Уже подумываю о покупке вебки.