LINUX.ORG.RU

Почему все же с++ такой сложный язык?

 ,


3

4

С++ – сложный язык. Хоть это для каждого по разному и тд, но он очевидно сложнее большинства (всех?) высокоуровневых языков программирования. С другой стороны он очень быстрый и дает тотальный контроль.

Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++ или же так просто исторически сложилось (ака историческая несправедливость)?

Ответ на: комментарий от cloun1902

пока ты не проговоришь чётко и однозначно свои определения вышеуказанного – так и будешь натягивать сову на глобус

anonymous
()
Ответ на: комментарий от pavlick

Так а зачем явный unsafe? Кто-то ведь ревьюить должен и обращать внимание на опасные места

Вот именно поэтому.

DarkEld3r ★★★★★
()
Ответ на: комментарий от eao197

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

Обычно всё-таки говорят о своём коде. Большинство полагается на библиотечный код без какой-либо верификации и раст или С++ тут ничем особо не отличаются. Ну разве что тем, что в расте ты всё-таки проще можешь посмотреть на количество использований unsafe в чужом коде. Другое дело, что сама по себе эта метрика мало о чём говорит.

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Ну и, кстати, это придумали не в Go и по моему сейчас так везде (в относительно свежий языках): Scala, Swift, Kotlin и т.д.

Это из ML семейства (SML, OCaml) в раст из OCaml и передрали скорее всего.

anonymous
()
Ответ на: комментарий от anonymous

сам билдер?

Это образец безответственного и глючного софта. Они clang 5 кое-как натянули на VCL, но адаптировать STL у них уже не хватило сил, там глюки на каждый чих, то копирование не работает то перемещение.

anonymous
()
Ответ на: комментарий от horado

Плохая новость: С++ несложный, только если это С с классами.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Про твоё вчерашнее «сложный ответственный софт» на билдере и qt мы больше ничего не услышим, я всё верно понял?

cloun1902
()
Ответ на: комментарий от pavlick

Ты компилер с библиотекой не путай. В Питоне все очень просто на самом деле. И библиотека на все случаи жизни. В С++ - наоборот.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Ясно. Последний вопрос: зачем ты тогда начинал говорить про какой-то софт, если всё равно ничего показать не смог?

Алсо, забавный на фоне возгласов про «сложный и ответственный» вопрос уровня студента/новичка: Адаптация кода для smart pointers

cloun1902
()
Ответ на: комментарий от cloun1902

Алсо, забавный на фоне возгласов про «сложный и ответственный» вопрос уровня студента/новичка: Адаптация кода для smart pointers

Может, раньше оно было не нужно, а теперь нужно?

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Может, раньше оно было не нужно

Раньше – это в 1989-ом или в 1995-ом?

eao197 ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

ОКР - обсессионно-компульсивное расстройство психики.

В первый раз сталкиваюсь с такой аббревиатурой в жизни. Да и о существовании «обсессионно-компульсивного расстройства» слышал, но не в курсе что это такое.

Тебе намекают, что у него с головой не в порядке.

Намек отказался слишком уж тонким.

eao197 ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

стандарт не обязывает компилятор при обнаружении UB мстить программисту и генерировать лютую дичь. UB означает что компилятор что поведение может отклониться от ожидаемого. но нынешние версии гцц просто генерируют глюкокод.

salozar
()
Ответ на: комментарий от LongLiveUbuntu

Не должна быть стд библиотека жирной. Нельзя пихать туда любую хотелку, это не полигон для экспериментов, доставляй со стороны. Просто доверие и авторитет ее ты умножишь на 0. Недавно 2 питон сожгли, разводи костер под третий )

pavlick ★★
()
Ответ на: комментарий от no-such-file

C++11 constexpr

Дык уже 10 лет есть constexpr, чтобы этот прикол с лурка не использовать

anonymous
()
Ответ на: комментарий от pavlick

Не должна быть стд библиотека жирной.

Она может быть любой. Тот же C - про закат Солнца вручную, часто используется в эмбеддед-устройствах, где жирная библиотека только повредит. Python - язык для прикладного программирования, где чем больше вещей в библиотеке, тем лучше потребителю.

