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)
Ответ на: комментарий от anonymous

Такие клоуны как ты везде видят клоунов (ссыкливо срут из-под анонимуса). А на каски ИРЛ (пластиковые которые) забивают - они же самые умные. Их MISRA защитит от шального кирпича на объекте или ранней лысины от протекающей химии :) Много таких «теоретиков ТБ» встречал. Все рекомендации сводятся к «Не пользуйтесь никакими фичами плюсов, кроме Це с классами, потому что если нам не понятно - никому не понятно»(«если нам трудно - значит и остальные превозмогают»... «если я привык к пимплам - все должно быть заточено под пимплы... И пофиг, где оно кому не нужно или приводит к бойлерплейту и тонзилэктомии через одно место»,«тесты писать нужно, но некогда - тесты делают... НИЧЕГО, но их много») - отсюда же возникает двоичная логика военов юношеского максимализма: если в С++ не обязательно пользоваться всеми сразу возможностями - остаются Це с классами. А значит Це хватит всем. Айда велосипедить и копипастить макросами!

slackwarrior ★★★★★
()

скатили тред в срач, а он ещё жив

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

юношеского максимализма

Наркоман - признай что код твой говно и ты не дашь никакой гарантии за него.

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

Иди спать, дурилка картонная.

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

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

Резко - это у тебя понос словесный прорезался. Расшифровал «полорогого»? Да-да. Это я тебя именно так обозвал. Можешь тут еще побугуртить про «говнокод».

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

Ты можешь дать гарантии. Инфа 146 %. Профилирование меж тем не проводится («Итак ясно, что все тормозит же» (с)). Тесты не пишутся :) Формальная верификация - на бумаге. Ключевое слово формальная. Линты и статик анализаторы? Ах да... первый же пионер на проекте ломает эти стройные конструкции с изяществом всех полорогих :)

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

Да не напрягай очко - памперс лопнет. Область С++ - ширпотреб за малым исключением. Только нахрена тратить для ширпотреба годы, когда можно сделать быстрей и безопасней, а мегагерцев тебе интел сколько надо предоставит :)

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

а мегагерцев тебе интел сколько надо предоставит :)

И человека выделит АКБ носить(возить) ?

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

Ну и кому нужен этот скандал? А как решается эта проблема в твоём любимом язычке?

Ты понимаешь что изложнил сейчас проблему которой _тупо нигде кроме плюсов_ нет? В любом другом язычке она решается ее отсутствием.

На просто «может», но и ОБЯЗАН предполагать.

файсфакинпалм.

А тут случай ещё сильнее: _можно_ копировать, и можно _случайно_ скопировать.

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

Ну что-бы тебе нужно было каждый раз ЯВНО описывать тоже копирование.

Это и есть нормальное поведение. Отличное поведение встречается крайне редко. И уж точно не тотальноповсеместно как в плюсах кроме специальных усилий размещения объектов в хипе или ссылками.

Гениальный Страуструп сделал намного ЛУЧШЕ: он встроил в C++ детектор говнокодеров.

Нет - он устроил детектор мазохистов и любителей кактуса. Которые его жрут и этим гордятся.

Дефолт — это всего-ли костыль для имитации сишечки.
Дада знаем - по историческим причинам...

Двоемыслие какое-то. То костыль то круто....

Если тебе нужна лишняя сущность (типа «ссылка»), то сделай эту сущность, в чём проблема?

Лишняя сущьность тут _копия_.

в самом языке его НЕТ по умолчанию.

Мля а я что десять страниц уже говорю?

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

м... Тут ты наверное прав.

Алелуя!

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

Но ещё полно C++, причём сейчас часто весьма годного.

Его существенно меньше. Потому что куча приложений тупо перелезли в онлайн.

Всяко выгоднее хаскеля.

Ты за меня не беспокойся - у меня с работой все в порядке.

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

ты не поверишь...

Конечно не поверю. Аппликейшен сервера, распределенные кэши, eventually consisten распределенные базы и т.д. не чем это все написали? На плюсках?

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

ЯП это отражение реальной жизни, а реальная жизнь ещё сложнее, чем даже C++. Причём сложности либо надо как-то учитывать, либо сделать вдоль. Третьего не дано. Смирись.

Вообще-то нормальные люди облегчают себе жизнь везде где только можно....

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

Аппликейшен сервера, распределенные кэши, eventually consisten распределенные базы и т.д. не чем это все написали? На плюсках?

это пишут жабообезьянки на галерах, для них и придумали Java, взяв С++ и упростив до максимума, иначе не осилят

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

Вообще-то нормальные люди облегчают себе жизнь везде где только можно....

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

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

прикольно, заодно и на roles ссылка, о которых я ещё не читал. Ну и смысл safeCoerce я понимаю, в отличии от автоматического кастования в Sup :)

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

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

там тупо Sup a b ~ d было забыто, хотя я не уверен, что в сложных случаях настолько полиморфная функция выведется и придётся прокси делать. Если заменить на liftS2 :: (Sup a b ~ с,Up a c, Up b c) => (c -> c -> d) -> a -> b -> d, то будет проще.

