Куча говна / Говнокод #19829 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
private void cb_activated(TreePath path, TreeViewColumn column) {
        Totem.Object t = (Totem.Object)this.object;
        uint selected = path.get_indices()[0];
        uint current = t.get_playlist_pos();

        if (selected > current) {
            for (int i = 0; i < selected - current; i++)
                t.remote_command(RemoteCommand.NEXT, "");
        } else if (current > selected) {
            for (int i = 0; i < current - selected; i++)
                t.remote_command(RemoteCommand.PREVIOUS, "");
        }
    }

Vala. Тормозит эта хуйня жутко, так как Totem открывает все файлы в плейлисте, пока не доберётся до выбранного.

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

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

  • нахуй вообще писать на ЯП который за 10 лет продвинулся с версии 0 до версии 0.30 и на ней застрял?
    Ответить
    • А на чём ты предлагаешь писать? Си с ручным управлением памятью? Или на говнопитоне? Писать-то можно на любом языке, только результат изменится не сильно.
      Тут смысл не в ЯП, а в ущербности биндингов.
      Ответить
      • > ущербности биндингов
        Нету команды для перехода к i элементу плейлиста?
        Ответить
      • Я тут недавно написал несколько лаб на Си с автоматическим управлением памятью (#include <gc>). И смело заявляю, что говнистость Си одним только ручным управлением памятью не ограничивается.
        Ответить
          • Невнятной системой типов (кастовать можно что угодно во что угодно, т.е. по-сути тот же ж.скрипт, только ошибка приведения типов либо пройдет незаметно, либо сегфолт). Ну и каст из int в float работает не так, как каст из int в struct какой-нибудь, например, Отсутствием инкапсуляции. Плохо продуманый синтаксис. Куча каких-то безумных и ненужных правил работы со знаковыми / беззнаковыми числами. Ну это только для начала.
            Ответить
            • Сишка это пиздец и блядство Царский Язык. Точка.

              >кастовать можно что угодно во что угодно
              Есть еще unionы и void*
              И если юнион таки удобная и годная штука, void* (да-да-да, в сишке есть не только автовывод типов, но и генерики).

              См также: "очень полезный тип указатель", "единственно верный тип данных массив"
              Ответить
              • в правда что 40 лет назад не было типа void*, а он назывался char*?
                Ну типа все что угодно это указатель на какой-то char?)
                Ответить
            • >>Невнятной системой типов
              да, в си достаточно слабая типизация. Но именно это и было нужно так как программист должен управлять памятью. Например, он знает что в памяти лежит 2 байта определенного формата, и кастит int с этими байтами в структуру).
              Понятное дело что писать бизнес-логику на этом грустно. Но это не говнистость, а особенность ЯП для конкретных задач. Иначе можно сказать что и ассемблер говнист.

              >>Отсутствием инкапсуляции.
              Инкапсуляция прекрасно достигается в сях! static функции + opaque types.

              >> Плохо продуманый синтаксис.
              да, синтаксис мог бы быть и по-лучше, согласен.

              >> Куча каких-то безумных и ненужных правил работы со знаковыми / беззнаковыми числами.
              Каких это?


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

              Молоток это говно! Им неудобно накалывать макароны (в той же вилке это в тысячу раз лучше решено!!). Им очень легко сломать себе ногу, если по ней ударить (заметьте: ни палка для селфи, ни мочалка такими проблемами на обладают!) и наконец молотком совершенно неудобно чесаться
              Ответить
              • > как я люблю когда человек не понял зачем нужен инструмент

                Как я люблю, когда языки программирования сравнивают с отвёртками и молотками!

                > Молоток это говно!

                Конкретно у этого молотка могла бы и не отваливаться ручка через раз.

                Сишка могла бы быть проще и удобней.
                Не втыкать все эти неявные касты, упростить синтаксис, предоставить вменяемую альтернативу макросам, изначально продумать модульную систему (теперь-то мы модулей уже никогда не увидим) и т.п.
                Ответить
                • Вменяемая алтернатива макросам - это настоящие макросы, а не синтаксическая хуилка. В Масме говорят макросы пиздатые.
                  Ответить
                  • пиздатые, да. Потому что макросы в АСМе куда важнее, чем в сях. Без них там было бы ну очень много бойлерплейта.

                    Касперски как-то приводил пример: ему нужно было повторить код N раз. Причем именно один и тот же код (не цикл, не вынос в функцию итд). В сях это почти никак не сделать, а в MASM делается макрос, коий параметризуется кол-вом повторений
                    Ответить
                • >>Как я люблю, когда языки программирования сравнивают с отвёртками и молотками!

                  и сразу же сам сравнил:
                  >>Конкретно у этого молотка могла бы и не отваливаться ручка через раз.


                  Причем заметь: я в своем сравнении указал на конкретную глупость: товарищ ждет от инструмента не того, для чего он был задуман.
                  А о чем говорит твое сравнение? что такое "ручка отвалилась"? что-то перестало работать? компилятор упал? что такое ручка?

                  >>Сишка могла бы быть проще и удобней.
                  Разумеется!
                  А теперь скажи мне: есть-ли такой язык, который идеален и не мог бы вот уже быть проще и удобней?


                  >>упростить синтаксис, предоставить вменяемую альтернативу макросам, изначально продумать модульную систему

                  Тогда это будет уже другой язык, правда?

                  А что вы все доебались до модульности? Что не так с модульностью то?
                  Неймспейсов нет, это плохо, а еще что?
                  Ответить
                  • а,я понял

                    вы о том что знание о депенденсах пишется 2 раза: сначала в виде импорта, затем в виде ключика в Make файле?)
                    Ответить
                  • > и сразу же сам сравнил

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

                    > А о чем говорит твое сравнение?
                    А что означает накалывать макароны молотком? Что здесь макароны?

                    > Что не так с модульностью то?
                    Её нет. Ваш кэп.

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

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

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



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

                      >>Ну и текстовые инклюды с перекомпиляцией хедеров
                      А есть percompiled headers вообще-то.

                      Пляски с include guards это правда оцтой, но например в Objc эту проблему решили конструкцией #import (не путать с VCшным #import).

                      >>Её нет. Ваш кэп.
                      Дайте пожалуйста определение модульности.
                      Ответить
                      • > Глупо ждать от "переносимого ассемблера" строгой типизации, правда?

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

                        > А есть percompiled headers вообще-то.
                        Костыль.
                        Ответить
                        • >>о создателям было лень писать явные касты руками.
                          стоп! Так претензия в _неявном_касте_ или в физической возможности скастовать поинтер в int _в_принципе_ ?

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

                          >>Костыль.
                          все, короче я понял чего вы хотите

                          Вот этого:
                          https://stoneofarc.wordpress.com/2013/06/25/introduction-to-objective-c-modules/

                          да?
                          Ответить
                          • >> Не втыкать все эти неявные касты
                            > стоп! Так претензия в _неявном_касте_ ... ?

                            читать умеешь, гест?

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

                            > все, короче я понял чего вы хотите
                            Хотим модулей хотя бы в том виде, в котором они реализованы в D.
                            Ответить
                            • Началось все с "кастовать можно что угодно во что угодно".
                              Посмотри выше.
                              Ответить
                            • >> Нуль, к примеру, прекрасно кастится к указателю даже в плюсах
                              Хочется верить что в 2016м году попытка его разыменовать приведет к ошибке в большинстве сред)

                              резюмируя:

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

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

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

                                  Нет. JS, вообще говоря, не самый удачный пример модульности 🙂 Образцом я лично считаю StandardML.
                                  Ответить
                                  • Да откровенно хуевый пример, по правде-то говоря.

                                    Даже за импортить модуль в языке нельзя, нужны левосторонние либы.
                                    Ответить
                                  • Погодите, я пока только про инкапсуляцию говорил. Вернее, про почву для инкапсуляции.
                                    Ответить
                                    • ох)

                                      инкапсуляция есть сокрытие внутренней структуры с использованием публичного интерфейса

                                      в сях это прекрасно работает, это те самые opque types о которые я уже изык разбил

                                      HANDLE в w32api
                                      ну чем не инкапсуляцы?
                                      Ответить
                                      • > HANDLE в w32api
                                        > ну чем не инкапсуляцы?
                                        Инкапсуляция, не спорю.
                                        Но в JS инкапсулировать легче. function в function через function и уже не то, что в одном и том же файле, в одной и той же функции питушня сокрыта.
                                        Ответить
                                • >>Язык задаёт тон
                                  Точнее сказать язык дает инструменты.
                                  Сишечка позволяет модульность, но модули нужно поддерживать руками:
                                  1) в .h файле
                                  2) в .c файле
                                  3) во всех местах испольхования
                                  4) в сборщике (передать нужные опции линкеру и компилятору)
                                  5) следить за ODR
                                  6) следить за неймингом

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

                                  Нет.
                                  В спецификации вот даже на IBM PC есть знания о том, по каким адресам в памяти доступен, например, BIOS.
                                  Очевидно что в си именно для этого можно пойти в память по определенному адресу.

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

                                  И снова: В Win32API _прекрасно_ реализована инкапсуляция. И не только в нем.
                                  Ответить
                                  • Каж жеж это прекрасно, когда можно случайно найти два файла-заголовка с одним и тем же прототипом но реализованым в разных местах, и по-разному, а потом в зависимости от того, что первым скомпилировалось поиграть в рулетку.
                                    Ответить
                                    • Это проблема отсутствия неймспейсов.

                                      Она есть, я не спорю. Но реально она решается путем конвенции: давайте функциям префиксы, и все будет работать.
                                      Ответить
                                      • Так вот проблема отсутстия неймспейсов - это и есть проблема инкапсуляции. Я не понимаю в чем спор.
                                        Ответить
                                        • нет

                                          Инкапсуляция прекрасно реализуется без неймспейсов. Разгребайте уже кашу в голове
                                          Ответить
                                          • > Инкапсуляция прекрасно реализуется без неймспейсов

                                            Ну так-то сишка на удивление мультипарадигменный язык. При должном усердии и внимании, в нем прекрасно реализуется модульность, инкапсуляция, полиморфизм, наследование, обобщённое программирование, функциональное программирование и даже автоматическая сборка мусора!
                                            Ответить
                                            • Во-первых да.

                                              Во-вторых неймспейсы это просто способ нейминга, к инкапсуляции он отношения не имеет.

                                              В ObjC нету неймспейсов, а инкапсуляция в Cocoa прекрасная.
                                              В PHP 6 есть неймспейсы, а инкапсуляции обычно никакой нет.
                                              Ответить
                                                • ну или 5.скока-то
                                                  когда там у вас эти спейсы появились?
                                                  Ответить
                                                  • в 5.4 вышел он по моему в 13 году.
                                                    Он не т в 5.4 трейты появились неймспейсы значит еще раньше в 5.3. а это 9 год.
                                                    Ответить
                                  • По поводу доступa к памяти по определенному адресу: это никак не заставляет кастовать адреса в числа и обратно. Ну будет тип "указатель" со значением "123", и будет тип "число" со значением "123" - проблема же не в этом, а в ненужной возможности подставить число вместо указателя, или прибавить число к указателу и т.д. Но это уже такая избитая тема, что и возвращаться к ней не хочется.
                                    Ответить
                                    • > ненужной возможности подставить число вместо указателя, или прибавить число к указателу
                                      А как мне обратиться к пачке memory mapped регистров по адресам 0xEFFF0000 .. 0xEFFF0007?
                                      Ответить
                                      • Никто не запрещает делать перебор адрессов, или массивы из них. Речь же не об этом, а о том, что адресса - это не числа и не нужно их друг с другом складывать, умножать и т.д. Никого же не смущает невозможность умножить целое на вещественное, почему тут такая сложность?
                                        Ответить
                                        • > друг с другом
                                          Друг с другом их и не дают складывать. Только с числом. И умножать-делить не дают. Только вычитать ещё можно (получается знаковое число). И указатели в числа и обратно не кастуются, если явно этого не захочешь...

                                          Вот у меня есть адрес начала блока 32-битных регистров. Как мне получить адрес i'го регистра в блоке? Кроме как прибавить число к адресу?
                                          uint32_t * regsBaseAddr = ...;
                                          uint32_t * currentRegAddr = regsBaseAddr + i;
                                          Ответить
                                          • я тебе даже больше скажу:

                                            вот у тебя есть знание о том, что волшебное яйцо лежит по адресу 0x1234.

                                            Как тебе по этому адресу обратиться не используя int? Ведь литерал 0x1234 будет иметь тип int, а значит придется int кастить в pointer!
                                            Ответить
                                            • Ну здесь можно было бы сделать специальный литерал для адресов, который бы не смешивался с числами. Например uint32_t * secretAddress = 0x1234P.

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

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

                                            К слову об замечательных инкапсуляциях в ВинАПИ: чет у них не очень получилось заинкапсулировать способ адрессации памяти, и врезультате такой замечательной инкапсуляции, 32-битные программы будут еще очень долго поддерживаться отдельными костылями.
                                            Ответить
                                            • лол, какие есть способы описать некое расстояние не прибегая к числам?

                                              >> не очень получилось заинкапсулировать
                                              Очевидно что дело тут в кривых руках пользователей. Если не использовать знание о размере поинтера, то проблем нет.
                                              Ответить
                                        • >> адресса - это не числа и не нужно их друг с другом складывать,

                                          cl.exe: error C2110: '+' : cannot add two pointers
                                          gcc: error: invalid operands to binary + (have ‘char *’ and ‘char *’)

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

                                              Ну тогда возвращаемся к первому вопросу:
                                              >>лол, какие есть способы описать некое расстояние не прибегая к числам?
                                              Ответить
      • > Си с ручным управлением памятью?

        А в Vala типа не ручное? Там ещё хуже - если в сишке понятно, что за всё сам отвечаешь, то с валой надо понимать, где какой сишный код сгенерится, что там управляемое, а что нет.

        Пытался ради интереса посмотреть эту порнографию, но уж лучше на C++ писать, и с "биндигами" проблем не будет.

        Даже Canonical забросил эту унылую Vala и фигачит новые проекты на Qt.
        Ответить
        • О, ну если даже сам Canonical забросил, то мне просто противопоказано писать на этом убогоньком недоязычке!
          Ответить
          • мне казалось что даже гномовцы забросили. больше планов все подряд на вала переписывать по крайней мере уже давно не выдвигается.

            с другой стороны, кто в нынешние времена вообще что-то новое на gtk писать начинает? все нормальные люди давно на WxWidgets или Qt пересели.

            https://www.youtube.com/watch?v=ON0A1dsQOV0
            Ответить
            • Ну, для GNOME 3.20 (впрочем, как и для любого другого релиза) было написано много нового софта. Всё на C, Vala, Python, даже немного на JS.
              Ответить
        • Мне кажется что управление памятью вообще не является проблемой при наличии _внятных_ конвенций кто за что отвечает

          например тот же reference counting легко организовать и в C, и например в ObjC (до ARC) люди прекрасно себе жили с полуручным управлением
          Ответить
          • Для этого должен быть отдельный тип - ссылка. В c(++) это целое, в котором может быть что угодно.
            Ответить
      • проблема этого кода и правда не в языке, но это не отменяет вопроса
        зачем пользоваться очевидно нестабильным, сырым, и при этом не развивающимся инструментом?
        Ответить
        • Потому что я не считаю этот инструмент нестабильным, сырым и не развивающимся. Я считалю, что он очень хорош, только недостаточно популярен.
          Ответить
          • конечно, ЯП версии 0.30 стабильный и не сырой
            конечно, ЯП за 10 лет прошедший путь от 0.0 до 0.3 быстро развивающийся
            Ответить
            • Ви так говорите, как будто в циферках версии действительно видно прогресс.

              Цифры версии вообще ничего не значат. Могут три мажорные версии поменять и поправить два минорных бага. А могут с 0.1 дойти до 0.2 и поменять вообще всё.

              Цифры. Цифры ничего не значат.
              Ответить

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

Где здесь C++, guest?!

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


    8