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

Это уже делалось по следам .NET.

Сколько тебе лет? Всякие Jython и прочие жабаскрпты появились под жабу когда .NET еще даже в задумке не было.

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

У Линуса в ядре своё ООП на макросах и структурах. Ему плюсы вообще не впились.

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

Как язык это был урезанный до неузнаваемости С++

Мде. В 1995 году даже не во всех компиляторах исключения были, а о том, как они работали... это песня. «Урезанный», ага - без шаблонов. Но безопасный и со сборкой мусора. Урезанность такая урезанность.

Это уже делалось по следам .NET

Ну а весь .NET делался по следам JVM.

Нормальная кроссязыковая среда - это их фича

Jython появился еще до .NET. И кстати. Расскажи, что такого нормального для кроссязычности появилось в JVM с 2001 года (или когда там вышла .NET)?

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

А где они тогда были ?
Мля - детей набежало

и то правда - набежало, в С++ шаблоны были уже в 1991 (C++/cfront 3.0), а в Ada дженерики появились в 1983-м, собс-но оттуда и перекочевали в С++

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

Заметь, спор всё же пошел в правильном направлении. Не столько важен сам язык, сколько платформа для разработки. :)

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

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

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

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

В 1995 году даже не во всех компиляторах исключения были, а о том, как они работали... это песня.

Мы о языке или платформе?

«Урезанный», ага - без шаблонов.

Не только. Убогий недоязык.

Но безопасный и со сборкой мусора.

На практике это и означает урезанность. А уж какой тогда сборщик был... это песня.

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

Ты походу сам или не помнишь, или вообще не программировал тогда. Java как раз и была специально урезана, причем преподносилось это как фишка. Почти как с Go сейчас, который тоже ничего не умеет, но типа «специально». Но пройдет немного времени и там наверняка появятся и дженерики и пр. «не нужные» вещи. Если, конечно, им кто-то будет всерьез пользоваться. Его правда так не продвигают, как в свое время Java.

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

в С++ шаблоны были уже в 1991

То есть именно тогда когда разрабатывалась жаба. Уран открыли за 150 лет до первой бомбы. И что - тоже «почему в первой мировой войне не бомбонули»?

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

То есть именно тогда когда разрабатывалась жаба

видимо у тебя маленький монитор и ты не увидел:

«в Ada дженерики появились в 1983-м, собс-но оттуда и перекочевали в С++»

и да - С++ тогда тоже был по сути в процессе разработки

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

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

Ты сейчас микрософтовские лозунги повторяешь или где .NET более «рассчитана» на многоязыковость чем та же JVM? И как правильноговорит хвостострелок - что изменилось там такого что она стала более рассчитана не считая самых последних изменений которые только-только?

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

CLU, Ada, C++, etc.

Hindley-Milner - «появился» в 1969 году. Почему вывод типов никто не написал «уже тогда»?

Странные вы дети...

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

Java как раз и была специально урезана, причем преподносилось это как фишка.

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

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

«в Ada дженерики появились в 1983-м, собс-но оттуда и перекочевали в С++»

Параметрический полимофрфизм появился еще раньше - вывод типов ля полимрофных типов Хиндли написал еще в 1969 году. Керниган и Риччи его в си не сделали почему - книжек не читали?

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

ты теряешь лицо, в С++ и Ada оно уже было, когда Java еще даже в задумке не было, можешь оправдываться как угодно - но это факт

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

Параметрический полимофрфизм ... Керниган и Риччи его в си не сделали почему - книжек не читали?

Читали, скорее всего. Просто тогда компьютеры были не такими большими, как сейчас, а разработка была очень дорогой. Кроме того, господствовало представление, что каждому классу задач — свой язык программирования. Т.е. язык проектировался исходя из требований конкретного класса задач.

K&R сделали язык для низкоуровневого программирования. Если бы они захотели бы тогда сделать язык для всего, то получилось бы как с С++: они бы его выдали лет так через 20. И упустили бы благоприятное время.

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

ты теряешь лицо, в С++ и Ada оно уже было, когда Java еще даже в задумке не было,

Почему в C++ оно появилось в 91 году ты задавал себе вопрос? Java как раз делалась тогда когда в ++ оно только появилось.

И еще - шаблоны с++ не генерики Java.

