Кресты / Говнокод #25097 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
class Govno {
        virtual void govno() = 0;
};

Откуда такой дурацкий синтаксис? ))
Прочитал у страуса, джва дня смеюсь.

Может кто-то знает причину?

Запостил: vistefan vistefan, (Updated )

Комментарии (289) RSS

        • Что у гранда не спроси — Он, как попка, — «си» да «си»,
          Ну а сам все налегает На селедку иваси!


          © Леонид Филатов
          Ответить
      • А правда, почему Ершов и его товарищи записывали название языка как "SI", а не "C"? Или это редакторы книги перепутали с «Système International d’Unités»?
        Ответить
  • Это пьюр виртуал?
    Мне тоже слова abstract не хватает.
    Ответить
    • Причём гцц на это при попытке создать экземпляр говорит:
      main.cpp:8:10: error: cannot declare variable ‘object’ to be of abstract type ‘Example’

      именно abstract, как идиомы. Но получается, что для того, чтобы понять, что экземпляры класса нельзя создавать, нужно проверить, не присваивается ли какому-то из его методов нуль ))) Лол.
      Ответить
      • Возможно раньше там реально в vtable был 0. Но сейчас там обычно обработчик pure virtual function call который убивает прогу.
        Ответить
        • > pure virtual function call
          Эта пизда мне не давала в мост в антед иградь. Помницца на кабре была стотья, где чувак в лолидебагере испражнялсявлял эту ошипко.
          Ответить
  • экономили ключевые слова, кому-то это показалось отличной идеей.

    P.S. мне не смешно было, пофигу собственно.
    Ответить
    • > экономили ключевые слова

      Вряд ли, скорее это легаси, о котором говорит борманд.
      Если б уж экономить слова, можно просто оставить виртуальный метод без какой бы то ни было реализации, чтобы обязать неабстрактных потомков его реализовать. В такой ситуации накакой '= 0' бы не понадобился, насколько я понимаю, и вышло бы короче. Похоже, когда-то кому-то хотелось срать в vtable руками. А сейчас это всё ещё можно?
      Ответить
      • Лол в том, что можно сделать чисто виртуальный метод с реализацией. Потомок даже сможет его явно вызвать.
        Ответить
          • Что такого в абстрактном методе с реализацией?
            Ответить
            • Ох ты бог мой, и действительно, с непривычки без такого ключегого слова не понять, виртуальный и виртуальный.
              Ответить
              • Давай не путать виртуальные и чисто виртуальные

                Невиртуальный метод выбирается в момент компиляции

                Виртуальный выбирается в рунтайме через виртаблу и зависит от объекты (как в джаве например)

                Пьюр виртуал не имеет реализации обычно и его потомки обязаты реализовать (как абстракт в жабе например)
                Ответить
                • В "PHP" нет никаких моментов компиляций и виртуальных и чисто виртуальных абстрактных методов, именно поэтому я за "РНР"
                  Ответить
                  • В "PHP" фактически как в Смоллтолке или в Objective-C: некий диспетчер принимает имя метода и выполняет маршрутизацию в рантайме.

                    Можно перегрузить метод __call, чтобы он обработал любое имя:
                    http://php.net/manual/ru/language.oop5.overloading.php
                    Ответить
      • > Вряд ли

        Давайте же обратимся к The Design and Evolution of C++:

        13.2.3 Syntax

        The curious = 0 syntax was chosen over the obvious alternative of introducing a keyword pure or abstract because at the time I saw no change of getting a new keyword accepted. Had I suggested pure, Release 2.0 would have shipped without abstract classes. Given a choice between a nicer syntax and abstract classes, I chose abstract classes. Rather than risking delay and incurring the certain fights over pure, I used the traditional C and C++ convention of using 0 to represent "not there".
        -- https://books.google.ch/books?id=hS9mDwAAQBAJ&pg=PT333&lpg=PT333&dq=design+and+evolution+of+c%2B%2B+pure+virtual+function&source=bl&ots=xNkd4m47Xm&sig=qlEwxkxMQLyz6rVLyYT8_yFkD8c&hl=en&sa=X&ved=2ahUKEwidwvW_zuDeAhUGEiwKHftpDxcQ6AEwB3oECAMQAQ#v=onepage&q=design%20and%20evolution%20of%20c%2B%2B%20pure%20virtual%20function&f=false

        Шах и мат, аметисты.

        Хорошо ещё, что они это PURE не назвали, = 0 гораздо лучше.
        Ответить
        • >> C and C++ convention of using 0 to represent "not there".

          Можно еще примеров пожалуйста? Это он про укойзатель?
          Ответить
          • Ну, вероятно, ещё и про каст чего угодно в буль как сравнение с нулём.
            Ответить
            • >>буль
              Звук косания говна с поверхностью воды унитаза?
              Ответить
              • В современных унитазах да, в советских была специальная площадочка
                Минус в том, что она загаживалась быстро
                Плюс в том, что ты не получал водой по жопе когда случается буль
                Ответить
                • Они и сейчас бывают в продаже. Называются «унитаз тарельчатый».

                  А те, которые без площадочки, называются козырьковыми. Те, у которых дырка чётко по центру, обычно больше всего плещут водой по жопе. Те, у которых дырка смещена от центра, пафосно зовутся «система антивсплеск».
                  Ответить
                  • О чем бы я ни начал разговор на говнокоде: о математике, о сетях, о лингвистике, об электричестве, об унитазах -- всегда найдется эксперт.
                    Ответить
                      • Даже если завести разговор о гинекологии или о проктологии, тоже найдутся эксперты.
                        Ответить
                        • Кстати, почему кровь в стуле, а боли нет?
                          Ответить
                            • Ай, какой ты остроумный.
                              Разумеется, дело не в этом.

                              Скажи еще что от онанизма руки волосатые
                              Ответить
                              • Про волосатые руки миф, чтобы подростков запугивать. А про то, что зрение от онанизма садится, правда.
                                Ответить
                      • Я помню инканус рубил в лингвистике и в ретрокомпьтютенге, думаешь про унитазы тоже он?
                        Ответить
                        • Я вообще не думаю. Именно поэтому я за "PHP".
                          Ответить
                          • В "PHP" не надо думать, именно по этому я за "PHP".

                            Тут некоторые пытаются мне доказать что дескать программисту нужно думать, но я за разделение труда. Менять унитазы должен сантехник, думать -- философ, а программист должен программировать.
                            Ответить
                            • Набирать программу должен наборщик, редактировать -- редактор, корректировать -- корректор, тестировать -- тестировщик, отлаживать -- отладчик, архивировать -- архивариус.
                              Ответить
                              • Арифметические выражения должен писать математик
                                Логические -- логик
                                Ответить
                                • Управляющие конструкции должен составлять конструктор.
                                  Ответить
                                  • Взаимодействие с сетью должен реализовывать связист.
                                    Ответить
                                    • Компилировать сборщик, линковать -- связной.

                                      Напоминает роли в J2EE.
                                      https://docs.oracle.com/javaee/6/tutorial/doc/bnaca.html

                                      Enterprise Bean Developer (хочу им быть)
                                      Web Component Developer (ахахахахахха)
                                      Application Client Developer
                                      Application Assembler
                                      Application Deployer and Administrator
                                      Ответить
                                      • Напомнило Задорнова:
                                        — Я старший мерчендайзер!
                                        — А я контент-провайдер!
                                        Ответить
                                        • Мне еще только тридцать, а я уже супервайзер мерчендайзера

                                          А еще я клининг менеджер
                                          Ответить
                                      • Это всё сосет хуй у rational unified process.

                                        http://sce.uhcl.edu/helm/rationalunifiedprocess/process/workers/ovu_works.htm

                                        Capsule Designer
                                        Code Reviewer
                                        Database Designer
                                        Implementer
                                        Integrator
                                        Software Architect
                                        Architecture Reviewer
                                        Design Reviewer
                                        Designer
                                        Test Designer

                                        System Analyst
                                        Business Designer
                                        Business-Model Reviewer
                                        Business-Process Analyst
                                        Requirements Reviewer
                                        Requirements Specifier
                                        Test Analyst
                                        User-Interface Designer

                                        Tester

                                        Process Engineer
                                        Project Manager
                                        Change Control Manager
                                        Configuration Manager
                                        Deployment Manager
                                        Project Reviewer
                                        Test Manager

                                        Stakeholder
                                        Any Role (sic!)
                                        Course Developer
                                        Graphic Artist
                                        Tool Specialist
                                        System Administrator
                                        Technical Writer

                                        Вот сколько надо человек чтобы сделать продукт
                                        А не ваше, блядь, хуяк-хуяк и в продакшен
                                        Ответить
                                        • В "PHP" ничего из этого нет. В "PHP" даже школьник может выпустить целый проект. Именно поэтому я за "PHP".
                                          Ответить
                                            • >> на платформе Eclipse

                                              Тормозное говно.
                                              Ответить
                                                • Квакает только твоя мама на помойке, сучара!
                                                  Ответить
                                                  • Ага, значит это всё таки был квак анального неосилятора Сёмы, который решил залупнуться за одну из самых популярных платформ для IDE

                                                    Ясно-понятно
                                                    Ответить
                                                    • Нет, первый назвал Eclipse тормозным говном не Сёма. Он лишь подхватил ветку.

                                                      У Вас баттхёрт, когда кто-то критикует Ваше любимое тормозное говно?
                                                      Ответить
                                                      • Эклипс вовсе не мой любимый, но "тормозное говно" это не критика, это ламерство
                                                        Ответить
                                              • > тормозное говно
                                                Да ну, нормально работает на 32 гигах.
                                                Ответить
                                        • > Stakeholder
                                          Хранитель жаренного мяса?

                                          > System Administrator
                                          Наконец-то, хоть к кому-то можно обратиться.
                                          Ответить
                                        • > Это всё сосет хуй у rational unified process.


                                          Вот тебе смешно, я пользовался Rational ClearCase и писал ишью в ClearQuest мохнатой версии (там по умолчанию ещё везде был моноширинный шрифт, а Esc сразу удалял весь комментарий, который ты пишешь. Меня, как пользователя Vim, это тогда невероятно радовало).
                                          Ответить
                                          • > ClearQuest
                                            Отражает наглядность и интуитивность этой софтины?
                                            Ответить
                                            • > Отражает наглядность и интуитивность этой софтины?

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

                                              Может, СНаУТ помнит.
                                              Ответить
                                              • > Может, СНаУТ помнит

                                                А вы что, вместе работали? Или это что-то велл-ноун?
                                                Ответить
                                                • Ну вообще Rational были де-факто для ынтерпрайза в начале нулевых. Про Rational Rose только ленивый не слышал в то время.
                                                  Ответить
                                                • Очень давно гребли в разных проектах одного заказчика. Лично не пересекались.
                                                  Ответить
                                          • > я пользовался ClearQuest мохнатой версии
                                            Это что. А я из неё ещё отчёты генерил, вот где был АДЪ.
                                            Ответить
                                          • Я пользовался Doors и Polarion (реквайрментс менеджмент систем) и Sybase PowerDesigner:)
                                            Ответить
                                          • >> Меня, как пользователя Vim, это тогда невероятно радовало).

                                            Меня это добивает в Intellij с vim plugin.
                                            Пишешь коммит мессадж, хочешь сменить режым, жмешь ESC, и окошко закрывается (правда сохраняется драфт)

                                            Я писал автору плагина, он говорит "юзай CTRL+C"
                                            Ответить
                                        • > Tester
                                          Что? Всего одна роль? Они там вообще не тестируют что ли?
                                          - Test Automation Engineer
                                          - Test Automation Architect
                                          - Test Tool Engineer
                                          - Test Suite Responsible
                                          - Test Specification Writer
                                          - Test Engineer
                                          Ну это так, для начала.
                                          Ответить
                                          • Весь этот список с префиксом Test включая Test Graphic Artist'а.
                                            Ответить
                                            • Why not? Если ты графический редактор пилишь, то такая роль пригодится.
                                              Ответить
                                              • > Если ты графический редактор пилишь

                                                Почему. Скорее если у софтины есть строго сформулированные в ТЗ требования к дизайну (например, это модный мессенджер на электроне или мобильное приложение на триллиард пользователей, которое ребрендится), Test Graphic Artist может проверять работу другого художника, подходит ли она под требования закащщика к юзабилити или там ещё чему-нибудь. То есть логика. A делает по специальности, test A проверяет то, что делает А по специальности. А твоё предположение про редактор, там тестер, я так понял, должен рисовать в редакторе свои рисунки чтобы протестить, удобно ли? Чо-то не то, как-то ломает консистентность. Скорее уж он будет консультантом при разработке ТЗ, раз знает предмет.
                                                Ответить
                • На этой площадочке тоже была вода. А дырка у меня в самом переде (напротив бачка)
                  Ответить
                    • может зацепиться за дерево и потом (когда станет жарко летом) случится ужасное
                      Ответить
                          • А европа так в средневековье удобряла улицы и подлеснечные помещения
                            Ответить
                            • И замки тоже

                              Версаль засрут -- едут в Лувр на пару десятилетий
                              Ответить
                              • Тяжело было, воняло неимоверно. туалетная бумага - кора или придорожная крапива, еда тоже кора и крапива. А в битвах кушали мечи врагов.
                                Ответить
                      • Нахуй нужны эти деревья? На 1 этаже темно как в жопе.
                        Ответить
                        • >>Нахуй нужны эти деревья?
                          Обычно время поиска в них меньше чем в списках
                          Ответить
                          • Красно-чёрное самобалансирующееся дерево
                            Под моим окном
                            Принакрылось снегом,
                            Точно серебром.

                            На пушистых ветвях,
                            Снежною каймой
                            Распустились не дольше чем за O(log n) кисти
                            Белой бахромой.
                            Ответить
                          • Хочешь сказать, что если бы растения не ветвились, они бы были выше небоскрёбов?
                            Ответить
                              • Потому что в вашей луашечке если массив порвать то он сразу же начинает хуёвничать, кажется оператор решеточки у него портица
                                Ответить
                                • В "PHP" нет никакого оператора решёточки. Именно поэтому я за "PHP".
                                  Ответить
                                  • В пыхе кстати тоже попутали ассоцыативное массивы и обычные.

                                    Вообще забавно:

                                    в JS ассоц. массив и объект это одно и тоже, массив это частный случай объекта.

                                    В PHP объекты это объекты, массивы это массивы, но ассоц массивы это тоже массивы (как мне помница)

                                    В остальных скриптояпах (py, ru, per) это разные понятия

                                    И тут выделяеца луа, у которой есть только один нескалярный тип: табла

                                    Таблу можно сделать и массивом и объектом и даже неймспейсом в некотором смысле и конечно же можно сделать мапо/хеше/ассоц массиво

                                    Луа всех переплюнуло
                                    Ответить
                                    • В "PHP" у каждого элемента массива может быть два индекса: числовой индекс (по которому можно обходить массив как обычный) и символьный индекс (опциональный, по которому можно массив обходить как ассоциативный).

                                      Т. е. в "PHP" все массивы — это массивы, но к ним можно пристроить символьные индексы (хэш-таблицу, тогда foreach будет отдавать предпочтение символьным индексам, а не числовым).

                                      ***

                                      В JS вообще всё запутано. Там объекты появились не сразу. В каком ещё ЯП можно создать объект вызовом new Function()?

                                      Однако, JS, в отличие от "PHP", принципиально различает массивы с числовыми индексами и ассоциативные массивы (последние у него — фактически обычные объекты, а элементы ассоциативного массива — поля объекта).
                                      Ответить
                                      • P.S. В JS можно обходить циклом поля объекта (поскольку в нём ассоциативный массив и объект — это одно и то же), а в "PHP" нет (поскольку он различает объекты и массивы). Но в "PHP" можно сделать каст объекта в массив и обойти его, как в JS:
                                        foreach(array($someobject) as $key=>$value)
                                        Ответить
                                      • Идея смешивания "ключей мапы" и "полей объекта" в скриптовых мне нравится: там все равно нет статтупизации, так что не понятно зачем нужны две сущности.

                                        Так что тут внезапно я более согласен с JS чем в Python, Ruby, PHP и Perl.

                                        А вот смешивание массива и ассоц массива (как в PHP) мне не нравица потому что можно легко запутаца.

                                        Ну опять таки: я делаю исключение для Lua, потому что это его фишка:)

                                        ЗЫ: Забавно что отсутствие именованных аргументов в говнояпах часто лечица ассоциативными массивами (они же мепы, хешы и дикты).

                                        Основу заложил перл, руби съобезьянничало (правда потом завезло упр0щенный синтаксис, да дальше и вовсе исправило) а в JS так до сих пор и делают. И это бесит

                                        По этому я жа objc: там все аргументы именованы
                                        Ответить
                                        • > По этому я жа objc: там все аргументы именованы
                                          И имена вообще везде надо писать?

                                          Если опционально, то в питоне и scala тоже все аргументы именованы.
                                          Ответить
                                          • не опционально
                                            в обжси имя параметра это часть сигнатуры функции

                                            - (void)setName:(NSString *)title forPetuh:(GKPetuh*)petuh
                                            
                                            //вы3ов
                                            [myPetuhNamer setName:@"Coco!" forPetuh:petuh];
                                            Ответить
                                            • > в обжси имя параметра это часть сигнатуры функции

                                              О ужос, а нах?
                                              И без имён этих, вообще вызвать нельзя? Ну, если ты порядок аргументов помнишь. А почему просто имя переменной (title, petuh) не делать собственно и именем параметра?
                                              Ответить
                                              • Обмажуцца смолтолуоком, а потом в обжси ябуцца.
                                                Как в смольолке же, вместо вызова метода шлют сообшения объектам.
                                                Ответить
                                              • >>И без имён этих, вообще вызвать нельзя?
                                                нет

                                                Аргументы при вызове вставляются в специльнае места в сигнатуре функции.

                                                Объявление метода (это его имя!!)
                                                (void) fuck:(NSInteger)timesWith:(Human)


                                                вызывается как
                                                [objName fuck:42 timesWith:youngLady];


                                                Как видишь читается это как английский язык, но имя папараметра это часть имени функции, его физически нельзя упустить.
                                                Ответить
                                        • Идея смешивания - штука интересная и в некоторых случаях полезная, но тут лучше больше соглашаться с Lua, чем с JS. Когда мир идей и мир вещей уровень и метауровень смешиваются, ничего полезного не происходит, а открывается портал в мир ошибок.
                                          Ответить
                                • Так можно завести метатаблицу которая будет копировать таблицу с дырочками только без дырочек
                                  Ответить
                                  • можно сделать такую метататаблицу которая будет трекать все вставки объектов, хранить их количество и выдавать его по решоточке (я непо, но кажется можно с помощу метатаблы переопределить этот апиратор)

                                    Получица гибрид: ассоциативный массив то и обычный тоже
                                    Ответить
                                    • Я о том же. Но помоему в 5.1 отсувствует перегруз # __len. По этому можно сделать счетчик индексов или копированую таблицу. То есть перегрузить __newindex и index чтоб добавлять/удалять нормально и влияло на счет, не используя циклов.
                                      Ответить
                                      • >>5.1
                                        ну раз ты живешь в 2010-м году, то зайди пожалуйста на этот сайт и передай привет Тарасу.

                                        Here are the other changes introduced in Lua 5.2:
                                        Language
                                        tables honor the __len metamethod

                                        такшта ты прав
                                        Но 5.2 случился в 2011 же уже, там уже 5.3 стабильный
                                        Ответить
                                        • Забавно что 12 лет прошло с 5.1, а до сих пор его все юзают. Хуй знает из-за чего. Есть подозрения что тогда он был на пике популярности и на него накатали кучу библ и стали внедрять во все игры куда попало. А когда вышла эксперементалка в виде 5.2 некто уже не хотел перекраивать движки, да и библы не переписывали. Ну с 5.3 ситуация лучше, много уже библ перевели. Но до сих пор многие ввстраивают 5.1.
                                          Немного напоминает ситуацию с питоном 2 и 3
                                          Ответить
                                          • Кстати, что из полезного так и не перевели со второго Питона на третий?
                                            Ответить
                                            • Lettuce.

                                              Хотя погоди, ты сказал "полезного"?
                                              Ничего.
                                              Ответить
                                            • Хз, я не петухист. Но слышал что была ситуация такая.
                                              Ответить
                                              • Да была и есть частично.

                                                Был очень толстый нахрюк на реализацию юникода в тройке, автор фласка даже хотел форкать 2.7 и делать 2.8, но потом успокоился

                                                Вроде бы многие уже перешли на тройку, но двойка много где осталась (она питон по умолчанию на хуевой куче дистров например)
                                                Ответить
                                                • >> Создатель и основной автор — австрийский программист Армин Ронахер.
                                                  Ответить
                                                  • Армин уже отошел от дел кстати, фласк (кста он давеча релизнулся в 1.0!) пилят другие черти

                                                    У Армина жена русская, кстати
                                                    Он ебется, а ты -- нет
                                                    Ответить
                                                    • Зашёл на его сайт. Он теперь предлагает перейти с Питона на Питушню*?

                                                      * Rooster = петух, roost = петушня, ruster = питух, rust = питушня.
                                                      Ответить
                                                    • > У Армина жена русская, кстати

                                                      Это наверное тот чувак с говнокода, который недавно гуглил как выскочить замуж за программиста.
                                                      Ответить
                                                • Почему толстый нахрюк? Многое из того о чем он писал ывернули в следующих версиях питона.
                                                  Ответить
                                            • Twisted. На его основе были готовые прокси-сервера где можно было перехватывать запросы и возвращать свои ответы. На чем это сейчас прикажете писать?
                                              Ответить
                                • P.S. Пардон, массивы с хвостиками — это мем гд, а не гк.
                                  Ответить
                                  • у гейдев в хвосту массива канарейка чтобыслучайно за пределы не вылезти?
                                    Ответить
                      • Нахуй нужны эти деревья? На 1 этаже темно как в жопе.
                        Ответить
                    • Русня, это у вас так можно? Даже в нашем подъезде за это пизды дадут.
                      Ответить
                      • Эксперт по русне, дайте пару комментариев по этому поводу:
                        -Это дествительно похоже на поведение приматов?
                        - А что это означает когда примат в примата кидает какахи?
                        Ответить
                      • Да, конечно можно, у нас всё можно, у нас свободная срана, хочешь -- кидай гомно в окно, хочешь -- свесь жопу изокна и сри, хочешь – сри под дверь соседу, хочешь – обмажся говном и лезь обниматься к прохожим...
                        Ответить
                        • Да и в Украине бы за это пизды дали бы.
                          Ответить
                            • А ты кресты прямо по страусу учишь?
                              Ответить
                              • Да я вообще их не особо-то учу, просто почитываю кирпич страусий фофан, ну и что-то, что кажется интересным но не слишком заёбистым из упражнений, или смутные места в примерах кода (как итт) иногда пихаю в гцц.

                                Я джаву учу вообще.
                                Ответить
                                • Поймешь скоро что джава это кастрированый язычок для неосиляторов по сравнаню с крестами-то
                                  Ответить
                                  • > Поймешь скоро что джава это кастрированый язычок для неосиляторов по сравнаню с крестами-то

                                    Я это сразу понял, но как пишет ниже борманд, вроде как это не баг:

                                    - стандартизирован размер примитивных типов
                                    - всюду левая ассоциативность (стандартизирован порядок вычислений)
                                    - нет перегрузки операторов
                                    - нельзя кастовать массивы примитивных типов
                                    - ничто не приводится к логическому типу
                                    - нет перекрытия имен сущностей
                                    - только ковариантность в полиморфизме

                                    Единственное, что мешает ему быть совсем примитивным -- это наличие, внезапно, примитивных типов. Ну допустим. А в целом он довольно неплохо изгоняет демонов из крестов.
                                    Бойлерплейт бойлерплейт = нью Бойлерплейт();
                                    
                                    воид сетБойлерплейт(бойлерплейт) {
                                        зис.бойлерплейт = бойлерплейт;
                                    }
                                    
                                    Бойлерплейт гетБойлерплейт() {
                                        ретурн зис.бойлерплейт;
                                    }
                                    Ну в общем-то и хуй с ним. Много воды, но кроме объёма кода, багам больше негде спрятаться в какой-нибудь сложной логике взаимодействия чего-то с чем-то. Всё вроде как написано, и только то, что написано, то и происходит.

                                    Вроде как статическому анализу тоже хорошо подвергается. Хотя явных приведений типов многовато.

                                    В общем, идея сделать ваще тупой язык, на котором чтобы писать нужно знать три конструкции, пару концепций общих и ОГРОМНУЮ СТАНДАРТНУЮ БИБЛИОТЕКУ мне нравится, как альтернатива языкам, где надо знать миллиард конструкций, специальных синтаксисов, частных случаев, неявных приведений.

                                    Люблю я, разумеется, и то и то. Просто говорю, что жаба более чем имеет право на жизнь, кмк.
                                    Ответить
                                      • > переведи на 1с
                                        Вредно говорить на языках, продолжения которых не знаешь.
                                        Ответить
                                    • >>стандартизирован размер примитивных типов
                                      Всякие uint32_t завезли еще в C99.

                                      >>всюду левая ассоциативность (стандартизирован порядок вычислений)
                                      a++ + ++a, да?
                                      ok

                                      >>- нет перегрузки операторов
                                      О, да. BigDecimal.plus очень удобно. И массивы смердживать.
                                      И строки через equals сравнивать тоже.

                                      >>нельзя кастовать массивы примитивных типов
                                      К чему кастовать?

                                      >>- ничто не приводится к логическому типу
                                      ну это средних размеров плюс

                                      >>- нет перекрытия имен сущностей
                                      не понял.

                                      >>- только ковариантность в полиморфизме
                                      Массивы ковариантны (хотя крайне хуево), а генерики могут быть и контрвариантны тоже:
                                      List<? super Petuh>

                                      >>это наличие, внезапно, примитивных типов
                                      Без них довольно сложно было бы, например, скачать файл по сети. Представь себе сколько весил бы файл если бы вместо массива байт у тебя был бы массив указателей на обертки, по 4(8?) байт на каждую.

                                      Хотя работа с ними приносит боль, но хоть боксинг завезли (раньше и его не было)

                                      Твой код отлично показал что жава сосет:
                                      * нет вывода типов
                                      * нет дата классов
                                      * нет пропертей

                                      >>ОГРОМНУЮ СТАНДАРТНУЮ БИБЛИОТЕКУ
                                      В которой раньше надо было создать пять объектов чтобы считать из файла в строку, да:) И еще 50 строк чтобы из массива интов и лист Интов перевести

                                      Потому все юзали Guava, Apache Commons итд. Потому что библиотека слабая.

                                      С завозом стримов в восьмерку стало чуть лучше коечно
                                      Ответить
                                      • > К чему кастовать?

                                        Ни к чему нельзя, насколько я понял. Может у меня старая инфа, сейчас проверю, но вроде нельзя, например, массив байтов превратить в массив интов кастом.
                                        Ответить
                                        • >>массив байтов превратить в массив интов кастом.

                                          Да, потому что байт не наследник инта:) Читни про промоутинг и вайденинг
                                          https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

                                          А наследников, разумеется, кастовать можно (вот тебе кококококвариантность)

                                          class Jaba extends Petux{}
                                          ///
                                          Jaba[] s = {new Jaba()}
                                          Petuh[] a = (Petuh[]) s;
                                          Ответить
                                      • > средних размеров плюс
                                        Я перечислял не плюсы, а упрощения по отношению к языкам, которые на джаву повлияли

                                        > не понял.
                                        В большинстве языков у тебя может быть например переменная А в классе и переменная А как параметр метода. Если есть такая ситуация, другие языки просто выбирают более специфическую (объявленную в более узкой области видимости) переменную. В Джава же такой код вызовет ошибку компиляции. Сущности с одинаковыми именами могут быть только в непересекающихся областях видимости.
                                        Не скомпилируется:
                                        int a = 0;
                                        {
                                            int a = 0;
                                        }
                                        Скомпилируется:
                                        {
                                            int a = 0;
                                        }
                                        {
                                            int a = 0;
                                        }
                                        > Без них довольно сложно было бы
                                        Да, причину, почему так сделали, я прекрасно понимаю. Более того, языки на основе джавы, типа скалы, где нет примитивных типов, что-то не сильно заметно ПРОЩЕ джавы.
                                        Ответить
                                        • >> В Джава же такой код вызовет ошибку компиляции.

                                          Шото ты мене лечиш

                                          class Foo {
                                              private int a;
                                              void foo(int a) {
                                          	    int b = a; //это аргумент, если хочу поле то лучше через зыс
                                              }
                                          }

                                          Что тут не скопелируется?
                                          Ответить
                                          • > Шото ты мене лечиш
                                            Тот код, что я привёл, действительно не компилится. Но да, с параметрами работает, тут я пролечил. Короче, вот этот кусок кода:
                                            int a = 0;                    
                                            for (int i = 0; i < 10; i++) {
                                                    int a = 0;            
                                            }
                                            в С++ скомпилится, а Java даст error: variable a is already defined. А вот такой
                                            for (int i = 0; i < 10; i++) {
                                                    int a = 0;            
                                            }                    
                                            for (int i = 0; i < 10; i++) {
                                                    int a = 0;            
                                            }
                                            сработает везде.
                                            Ответить
                                      • > List<? super Petuh>
                                        Никогда не понимал смысл контрвариантности, может пояснишь?
                                        Вот я сделал полиморфную функцию, а зачем мне знать, что туда влезет какой-то класс и все его ПРЕДКИ. С потомками понятно, они гарантированно реализуют какой-нибудь контракт, имеют методы или поля. А обратно?
                                        Не понятно.
                                        Поэтому я за "ковариантность"
                                        Ответить
                                        • Представь функцию, которая добавляет Int в переданный тобой список. Ты можешь передать в неё список из Int'ов или список из Number'ов или список из Object'ов. Но вот список из потомков инта не прокатит - Int'ам среди них делать нечего.
                                          Ответить
                                            • Именно потому в кококококтлине и C# заместо дурацких supeer и exteends используют in и out.

                                              out -- можно вытаскивать
                                              in -- можно ложить в

                                              но смешнее всего сделално в pep-484:
                                              TypeVar('T_co', covariant=True)
                                              TypeVar('T_co', contravariant=True)
                                              Ответить
                                              • > Именно потому в кококококтлине и C# заместо дурацких supeer и exteends используют in и out

                                                in и out -- это хорошо, только если они не зарезервированы как ключевые слова, потому что иначе очень неприятно терять такие красивые имена переменных ((
                                                in и так во многих языках проёбан, навскидку в js, в python...

                                                Вот в скалке просто когда параметризуешь дженерик типом, к нему можно приписать ковариантность и контравариантность в виде [T], [+T] или [-T].
                                                Ответить
                                        • > Никогда не понимал смысл контрвариантности, может пояснишь?

                                          Рассмотрим предикат p : a -> Bool. Если он работает для a, его можно приспособить для чего угодно, из чего можно получить a.

                                          т.е. есть функция contramap : (b -> a) -> (a -> Bool) -> (b -> Bool), которая может взять проекцию из b в a, предикат для a, и сделать предикат для b.

                                          Если взять какой-нибудь compare : a -> a -> Bool, то он почти ничем не отличается от предиката, и с ним можно проделать такой же трюк.

                                          Вырисовывается шаблон.

                                          В убогой джаве мы не работаем с функциями высшего порядка, у нас нет никаких "проекций". Вместо этого у нас отношение "наследования", что по сути является очень специальной проекцией: из подтипа можно получить базовый тип. Из предиката T можно получить предикат T' extends T. Из Compare<T> можно получить Compare<T'>, где T' extends T.

                                          В общем случае, то, что производит/содержит значения, как список, является ковариантным функтором (функция тоже производит, a -> b производит b). То, что потребляет значения, является контравариантным функтором (функция тоже потребляет, a -> b потребляет a). То, что умеет делать и то, и другое, функциональщики называют профунктором (функция, как ты видишь, является одним из простейших профункторов).

                                          Т.е. контравариантность/ковариантность идут рука в руку. Ковариантность понимать почему-то проще, но она ничем не "лучше" своей дуальности, просто другая.
                                          Ответить
                                          • Спасибо. Теперь я думаю о коллекциях как о функциях
                                            Ответить
                                            • > Спасибо. Теперь я думаю о коллекциях как о функциях

                                              Так они и есть функции, из индекса/ключа в значение. Функция есть коллекция пар (a, b), где для каждого a ровно одно b, и любая коллекция с таким свойством есть функция.

                                              В скалке даже синтаксис для обращения к массиву или мапе идентичен:
                                              massiv(1)
                                              mapa("kokoko")
                                              Ответить
                                              • > В скалке даже синтаксис для обращения к массиву или мапе идентичен
                                                Только это сахарок, в действительности функция будет функцией, а мапа или массив будет объектом с определенным методом apply, имя которого можно опускать, и получается синтаксис со скобочками.
                                                Ответить
                                              • А если без зелёного, то так:
                                                <?php
                                                    class Petooh
                                                    {
                                                    	public $massiv = array('Kokoko', 'Koodkooduh', 'Kookarek');
                                                        public function __invoke($i)
                                                        {
                                                            return $this->massiv[$i];
                                                        }
                                                    }
                                                   
                                                    $a = new Petooh();
                                                     
                                                    echo $a(2);


                                                https://ideone.com/tbegCF
                                                Ответить
                                    • А да, ещё нет арифметики указателей и есть ГЦ. Короче, все "сложные" моменты С++ переделаны по принципу: если что-то сложно -- убираем это, не заменяя никакой алтернативой. А потом в стандартную иерархию классов хуярим что-нибудь, чем это можно будет заменить.
                                      Ответить
                                      • В джаве кромешная скука вместо доброго пердолинга. Нафиг такой язык, ящитаю. Впрочем, пердолинга в ней тоже хватает, с тулами, например, но и он уныл донельзя.
                                        Ответить
                                        • Пердолинг там в основном чтобы понять, кто кого вызывает в этом Spring-конфиге на XML в легаси-проекте на миллион строк кода, ГДЕ ВООБЩЕ ЧТО-ТО ПРОИСХОДИТ в этой иерархии делегирований от одного мега-полезного класса другому.

                                          В общем-то да, на редкость унылый и тупой пердолинг.

                                          То ли дело разбираться, почему у тебя прод в корку падает, или приложение на новой версии ОС зависает, хотя раньше работало.
                                          Ответить
                                            • core dumped в позиксах. Упал и записал дампу памяти

                                              если интересна этимология -- читать про память на ферритовых сердечниках
                                              Ответить
                                              • Кстати, TeX выполняет core dump не только в аварийной ситуации. Для него это часть штатной работы. Его можно попросить сделать core dump после компиляции пакета, а при следующем запуске попросить загрузить этот core dump, чтобы время на кококонпеляцию не тратилось. LaTeX как раз через core dump обычно и используют.
                                                Ответить
                                          • Спринг это еще не самое страшное, потому что во-первых он документирован, а во-вторых некоторые IDE его понимают и навигируются между XMLем и кодом (хотя вроде сейсас уже модно делать DI на аннотациях, вообще без XML).

                                            А вот когда в коде сплошой самопал это уныло, да. Надо читать простыни на 800 строк, особенно на шестой какой нить джаве
                                            Ответить
                                          • Когда что-то падает в корку, это тоже скучно и обыденно. В "VxWorks" этого нет, поэтому я за "VxWorks".
                                            Ответить
                                            • А я за дос
                                              Там просто надо перезагружать комп (ну или он сам перезагрузится)
                                              Ответить
                                        • > скука вместо доброго пердолинга
                                          Это да (

                                          А у меня приложение по интеграции разбито на джавовскую и скаловскую части, так что можно иногда передохнуть, а ещё груви-свиток написать хуёвый.
                                          Ответить
                                          • нравица тебе груви? метапрограммировал уже на нем?
                                            Ответить
                                            • > нравица тебе груви? метапрограммировал уже на нем?
                                              Хуй знает. Не, не метапрограммировал ещё, так, методом тыка написал пару говноскриптов, чтобы на продакшен вкатить кучу сущностей из csv-файла, потому что просто sql там не подходил, нужно было создавать именно сущности проекта, у них многие поля при сохранении в базу заполняются автоматически.

                                              Только шутку пока тупую про него придумал, что типа на самом деле этот язык и должен был называться JavaScript.
                                              Ответить
                                              • Груви ниразу не джаваскрипт
                                                Почти любой код на джаве валиден и для груви (но не наоборот)

                                                Кроме того груви можнок омпилировать
                                                В нем есть как мелкий сахар (литералы для массивов, проперти, лямбды были давно итд) так и крупный: возможность править AST в момент компиляции например

                                                Груви очень мощный язык на самом деле, но не выстрелело
                                                Ответить
                                                • > ниразу не джаваскрипт
                                                  > Почти любой код на джаве валиден и для груви (но не наоборот)
                                                  как раз-таки Java, только Script и получается. Я не про экма, я про то, что вот как раз груви и следовало бы назвать джаваскриптом, потому что это скриптовой язык, который понимает джаву. Почти. В первом же свитке столкнулся с проблемой, что в груви не различаются литералы в одинарных кавычках. Чтобы написать чар приходится писать ('a' as char).

                                                  Ого метушатинкой пахнуло. Даже затрудняюсь предположить, чего хорошего можно таким способом сделать, кроме разве что невообразимо сложную загадку оставить коллегам, которым придётся поддерживать код. Скорее всего такой скрипт останется валяться как ненужное легаси которое всем лень выпилить, а его функционал полностью продублируют парой десятков бойлерплейтных классов где-нибудь в другом месте.
                                                  Ответить
                                                  • Пахнуло дешевым AOPом: проверкой пермишенов, логированием, трейсингом итд

                                                    А кроме того пахнуло @Immutable, @Delegate (джава до сих пор не умеет!!) денепенденси инжекшеном итд


                                                    Шуту про скрипт понял -- ок
                                                    Ответить
                                                    • Посмотрел примеры в Вике. Мне он показался больше похожим на бидон, чем на жопоскрипт.
                                                      Ответить
                                                    • > Шуту про скрипт понял -- ок
                                                      На месте iso я бы переименовал Groovy в JavaScript, а то что щас называется JS в ECMAScript, как и должно быть. И пусть петушки, которые хотят делать веб-морды на модном языке, гуглят и читают про метапрограммирование и нормальное ООП, может гляди и говна поменьше станет в мире. Здравый такой хаос.
                                                      Ответить
                                        • > В итоге люди ваяют костыли вроде
                                          Да в общем-то в итоге люди в общей массе просто спонсируют производетелей железа. Потому что из-за того же ГЦ всё что есть на джава и её потомках ещё и нельзя класть в свап. А пердолиться всем не охота.
                                          Ответить
                            • Мне за что? Я в подъездах не срал и мусор в окна не кидал.
                              Ответить
                      • В нашем подъезде
                        По морде могут съездить
                        Ответить
    • > экономили ключевые слова
      в Форте вооюще нет ключевых слов. Именно поэтому я за "Forth".
      Ответить
      • В "PL/1" они вроде бы есть, но они лежат в отдельном неймспейсе, так что можно заводить переменные, имена которых совпадают с ключевыми словами:
        IF IF = THEN THEN THEN = ELSE;
                     ELSE ELSE = IF;

        Именно поэтому я за "PL/1".
        Ответить
  • Прекрасный синтаксис, ключевые слова purevirtual/pure virtual, как сделали бы сейчас дети длинного кодстайла или класс-интерфейс/протокол сильно бы программы не улучшили.
    Ответить
    • > Прекрасный синтаксис
      const int Psionic = 0;
      virtual int Psionic() = 0;
      long int Psionic = 0;
      Прямо так в глаза и бросается, что здесь два поля, инициализированных нулём, и один абстрактный метод ))
      Ответить
      • Инициализация при объявлении поля класса в С++? Никто сегодня по синьке с яблони вниз головой не падал?
        Ответить
          • Да вряд ли он имел ввиду, что так нельзя. Скорее имел ввиду, что так нехорошо, нет?
            Ответить
            • const нормально кмк, а вот не const лучше не надо
              но технически можно
              Ответить
              • конст-поля вообще идея сомнительная. хочется иммутабельности — делай сразу всё констом:
                MoiSranyiKlass a; // всё не конст
                const MoiSranyiKlass b = f(); // конст для всех, даром, и пусть никто не уйдёт обиженным
                Ответить
                • А если я хочу одно поле всегда чтобы было конст, а остальные могут быть мудабельные?

                  Кстати, а как сделать чтобы объекты класса всегда были только конст?

                  Фаброчиным методов вертать const?
                  Ответить
                  • > Фаброчиным методов вертать const?

                    Только делать все поля конст. Только это очень непрактично, проще экспортировать только конст-методы.
                    К примеру, объекты с конст-полями ты даже толком в вектор не положишь (как мувать?).
                    Ответить
                      • > а как жили до 11?

                        мувать в другом смысле. Если ты объект из середины удалил, тебе всё подвинуть надо. Это и оператором присваивания сделать можно, без всяких std::move. Только конст-поля тебе этого не дадут сделать.
                        Ответить
                              • > Кстати, а когда const cast не UB?

                                когда то, что ты кастишь, изначально не было объявлено как конст.
                                int x = 5;
                                const int& y = x;
                                int& z = const_cast<int&>(y); // OK
                                z = 6;
                                а ещё им volatile выпиливать можно.
                                Ответить
                                • А вот я не был бы так уверен...

                                  7.1.6.1 The cv-qualifiers.

                                  3. A pointer or reference to a cv-qualified type need not actually point or refer to a cv-qualified object, but it is treated as if it does; a const-qualified access path cannot be used to modify an object even if the object referenced is a non-const object and can be modified through some other access path.

                                  Закеширует конпелятор старое значение y и приехали...
                                  Ответить
                                • Хм, ну хотя ниже пример похожий на твой есть и утверждается, что это не UB.
                                  Ответить
                                • 5.2.11 Const cast

                                  7. Note: Dependng on the type of the object, a write operation through the pointer, lvalue or pointer to data member resulting from a const_cast that casts away a const-qualifier may produce undefined behavior.

                                  И кроме того примера никаких подробностей про этот may нет... Примеры в крестостандарте являются нормативными?
                                  Ответить
                                  • Может продуснуть а может и не продуснуть
                                    Зависит от... а от чего зависит?
                                    Ответить
                            • Только если формально убираешь const, но обещаешь ничего не писать?
                              Ответить
                              • Кстати, да. Скажем, если функция конецтуально const (геттер, например), а реально она может кешировать какое-то значение, так ведь делают... но ведь компилятор имеет право разместить const в read-only сегменте или в ROM?

                                Впрочем, ЕМНИП, const методы могут менять поля с модификатором volatile. По-видимому, тогда и компилятор экземпляр класса с volatile полями будет всегда размещать в обычной памяти.
                                Ответить
                                • >>а реально она может кешировать какое-то значение, так ведь делают

                                  см. mutable

                                  >>но ведь компилятор имеет право разместить const в read-only сегменте или в ROM?
                                  да, но причем тут функция?
                                  Ответить
                                  • > причем тут функция
                                    Он про функции с const, которые навешивают const на *this.
                                    Ответить
                                    • volatile значит убрать оптимизаци

                                      мутабл значит мутабл даже в конст функциях

                                      в общем мутабл всегда
                                      Ответить
            • > Скорее имел ввиду, что так нехорошо, нет?

              А чего нехорошего-то? Для структур — самое оно, гораздо удобнее, чем писать унылый конструктор по-умолчанию.
              Не знал он просто.
              Ответить
              • В древности так правда было нельзя, но думаю с 2003-го года уже можно
                Ответить
                • > А, свежатинка.

                  Ну так себе, уже 2 стандарта с тех пор вышло. Когда я только начинал писать на плюсцах где-то лет шесть назад, C++11 потихоньку уже внедрялся во многих местах.
                  Ответить
        • А, вот оно что. Да, ну это я просто С++ не знаю. Если среди кучки методов будет такая хуетень как = 0, то действительно будет заметнее чем любое ключевое слово.
          Ответить
        • Что не так-то?
          Отлично это работает, хотя и считается пошлостью.
          Ответить
  • Там теперь еще можно = delete и = default.

    Осталось дождаться = auto.
    Ответить
    • нахрена казе баян. C++ это уже такой дикий раритет. Скоро дажу в рутеры VM-ы пихать будут. Уже часы на 100кб на VM-ах работают.
      Ответить
      • я уже 20 лет слышу что С++ скоро всё
        А еще винде копец, да
        Ответить
        • В советских учебниках по информатике писа́ли, что машинные коды всё. Новые процессоры будут сразу принимать программы на языках высокого уровня.
          Ответить
          • Хорошо, что ты удаоение поставил, а то смысл бы исказился.
            Ответить
          • > на языках высокого уровня
            Дык так оно и есть. Скоро весь софт будет на экмаскрипте. Останется сделать аппаратный v8...
            Ответить
            • > Останется сделать аппаратный v8...
              реализовать на чипе amperka-js
              Ответить
            • Процессоры с аппаратной поддержкой байткода JVM уже есть.
              Ответить
              • Ну, как известно, Java и JavaScript --- это практически одно и то же, там наверное чуть-чуть переделать можно и в продакшен.

                (кто-нибудь в курсе истории, как в последнюю минуту переделали процессор бытового компьютера БК-0100ноль11что-то там10, потому что какому-то руководству внезапно показалось, что надо испортить все прежние наработки, и сделать его как ПДП-11, только лучше, якобы для совместимости софта, которая так никогда и не появилась, разумеется?)
                Ответить
                • >>Ну, как известно, Java и JavaScript
                  Как Словения и Словакия
                  Австрия и Австралия
                  Иран и Ирак
                  Швеция и Швейцария
                  Ответить
                  • Россия, Пруссия, и Беларусь
                    Джорджия и Грузия
                    Македония и Македония
                    Ирландия и Ирландия
                    Ответить
                    • >>Россия, Пруссия, и Беларусь
                      И Боруссия
                      >>Джорджия и Грузия
                      "Russian troops in Georigia, bye-bye CNN" -- шутка 2008 г.
                      >>Македония и Македония
                      Македония БЮРМ же.
                      >>Ирландия и Ирландия
                      IRA одорбряе такие шутки
                      Ответить
                        • Это смотря кто ты. Если ты протестант из Лиги Обороны Ольстера то да, а если ты ирландский католик то нет
                          Ответить
                            • интервент польский, у вас же прилагательное сзади же обычно
                              Ответить
                                • А так же Армия Крайова
                                  Армия Людова
                                  итд
                                  Ответить
                                  • Давайте изучать польский из игры worms 2. Поучительно и взрывоопасно.
                                    Ответить
                                    • У меня были они на русском
                                      Оче клёвые

                                      Святая граната
                                      Бесценная ваза минг
                                      итл
                                      Ответить
                                      • Там можно создать червячков с любым языком, чтоб на польском пиздели, русском, арабском, пиратском
                                        Ответить
                                      • Моя лубимая это worms armageddon. Там много прикольного оружия было: супер-овца, корова, бабулька, скунс, бетонный осёл.
                                        Ответить
                      • Трэба казаць не Пруссия и Боруссия, а Прусь и Барусь!
                        Ответить
                • >>здохли
                  но я вижу их след в каждом емаксе... в каждом столлмане...
                  Ответить
      • > Скоро дажу в рутеры VM-ы пихать будут.
        Да для крестов уже есть LLVM. Годен.
        Ответить
        • Но обчно все таки С++ превращается сначала в LLVM а оттуда в нативный код
          Ответить
        • > LLVM
          Ну его таки можно гонять в режиме интерпретации или JIT'а. Чем не VM?
          Ответить
    • Вот override - было бы красиво, чтобы отличать объявление новой виртуальной функции от переопределения. Ну и чтобы не ошибиться.
      Ответить
    • Они развлекают себя как могут. Потому что их страна страдает от дипрессии/стеснизма и суицидальных растройств чести. Так что все нормально, все анимушники такие.
      Ответить
      • >>дипрессии/стеснизма
        Возможно, вы имели ввиду дисперсии/сатанизма
        ?
        Ответить
          • Толи дело бразильцы: карнавалы водят, мясо едят, языки программирования придумывают

            Японцы тоже придумывают, но сложные
            Ответить
            • Да зато у бразильцев высокий уровень преступности. По этому они за карнавалы.
              - ограбили, растроился, - пошел посмотрел на карнавал с жопами и сиськами, уже не так растроен.
              Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8