LINUX.ORG.RU

Какое же говнище этот ваш С++

 


11

7

Решил намедни углубить свои знания по плюсам, чувствуя, что скоро нехило так потребуются по работе. Теперь сижу, обмазываюсь тут всякими трупами страусов, Скоттом Майерсом и другими. Г-пди, как же можно на этом писать, особенно после знания божественных лиспов, хаскелей и прочих матанских агд (sic!). Это какая-то пытка, честное слово, мне натурально мерзко и противно читать как люди пытаются вырезать гланды через задний проход да ещё и хвалятся этим, поглядите, мол, как это круто. Такое ощущение, будто плюсисты все поголовно латентные мазохисты.

template <typename T>
class Rational
{
    public:
    ...
    friend const Rational operator*(const Rational& lhs, const Rational& rhs)
    {
        return Rational(lhs.numerator() * rhs.numerator(), // same impl
            lhs.denominator() * rhs.denominator()); // as in Item 24
    }
}

An interesting observation about this technique is that the use of friendship has nothing to do with a need to access non-public parts of the class. In order to make type conversions possible on all arguments, we need a non-member function (Item 24 still applies); and in order to have the proper function automatically instantiated, we need to declare the function inside the class. The only way to declare a non-member function inside a class is to make it a friend. So that's what we do. Unconventional? Yes. Effective? Without a doubt.

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

Перемещено mono из talks

★★★★★

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

школьник уже переписал свою ОСЬ на правильный язык и пишет же на лор с нее ?

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

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

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

Давай я для наглядности поменяю имя функции(может так поймешь, о чем я):

template<class T, class U>
auto foo(const Matrix<T>& a, const Matrix<U>& b) −> Matrix<decltype(T{}+U{})>;
foo :: Matrix a -> Matrix b -> Matrix c
forCe
()
Ответ на: комментарий от tailgunner

Но во всякой большой Си-программе реализован кривой и убогий компилятор Си++.

Не во всякой, а в некоторых. И если с этим «переборщить», то это прямой путь к фейлу.

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

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

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

во всякой большой Си-программе реализован кривой и убогий компилятор Си++.

Не во всякой, а в некоторых.

В некоторых его нет. Может не быть. Теоретически.

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

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

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

напиши «haskell warp» или «haskell mighttpd» и будет на первой строчке

ты знаешь сервера быстрее? с nginx'ом в каком-то сраче про C++ ужэ сравнивали, наравне. (да, я знаю, что nginx написан на чистом Си, что лишний раз подтверждает оп-пост =)

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

с nginx'ом в каком-то сраче про C++ ужэ сравнивали, наравне.

Пруфа по-моему там таки не было

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

Нафиг так жить. С копипастами и запиливанием одного и того же по 100 раз.

С копипастами и запиливанием одного и того же живут те, кто не умеет иначе. И пишут они в стиле: «что вижу о том и пою» (привет ОО :)

Си очень, очень гибок. И, иногда, всего несколькими десятками строк можно запилить что-то, что поначалу казалось большим куском нудной работы. Ну и 80% времени нужно думать, а остальные 20% кнопки давить.

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

В некоторых его нет. Может не быть. Теоретически.

Ну, если пристально присмотреться можно найти и черную кошку в темной комнате :)

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

Си очень, очень гибок

Как арматурный пруток.

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

Ну, если пристально присмотреться можно найти и черную кошку в темной комнате :)

Если смотреть в темноту 80% времени - наверное.

tailgunner ★★★★★
()

Мудак, тебе денег платят сиди и работай. Приздить команды не было.

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

Но код на С++ всегда лучше, если человек знает С++.

Вообще-то от использования ++ отказывались сознательно, а вовсе не из-за «неосиляторства». Нет в плюсах красоты и изящества. Вот даже в фортране есть, своеобразная, а в плюсах нету. Незаконченный язык какой-то, недоделанный, «уродец» вообщем.

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

Вот даже в фортране есть, своеобразная, а в плюсах нету.

Ты хоть что то делал на ФОРТРАНе или это речь теоретика-задрота?

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