И вообще в чем суть претенизии?

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

И упустили бы благоприятное время.

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

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

Так разрабатывались-то шаблоны раньше. Почитай D&E. И вообще ты явно не в курсе тогдашней разработки.

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

Так дженерики-то не просто «появились», они были сделаны и активно использовались. В Ada той же. А это весьма консервативный язык.

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

Так разрабатывались-то шаблоны раньше.

Как я уже упоминал - Хиндли написал свое описание алгоритма вывода полиморфных типов в 69 году. Вот где твое раньше. Почему в тех же плюсах темплейты появились 22 года спустя?

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

Так дженерики-то не просто «появились», они были сделаны и активно использовались.

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

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

Так и я о том.

Тогда это вопрос стакана. Для тебя он стал полупустым. Для индустрии как видно из рещультатов - полуполным.

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

Как я уже упоминал - Хиндли написал свое описание алгоритма вывода полиморфных типов в 69 году. Вот где твое раньше. Почему в тех же плюсах темплейты появились 22 года спустя?

Ты совсем не понимаешь, что тебе пишут? Написали, что ява была говном по сравнению с уже существующими на тот момент языками. И потом она всегда была в роли догоняющей. Остается в этой роли и сейчас. Любые попытки представить ее как нечто революционное выглядят смешными. В нее поверили менеджеры, ее легко освоить и использовать не слишком далеким людям, она устраняет многие ошибки методом топора. Что еще нужно для промышленного применения?

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

Java как раз делалась тогда

делалась она 1991-1995, в 1991 в С++ шаблоны уже были

И еще - шаблоны с++ не генерики Java.

да - они больше чем дженерики Java или C#

И вообще в чем суть претенизии?

никаких претензий - ты просил список ЯП, я его привел

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

И содрали ее с плюсов в которых темплейтов не было.

Нет, было точно не так. Разницу между шаблонами С++ и генериками Java ты, я вижу, знаешь. Так вот, шаблоны типа С++ в Java сделать не получится. JVM не выдержит столько кода инстанцировать. У неё и так довольно большие расходы на внутреннее представление классов. Поэтому их и решили не делать. Даже спустя много лет сделали всего лишь генерики, да и те лишь в виде синтаксического сахара.

Иными словами, эта фича С++ оказалась в Java непереносима по техническим причинам. Зато в Java сделали возможным метапрограммирование времени выполнения. Что оказалось киллер фичей.

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

Сейчас тебя тоже в школоту запишут.

Было как-то по другому?

Этот спор вокруг реализации шаблонов идет уже фиг знает сколько лет. Как бы сделать шаблоны такими же эффективными, как в С++, но чтобы не приводили к такой массивной кодогенерации, как в С++.

Это были 90-е. Интернет был модемный в лучшем случае. Благодаря шаблонам jar-ки бы получались безумного (для передачи по сети) размера. Либо JVM бы выедала всю доступную память.

Поэтому сделали наследование от Object и врапперы для скалярных типов. Этакое обобщенное программирование для бедных. По тем временам хватало за глаза.

aist1 ★★★
()

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

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

В 1995 году даже не во всех компиляторах исключения были, а о том, как они работали... это песня.

Мы о языке или платформе?

Мы о практически пригодных возможностях языка.

Кстати, о платформе... так какие изменения в JVM сделали ее годной многоязыковой платформой?

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

Кстати, о платформе... так какие изменения в JVM сделали ее годной многоязыковой платформой?

Понятия не имею. Но в .NET это преподносилось изначально и мода на это пошла почему-то именно оттуда. Jvm изначально делали для Java. Да и не так это все важно.

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

Было как-то по другому?

Было именно так. Но тут есть товарищ, который всех, кто с ним не согласен(ты как раз его цитировал), в школоту записывает...

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

Не столько важен сам язык, сколько платформа для разработки. :)

Ну это как бы понятно. Собственно, большая часть проблем Си++ - от желания быть совместимым с платформой :)

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

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

Список языков в студию.

И потом она всегда была в роли догоняющей.

Кого?

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

Покажи мне _более_ успешные попытки того же периода.

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

делалась она 1991-1995, в 1991 в С++ шаблоны уже были

В 91 ее дизайн как языка был готов. В 91 шаблоны только появились.

да - они больше чем дженерики Java или C#

