LINUX.ORG.RU

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

 ,


3

4

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

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

Он не сложный, он душный.

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

С виду, автору clang-tidy не хватает. А так все просто))

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

так как в описании структур нет упоминания процедур, которые связаны с этой структурой Т.е. если их несколько, то нужно лепить либо блок комментариев со списком, либо листать простыню и внимательно её просматривать, подсчитывая «сколько ж там процедур?».

А можно просто открыть docs.rs/ и не заниматься такой фигней.

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

Либо cargo doc --open, если у вас проприетарщина какая-то или что-то локальное.

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

Какой-то выпендреж. Давай возьмем языки, широко используемые в продакшене (то есть Хацкель, например, пролетает) и составим рейтинг их сложности.

Ну и кто там будет на вершине? Вот то-то и оно.

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

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

Но объем необходимого опыта, чтоб код не смердел, для каждого языка разный. Итого ты противоречишь сам себе.

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

Где используется лисп? Не в смысле подъебки «гыгы, вакансий нет», а в смысле оценить кто доверяет ему свои деньги, свою репутацию.

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

хаха, чувак, я написал то ж самое.

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

ты ж писал, что ты школьник. откуда знаешь, что в tcl ничего нет? может это супер-пупер технология древних атлантов?

троллль ты.

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

В Аде другие сложности.

Изначально более сложная, это во-первых. И сложней найти по ней материалы в интернете, это во-вторых.

Но всякого хайпа и дрочева с ней было меньше, поэтому ситуации «костыль на костыле и костылем погоняет» там нет.

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

Но работает он, готов поспорить, в каком-нибудь ооо «рога и копыта», а не в гугл. лор как он есть.

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

и в результате вынуждет блюсти обратную совместимость в том числе и с неудачными паттернами из 80х годов

На самом деле необходимость тащить обратную совместимость высосана из пальца. Или даже из чего похуже.

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

Что там? Какой фигнёй? Ну если в процессе разработки самому же нужно постоянно лазить в docs.rs, то всё плохо.

grem ★★★★★
()

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

doc0
()
Последнее исправление: doc0 (всего исправлений: 2)
Ответ на: комментарий от EXL

mindfuck синтаксис это не про Си++.

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

А вот синтаксис Rustа действительно майндфачный, начиная уже с объявления функций.

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

Это хорошая новость. Всегда приятно осознавать, что не только ты тупой :)

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

Если пишешь на питоне, быстро привыкаешь и на автомате мысль рождается, на с++ же надо… напрягаться, потому что слишком много всего. Питон минималистичный. чем плохо?

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

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

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

Потому что если не добавлять новые фичи, то он «устареет» по мнению некторых. Ну а если серьезно - новые фичи, это всегда хорошо, пусть даже сначала они и кажутся «ненужными». Главное, чтобы при этом обратная совместимость не падала, и проекты, написанные на старых версиях, продолжали работать. И чем старше в этом случае язык, тем больше в нем фич, что делает его нагромождением этих самых фич потом, из-за чего у многих горят пердаки.

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

На самом деле необходимость тащить обратную совместимость высосана из пальца. Или даже из чего похуже.

Обоснуй.

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

Глупость какая. В лиспе полно бесполезных скобок, которые усложняют читабельность. Нужно брать Forth.

Говорить Ёда как сложно весьма.

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

Если бы ты писал на крестах с полноценным RAII,

То и там есть возможность легко сделать утечку на shared_ptr.

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

Чтобы продавать проприетарные библиотеки с известным API?

Для этого достаточно опциональных, автоматически генерируемых заголовков, как в D или OCaml.

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

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

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

если там несколько выражений подряд и последнее случайно стёр и не заметил? «Счастливой отладки»?

Не соберется просто.

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

C++ не сложный, C++ большой

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

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

Это чтоб примерно представлять что мне та реализация напомнила.

Нет в расте все цельнотянуто из классов типов хаскеля.

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

хорошая новость: C++ сложный только если программист тупой

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

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

Ну если в процессе разработки самому же нужно постоянно лазить в docs.rs, то всё плохо.

IDE все покажет. Без IDE тот же docs.rs можно автоматом при сборке генерировать.

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

можно независимо кучу интерфейсов для одной и той же структуры реализовать

Там же «Impl» носит имя структуры. Или что имеется ввиду?

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

Дело не в том, что можно, а что оно должно быть на виду. Ох уж этот подход «ide за меня всё сделает». Особенно умиляют крики «Эта ide пока не умеет автодополнение … из новой реализации! Я из-за этого не могу писать код!»

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Ответ на: комментарий от Siborgium

Почему нет? Если правильно понимаю, то изначальная предъява была - ну и чего с этим constexpr? Из цикла не дернуть, на хлеб не намазать

for (unsigned a = 0;  a < 10;  ++ a)
    cout << fib(a) << endl;