Но вот, что интересно: C++ позиционируется как язык для всего и для всех, а оказывается, что стоит тебе сделать шаг в сторону и у тебя нет стандартной библиотеки и надо либо самому городить костыли, либо тащить сторонние библиотеки, типа Qt. Меня тов. cloun1902 спрашивал для чего тащить, например: да хоть для той же вменяемой работы с файлами и потоками ввода-вывода, представь себе. И это далеко не весь перечень.

Программировать на плюсах GUI? Забудь. Они не для этого. Приходится опять же тащить Qt, там хоть как-то сделали удобными такие вещи.

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Тот же C - про закат Солнца вручную, часто используется в эмбеддед-устройствах, где жирная библиотека только повредит.

В C (и C++) есть понятия hosted и freestanding implementation. В эмбеддед может использоваться вторая, где от библиотеки мало что остаётся. В hosted-же реализацию можно засунуть библиотеку любой толщины.

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

ОКР - обсессионно-компульсивное расстройство психики. Тебе намекают, что у него с головой не в порядке.

Осталось выяснить, кто намекает? Очередной «психиатор».

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

На практике имеем то, что имеем.

На практике даже имеющаяся библиотека не всегда и не всеми может использоваться. И это вряд ли изменится в ближайшее время (разве что придумают как сделать гораздо более дешевые RTTI и exception handling, и эти обновления станут де-факто стандартными). Так что какой смысл раздувать стандартную библиотеку C++ до размеров Java SE SDK? Не говоря уже о том, что тупо некому оплачивать сей банкет.

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

d34df00d, не бомби.

«Психиатор», не бомби.

ОКР это не зашквар.

Шизофрения с манией величия «я - Наполеон психиатор» - это не зашквар.

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

от же C - про закат Солнца вручную, часто используется в эмбеддед-устройствах, где жирная библиотека только повредит.

Зачем сразу жирная? Много функций - это не жирная, тебя никто не заставляет в бинарник вжигать то что не используешь.

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

Программировать на плюсах GUI? Забудь. Они не для этого. Приходится опять же тащить Qt, там хоть как-то сделали удобными такие вещи.

Кстати поддерживаю. Хоть qt и хорош, на плюсах писать гуйню - все равно мазохизм. Гуйня должна по-уму скриптоваться в рантайме на том языке на котором она написана. Но, к сожалению, проще считать пользователя идиотом, а себя - гениальным дизайнером. В итоге имеем, что каждая следующая сложная программа для профессионалов имеет дубовый интерфейс из 90х, где зачастую и бинды свои не запилить, и нихрена с этим не сделаешь (в проприетарных вариантах энивей).

anonymous
()
Ответ на: комментарий от LongLiveUbuntu

Устал спорить. Тем более если вот так:

да хоть для той же вменяемой работы с файлами и потоками ввода-вывода, представь себе.

А что плохого тянуть Qt? GTK? FLTK? SDL? NCurses? Boost? Этому всему не место в стд, с раздутием рантайма. Да, это могут себе позволить всякие язычки для производства низкосортного ширпотреба. И прикинь, у меня лишь один телеграм тянет Qt, нет джава рантайма и прочего дот нета, да в некотороых местах питон крутится.

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

Цветастый гуй - это не для профессионалов, им как раз приятней дубовый интерфейс. Это просто имитация прогресса в стиле - "поменял обои, сменил шильдик виндовс Х на виндовс У), хомячков нужно постоянно удивлять. На современную проприетарщину без слез не взглянуть. Это как с труселями, либо кружевное и впивается куда не следует, либо добротное хлопковое, но лишний раз лучше на людях не показывать ). Цпп не разменивается на всю эту маркетинговую шелуху, а занимется действительно важными вещами.

pavlick ★★
()
Ответ на: комментарий от pavlick

Лично по себе - буду много больше рад увидеть ncurses интерфейс вместо обычного оконного. Была у меня как-то софтина для моделирования элек-их схем, все такое розовое, пушистое, красивенькое. Фу, мерзко, снес и поставил деревянную EWB. Это давно было, сложно заподозрить в какой-то предвзятости.

pavlick ★★
()
Ответ на: комментарий от pavlick

все такое розовое, пушистое, красивенькое. Фу, мерзко, снес и поставил деревянную EWB. Это давно было, сложно заподозрить в какой-то предвзятости.

