1. PHP / Говнокод #26465

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    <?php
    
      class Pet {
      
        protected $name;
    
        public function __construct($name) {
          echo "Setting name to " . $name . "\n";
          $this->name = $name;
        } 
    
        public function eat() {
          echo $this->name . " is eating.\n";
        }
      }
    
      $var = 30;
      $a_pet = new Pet("Spike"); 
      $a_pet->eat();
    ?>
    
    ---
    
    <?php
    
    function Pet__construct(&$objInst, $name)
    {
        echo 'Setting name to ' . $name . '
    ';
        $objInst['name'] = $name;
    }
    function Pet_eat(&$objInst)
    {
        echo $objInst['name'] . ' is eating.
    ';
    }
    $Pet = array('__vars' => array('name' => null));
    $var = 30;
    $a_pet = array_merge($Pet['__vars'], array('__type' => 'Pet'));
    Pet__construct($a_pet, 'Spike');
    Pet_eat($a_pet);

    Конвертер из ООП в процедурный стиль.
    Make PHP great again.

    https://github.com/PatrickZurekUIC/PHP-OOP-Converter

    Запостил: Fike, 05 Марта 2020

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

    • Spike may refer to any of the following fictional characters: <очень много>

      А интересно, этому есть реальный пример применения (для совместимости, например), или это потому что могу?
      Ответить
      • Разве только для обфускации, чтоб у любителей солида пердаки поразрывало.
        Ответить
      • Это для царей, которые считают, что ООП тормозит.

        А если серьёзно, то тут какая-то переголова: мы создаём ненужный экземпляр $Pet в качестве рыбы, и при создании нужных экземпляров копируем его (точнее, мержим с новыми данными). В случае, если нам нужен синглтон, у нас будет два экземпляра вместо одного. Пахнет прототипным программированием из жопоскрипта.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Ну ещё в «Object Pascal» («Delphi» и «FPC», например) бывают невиртуальные методы и статический диспатчинг.

            А в «PHP» даже обычные функции ищутся в глобальной таблице функций по имени. Так что в «PHP» можно не думать о способах вызова подпрограмм, потому что всегда будет хуёво.

            >> и на шарпе

            Интересно. Следует ли из этого, что кишки ООП в «C#» и в «Java» устроены по-разному? Какие принципиальные различия ООП в этих языках?
            Ответить
            • показать все, что скрытоvanished
              Ответить
            • показать все, что скрытоvanished
              Ответить
              • так а там кроме invokevirtual подставлять-то нечего. invokespecial не для обычных методов.
                Ответить
              • показать все, что скрытоvanished
                Ответить
                • [citation needed]
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Не понимаю этой категоричности из-за non final методов и наследования реализации.

                      Есть реальные примеры мейнстримовых языков, в которых можно легко и просто шарить реализацию без наследования? Сразу скажу, что всякие там default implementation как в Свифте не предлагать: максимум, что ты на них построишь, это синтетику или совсем уж примитивные вещи.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Почему у класса, наследник которого переопределил какие-то методы, должны быть какие-то проблемы? Мы же сейчас не говорим про случаи на всю голову отбитых разработчиков, верно?

                          А вот примеры на Котлине я нихуя не понял. Судя по вики, Котлин это чуть ли не единственный йезык, где это чудо поставляется с батарейками, но о чём это, я всё равно не допетрил.
                          Ответить
                        • Я не понимаю. Я тупая обезьяна.
                          Ответить
                        • Типа компилятор автоматически генерирует форвардинг вызовов "делегирующему" объекту?

                          Что там под капотом-то происходит? И что делать, если я хочу, чтобы Derived не Base конформил, а какой-то интерфейс, частично совпадающий с Base по сигнатурам?
                          Ответить
                • > всё таки налету там ничего не меняется
                  На самом деле там динамического питуха гораздо больше, чем в скрипте. Жабьей рефлексией можно менять всё что угодно, включая байткод любых методов и вообще классов (включая те, что в стдлибе), хакать жабокод очень приятно. Правда, это всё очень по-жабьему многословно, но зато нет такого, что из замыкания никакими способами нельзя вытащить захваченные переменные (дядя ПИ недавно замечательный пример приводит). И именно поэтому я за «Java» (в контексте динамичности).
                  Ответить
            • показать все, что скрытоvanished
              Ответить
              • Ребята, вы если не разбираетесь в теме, то лучше молчите.
                Hotspot с лёгкостью уже лет 10 как инлайнит виртуальные методы.

                1. https://wiki.openjdk.java.net/display/HotSpot/PerformanceTechniques
                2. https://shipilev.net/blog/2015/black-magic-method-dispatch/
                3. https://shipilev.net/jvm/anatomy-quarks/16-megamorphic-virtual-calls/
                4. https://www.nurkiewicz.com/2013/01/how-aggressive-is-method-inlining-in-jvm.html

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

                    Нет.
                    Он обходится без виртуальных функций даже когда два потомка и соответственно два метода. Чего C# не умеет в принципе.

                    См. ссылку №1
                    >Methods are often inlined. This increases the compiler's "horizon" of optimization.
                    >Static, private, final, and/or "special" invocations are easy to inline.
                    >Virtual (and interface) invocations are often demoted to "special" invocations, if the class hierarchy permits it. A dependency is registered in case further class loading spoils things.
                    >Virtual (and interface) invocations with a lopsided type profile are compiled with an optimistic check in favor of the historically common type (or two types).


                    > эта задача переехала в JIT, верно?
                    jit ничего не доказывает. Он собирает статистику. И если метод вызывается всегда только на одном классе — его инлайнят.
                    То есть инлайн будет происходить, в случае когда есть несколько наследников, но вызывается только один или два.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • >Кстати, а что будет, если потом вызовется всё таки другой метод?

                        Признайся. Ты не читал ни одну из данных мною ссылок.
                        Будет деоптимизация.

                        >И как заинлайнить метод на 900 строк в 900 мест?
                        Компилятору виднее. Если он решит что этого не стоит делать, то инлайна может и не случиться.

                        А ещё эти сволочи забрали у погромиста ключевое слово inline. Гады, ненавижу.сраказм
                        Ответить
                      • >Компиляторы C++ и C# умеют этим знанием пользоваться, а компилятор Java -- нет.

                        В мире джавашков, это принято считать не багом, но фичей.
                        Типа мы оптимизируем на месте, под конкретные машины и конкретные наборы классов.
                        Ну в целом «оптимизировать» байт-код виртуальной машины с jit, это как у реальной машины пытаться на ходу руками крутить колёса, чтобы та ехала побыстрее.
                        Из №4

                        Important remark is that it's the JVM, not the compiler. javac is quite conservative when producing bytecode and leaves all that work onto the JVM. This design decision turned out to be brilliant:

                        * JVM knows more about target environment, CPU, memory, architecture and can optimize more aggressively

                        * JVM can discover runtime characteristics of your code, e.g. which methods are executed most often, which virtual methods have only one implementation, etc.

                        * .class compiled using old Java will run faster on newer JVM. It's much more likely that you'll update Java rather then recompile your source code.
                        Ответить
                        • > на ходу крутить колёса

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

                            С тегом: #так_говорил_Борманд

                            Вкупе с этим:
                            https://govnokod.ru/26356#comment521479

                            «Оптимизировать байткод - это как опрыскивать говно духами.» ⓒ
                            Ответить
                          • но при этом добавил пятое квадратное, чтобы если оно вдруг завращалось, можно было бы деоптимизировать
                            Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • > аргумент про "JIT работает лучше, потому что знает конкретную архитектуру" я слышал от .NET, и может быть и правда

                            Ага.
                            Я тоже его слышал в далёком 2003.
                            Поставил я себе тогда этот «.NET».
                            Мама дорогая, как же оно тупило.

                            Но маркетинг был прекрасен:
                            «Много языков», «одна платформа», «оптимизация под ваш процессор».

                            Я тогда померял и VB.NET сливал по пирфомансу даже старому VB6.
                            Причём вроде даже в P-code. А то что шарпик сливал VC++, думаю и так очевидно.

                            Впрочем с тех пор и жаба сильно ускорилась и .NET тоже.
                            Ответить
                            • Ну в .net хотя бы ngen завезли...

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

                                    Реальная оптимизация «под конкретную архитектуру» и задачу, это профилирование ( -fprofile )

                                    Однако довольно мало либ поддерживают профилирование прямо из make.

                                    libx264 один из примеров.
                                    Ответить
                                • Да.
                                  -mcpu=native -march=native наше всё.

                                  Я так делаю, НО ИСКЛЮЧИТЕЛЬНО для тех либ и программ, которыми пользуюсь и где мне наверняка нужен пирфоманс.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • > что для большинства программ, собранных для i386
                                      Тогда не было столько инструкций.
                                      SSE, MMX. Ну и немного 3DNow.

                                      >2001
                                      SSE2 либо не вышел, либо только-только и все сидели на P3 и Атлонах. И это был на тот момент наиболее массивный набор новых комманд. 140+ инструкций, емнип.

                                      Сейчас же SSE2 — baseline для x64. Под него можно собирать все 64-битные пакеты.

                                      А после него идут: SSE3, SSSE3, SSE4.1, SSE4.2 (строки) AVX, AVX2, BMI, FMA, AVX512 (с кучей профилей)
                                      Простор для оптимизаций гораздо шире.
                                      Ответить
                                    • > собирателями всего из сырцов
                                      Бля, сумасшедшие какие-то…
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • А потом ебаться пару дней, потому что окружение не то, инклуды не там лежат, с кодировками проблемы, для сборки нужна куча левых утилит (ёбанный буст с его зависимостью от «Питона»), а в особо запущенных случаях это всё говно ещё и заточено исключительно под хуйцэцэ 1.2.345, а у тебя 1.2.346 и нихуя не работает.
                                          Спасибо, не надо, я лучше бинарь поставлю.
                                          Ответить
                                        • > на сервере 486 с 8-ю метрами памяти (это нормально для 2001-го года
                                          Проснись, ты обосрался даже проецируя свой цєлерон под Шиндошс XP образца 2020 года.
                                          Даже прыщепердолики в 2001 давно повыкидывали на помойку такие высококопроизводительные платформы класса Писюк
                                          Ответить
                                    • Ввод-вывод сливает в хламину этот ваш прирост пирфоманса. Чтобы заметить прирост, программа должна редко обращаться к вводу-выводу, а основное время что-нибудь вычислять.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • >А вот ffmpeg кажется что в теории может стать лучше

                                          Да. И то. Ну 3-5% максимум что я выжимал.

                                          Там же ручного ассемблера очень много.

                                          Самое лучшая оптимизация это просто собрать его шлангом. И сборка быстрее чем gcc. И бинарник оптимизированей.

                                          Причём --cpu=native --extra-cflags="-march=native" --extra-cxxflags="-march=native" даже немного просаживало пирфоманс при использовании clang.
                                          Почему так, я не знаю до сих пор.

                                          В ffmpeg code-base огромный, на старых процессорах он довольно долго собирается.
                                          Как это всё профилировать, хз.
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • Есть. На phoronix.com регулярно публикуются бенчи.

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

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

                                              А программы, которым не нужна скорость, и пересобирать бессмысленно.
                                              Ответить
                                              • показать все, что скрытоvanished
                                                Ответить
                                                • Ну там же не везде ассемблерные вставки.
                                                  А только на самые проблемные места, и самые частоиспользуемые кодеки.
                                                  Страшно заточенный декодинг H.264 сильно не ускорит.

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

                                                  >зачем что-то собирать под конкретную арихтектуру
                                                  Профит есть. Всё-равно там сишка есть.

                                                  > зачем что-то собирать под конкретную арихтектуру
                                                  Я руками собирал ffmpeg, когда его из убунты выпилили.
                                                  Плюс самая свежая версия, плюс своя сборка быстрее.
                                                  Ответить
                                                  • показать все, что скрытоvanished
                                                    Ответить
                                                    • >убунты
                                                      В 14 LTS эти анскильные отбросы завезли avconv/libav.

                                                      Я уже травил стори про это:
                                                      https://govnokod.ru/26372#comment522890
                                                      https://govnokod.ru/15663#comment225480


                                                      >ffmpeg version 3.4.6-0ubuntu0.18.04.1
                                                      Тоже не годится. Гавно старое.
                                                      Везде 4.2 давно.

                                                      Нидернмайер раньше на все жалобы так и отвечал: use CVS, use git.
                                                      Ответить
                                                      • показать все, что скрытоvanished
                                                        Ответить
                                                        • >ubuntu0.18.04.1
                                                          Я вижу.

                                                          >ну видимо вернули обратно уже
                                                          Это происходило с большим скрипом, срачем и жуткими проблемами.
                                                          Жаль потерял ссылку (или её удалили) на страницу где был целый ПЛАН по переводу убунты обратно.

                                                          Ответить
                                    • >Вот там приводились такие числа, что для большинства программ, собранных для i386, прирост перформанса был не выше двух процентов.

                                      Добрый день.
                                      Как раз профилировал шлангом одну либу.
                                      Прирост пирформанса составил около 3%.
                                      -O3 -DNDEBUG -fno-exceptions -fno-rtti в обоих случаях.
                                      BEFORE
                                           590380,747525      cpu-clock (msec)          #    1,000 CPUs utilized          
                                         314 615 135 817      branches                  #  532,902 M/sec                    (36,84%)
                                           7 687 825 688      branch-misses             #    2,44% of all branches          (42,11%)
                                           2 049 491 598      cache-misses              #    7,298 % of all cache refs      (42,11%)
                                          28 084 503 471      cache-references          #   47,570 M/sec                    (42,10%)
                                       2 177 027 682 462      cpu-cycles                #    3,687 GHz                      (42,10%)
                                       4 436 159 923 695      instructions              #    2,04  insn per cycle           (47,36%)
                                       2 059 537 202 260      ref-cycles                # 3488,490 M/sec                    (52,63%)
                                                 115 026      page-faults               #    0,195 K/sec                  
                                         785 256 805 808      uops_issued.stall_cycles  # 1330,085 M/sec                    (52,63%)
                                         607 571 316 917      resource_stalls.any       # 1029,118 M/sec                    (52,63%)
                                         108 294 975 039      L1-dcache-load-misses     #    9,52% of all L1-dcache hits    (52,63%)
                                       1 137 590 660 527      L1-dcache-loads           # 1926,876 M/sec                    (52,63%)
                                           1 641 229 503      LLC-load-misses           #   10,40% of all LL-cache hits     (52,63%)
                                          15 774 082 713      LLC-loads                 #   26,718 M/sec                    (52,63%)
                                             141 077 387      LLC-store-misses          #    0,239 M/sec                    (10,53%)
                                           3 608 639 540      LLC-stores                #    6,112 M/sec                    (10,53%)
                                      
                                           590,248197835 seconds time elapsed
                                      Ответить
                                      • AFTER
                                             574233,460398      cpu-clock (msec)          #    0,999 CPUs utilized          
                                           298 815 336 673      branches                  #  520,373 M/sec                    (36,84%)
                                             6 621 997 910      branch-misses             #    2,22% of all branches          (42,10%)
                                             2 013 138 568      cache-misses              #    7,246 % of all cache refs      (42,10%)
                                            27 782 345 271      cache-references          #   48,382 M/sec                    (42,10%)
                                         2 117 687 035 788      cpu-cycles                #    3,688 GHz                      (42,10%)
                                         4 333 384 475 521      instructions              #    2,05  insn per cycle           (47,36%)
                                         2 003 427 524 651      ref-cycles                # 3488,873 M/sec                    (52,62%)
                                                   114 950      page-faults               #    0,200 K/sec                  
                                           774 824 900 891      uops_issued.stall_cycles  # 1349,320 M/sec                    (52,62%)
                                           623 447 123 632      resource_stalls.any       # 1085,703 M/sec                    (52,63%)
                                           105 974 884 395      L1-dcache-load-misses     #    9,42% of all L1-dcache hits    (52,63%)
                                         1 125 485 795 117      L1-dcache-loads           # 1959,979 M/sec                    (52,63%)
                                             1 623 701 574      LLC-load-misses           #   10,11% of all LL-cache hits     (52,63%)
                                            16 066 328 851      LLC-loads                 #   27,979 M/sec                    (52,63%)
                                               136 336 311      LLC-store-misses          #    0,237 M/sec                    (10,53%)
                                             3 720 313 020      LLC-stores                #    6,479 M/sec                    (10,53%)
                                        
                                             574,937849586 seconds time elapsed


                                        А flto не помогло. Там что-то около 0.5%, в пределах погрешности.
                                        Уменьшение перепитуха компенсируется раздуванием кода и кеш-промахами icache.
                                        Ответить
                                        • ну 3% однозначно выше "двух процентов"
                                          скептики посрамлены
                                          Ответить
                                          • Это не учитывая профита от ручного билда под конкретную машину.
                                            Там ещё может быть от 1% до 5% за счёт AVX2 и прочих -mnative.

                                            Ну кому-то и 3% это ни о чём. Это сколько же нужно пирдолиться. Профайленный билд собирать в 2 раза дольше по времени, плюс нужно написать руками скрипт для двухпроходной сборки.

                                            А вот например для Гугла даже 1% и то хорошо.

                                            Our experiments show >2% performance
                                            improvement on clang bootstrap, ~1% improvement on Google workloads and
                                            1.6% mean performance improvement on SPEC IntRate 2017.


                                            Make flto great again.

                                            https://www.phoronix.com/scan.php?page=news_item&px=Machine-Function-Splitter

                                            https://lists.llvm.org/pipermail/llvm-dev/2020-August/144012.html
                                            Ответить
                                            • горизонтальное масштабирование в большинстве случаев будет самым адекватным решением проблемы с нагрузкой в ИС
                                              особенно, когда речь о лишь 3%

                                              видимо, стоит обсуждать случаи, когда горизонтальное масштабирование не вариант, и вообще никакое масштабирование не вариант, но их не так и много
                                              Ответить
                                              • Ну гуглу 3% расходов на тачки скинуть - тоже неплохо. В таких масштабах и время программиста на всю эту хуйню может окупиться.
                                                Ответить
                                            • > скрипт для двухпроходной сборки

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

                                                Кто ATLAS не собирал — жизни не видал. To proceed with a random ATLAS tuning in the face of CPU throttling, you can throw the configure flag: --cripple-atlas-performance.
                                                Ответить
                              • >оптимизацию во время установки софта
                                GENTOO
                                Ответить
                              • Просто было обидно, как меня подло наебали маркетологи.

                                Я ведь ждал царского пирфоманса, SSE2 всяких, а получил Microsoft™ Java, которая сливала даже Бейсику!
                                Ответить
                                • А ещё оно ну о-о-о-очень долго ставилось. Шло емнип на 3х CD.

                                  Я ради интереса наформошлёпал обычное оконное приложение. Запустил, и оно сожрало 50Мб памяти!

                                  ПЯТЬДЕСЯТ МЕТРОВ. Для понимания у меня тогда было 512Мб, и это было МНОГО, т.к. большинство тогда сидело на 256.

                                  Хорошо что я .NET ломаный взял. А кто-то ведь мог и купить это говно.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • >Но студия запускалась вечность.

                                      Ага. Я субъективно помню что всё дико тупило. Ставилось ну очееень долго.

                                      >Теперь у меня Студия 2017 и Coffe lake i7, а студия все равно запускается вечность

                                      Между прочим IDE от МS раньше считались очень шустрыми.
                                      VB и VC на слабых машинах грузились пулей по сравнению с Дельфями и Быдлером.
                                      Но потом в Майкрософт переманили главного борландовца и понеслась.

                                      >JVM в ту пору тоже не супер быстро работала в каком-нить pentium 3 tualatin:)

                                      Java тогда считалась самым медленным языком вообще. Но кроссплатформенным.
                                      Ответить
                                    • Я ещё тогда мечтал о MSDN на куче дисков. Ибо интернет был очень лимитирован, да и инфы было не так много.

                                      Вот как выглядела визуал-студия мечты
                                      http://img.xz7.com/up/2016-12/2016122883447.jpg
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • У меня был такой. Как раз по нему первые проги под винапи и писал...

                                          З.Ы. Обидно, что MSDN сейчас скатили в какую-то хуйню с битыми ссылками и корявым переводом.
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • >кто помнит Source safe? А spy++?

                                              Да, помню. Но source safe дрянь, не греющая душу.
                                              А аналог spy++ я и сам писал на winapi, причём куда информативнее.
                                              Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • >Я помню, как в студии .net переделали MSDN с chm на что-то такое, что стало грузиться пол часа

                                              Вот именно такое чувство от этого говёного .NETа было.

                                              Тупило вообще всё: инсталл, хелп, IDE и написнаные на нём программы.

                                              После VS 6.0 (немного проапдейченой Visual Studio 1997) это казалось просто каким-то тошнотворным тормозным ужасом.

                                              .NET это первая фрустрация от MS, а второй была Виста.

                                              Причём оба были долгостроями, и в итоге эталонный багор.
                                              Ответить
                                    • То ли дело Notepad++. Запускается быстро и не тормозит.
                                      Проверял свежие версии на Sandy Bridge питухе, на Coffee Lake питухе, и на Core 2 Duo питухе в марте 2020.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                      • Справедливости ради, «Notepad++», при всей моей любви к нему, сильно тупит при загрузке больших файлов (у меня — где-то от нескольких сотен мегабайт). А уж если в крупном файле включается подсветка синтаксиса — всё, пиздец, дальше только «taskkill /im "notepad++.exe" /f» (там, видимо, O(N^2) где-то обнаружилось, ведь математику учат только в рашке).
                                        Ответить
                                        • > больших файлов

                                          Причём вот он нормально работает с файлами гига на 3-4, но периодически какие-то фризы по полминуты, как-будто gc работает.
                                          Ответить
                                          • Да вы там поехавшие с суперкомпьютерами. У меня на ~6МБ уже начинает тормозить.

                                            * Тормозит, если включен спеллчекер
                                            * Тормозит, когда меняется длина количества строк (проскроллил с 999 на 1000 строки)
                                            * Тормозит, когда длинные строки не разбиваются \n и включён автоперенос
                                            Ответить
                                            • показать все, что скрытоvanished
                                              Ответить
                                            • less is more

                                              >У меня на ~6МБ уже начинает тормозить.
                                              А гоcть за vim совсем не зря топил.
                                              Ответить
                                              • > за vim не зря топил

                                                Ну да, проверил, vim на 5 гиговом файле вполне сносно работает. По крайней мере поиск и чтение. А редактировать такие файлы я и не собирался.
                                                Ответить
                                                • https://govnokod.ru/26423#comment527011

                                                  1024-- 15.02.2020 03:23
                                                  >Они там поехавшие совсем были?
                                                  >Или компьютеры настолько тормозили, что перерисовывать экран после нажатия кнопки было долго?


                                                  Ахахахах. Так компьютеры и сейчас ТОРМОЗЯТ.

                                                  1024-- 18 минут назад #>>531542 +2
                                                  Да вы там поехавшие с суперкомпьютерами. У меня на ~6МБ уже начинает тормозить.

                                                  Пока анскильные отбросы ждут ответа от редактора «What You See Is What You Get».
                                                  Настоящие Цари с vim и ed на 486 обгоняют суперкомпьютеры.
                                                  Ответить
                                                  • > на 6МБ уже начинает тормозить

                                                    Обмажутся своими экмаскриптами и электронами, а потом жалуются, что редактор на 6МБ текста тормозит.
                                                    Ответить
                                                    • И тут мы приходим к тому, о чём я уже говорил...
                                                      Ответить
                                                    • Питушня. Нет там электронов. Эта питушня ведь выросла из Сцинтиллы и внутри себя имеет быстрый C++ питух.
                                                      Ответить
                                                      • > ведь выросла из Сцинтиллы и внутри себя имеет быстрый C++ питух
                                                        Скриптуха бы сдохла на первом мегабайте.

                                                        Я уже говорил, что «problem with these editors is that Real Programmers consider "What You See Is What You Get" to be just as bad a concept in Text Editors as it is in women»

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

                                                        Хотя, казалось бы - зачем?

                                                        Они просто показывают свои мечты, своё желание быть чем-то большим, нежели веб-макака.

                                                        Поэтому никто тебе слово не скажет, если ты будешь говорить правильно "моя WYSIWYG там круто, кукареку".

                                                        Но проблема не в этом. Проблема в том, что каждый сектант с очередным недоредактором прибегает и рассказывает о том как же vim/less/ed/teco ненужны и как он всех победил.
                                                        Ответить
                                                        • показать все, что скрытоvanished
                                                          Ответить
                                                        • Высокосинтаксильно.
                                                          Ответить
                                                          • Они понимают, что WYSIWYG - говно. Они понимают, что они домохозяйки.

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

                                                            И пропаганда это так же использует.

                                                            Она как-бы даёт веб-макаке недоредактор на котором она может насрать хелворд и даёт возможность сообщить "дак я же как teco", "дак я же как vim".

                                                            Чего рядовой адепт сделать не может. Хотя они и пытались.

                                                            Все эти Notepad++ сектанты - это вчерашние адепты notepad.exe — ещё вчера они орали, что консоль — говно, а MS Word убьёт vim и вообще лучше vima.

                                                            Очевидно, что абсолютно неважно как человек действует тогда, когда он мнит себя хозяином и гладит холопа.

                                                            Всё проявляться тогда, когда нужно отвечать и обосновывать.

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

                                                            WYSIWYG-сектант просто мразь. Сектант попросту не осознаёт своей деятельности.

                                                            Он может свято верить в том, что валять в говне и кидаться говном - это и есть ответ и аргументация.

                                                            Важно показать, что это не так.
                                                            Ответить
                                                      • >и внутри себя имеет быстрый C++ питух

                                                        А teco, ed, ex, vim, less написаны на божественной Сишке!
                                                        В этом всё дело.
                                                        Ответить
                                                  • Питушня. Помню, видел WinHex. Открываешь диск на гигабайты, а ничего не тормозит. И графический питух, и визивиг.
                                                    Ответить
                                                    • Подтверждаю. «Hexplore», «HxD» не тормозят на любых файлах, рагулярно ими пользуюсь.
                                                      «Large Text File Viewer» тоже не тормозит на гигабайтах.
                                                      Ответить
                                                      • Virtual Dub Hex Editor. Самое быстрое что я видел из gui.

                                                        Специально написан для многогигабайтных файлов.
                                                        Ответить
                                                    • Ну у винхекса задача проще на порядок - ему не надо разбивать на строки.
                                                      Ответить
                                                      • показать все, что скрытоvanished
                                                        Ответить
                                                        • Вот лексер питушня уже правдоподобнее звучит. Разбить на строки - это однопроходный питух сложности O(1)..O(n) - от текущей точки на экран вверх, а лексер или даже парсер - это уже тормозящая питушня.
                                                          Ответить
                                                • >vim на 5 гиговом файле вполне сносно работает. По крайней мере поиск и чтение

                                                  Я гигабайтные логи смотрю строго через less.

                                                  Пайпы, нумерация строк, поиск, синтаксис такой же как у vima. Полёт отличный.

                                                  Короче царские редакторы опять слили в хламину гыгыкавших анскильных мразей.
                                                  Ответить
                                                  • Для логов и питушни less, для программирования, где сотня килобайт на редкий файл наберётся - npp.
                                                    Ответить
                                            • Да, он нестабилен на крупных файлах. Только что открыл .csv (без подсветки, но с переносом строк) на 155 мегабайт: всё летает, загрузил где-то за секунду, прокрутка мгновенная. Нажал «PageUp» — «Notepad++» ушёл думать секунд на тридцать. Какой багор )))
                                              Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                  • О, MSDN на трех CD... Помню, купил диск с Visual Studio 6.0 и еще кучей всего, включая WinRAR - потом пришлось в магазин возвращать, извините, там хелпы почему-то не работают. Привык, что в Borland C++ просто F1 нажимаешь и enjoy. Диск поменяли, а там то же самое T_T. Потом разобрался... Но баттхерт был, что документация в три раза дороже самой программы!
                                    Ответить
                                    • > MSDN
                                      > на трех CD
                                      Да у нас же тут инторнет-консервы!
                                      Ответить
                              • Кстати, про ngen: есть экзешник, а есть служба.

                                Если постоянно запущена служба «Microsoft .NET Framework NGEN v4.0.30319_X86» (она же clr_optimization_что-то-там), то всё тупит и вечно мало свободной памяти.

                                Всё работает намного быстрее, если выключить эту службу и вручную отправлять команду «ngen update» после установки программ. Тогда ресурсы будут потрачены только на перекомпиляцию новых модулей.
                                Ответить
                                • > постоянно запущена служба «Microsoft .NET Framework NGEN v4.0.30319_X86»

                                  Так и в жабе тоже какая-то служба под винду была.
                                  Java Quick Runner или Java Starter, что-то такое.
                                  Ответить
                  • >При этом это знание можно получить на уровне компиляции, и избавить JIT от ненужной работы

                    Зачем? Зачем?

                    Какие знания?

                    А если новую реализацию класса подгрузят класслоадером?
                    А если cglib сгенерит новый класс на лету?
                    А если просто подложат jar с классом-наследником?

                    Если класс не финальный нельзя делать такие допущения.
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • > пусть бы это работало только для финального класса. Но ведь и для него нет специальной инструкции.

                        invokespecial недостаточно специальна?
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Проверил, свежие версии явы даже приваты компилят как invokevirtual.
                            Интересно.

                            А старые версии javac вроде как превращали private final в invokespecial.

                            По крайней мере в JLS раньше так и писали
                            https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html
                            invokespecial

                            Invoke instance method; special handling for superclass, private, and instance initialization method invocations

                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Хз. Может HotSpot настолько по-царски питумизирует invokevirtual, что нужда в чём-то другом просто отпала.

                                Но раньше там целое объяснение было почему именно invokespecial на приватных методах.

                                class Pituz {
                                
                                    private void foo() {
                                        System.out.println("1");
                                    }
                                
                                    void print() {
                                        foo(); //invokespecial Pituz::foo
                                    }
                                }
                                
                                class FloatPituz extends Pituz {
                                
                                    void foo() {
                                        System.out.println("1.0f");
                                    }
                                
                                    public static void main(String args[]) {
                                        FloatPituz float = new FloatPituz();
                                        float.print();
                                    }
                                }
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • Вот раньше так себя и ява вела.

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

                                    https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7160765
                                    Ответить
                                  • Это кстати стало источником багров. Oracle похеру на обратную совместимость.

                                    https://blog.overops.com/oracles-latest-java-8-update-broke-your-tools-how-did-it-happen/
                                    Ответить
                              • Нашёл. В 8ой яве это убрали.
                                Я же точно помню, что раньше private превращался в invokespecial.

                                Release 8u20

                                Area: Specification / vm and HotSpot
                                Standard/Platform: Java SE 8
                                Synopsis: The verification of invokespecial instructions has been tightened so that only an instance initialization method in the current class or its direct superclass may be invoked.
                                RFE: 7160765

                                https://docs.oracle.com/javase/8/docs/technotes/guides/vm/enhancements-8.html
                                Ответить
                    • > Зачем? Зачем?

                      Действительно, зачем нам писать нормальный байткод?
                      Ответить
                    • > А если новую реализацию класса подгрузят класслоадером?
                      > А если cglib сгенерит новый класс на лету?

                      Пусть жит с этим и разбирается. Со стороны байткода никаких проблем нет.
                      Ответить
            • > А в «PHP» даже обычные функции ищутся в глобальной таблице функций по имени. Так что в «PHP» можно не думать о способах вызова подпрограмм, потому что всегда будет хуёво.

              Там еще и статика вынуждена каждый раз искать вызываемый метод. Какой late static binding )))
              Ответить
    • показать все, что скрытоvanished
      Ответить
    • Переведите на функциональщину, JAVA SCRIPT или HASKELL
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • Можно tl;dr для людей, опасающихся заходить в зону, где мартышки перекидываются друг в друга фекалиями?
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Проиграл - две полоски?
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Если чувак на тестере уже начал в Дум шпилить, то вряд ли там речь про две полоски в обозримом будущем
                Ответить
            • Почему проиграл?
              Ответить
              • Потому что две полоски осознано хотят один-два раза в жизни. На остальных попытках, которых в сотни раз больше, это таки фейл.
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • На нянь денег нет что ли?
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Не понимаю такого, если честно.
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • А они в секте какой-нибудь не состоят часом?
                            Ответить
                          • дал бог зайку — даст и лужайку

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

                                  Наверное, это индивидуально
                                  Ответить
                                  • Х.з., я бы вообще на одном остановился.
                                    Ответить
                                  • это всё оч индивидуально
                                    когда у тебя погодки, это вообще пиздец первые годы, смело их вычеркивай из жизни
                                    не все готовы на такие жертвы
                                    но зато через лет 7 ада ты вроде как свободен и снова нормальный человек

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

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

                                    ещё ОЧЕНЬ важно иметь возможность сбагрить ребенка бабушкам или хотя бы тётям или в садик - это дает возможность хотя бы на два часа выдохнуть и перегрузиться
                                    сегодня как раз обсуждалась в соседнем чате тема про сборщик мусора
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • Ну по крайней мере это уже человек. А не жрать-ссать-срать-кричать-спать по кругу весь день как первое время.
                                        Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                          • И снова отличный вопрос: зачем заводить ребёнка, если не знаешь, что потом с ним будешь делать? А многие заводят.

                                            > Мальчик до восемнадцати лет
                                            - паспорт же вроде намного раньше получают
                                            Ответить
                                            • Паспорт паспортом, а полных прав до 18 все равно нету. Местами даже до 21.
                                              Ответить
                                              • Но имя-то можно сменить (узнать, лол) при получении паспорта?
                                                Ответить
                                                • А кого оно ебёт?) Как был заткнись так и останешься.
                                                  Ответить
                                                  • Чот анекдот вспомнился, хотя и не совсем в тему

                                                    – Я Вася, но дома все зовут Наташей!
                                                    Ответить
                                        • Хорошее было время, помню, хоть и плохо
                                          Ответить
                                        • пока ребенок не ползает, у него вообще довольно ограниченный функционал
                                          относительно нормальное время, в которое реально даже сходить помыться!
                                          или в позе креветки в телефоне зависать (это плохо для спины)

                                          чуть дальше, до того, как начинает словами свои мысли выражать - сложнее
                                          изматывающе

                                          потом уже начинает слова, и чуть позже - предложениями
                                          но подступает кризис 3летнего возраста
                                          <вы находитесь здесь>
                                          Ответить
                                      • у тебя уже этот период?
                                        Ответить
                                    • > мамаши-антиваксы
                                      - а что, правда ситуация настолько плохая с этим, как пишут?

                                      > ещё ОЧЕНЬ важно иметь возможность сбагрить ребенка бабушкам или хотя бы тётям или в садик
                                      - есть такие родители (лично знаком), которые говорят, что нет-нет, никаких бабушек, они неправильно воспитают, разбалуют, испортят, в общем. И потом мама сидит с чадом до полного и окончательного помутнения
                                      Ответить
                                      • 100 лет назад, когда все жили в деревнях, нормальная тема была иметь кучу детей, а женщине переключаться с ребенка на другие задачи (которых дохуя было), пока за ребенком есть кому присмотреть - это нормальная схема, не истощающая психическое здоровье

                                        "нет нет никаких бабушек" это ебануто, ты не можешь несколько лет проводить в режиме 24/7 напряжения и спать по 6 часов, нужны выходные и время без ребенка, иначе никак
                                        тогда няня (и сад с некоторого возраста) спасут
                                        Ответить
          • > чтобы полноценно игру, ему пришлось заменить дисплей и контроллер

            Расходимся.
            Ответить

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