------------------------------------------
1.cc: In function ‘int main()’:
1.cc:22:15: error: the value of ‘a’ is not usable in a constant expression
   22 |   cout << fib(a) << endl;

а с array норм

#include <iostream>
#include <array>
using namespace std;

using val_t = long double;
consteval val_t fib(unsigned n) {
    return n<=1 ? n : fib(n-1)+fib(n-2);
}
template <unsigned sz>
consteval array<val_t, sz> fn() {
	array<val_t, sz> a;
	for (unsigned i = 0;  i < sz;  ++ i)
		a[i] = fib(i);
	return a;
}
int main() {
	auto ar = fn<23000>();
	for (auto cur : ar)
		cout << cur << "  ";
	cout << endl;
}

Я не против вектора, в msvc уже накостылили вроде.

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

Ты про циклические ссылки? Ну это уже руки, можно и на ноль разделить. И в 90% случаях нужен unique_ptr или std::контейнер вроде вектора.

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

Вообще ничего общего не вижу с haskell - там класс может содержать реализацию операций, она не обязательно должна быть вынесена в экземпляр. Да и выглядит всё сильно иначе.

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

Запустил, удивился, my bad.

P.S. У меня вчера почему-то на 1000 процесс умирал, поэтому я и сделал вывод, что на 23000 не запускалось вообще. Значит у меня проблема, буду искать.

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

Наеборот: если для программиста плюсы простой язык - он тупой.

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

Там же «Impl» носит имя структуры. Или что имеется ввиду?

Это скорее вспомогательная вещь, более базовая это impl trait for struct, например можно реализовать для своей структуры итератор, и получить автоматом все функции работающие с итераторами, написав только один next для своей структуры. И это не мешает для той же структуры реализовать независимо срез.

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

Дело не в том, что можно, а что оно должно быть на виду.

Оно и так на виду.

Ох уж этот подход «ide за меня всё сделает».

Сам любитель простых редакторов, хотя vim и не осилил, но долго сидел (на C++) на самом тупом scite редакторе как базовом. Но заставил себя пересесть на IDE, продуктивность все равно выше как бы себя не самоубеждать.

Особенно умиляют крики «Эта ide пока не умеет автодополнение … из новой реализации! Я из-за этого не могу писать код!»

Последние версии плагина для раст от JetBrains весьма неплохи, уже лучше чем их же clion для C++.

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

Ты про циклические ссылки? Ну это уже руки, можно и на ноль разделить.

Не всегда руки, чаще объективная сложность, shared_ptr становится необходимым только для сложных случаев, в простых он легко заменяется вариантами типа арен и т. п.

И в 90% случаях нужен unique_ptr или std::контейнер вроде вектора.

С этим согласен.

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

Вообще ничего общего не вижу с haskell - там класс может содержать реализацию операций, она не обязательно должна быть вынесена в экземпляр. Да и выглядит всё сильно иначе.

Сдирали оттуда, конечно адаптировав к не ленивому императивному языку и чуть упростив. Но принципиальных отличий нет. И да в раст аналог хаскелевского класса типов это трейт и они вполне могут содержать и содержат реализации функции, и обычно базовые стандартные классы в осиновом и содержат большое количество реализованных функций и минимум функции которые нужно реализовать для своих объектов, как самый типичный пример трейт Iterator, который требует реализовать только next и добавляет десятки реализованных функций.

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

У Си++ синтаксис ясный, классный, понятный.

Ну да, унаследовал от C write-only синтаксис ala regex:

int (*(*foo)(void ))[3]
Ч — Читаемость.

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

Для n <= 46 (дальше косяки с преобразованиями)

program fibonacci

  implicit none

  integer, parameter :: n = 46
  integer :: i
  real(kind=kind(1.d0)), parameter :: phi = (1.0d0 + sqrt(5.0d0))/2.0d0
  integer, dimension(1:n), parameter :: fib = [ ( (phi**i - (-phi)**(-i))/(2.0d0*phi - 1.0d0), i = 1, n ) ]
  print *, fib

end program fibonbacci

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

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

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

И? Не спорю, что сложнее, но решаемо, комплятор дампнет образ данные вектора в бинарник, в вектор адрес всунет, при первом push выделит новый кусок и скопирует в него, copy-on-write. И все это не значит, что array бесполезен вместо вектора, я выше сэкнономил много времени в рантайме.

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

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

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

Fortan? Ты про потерю точности, видимо. Не уверен, что при оперировании числами порядка 1.43633e+4806 мне интересны «единицы».

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

И все это не значит, что array бесполезен вместо вектора

Я не говорил, что массив бесполезен «вместо» вектора. Он бесполезен для демонстрации возможностей constexpr в С++20.

я выше сэкнономил много времени в рантайме.

Про время в рантайме вообще речи не шло.

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