Пацаны, я вот че понял. Зумеры - это такие новые гомосеки. И каждый будет громко отрекаться что он-то - точно нет. И не дай б-г заподозрят. Только суровая сосноль, только хардкор!!!11

anonymous
()

Я C++ не использую, но ответ мне кажется очевидным:

C++ сочетает свойства как высокоуровневых, так и низкоуровневых языков
Семантика: мультипарадигмальный

Т.е. стремится описать всю вселенную + очень длинный стандарт, сильно печется о легаси.

С другой стороны он очень быстрый

Может, все-таки это заслуга компилятора?

anonymizer
()
Ответ на: комментарий от anonymizer

Это заслуга людей, которые написали компилятор. Ну и как нам продемонстрировал местный светила графического программирования @metaprog (которого мы все поздравляем с годовщиной его проекта),даже С код из под любого из компиляторов, может начисто сливать в скорости исполнения python коду, если не знать как программировать.

anonymous
()
Ответ на: комментарий от DarkEld3r

Разве у какого-нибудь C# не сопоставимый по размеру стандарт?

C# 5.0 - стандарт ISO от 2018 года: 534 страницы

C++ 17 - стандарт ISO: 1448 страниц. В три раза больше .

Oberon-2 - 57 страниц

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Вот только в плюсовом стандарте описана и стандартная библиотека. А у C#, насколько я знаю, не так. Если её включить, то как бы не больше будет.

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

C# стандарт 2006-го года: «Annex A. Grammar» начинается на 443-й странице, весь стандарт это только описание языка без библиотек.
C++17: «Library introduction» начинается на 445-й странице. До этого описания языка, в т.ч. препроцессора.

Т.е. стандарт C# 2006-го года такой же толщины, как вышедший на 10 лет пожже стандарт C++.

anonymous
()
Ответ на: комментарий от anonymous

Фронтендщики должны быть самыми высокооплачиваемыми?

anonymous
()
Ответ на: комментарий от vitalif

Rust сложнее мне кажетцо

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

anonymous
()

Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++

нет, посмотри на nim

anonymous
()
Ответ на: комментарий от anonymous

нет, посмотри на nim

Нет как только появляется метапрограммирование то язык уже становится непростым.

import macros

macro enumerate(x: ForLoopStmt): untyped =
  expectKind x, nnkForStmt
  # check if the starting count is specified:
  var countStart = if x[^2].len == 2: newLit(0) else: x[^2][1]
  result = newStmtList()
  # we strip off the first for loop variable and use it as an integer counter:
  result.add newVarStmt(x[0], countStart)
  var body = x[^1]
  if body.kind != nnkStmtList:
    body = newTree(nnkStmtList, body)
  body.add newCall(bindSym"inc", x[0])
  var newFor = newTree(nnkForStmt)
  for i in 1..x.len-3:
    newFor.add x[i]
  # transform enumerate(X) to 'X'
  newFor.add x[^2][^1]
  newFor.add body
  result.add newFor
  # now wrap the whole macro in a block to create a new scope
  result = quote do:
    block: `result`

for a, b in enumerate(items([1, 2, 3])):
  echo a, " ", b

# without wrapping the macro in a block, we'd need to choose different
# names for `a` and `b` here to avoid redefinition errors
for a, b in enumerate(10, [1, 2, 3, 5]):
  echo a, " ", b

Есть еще более простые в базе языки чем nim, например scheme, но макросы и их моментально усложняют.

anonymous
()
Ответ на: комментарий от anonymous

Про какие правила ты говоришь? Data races, выход за границы массива? Такое имеешь в виду? А лучше прям кусок кода напиши для примера.

Аноним-22.

anonymous
()
Ответ на: комментарий от anonymous

Не, это не конструктивно. Кучу правил можно и для раста написать, чтобы ты не доставал гланды через зад, это программирование, творчество, если тебе все нельзя, то ты не программируешь.

Я же тебе другой формат беседы предлагаю, напиши пример, где мне «отрывает ногу», UB какое-нибудь, а моей задачей будет с этим что-то сделать (без боли обнаружить ошибку, хотя бы найти потенциально опасное место подобно unsafe блоку в расте).

Аноним-22

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.