По поводу up, скорее всего этот класс не стоит экспортировать и использовать явно, т.к. если он спрятан за Sup, то всё должно быть хорошо.

А так ещё круче:

{-# LANGUAGE TypeFamilies, MultiParamTypeClasses, FlexibleInstances, UndecidableInstances #-}

import Data.Word

class Up a b where 
  up :: a -> b

-- cheating
instance (Sup a b ~ b,Integral a, Integral b) => Up a b where up = fromIntegral 

проверка

λ> up (2^63 - 1 + 1 :: Integer) :: Int

<interactive>:13:1:
    Couldn't match type `Sup Integer Int' with `Int'

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

два чая за этот столик.

PS: не забудь выдохнуть.

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

Наркоман - признай что код твой говно и ты не дашь никакой гарантии за него.

шла-бы ты деточка отседова... Ты не в теме. Знаешь, какую гарантию самый крутой программист всех времён и народов даёт? Да, тот самый, который твою любимую ОС напейсал, единственную, которую ты осилил (точнее, в магазине твой папа уже с ОС купил). Вот ты не поверишь...

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

Да не напрягай очко - памперс лопнет. Область С++ - ширпотреб за малым исключением.

какая же ты смешная, ылитка... О да, твой ылитарный хаскель конечно не ширпотреб. Это не какая-то сишечка и не C++, который чуть менее, чем везде. Это ещё заслужить надо честь, быть достойным работадателем для Программиста на хаскеле! Немногие такой чести удостоились. Только 3.5 вакансий есть.

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

Ты понимаешь что изложнил сейчас проблему которой _тупо нигде кроме плюсов_ нет? В любом другом язычке она решается ее отсутствием.

отсутствием решения на уровне ЯП? Только на уровне устной договорённости и строгого следования гайдлайнам?

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

Что касается копирования, то оно нужно _очень_ часто. Да, каждый раз своё, да, не дефолтное, не сишное. Но таки нужно. «Держать его в наглухо заколоченном сарае» как минимум глупо.

Ты ещё Василий Иванычу посоветуй в бою на шашку чехол надеть, что-бы самому не порезаться, и не порезать окружающих.

Ну что-бы тебе нужно было каждый раз ЯВНО описывать тоже копирование.

Это и есть нормальное поведение.

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

Нет - он устроил детектор мазохистов и любителей кактуса. Которые его жрут и этим гордятся.

у меня для тебя плохие новости: твой говнокод всё равно является говнокодом, а ты являешься говнокодером. Если тридцатилетнюю нежирную шлюху невысокого роста одеть как школьницу, то её можно издалека принять за восьмиклассницу. Одеждой это не исправляется. Одеждой можно только подчеркнуть, что это именно шлюха. Что бы все видели. Тоже самое и с ЯП: на C++ всем будет заметно, кто автор. А вот на других ЯП придётся знакомится поближе.

Дефолт — это всего-ли костыль для имитации сишечки. Дада знаем - по историческим причинам...

Двоемыслие какое-то. То костыль то круто....

если у меня есть костыль, то это не значит, что я хромой. Я же не хожу на костылях? Не хожу. Но костыль таки есть. Где ты видишь противоречие?

Если тебе нужна лишняя сущность (типа «ссылка»), то сделай эту сущность, в чём проблема?

Лишняя сущьность тут _копия_.

не делай копию. Не вижу проблемы. Делай копию «ссылки», точно также, как это неявно делается в твоих любимых язычках (хотя ты об этом похоже и не знаешь).

в самом языке его НЕТ по умолчанию.

Мля а я что десять страниц уже говорю?

а ты говоришь, что «потому это кактус». Нет. «кактус» в твоей голове. А в C++ это очень заметно просто.

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

Но ещё полно C++, причём сейчас часто весьма годного.

Его существенно меньше. Потому что куча приложений тупо перелезли в онлайн.

«в онлайн» перелезла только часть кода, сам интерфейс. Всё осталное, вроде гуглодоксов, попросту скрыто. Но я думаю ты понимаешь, что серверная часть гуглодоксов написана совсем не на хаскеле.

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

Конечно не поверю. Аппликейшен сервера, распределенные кэши, eventually consisten распределенные базы и т.д. не чем это все написали? На плюсках?

ну уж не на асме и не на эрланге.

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

Вообще-то нормальные люди облегчают себе жизнь везде где только можно....

Дык C++ совсем и не осложняет жизнь. Мне наплевать, где там какой дефолт, если я всё равно пишу по своему. Это важно только для нубов.

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

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

в отличии от автоматического кастования в Sup

Ну в хаскеле скорее всего будет просто instance AdditiveGroup a => AdditiveGroup (Matrix a), то есть (^+^) :: AdditiveGroup a => Matrix a -> Matrix a -> Matrix a, как и у (+) в Num — они общеприняты мономорфными, так как нет subtype polymorphism — «аналог» не нужен.

В C++ есть ООП, то есть subtype polymorphism для примитивных типов, классов и указателей с ссылками, но с parametricity он не заводится — нет ковариантности, то есть C[+T], T <: U | C[T] <: C[U]; T' <: T, U <: U' | T -> U <: T' < U' и т.п. Поэтому приходится делать разные манипуляции в типах у шаблонов (которые отвечают за parametricity в плюсах).

А где-то в Scala есть ковариантность, поэтому там такие манипуляции не нужны. Только ценой того, что, например, «массив структур» не может упаковать в память сами структуры — только ссылки на них (поэтому же std::vector<B>, при B <: A не сможет чудесным образом подняться в std::vector<A>, так как расположение в памяти другое).

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

instance (Sup a b ~ b,Integral a, Integral b) => Up a b where up = fromIntegral

Так да (хотя и cheating, но мы всё равно не знаем нафига оно нужно :)), если дописать все Sup то будет «Couldn't match type `Integer' with `Int'».

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

Только ценой того, что, например, «массив структур» не может упаковать в память сами структуры — только ссылки на них

Хотя массивы там и не ковариантны, так что никаких проблем.

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

Пока единственный кандидат на замену С++ - это Rust.

Это так и есть. И его пилят потому что «ну сколько можно».

А Go?

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

MacOS же не написана на С++ ?

а не так? А мой оппонент утверждает, что «C++ == застрелится».

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

Признай, что ты просто неосилятор. И пойми, что тянуть в «онлайн» прошивки для атмеги (или делать http over uart) будет только узкомыслящий.

Предлагать несуществующую ржавчину вместо крестов? Процетирую Кирпича из snatch: «вы ходите по о-но тонкому льду, мои друзья педигрипал».

Да и вообще, с чего ты взял, что твой алгоритм для дерева заработает в крестах без напильника? У каждого языка есть особенности, ты должен это понимать. Иначе можно фразы «how do you do?» смело переводить как «как ты это делаешь?».

И к тому же, зачем ты вообще за спп взялся? Чем тебя не устраивала реализация на ерланге? Вот. Вот тут и ответ.

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

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

Код

SomeClass::SomeClass()
{
   int *x = new [100];
   throw string("we are fucked");
}
ущербен по опеределению. Это как на ерланге слать {hello} такому раз в миллисекунду например:
loop(State) ->
  receive
    stop ->
       ok;
    {message, Msg} ->
      NewSate = process_msg(State, Msg),
      loop(NewState)
  end
рано или поздно твоя нода отклеиться, так как память закончиться под мейлбокс для процесса. И кто же пишет такой код? Правильно: неосилятор.

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

Я с одного взгляда на код говнокодера понимаю, что он говнокодер. Например, если не вижу в классе оператора=.

Ну вообще-то нет, man Rule of Three (Five [C++11]).

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

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

Ты конечно и дальше можешь применять этот пошлый приемчик называемый «не на хаскеле». Только это не изменит того факта что она написана совсем не на плюсах тоже.

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

ну уж не на асме и не на эрланге.

Дада - продолжай дальше «не на хаскеле». Вот именно не на плюсах.

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

А Go?

go это си с csp. Хреновенький.

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

Признай, что ты просто неосилятор

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

Предлагать несуществующую ржавчину вместо крестов?

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

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

Не заработает. «Еще один миф развеян - про скорость».

r ★★★★★
()

О чем тут можно 11 страниц говорить? Итак же понятно, что Си++ говнище.

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

там ничего нет

и не будет.

про скорость

Скорость разработки, или скорость выполнения? Кроме того - стабильность! Ты стабильность спп приложений забыл упомянуть.

Кстати, ты порты для ерланга на чём пишешь? Это серьёзный вопрос если что, для себя интересуюсь.

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

Ты конечно и дальше можешь применять этот пошлый приемчик называемый «не на хаскеле». Только это не изменит того факта что она написана совсем не на плюсах тоже.

ну раз для тебя это «факт», то расскажи, откуда ты знаешь, на чём оно написано, ну и пруфы конечно.

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

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

Есть Over9000 ЯП, что по твоему значит «ничего нет»? Может ты хотел сказать «нет ничего лучше»?

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

Не заработает. «Еще один миф развеян - про скорость».

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

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

Для тормозов еще раз - я писал на плюсахз долго и много.

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

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

http://herbsutter.com/2013/09/12/reader-qa-will-c-remain-indispensable/

As we continue to make C++ more accessible, I expect we will continue to hear about its being used more and more even by people we didn’t expect, like artists and financial gurus who are not programmers by training and whom we never used to think of as C++ programmers… it’s happening already.

%)

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

Что ты хочешь этой ссылкой сказать, что микрософт сделал C#? Это здорово, но на полную замену плюсам он, как и всё остальное, не годится.

9% - это дофига, между прочим.

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

Что ты хочешь этой ссылкой сказать,

То, что приведенная тобой цитата это какой-то бред.

Прослеживается четкая тенденция к уменьшению юзания «плюсов».

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