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

0

  1. 1
  2. 2
Почему Delphi не умирает? Кто родил Lazarus и нахуя? Чем C++ лучше Delphi? Почему php хуже delphi, c++  и всех прочих?
За что все так ненавидят WordPress?

У меня 4 часа утра, и эти ебучие вопросы не дают мне спать. Отвечайте, сритесь и бомбите, пожалуйста.

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

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

  • Это очень интересно, -
    Что в трамвае дребезжит?
    Почему скворец поёт?
    Почему медведь ревёт?
    Почему один в берлоге,
    А другой в гнезде живёт?
    Ответить
  • >>Почему Delphi не умирает?
    Потому же, почему и Cobol

    >>Чем C++ лучше Delphi?
    Кросс-платформенностью и поддержкой вендоров ОС компиляторов

    >>Почему php хуже delphi, c++ и всех прочих?
    Потому что почитай "фрактал плохого дизайна". Говно-к-говну.

    >>За что все так ненавидят WordPress?
    Не знаю кто там его ненавидит, но дыр в нем очень много

    Вот такие статьи:
    https://www.securitylab.ru/vulnerability/489434.php

    Говорят о крайне низком качестве кода, архитектуры и IQ разработчиков WordPress
    Ответить
  • > Почему Delphi не умирает?

    Умирает.

    > Кто родил Lazarus и нахуя?

    Всем похуй.

    > Чем C++ лучше Delphi?

    Потому что Delphi = Pascal = хуйня для школьников

    > Почему php хуже delphi, c++ и всех прочих?

    Delphi сразу нахуй. А PHP где-то лучше, где-то хуже.

    > За что все так ненавидят WordPress?

    За то, что он на "PHP" и на "MySQL".
    Ответить
    • >>Pascal = хуйня для школьников
      а ты, анон, знаешь что старая макось была написана на паскале?
      И всё вплоть до os x (коея есть ребрендинг nextstep) был сплошной поскаль?

      The standard language of Mac OS Classic was Pascal. The OS's API documentation was all written for Pascal, and as much of the OS as was not written in hand-optimized ASM was written in Pascal.
      Ответить
        • >>Как там, в 1996?

          Отлично. Apple недавно выпустила ньютон: такой маленький компьютер, не больше телефонного справочника. Там довольно много памяти (думаю около мегабайта), говорят что за такими штуками будущее, но мне кажется что мощности рабочих станций (типа сановских, тех что на sparc) все равно им не видать, а значит будущего у таких "маленьких" устройств нет.

          Зато там внутри NewtonOS, под которую можно писать на современных объектно-ориентированных языках: C++ и Newton Script. Вот за ООП точно будущее.
          Ответить
    • Как-то раз, пришлось повозиться с сайтом, написанном на С++( посонам "очень требовался"(С) какой-то нативный функционал который они иначе, как именно через жо.. плюсы получить не смогли )
      Такого г.на я никогда не встречал ни до, ни после. Собсно, с того самого момента и невзлюбил плюсы и именно тогда понял, что пых для веба - очень даже ничего(С)
      Ответить
      • > который они иначе, как именно через жо.. плюсы получить не смогли

        Т.е. они не догадались, что можно собрать расширение, запилив только то, что действительно нужно, на C++. Дальше можно не читать.

        > Такого г.на я никогда не встречал ни до, ни после.

        Какие-то рандомные веб-программисты не сумели в C++ ⇒ С++ — говно.


        Я согласен, что в неумелых руках C++ действительно, пожалуй, самый опасный язык.
        Ответить
        • >>Какие-то рандомные веб-программисты не сумели в C++ ⇒ С++ — говно.

          Так это же самый распостранненый паттерн:

          У моей подруги с ее парнем был опыт программирования на языке $LANGUAGE под оперциаонную систему $OS.

          У них там как-то все очень плохо получилось, с тех пор я знаю что $LANGUAGE и $OS -- дерьмо, и даже пробовать их не хочу
          Ответить
          • Старый анекдот:
            — Слушай, Изя, я-таки не понимаю, за что можно любить "Битлз"? Поют нечленораздельно, в ноты не попадают, слова путают.
            — А ты где их слышал?
            — А мне Мойша напел.
            Ответить
        • Похоже, нет. Самое забавное, что, тот, столь необходимый им "нативный" функционал так и не был найден в этой помойке, сайт был переписан под пых( yii ) и все остались довольны. Что это был за столь необходимый функционал - так и осталось страшной тайной..


          Плюсы не говно, тем более, что их на тот момент я знал их лучше пыха.

          Другое дело, что, сайт, запиленный на плюсах с полностью самописными говнофреймворками( включая роутинг. Отчасти, потому, некоторые страницы открывались лишь по адрес_сайта/страница/, но выкидывали 404-ю без последнего "/", либо, если была не "страница", а "Страница" итд ) - это.. не то, что, даже врагу пожелаешь )

          Но, проблемы были решены, сайт на плюсах отправился в утиль, а осадок остался. Собсно, хэппи-энд.
          п.с: хотя, неприязнь к нему связана, скорее, с его монструозной избыточностью, которая, тем не менее, нифига не упрощает жизнь( и разработку на нём ).
          Ответить
          • Если нормальной библиотеки нет, то будешь страдать. В современном мире всякие CRUD-ы с json-ами на плюсах писать весьма приятно (в Я у нас был классный самописный фрэймворк, в опенсорсе есть, к примеру, https://github.com/ipkn/crow ).

            Если 95% кодовой базы проекта на плюсах, то писать веб на чём-либо другом не рационально™
            Ответить
            • > https://github.com/ipkn/crow

              Readme доставляет.
              "If you just want to use crow, copy amalgamate/crow_all.h and include it.", заходишь в репу, а там "Latest commit 274aad8 on 17 Sep 2017 - Remove amalgamation result (`crow_all.h`) from the repository" в папке amalgamate.

              Или я не шарю и это build artifact?
              Ответить
            • >>Если 95% кодовой базы проекта на плюсах, то писать веб на чём-либо другом не рационально™

              Почему не взять шаблонизатор у которого есть байндинги?

              Даже сраный пых именно так и появлялся: бекенд у тебя на сишечке а пых нужен чтобы писать:
              <b><?=$petuh;?></b>

              Хотя с другой стороны для плюсов же наверняка дохрена шаблонизаторов
              Ответить
          • >> либо, если была не "страница", а "Страница"
            >>

            Регистрозависимость -- довольно распространённое поведение серверов. Если запросить статический файл на произвольном сервере, изменив регистр хотя бы одной буквы, то почти наверняка получим в ответ 404. Почему же тогда для динамических страниц нужна регистронезависимость?
            Ответить
              • Какой процент сайтов крутится на винде?
                Ответить
                • Малый, но все таки он есть.

                  SO на винде, правда статика не у них
                  Ответить
                  • Ну вот поэтому и "почти".

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

                      Все современные FS регистрозависимы, просто для NTFS и HFS (или как там у мака) оно отключено
                      Ответить
                    • Почему некоторые делают спрайты не в 1 линию, а в несколько столбцов?
                      Ответить
                    • Я часто вижу спрайты: это экономит место (одна таблица цветов) и экономит скорость загрузки (один файл а не 100500).
                      Ответить
              • Кстати, проверим на произвольном сайте:

                http://govnokod.ru/images/brand.gif -- работает
                http://govnokod.ru/images/Brand.gif -- а так 404

                http://govnokod.ru/comments/ -- работает
                http://govnokod.ru/Comments/ -- тоже работает (но уже благодаря роутингу в движке mzz)

                Конечно, круто, что поддерживается и /comments, и /Comments. Но ведь по всем ссылкам, кроме главной, мы откуда-то приходим, поэтому /Comments неоткуда взяться (этот вариант может появиться, только если юзер будет набирать URL по памяти или перебирать всевозможные URL грубой силой).
                Ответить
                • я думаю что там роутинг на уровне фреймворка из регулярок, и он может быть как CS так и CI
                  Ответить
        • > Какие-то рандомные веб-программисты не сумели в C++ ⇒ С++ — говно.

          Блядь, не хватало еще, чтоб голодные студенты и всякие сраные васяны из ПТУ писали бэкенд на таком блядском небезопасном говнище, как плюсы.
          Лучшие иксперты гугла, мелкософта, эпла и мозиллы не могут на плюсах нахерачить безопасный браузер, чтоб в нем не появлялись RCE уязвимости, а ты еще эту парашу предлагаешь на сервер-сайд ташить

          https://www.cvedetails.com/product/15031/Google-Chrome.html?vendor_id=1224
          https://www.cvedetails.com/product/3264/Mozilla-Firefox.html?vendor_id=452
          https://www.cvedetails.com/product/9900/Microsoft-Internet-Explorer.html?vendor_id=26
          https://www.cvedetails.com/product/2935/Apple-Safari.html?vendor_id=49
          Ответить
          • > ты предлагаешь на сервер-сайд ташить

            >> Если 95% кодовой базы проекта на плюсах, то писать веб на чём-либо другом не рационально™

            Где именно я предлагаю что-либо куда-либо тащить?

            > голодные студенты и всякие сраные васяны из ПТУ писали

            >> Я согласен, что в неумелых руках C++ действительно, пожалуй, самый опасный язык.

            Похоже, так бомбит, что даже читать разучился.
            Ответить
            • >> Если 95% кодовой базы проекта на плюсах, то писать веб на чём-либо другом не рационально™

              А кто такой умный, что решил писать кодовую базу для бэкенда на плюсах? Какова мотивация?

              >> Я согласен, что в неумелых руках C++ действительно, пожалуй, самый опасный язык.

              Он и в умелых руках опасный.
              Ответить
              • > Какова мотивация?

                А какой ещё язык можно было взять лет 10 назад, чтобы получить более-менее стабильное время отклика, без GC пауз? Или чтобы мемори лэйаутом управлять (индексы в память маппить, к примеру)?

                > Он и в умелых руках опасный.

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

            >> не могут на плюсах нахерачить безопасный браузер
            виноваты плюсы, конечно.

            Вот в проектах на PHP нет ни одной узявимости
            Ответить
            • Я вообще не понимаю, зачем в наше время создавать и поддерживать браузеры на "C++" с тоннами громоздкого кода, когда "PHP DevelStudio" позволяет создать свой браузер в несколько строк за два часа:

              http://community.develstudio.org/showthread.php/5047
              Ответить
              • Ого, какой PHP крутой:
                c("chromium1")->html = 'HTML Код';

                и всё!

                а C++ так не может, ахахахха
                Ответить
                • Вот, как раз как-то, когда я пытался изучать "C++", встал вопрос о слиянии нескольких строк; в итоге я так и не запомнил, как там это делается, и вообще плюнул на "C++". А ещё эти ёбаные типы данных...
                  Ответить
                • cahr* str = new char[strlen(IP1) + strlen(IP2) + strlen(IP3) + strlen(IP4) + 1 + 3];
                  Нет на свете ничего хуже и опаснее, чем мудаки, не осилившие string.
                  Ответить
                  • Ты можешь не волноваться, я не думаю что вы с ним когда-нибудь пересечетесь по рабочим вопросам.
                    Ответить
                  • А ты не умничай, браток, не умничай... Скольких коллег ты подвёл под монастырь (выгнали за некомпетентность) своими знаниями? Покайся.
                    Ответить
                    • Он не выгонят коллег, а сам уходит - так оптимальнее
                      Ответить
                  • У нас было два крестовика, 75 дотнетчиков, 5 сишников, полрастиста и целое множество скриптовиков всех сортов и расцветок. Не то, что бы это был необходимый запас сотрудников, но если начал собирать команду, становится трудно остановиться.

                    Единственное, что вызывало у меня опасение — это string. Ничто в мире не бывает более беспомощным, безответственным и порочным, чем мудаки, не осилившие string. Я знал, что рано или поздно мы столкнёмся и с этими мудаками.
                    Ответить
                      • стертор не только мудак, ламер и спамер но и паранойик: ему кажется что все тут только тем и заняты, что сидят под файками чтобы его одурачить.

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

                                  Старые же файловые системы (а так же современные, предпочитающие soft updates журналам) могут остаться в неконсистентном состоянии и тогда их нужно будет проверять и исправлять ошибки.
                                  Ответить
          • >Лучшие иксперты гугла, мелкософта, эпла и мозиллы не могут на плюсах нахерачить безопасный браузер, чтоб в нем не появлялись RCE уязвимости

            Железный факт.

            Причём уязвимы не только браузеры, но и остальной софт тоже.

            Потому-то мозилла изобрела питушню и даже переписала значительный кусок лисы, м$ сделал Microsoft Java (C#) и Microsoft JavaScript (ts) и даже переписал на него офис, эппл высрало свифт, итд.
            Ответить
            • вот из-за таких как вы мы так и летаем из пункта А в пункт Б на тех же дозвуковых скоростях, как в 60е
              /green
              Ответить
            • % Причём уязвимы не только браузеры, но и остальной софт тоже.

              Приведите яркие примеры уязвимого "остального софта".
              Ответить
              • Самый яркий пример -- /bin/false. Если даже эту хуйню не смогли с первого раза написать без уязвимостей (там было что-то в духе printf(argv[0])) -- то что говорить о другом софте?
                Ответить
              • З.Ы. Просто браузеры и веб-серваки общаются с огромным количеством недоверенных хостов, поэтому там все эти уязвимости выглядят ярко. Для большей части остального софта это унылые рандомные краши к которым все юзеры давным-давно привыкли.
                Ответить
                • Из статьи мыша (помним, скорбим): «Механизмы аутентификации, вызывающие множество нареканий еще со времен 9x, похоже не претерпели никаких радикальных изменений, откатившись назад в мрачную готическую тьму средневековья, когда нестандартные клиенты типа SAMBA предоставляли доступ ко многим защищенным ресурсам не требуя авторизации. Помнится, реакция Microsoft была такова: "SAMBA - это неправильный клиент, пользуйтесь штатными средствами Windows и у вас не будет никаких проблем". Похоже, парни из Рейдмонда не понимают, чем клиент отличается от сервера и до сих пор не въезжают в тему. А может, просто трава такая попалась. Термоядерная. Уж всяко не местная, подзаборная. Иначе чем можно объяснить тот факт, что протокол SMB держит для своих внутренних целей именованный канал (по-английски - pipe) "IPC$", через который можно подключаться к ресурсам netlogon, lsarpc и samr без аутентификации! В SMB2 этот список пополнился: "protected_storage" и "lsass"»
                  Ответить
                  • Т. е. в Микрософте считают, что если в сервере дырка, то не нужно пользоваться клиентом, который знает об этой дырке.

                    Нормально, да?
                    Ответить
                    • Я давно понял, что факт трудоустройства какого-либо программиста в квазиэлитной компании или корпорации необязательно является отражением зашкаливающей высоты его способностей. Самые примитивные ошибки себе позволяют не только дешёвые web-студии вроде "мы создали визитку для СургутНефтеГаза", но и такие акулки, как "Google", "Avito", "ВКонтакте" и небезызвестный "GitHub" (помнится, их гениальный администратор как-то разъебал в хлам базу данных).
                      Ответить
            • % Причём уязвимы не только браузеры, но и остальной софт тоже.

              Приведите яркие примеры уязвимого "остального софта".
              Ответить
    • > Умирает.
      > Всем похуй.
      > хуйня для школьников
      > сразу нахуй.

      Сёма детектед
      Ответить
  • > Чем C++ лучше Delphi?
    А я вот если брать не делфи, а фрипескарь, то реально, чем фрипескарь всем не угандил? Ведь он и кроссплатформиный, и свободный, и синтаксис просчще, и ООП присутствует, и вообще в паскалях давно юзают модули, а сиськобляди до сих пор ебутся с загорловочными вайлами.
    Ответить
    • https://www.lysator.liu.se/c/bwk-on-pascal.html

      На самом деле дело не в качестве ЯП как такового а в том, что стало де-факто и имеет поддержку вендора, компилятора, коммунити итд.

      Если я беру плюсы (не дай бог) то я знаю что у них серьезная поддержка от главного копелятора моей ОС (gcc на линукс, clang на bsd и макось vc++ на винде). Поддержка от вендора (ну у MS есть MFC).
      Мощные тулы (ReSharper++, CLion, PVSStudio, всякие *tags их умеют).
      Легкий интероп с плейнсями (по которым доки во всех API всех ОС) итд. Куча серьезных либ типа boost.

      А я беру фрипескарь и что? На форуме с двумя стерторами общаюсь?
      Ответить
      • Ссылка (www.lysator.liu.se) описывает старые реализации "Паскаля". Во фрипескаре уже многое не так.

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

        Фрипескарь живёт-бувёт, да развеваеца. На freepascal.org наличествуе носилёный форум, имееца бугтрацкер, буги-вуги испровляюца, имеецаг одная иде. Как с любами и тулзами не знаю, я на нём не пешу.

        > gcc на линукс
        Кчтати, ведь гцц тожэ умеит поцкаль?
        Ответить
        • Умеет, но gpc ("GNU Pascal Compiler") перестали включать в дефолтную поставку gcc, начиная с какой-то версии. Теперь его нужно качать в исходниках и компилировать.
          Ответить
          • Уточнил. Мейнтейнер "gpc" в 2010 году сказал: "Я устал, я мухожук". Теперь нужно самим брать исходники "gpc" образца 2010 года и патчить их под современный "gcc" (а с помощью проекта http://dragonegg.llvm.org/ их ещё можно использовать и с "llvm") ... или идти на фрипескарь, который сейчас развивается.
            Ответить
      • > 2.1. The size of an array is part of its type

        Вау, но в сишке-то, конечно, массивы ГОРАЗДО лучше.

        > it is not possible to write a single procedure that will sort them both

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

        > 1981

        Я смотрю, ты путешествуешь всё дальше в прошлое... Передавай Ричи и Маккарти привет.
        Ответить
        • Может, roskomgovno это Янус из "Понедельник начинается в субботу"?
          Ответить
          • Нужно подождать ещё немного. Тогда в этой ветке должна всплыть статья о том, что ENIAC уступает по производительности отделу счетоводов, вооружённых "Железными Феликсами".
            Ответить
            • Отдел счетоводов ещё и быстрее перестраивается под новые задачи. Да и входные данные на перфоленту (или перфокарты?) переносить не надо...
              Ответить
              • Помница, воробей из одной книжки летал на луну с калькулятором
                Ответить
        • >> 2.1. The size of an array is part of its type
          зато можно arr1 := arr2, если они одного типа

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

          В соврименых поцкалях можно передавать, например array of integer, его длину получить можно length(arr), а укозаткелями енто делали в старых поцкалях.

          Кстанти, давно что-то Стертор ничего не писал про дульфию
          Ответить
          • Open arrays (array of integer) появились ещё в Delphi 1.0, т. е. в 1995 году. Кстати, кто на ГК спрашивал, как там в 1996?
            Ответить
        • >>Вау, но в сишке-то, конечно, массивы ГОРАЗДО лучше.
          Конечно лучше. В сишке размер не является частью массива, и потому можно ловить лулзлы с дурачков, которые пришли из Java и пишут так:

          void doo(char a[]) {
          int i;
          for(i =0; i < sizeof(a);i++

          В паскале так нельзя (всмысле лулзы нельзя ловить)

          >>и арифметику указателей завезли.
          да, еще в борланд завезли

          >>Я смотрю, ты путешествуешь всё дальше в прошлое..
          ...сказали мне люди в теме, где обсуждают pascal
          Ответить
          • Тут ошибка. Надо писать так:
            for(i =0; i < sizeof(a)/sizeof(a[0]);i++
            Ответить
            • Вообще Роман прав конечно в том, что массивы сделаны через анус в сях.

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

              Почему, блядь?

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

              Тем не менее, бывают структуры с массивами внутри
              Ответить
              • Структуры и массивы -- это частные случаи кортежа. Причём разные.

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

                Массивы же состоят из однотипных элементов. K&R решили сделать массивы разных длин с одинаковым базовым типом совместимыми друг с другом. Ну чтобы если char a[42]; char b[265], то a и b были одного типа.
                Ответить
                • Почему сделали с массивами, но не сделали со структурами? Из char b[265] я могу выбрать слайс длиной 42, начиная с любого стартового индекса, так что он будет иметь все характеристики char a[42]. Со структурами такое возможно только в частных случаях, когда типы и размеры полей случайно совпали.
                  Ответить
                      • Да не, бомбоннуть должно фпрограми у тех, кто четаит ис памяти хумту.
                        Ответить
                    • В сишке это никого не волнует. Все массивы (кроме тех, что вложены в структуры) считаются бесконечными. А кому нужно bounds checking, тот идёт напаскаль.
                      Ответить
              • Структуры и массивы -- это частные случаи кортежа. Причём разные.

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

                Массивы же состоят из однотипных элементов. K&R решили сделать массивы разных длин с одинаковым базовым типом совместимыми друг с другом. Ну чтобы если char a[42]; char b[265], то a и b были одного типа.
                Ответить
                • >> массивы -- это частные случаи кортежа
                  хм)

                  Массив гомогенен, а кортеж нет.

                  >>Массивы же состоят из однотипных элементов.
                  да

                  Вот структура это кортеж, да
                  Ответить
                  • > Массив гомогенен, а кортеж нет.
                    Блять, частный случай, или ктота запирищаит какомута частнаму картижу быть из однопипных олиментов?
                    Ответить
                    • не запрещает, но думать о них надо иначе.

                      вот в пистоне многие дурачки думают чтокортеж это такой ридонли массив, ибо ниграмотноые
                      Ответить
                      • > многие дурачки думают чтокортеж это такой ридонли массив, ибо ниграмотноые
                        Это ты про себя, да? Пиздун.
                        Ответить
                        • Судя по тому как у тебя бомбануло -- я про тебя.

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

                            > у тебя бомбануло
                            открою секрет: у меня никогда не бомбит (я шизик)
                            Ответить
                  • > Массив гомогенен, а кортеж нет.

                    В ваших пистонах что в том, что в другом лежат сплошь PyObjectы, поэтому разница чисто косметическая. Ничто не мешает навалять в питоний список вперемешку bool, int, str и даже небо, даже Аллаха. Воистину, "кортеж это такой ридонли массив".

                    Можно считать, что питон — это такой OCaml, к которому компилятор забыли написать:

                    Tuples, records, and arrays are all represented identically at runtime as a block with tag 0. Tuples and records have constant sizes determined at compile time, whereas arrays can be of variable length. While arrays are restricted to containing a single type of element in the OCaml type system, this is not required by the memory representation.
                    -- https://dev.realworldocaml.org/runtime-memory-layout.html#tuples-records-and-arrays
                    Ответить
                    • >>В ваших пистонах что в том, что в другом лежат сплошь PyObjectы,
                      Во-первых это деталь реализации CPython, во-вторых в памяти лежат байты, и потому никакого типа данных кроме массива байт в компьютерах нет (привет, Царь), даже структур нету.
                      Ответить
                  • Когда я прочитал "массивы -- это частные случаи кортежа", сразу подумал про 1-кортеж, хранящий массив. Всё остальное - от лукавого перепития Солнцедара.
                    Ответить
              • Потому что длина массива работает только в паре мест -- при определении его размера на стеке или в теле структуры. Во всех остальных местах он автоматом вырождается в указатель без длины...
                Ответить
                • Ты путаешь причину и следствие.

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

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

                      char pituh[42];
                      pituh[36]= '0'
                      Ответить
                      • > char pituh[42];
                        блок памяти размером 42*sizeof(char)

                        > pituh[36]= '0'
                        36[pituh] = '0'
                        *(putuh + 36) = '0';
                        охуенные массивы
                        Ответить
                        • массивы (Если не юзать функции) ведут себя как массивы
                          а что они еще КАК-ТО себя ведут это не их проблема

                          протокол "массив" они выполнили
                          Ответить
                  • \ Почему в сишке длина массива имеет разный смысл в разных контекстах?
                    А сколко смыслов имеет длина массива, Сёма?
                    Ответить
          • > еще в борланд завезли
            а разви укозатилли это ничасть стандартнаго поцкаля?
            Ответить
            • Арифметики над ними не было. Ну помимо преобразования в число и обратно.
              Ответить
                • Но зачем вообще двигаться на 3 инта если ты работаешь не с массивом? Что за сишное мышление? Для всякой системщины вполне можно работать с адресами в виде чисел, а потом преобразовать их в указатель на нужный тип.

                  > если это 16ти битный поскаль
                  Там, емнип, можно было аккуратно собрать указатель из сегмента и оффсета. А не тупо кастить инт в указатель и надеяться, что это прокатит при текущих настройках конпелятора.
                  Ответить
                  • я заванишил потому что подумал что неча тащить сишную терминолгию в божественный поскаль

                    >>собрать уко
                    там было 3 сорта укозателей:
                    1) near (только оффсет)
                    2) far (сегмент:оффсет), но он врапился к началу сегмента
                    3) huge (или как-то так) который имитировал плоское пространство, крутя и сегмент и смещение, но страшно тормозил потому что его нельзя было просто увеличить
                    Ответить
                    • В общем так: реализация указателей в разных паскалях была разная. В общем случае это был чёрный ящик. Указатели можно было сравнивать, можно было разыменовывать, можно было копировать.

                      В трубопаскале до 4-й версии все указатели были near, ибо модель tiny. В следующих трубопаскалях добавили far и встроенные функции Seg, Ofs и Ptr, чтобы разбирать указатели на части и собирать. Кастовать far в longint было можно, но это не имело смысла, ведь получался не линейный адрес, а ерунда. Линейный адрес (если он вдруг требовался) получали сами (в защищённом режиме его вообще можно было получить только через API).

                      Арифметика указателей не использовалась, потому что в любом паскале было принято использовать тайпдефы. Безликий указатель типа pointer можно было кастовать в указатель на что угодно.
                      Ответить
                      • Пример:
                        type bytearray = array [0..9000] of Integer;
                            pbyterray = ^bytearray;
                        var p: pointer;
                        begin
                        ...
                        pbytearray(p)^[42] := 265;
                        ...

                        А, да, была арифметика в виде функций Inc, Dec, Succ, Pred, с помощью которых можно было получить указатель на следующий или предыдущий элемент массива (если указатель типизированный) или тупо уменьшить/увеличить на единицу.
                        Ответить
                        • pbytearray(p)^[42] := 265;

                          - это пиздец. Как это читается вообще? pbytearray стал функцией, принял pointer и потом хитрым образом разыменовался?

                          Похоже, я знаю, чем вдохновлялись ребята, которые родили такое http://fuckingblocksyntax.com/
                          Ответить
                          • В Паскале любое имя типа может использоваться как „функция“, приводящая тип.

                            В сишке есть что-то похожее, но там скобок больше:
                            x = (int)(y);
                            Или даже так:
                            x = (int)y;


                            А в крестах к этому добавились static_cast<>, dynamic_cast<>, const_cast<>, reinterpret_cast<>.
                            Ответить
                            • А свой каст как сделать? Хочу свою уютную структурку приводить к хуйпиздеджигурде.

                              Кстати, а что будет, если потом p прикастовать к другому типу? Мусор или какой-нибудь поскакалевский bad_access?
                              Ответить
                              • В Паскале приведение типа — это как reinterpret_cast. Слепое копирование данных, так что будет мусор, если данные несовместимы.

                                В некоторых случаях компилятор выбрасывает ошибку (если есть возможность проверить размер и размер не совпадает).
                                Ответить
                              • >>bad_access
                                ios/macosник detected.

                                EXC_BAD_ACCESS это обращение по невалидному адресу памяти. Будет оно у тебя или нет, зависит от того получатся-ли у тебя кривые указатели после твоего каста или нет
                                Ответить
                  • Я ничего не вижу. Что там? Какая-то белая пелена заволокла глаза. Это хуй?
                    Ответить
      • А вдруг кто-то использовал BWCC из другого языка? Ну тупо импортировал bwcc32.dll?
        Ответить
        • технически это возмжно, на практике же я не думаю что так кто-то делал

          Какой там был интерфейс? Обычные функции с PASCAL колконвешнеш? Или там были типа-классы с манглеными именами?
          Ответить
          • В 16-битной BWCC.DLL всё просто: обычный интерфейс для той ОС (да, в Win16 в качестве колконвеншен был PASCAL):
            LIBRARY     BWCC
            
            DESCRIPTION 'Custom Controls Copyright 1989-1993 Borland Intl'
            
            EXPORTS
                WEP                            @8   ; WEP
                _BWCCCHECKWNDPROC              @13  ; _BWCCCHECKWNDPROC
                _BWCCASPECIALDIALOGPROC        @20  ; _BWCCASPECIALDIALOGPROC
                SHADESINFO                     @21  ; SHADESINFO
                SHADESSTYLE                    @22  ; SHADESSTYLE
                SHADESFLAGS                    @23  ; SHADESFLAGS
                BUTTONSINFO                    @24  ; BUTTONSINFO
                BUTTONSSTYLE                   @25  ; BUTTONSSTYLE
                BUTTONSFLAGS                   @26  ; BUTTONSFLAGS
                CHECKSINFO                     @27  ; CHECKSINFO
                CHECKSSTYLE                    @28  ; CHECKSSTYLE
                CHECKSFLAGS                    @29  ; CHECKSFLAGS
            и т. д.
                BWCCINTLINIT                   @16  ; BWCCINTLINIT
                BWCCINTLTERM                   @17  ; BWCCINTLTERM
                BWCCREGISTER                   @18  ; BWCCREGISTER
                BWCCDEFGRAYDLGPROC             @19  ; BWCCDEFGRAYDLGPROC


            В 32-битной bwcc32.dll (барабанная дробь) коллконвеншен cdecl, как в Win32 и... все названия функций слово в слово, как в 16-битной dll.

            Пример из "bwcc.h":
            extern int BWCCAPI BWCCMessageBox
            (
              HWND        hWndParent,
              LPCSTR      lpText,
              LPCSTR      lpCaption,
              UINT        wType
            );
            Ответить
            • Исправление: не cdecl, а stdcall, конечно же.

              Надеюсь, суть ясна. Эти библиотеки можно дёргать из чего угодно, хоть из скрипта напитоне.
              Ответить
                • #if !defined(__FLAT__) && !defined(WIN32)
                  
                  #define BWCCAPI FAR EXPORT PASCAL
                  
                  
                  #else
                  
                  #define BWCCAPI APIENTRY EXPORT
                  
                  #endif
                  где #define APIENTRY WINAPI, а WINAPI в свою очередь в файле <windef.h> определено как __stdcall, если не _MAC и если _STDCALL_SUPPORTED.

                  Макрос PASCAL, кстати, определён как __pascal только в Win16, для остальных систем его определяют как __stdcall или как пустую строку (чтобы можно было старый код портировать по-тупому).
                  Ответить
                  • забавное решение: можно скомпилироваться и под win16 и под win32 одновременно.

                    >>FAR
                    Я уже забыл что такое дальний применительно к кол конвеншену в протектеде.
                    Это значит что кол у нас в другой сегмент может быть?
                    Ответить
                    • Да, FAR означает, что call запихивает в стек и смещение, и сегмент, что позволяет прыгать в другой сегмент. На практике FAR в x86 применялся в моделях с 16-битным смещением (Windows 3.x, 16-битные программы OS/2, 16-битный DPMI, ну и реальный режим).

                      Теоретически FAR может применяться и в 32-битных моделях с PAE (у Watcom C/C++ даже есть возможность генерации такого кода, если указать модель памяти не flat, а какую-нибудь другую), но какими программами это использовалось в реальности, я не в курсе.
                      Ответить
              • Джузеппе тупо сохранил на FTP установленный пакет Borland C++ 4.5.

                Кстати, OWL252F.DLL — это уже библиотека с замангленными именами. Её уже не так просто подключить, как bwcc.
                Ответить
            • Ради зелененького чекбоксика на OK и красненького крестика на Cancel надо брать.

              Столько всего было понаписано в конце 90-х на этом.. У меня, например, была карта города с такими вот кнопочками)

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

            Подозреваю, что на практике на такое способен только кто-нибудь из завсегдатаев ГК, да и то на спор, а не в серьёзном проекте.

            Обычно всё же для UI берут „искоробочные“ средства, если только не пишут какой-нибудь Winamp с 9000 сменных шкурок или что-нибудь гипермультиплатформенное.
            Ответить
            • Тоже так думаю. Все таки RAD берут чтобы не думать а просто набрасывать кнопочки на формочку.

              А винамперы берут голый GDI (или даже DirectX) и рисуют там на канвасах
              Ответить
          • Скачал bwcc32.dll.

            ААААА:
            #!/usr/bin/python
            # -*- coding: windows-1251 -*-
            
            import ctypes
            
            bwcc = ctypes.cdll.LoadLibrary('bwcc32.dll')
            
            bwcc.BWCCMessageBox(0, 'Какой багор )))', 'Привет с питона', 0x33)
            Ответить
            • не пробовал, но хочу спросить: а што, ctypes такой умный что прямо умеет питонову строку в сишную преобразовать?

              за попробую с нотивным виндовым messagebox

              йобушки воробушки, иправда
              import ctypes
              
              user32 = ctypes.cdll.LoadLibrary('user32.dll')
              user32.MessageBoxA(0, 'foo', 'spam', 0);
              .

              Интересно, сработает-ли MessageBoxW (юникодная версия) если сделать u'' ?
              Ответить
              • Выяснил, что ctypes.cdll предполагает, что у всех импортируемых функций конвеншен cdecl, а ctypes.windll предполагает, что stdcall.

                Значит, для большинства библиотек нужно использовать ctypes.windll, а ctypes.cdll использовать только для MSVCRT и подобных с сишной конвенцией.
                Ответить
                • import ctypes
                  
                  user32 = ctypes.windll.LoadLibrary('user32.dll')
                  user32.MessageBoxA(0, 'foo', 'spam', 0);

                  фиксд
                  Ответить
                  • Мне простительно. Я не питонист, в отличие от Сёмы.
                    Ответить
                  • да ладно, стертор, ты наверняка не знал что такое кол конвеншен
                    Ответить
              • Выяснил, что ctypes.cdll предполагает, что у всех импортируемых функций конвеншен cdecl, а ctypes.windll предполагает, что stdcall.

                Значит, для большинства библиотек нужно использовать ctypes.windll, а ctypes.cdll использовать только для MSVCRT и подобных с сишной конвенцией.
                Ответить
                • ты прав, надо так

                  ctypes.windll.LoadLibrary('user32.dll')


                  Забавно что и cdll сработало, хотя и ругнулось конечно
                  ValueError: Procedure called with not enough arguments (16 bytes missing) or wrong calling convention
                  Ответить
            • Задумался как оно работает с точки зрения тредов. Посмотреть стек трейс.
              7	USER32.dll!WaitMessage+0x15
              8	USER32.dll!DialogBoxIndirectParamAorW+0x108
              9	USER32.dll!SoftModalMessageBox+0x757
              10	USER32.dll!SoftModalMessageBox+0xa33
              11	USER32.dll!MessageBoxTimeoutW+0x52
              12	USER32.dll!MessageBoxTimeoutA+0x76
              13	USER32.dll!MessageBoxExA+0x1b
              14	USER32.dll!MessageBoxA+0x18


              Понятия не имею кто такой SoftModalMessageBox, но думаю что он там event loop крутит (ну и блочнулся на WaitMessage)
              Ответить
      • А вдруг кто-то использовал BWCC из другого языка? Ну тупо импортировал bwcc32.dll?
        Ответить

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

Помни, guest, за тобой могут следить!

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


    8