Они другие. Ты предлагаешь в яву вернуть .h файлы? Устранить раздельную компиляцию?

никаких претензий - ты просил список ЯП

Так мог бы и хаскель тогда привести - он тоже с 91 года.

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

Так вот, шаблоны типа С++ в Java сделать не получится.

Этим вот двум типам это объясни.

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

Они есть в рантайме. Erasure имеет отношение только к совместимости старіх классов - дурацкая была идея.

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

В 91 ее дизайн как языка был готов

пруфлинк?

Ты предлагаешь в яву вернуть .h файлы? Устранить раздельную компиляцию?

я ничего не предлагаю - Java мне не интересна

Так мог бы и хаскель тогда привести - он тоже с 91 года.

в 91-м хаскель был другим, потому я и не привел 1985-й год для С++

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

http://en.wikipedia.org/wiki/Oak_(programming_language)

и таки он не Java 1.0:

http://www.artima.com/weblogs/viewpost.jsp?thread=7555

так можно и С++ принять за дизайн Java, собс-но с него он и был слизан, в Oak это еще более очевидно

И почему плюсовые темлплейты не подходят тоже не видишь?

ты вообще что хочешь сказать? дженерики в Java хуже чем дженерики в C# или шаблоны в С++ - это факт, в С++ нет GC и убогий препроцессор - тоже факт, можно долго обсуждать почему так получилось в каждом конкретном ЯП, от этого сами ЯП лучше не станут

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

Они есть в рантайме.

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

Перспективы полноценных шаблонов в Java очень туманны. Если в конце концов JVM научат полностью инстанцировать генерики, я сильно сомневаюсь, что язык шаблонов сделают полным по Тьюрингу. JVM повесится от этого. А без полноты по Тьюрингу такие шаблоны не особо то и нужны. Ну, можно простенькие структурки данных создавать. Только и всего. Никакого метапрограммирования тут не развернёшь. А нужно.

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

дженерики в Java хуже чем дженерики в C# или шаблоны в С++ - это факт

голословные заявления всё ещё в ходу на лоре - это факт

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

Перспективы полноценных шаблонов в Java очень туманны

налетай братва, шаблоны за «полцены» отдают

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

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

Опять эта чушь. С чего бы JVM от этого вешаться?

А без полноты по Тьюрингу такие шаблоны не особо то и нужны. [...] Никакого метапрограммирования тут не развернёшь

В Java уже такое метапрограммирование, которого в Си++ тупо нет. Нужно ли там дрочево с рекурсивными шаблонами - большой вопрос.

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

и таки он не Java 1.0:

Отличия незначительные. К 91 году все фичи оака которых нет в жаве уже выкинули.

ты вообще что хочешь сказать?

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

дженерики в Java хуже чем дженерики в C#

Угу. Догадайся почему реализация скалы для .NET делает.... type erasure!

шаблоны в С++ - это факт

Это факт только в теории. На практике темплейтые либы вроде буста или стла - это штука от которой хочется повесится даже Александреску - вон даже свой язык он отчаянья пилить стал.

тоже факт, можно долго

Убогая дефаултная семантика копирования, проблему которой решают кое-как в последних стандартах, а конструкторы копирования - вообще мрачняковый костыль, деструкторы и конструкторы кооторые хреново ддружат с исключениями, сами исключения которыё допилили до рабочего состояния не так давно и т.п. Жабка эти все проблемы плюсов решила начиная с первой версии.

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

Есть (уже?) не сами типы, их метаданные.

Всегда.

С точки зрения выполнения кода это ничего не добавляет, к сожалению.

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

Перспективы полноценных шаблонов в Java очень туманны

Полноценных - это как в плюсах? Я точно скажу их там не будет.

А без полноты по Тьюрингу такие шаблоны не особо то и нужны.

Параметрический полиморфизм с полнотой по тьюрингу не особо и нужен.

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

Выше крыши хвататет. Особенно со скальными HKT.

Никакого метапрограммирования тут не развернёшь. А нужно.

Зачем ты хочешь метапрограммирвоать _шаблонами_?

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

На практике темплейтые либы вроде буста или стла - это штука от которой хочется повесится

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

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

Когда исчезнут вот такие вещи?
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

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

и вдогонку - а когда исчезнут книги Джошуа Блоха, например?

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