Во-первых, твой код совсем не аналог приведённого кода на плюсах, потому что код на плюсах написан специально, чтобы работало неявное приведение типов (т. е. Rational<int> a(1, 2); Rational<int> b = a * 5;). Если оно не нужно, то можно написать и «нормально». Да, выглядит как костыль. Да, это и есть костыль, но что же поделать.

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

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

Ты хоть что то делал на ФОРТРАНе

Тысячи строк. До сих пор где-то рулоны распечаток остались, на память. В 1991-ом забросил.

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

Просто в C массивы переменной длинны забили костылями, хотя бы потому, что sizeof у них вычисляется в рантайме, а указатели на эти массивы (T (*p)[n]) получаются какими-то особыми волшебными типами. В C++14 добавят подобные массивы, но они будут более хорошо сделаны, хотя подробностей я не знаю.

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

Вообще-то от использования ++ отказывались сознательно, а вовсе не из-за «неосиляторства».

Именно от неосиляторства. У Си нет преимуществ по сравнению с С++. Когда вы выбираете С вместо С++, это означает более медленную разработку, кучу велосипедов, неустанную копипасту, а так же более вероятную утечку памяти(и других ресурсов), сигфолты и пр. прелести.

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

Да говорили тут ему уже... Не понимает он.

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

Нафиг так жить. С копипастами и запиливанием одного и того же по 100 раз.

Какое имеют отношения копипасты и «запиливание одного и того же» к Си? У него куча проблем, но вроде содание библиотек там никто не отменял.

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

«Ты знаешь более ненужные ненужно, которые быстро делают ненужно?» (с) Ненужно. Подтверждения оп-поста неосилятора записным неосилятором? Рекурсивный «стек оверфлоу».

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

Там «отменили» средства абстракции, в результате библиотеки убоги чуть менее, чем полностью. В результате в каждом проекте свои велосипеды, скопипащенные и слегка переделанные по нескольку раз. Откройте тот же nginx и посмотрите на реализацию стандартных модулей. О postgresql, gcc и многих других примерах я вообще молчу.

anonymous
()

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

этта. А что тут не так? Как оно должно быть? Я просто из этих. Ну как ты сказал «латентных мазохистов». Не понимаю. Что именно тебе не по нраву?

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

Там «отменили» средства абстракции, в результате библиотеки убоги чуть менее, чем полностью.

Средства абстракции в c++ - унылы чуть более чем полностью на сегодняшний день. Кто видел как ругаются на типизацию stl+boost при скрещивании - тот в цирке не смеется.

В результате в каждом проекте свои велосипеды, скопипащенные и слегка переделанные по нескольку раз.

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

Да к стати

> > > >

поржем?

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

Именно от неосиляторства. У Си нет преимуществ по сравнению с С++.

Скажите это Линусу и десяткам,сотням тысяч программеров чей код вы используете.

Не ребята, похоже на то, что «плюсы», у многих из вас, первый и потому любимый язык.

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

Нет, про это n2648.

This paper does not propose to add all features of C99 variable length arrays to C++. In particular, the following features are explicitly excluded:
- multidimensional arrays, where other than the top level has a runtime bound (in analogy, array-new doesn't support that either)
- modifications to the function declarator syntax
- sizeof(a) being a runtime-evaluated expression returning the size of a
- «typedef int a[n];» evaluating «n» and passing that through the typedef

There shall be no pointers to arrays of runtime bound.

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

Средства абстракции в c++ - унылы чуть более чем полностью на сегодняшний день.

Для неосилятора так и есть, да. А по факту там такие средства абстракции и на таком уровне, чтобы обеспечить принцип нулевой стоимости. А еще есть вынужденная необходимость синтаксической совместимости с Си, из чего и растут ноги большинства претензий к С++. И да, это все не аргумент в пользу С. В пользу Rust'а, когда он выйдет=)

Кто видел как ругаются на типизацию stl+boost при скрещивании - тот в цирке не смеется.

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

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

На вопрос че делать - мне предложили «переписать STL». Эта было пять.

не. Правильно предложили. Дело в том, что STL не годен для таких задач. Тут нужны не шаблоны, а виртуальные функции и базовые классы(если я правильно понял, о чём ты).

Просто C++ это не только и не столько STL. Там и другие фишки есть. На стандартных шаблонах можно сделать всё, но это не говорит, что НУЖНО так делать, и никак иначе.

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

Да к стати

К чему?

поржем?

Вы каким компилятором пользуетесь? Вообще эта проблема всегда была детской.

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

Скажите это Линусу

Он не умеет С++. А тут речь о тех, кто может выбирать(очевидно, что выбор есть у того, кто может нормально использовать и то, и другое).

Не ребята, похоже на то, что «плюсы», у многих из вас, первый и потому любимый язык.

Нет, у меня Си был гораздо раньше и в течении нескольких лет. Я просто осилятор. И С++ не любимый. Он практичный. Ничего личного. Я его просто использую. Как и питон. Как и scala(для поделок на андроиде).

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

Дело в том, что STL не годен для таких задач. Тут нужны не шаблоны, а виртуальные функции и базовые классы(если я правильно понял, о чём ты).

С каких пор одно мешает другого?

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

Для неосилятора так и есть, да.

что там осиливать?

. В пользу Rust'а, когда он выйдет=)

Неосиляторы C++?

Боюсь ваше неосиляторство неисправимо.

Боюсь мозгомазохизм с++сера неисправим. Он всегда думает что если он выбрал себе стилем жизни трахать себе мозг инструментом да еще непонятно зачем - то считает это достоинством. Я уже не делаю на ++ большие проекты больше 10 лет - и слава богу забыл этот страшный сон.

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

К чему?

К стати к стати. того монстра с крестами.

Вы каким компилятором пользуетесь? Вообще эта проблема всегда была детской.

Расскажи это разрабам gcc почему она вообще есть.

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

Ты не умеешь С++.

Я его уже успешно забыл. Сплю спокойнее.

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

Он не умеет С++.

Он не умеет потому что считает что это не нужно, как и многие другие. А вовсе не из-за неосиляторства.

А тут речь о тех, кто может выбирать(очевидно, что выбор есть у того, кто может нормально использовать и то, и другое).

Если задача будет требовать, я, например, буду использовать java, хоть опыта у меня с ней немного. Будет тормозить, буду юзать JNI и plain C. И ассемблер буду использовать,в случае необходимости, и Lua, и Фортран. И даже REXX.

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

Видимо на твои тогдашние задачи «плюсы» хорошо «ложились»,а Си не очень.

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

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

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

к стати на русте кто-то писал что-то си-совместимое? В смысле чтобы звать можно было из Си.

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

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

Походу ты положил в <чотамутебябыло> объекты вместо указателей, и теперь жж0ш стул.

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

Походу ты положил в <чотамутебябыло> объекты вместо указателей, и теперь жж0ш стул.

Дык это - я это говорю. Простое решение: кладем объекты в вектор. Сортируем. Херня. Следовательно надо указатели. Следовательно ручное управление памятью. Следовательно...

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

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

Походу ты положил в <чотамутебябыло> объекты вместо указателей, и теперь жж0ш стул.

Дык это - я это говорю. Простое решение: кладем объекты в вектор

Простое и неправильное решение. Типичная ошибка людей, привыкших к языкам с reference types.

Следовательно надо указатели. Следовательно ручное управление памятью.

Следовательно ручное управление памятью.

Нет.

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

Простое и неправильное решение. Типичная ошибка людей, привыкших к языкам с reference types.

С какой это радости оно неправильное? В С++ так сказали? Это _копирование_ ненормальное поведение объектов. Расскажи человеку который вообще не связан с программированием что если ты васе даш мешок шариков с номерами а он его даст пете и попросит отсортировать - то шарики должны «скопироваться», а назад он получит совсем другой мешок, а свой должен кудато задеструктить. Это ж шизонутая логика.

Нет.

В каком смысле нет? В том смысле что кто-то уже зарулил его до нас в виде либы? Тогда таки да.

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

Дело в том, что STL не годен для таких задач. Тут нужны не шаблоны, а виртуальные функции и базовые классы(если я правильно понял, о чём ты).

С каких пор одно мешает другого?

микроскоп на моём столе никак не мешает мне заколачивать гвозди молотком. А тебе мешает?

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