1. JavaScript / Говнокод #27573

    +2

    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
    type int = 1;
    
    function makeRangeIterator(start = 0, end = 10000, step = 1) {
        print("makeRangeIterator.");
    
        let nextIndex = start;
        let iterationCount = 0;
    
        const rangeIterator = {
    	next() {
                let result: [value: int, done: boolean];
                if (nextIndex < end) {
                    result = [nextIndex, false];
                    nextIndex += step;
                    iterationCount++;
                    return result;
                } else {
                    result = [iterationCount, true];
                }
    
                return result;
            },
        };
    
        return rangeIterator;
    }
    
    function main() {
        let it = makeRangeIterator(1, 10, 2);
    
        let result = it.next();
        while (!result.done) {
            print(result.value); // 1 3 5 7 9
            result = it.next();
        }
    
        print("done.");
    }

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

    Запостил: ASD_77, 16 Августа 2021

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

    • вот вам дампик https://pastebin.com/3kqDz26R
      Ответить
    • вот результат работы
      C:\temp\MLIR_to_exe>out.exe
      makeRangeIterator.
      1
      3
      5
      7
      9
      done.
      Ответить
    • ну и как без SEO поста https://github.com/ASDAlexander77/TypeScriptCompiler
      Ответить
    • Теперь кресты не нужны, я правильно всё понял?
      Ответить
      • когда сделаю женерики то да
        Ответить
      • Если ты программируешь на крестах как на JS, то да, тебе кресты не нужны
        Ответить
        • а в чем проблема сделать нормальный компилятор на крестах ... когда даже самый тупой студент (типа меня) может написать компилятор лучше :)? на коленке. И что такого в JS крамольного чего нельзя на крестах сделать?
          Ответить
          • >а в чем проблема сделать нормальный компилятор на крестах ..

            А ты читал стандарт?

            >И что такого в JS крамольного чего нельзя на крестах сделать?
            Не понял этой фразы.

            На JS очень много чего нельзя сделать, что можно на крестах.

            Если Лолечка пишет на крестах как на JS (без шаблонов, умных указателей, предсказуемых деструкторов, объектов на стеке и пр) то может ему и правда кресты не нужны
            Ответить
            • > что такого в JS крамольного чего нельзя на крестах сделать
              > На JS очень много чего нельзя сделать, что можно на крестах
              Ответить
              • ..и?

                Борманд, переведи. Я тебя обычно хорошо понимаю
                Ответить
                • Ты же не любишь "PHP".
                  Ответить
                • 1) exists x, works_in_js x /\ not (works_in_cxx x)
                  2) exists x, not (works_in_js x) /\ works_in_cxx x
                  Ответить
                  • Оба утверждения верны, хотя наверное очень скильный петух скажет, что первое ложно
                    Ответить
                    • На няшной можно написать рантайм жс и получить все фичи жс. Так что первое таки ложно.

                      С другой стороны, на жс тоже можно написать конпелятор няшной...
                      Ответить
                      • На JS можно написать VM, и в ней запускать ASM.
                        Ответить
                      • На любом языке можно написать компилятор любого другого языка, так что нет разницы на чем писать

                        Предлагаю писать на bat файлах
                        Ответить
                        • В «ДОСе» можно было BAT-файлом высирать COM-файл и запускать его (если сможешь подобрать машинные коды из ASCII-символов).
                          Ответить
                          • А с помощью него сгенерить оставшиеся коды и уже писать нормальный конпелятор?
                            Ответить
                            • Ещё можно было ассемблировать программы с помощью «debug.com».
                              Ответить
                              • Мне вот обидно, что у STM'ки есть режим, в котором через последовательный порт можно ей в память насрать код и запустить. Но какая-то из этих команд, то ли загрузка то ли запись, не ASCII. А так можно было бы всю прошивку с нуля наебашить буквами, без всяких там конпеляторов и программаторов...
                                Ответить
                                • А, вот в чём проблема там была.

                                  Сами команды вполне так ascii: 0x31 (write memory) и 0x21 (go). Но дальше вторым байтом надо передать их дополнение. И вот оно уже по определению не ascii т.к. в старшем бите будет единичка.
                                  Ответить
                              • Блин, из-за вас опять хочется бутстрапнуть что-нибудь с нуля. Как уже избавиться от этой идеи?
                                Ответить
                                • Напиши свою ось без тонн ненужного говна
                                  Ответить
                                  • Такая ОСь уже есть, например FreeRTOS.
                                    Ответить
                                  • > Напиши свою ось без тонн ненужного говна

                                    Ну разве что под какой-нибудь ARM'овский SoC с четырьмя ядрами, чтобы потренироваться в беге с барьерами...
                                    Ответить
                                    • ARM and IBM POWER multiprocessors have highly relaxed memory models (c)
                                      Ответить
                                      • Да ARM тоже прогибается понемногу... L1 у ядер когерентный, в свежих спеках мне даже глава про шину с полной когерентностью попадалась.
                                        Ответить
                                        • в смысле не нужно кеш явно синкать, всякие меси месы работают?

                                          Пиши тогда скорее, а то опопсится всё, и будет как x86, чтобы каждая макака моглда
                                          Ответить
                          • А в винде нельзя?
                            Ответить
                            • Высрать то можно, но на 64-битке ты потом COM без пердолинга не запустишь.
                              Ответить
                  • Говорящий логический квадрат!

                    Все, бегом в машину Тьюринга!
                    Ответить
            • >> Если Лолечка пишет на крестах как на JS (без шаблонов, умных указателей, предсказуемых деструкторов, объектов на стеке и пр) то может ему и правда кресты не нужны

              JS - это один большой шаблон. все обьекты - это умные указатели. предсказуемые деструкторы не нужны там нет прямой работы с ресурсами. обьекты на стеке тоже не нужны даже в с++. как в маленький стек можно впихнуть 2гб данных?
              Ответить
              • >JS - это один большой шаблон.

                Шаблоны это технология метапрограммирования, которая позволяет генерировать классы и функции, которые затем статически диспатчатся, а JS это язык программирования без статической типизации.

                Не понятно как одно может быть другим.

                > все обьекты - это умные указатели
                Умные указатели в C++ бывают нескольких видов: одни гарантируют свою уникальность, другие реализуют reference counting давая программисту предсказуемый вызов деструктора.

                Ни то, ни другое объекты JS не делают.

                > деструкторы не нужны там нет прямой работы с ресурсами.

                В смысле в JS никогда не нужно закрывать файл или сокет?
                Но это не так
                https://www.geeksforgeeks.org/node-js-fs-close-method/
                https://developer.mozilla.org/en-US/docs/Web/API/WebSocket/close

                > обьекты на стеке тоже не нужны даже в с++.

                Это не правда: нет смысла размещать объект не на стеке, если ты не собираешься использовать его за пределами функции, и если он не слишком большой.

                >как в маленький стек можно впихнуть 2гб данных?

                C++ поддерживает объекты размером менее двух гигабайт данных.
                Ответить
                • >>Это не правда: нет смысла размещать объект не на стеке,
                  почему вы решили что доступ к стеку быстрее доступа к heap? вроде чипы памяти одни и теже и время доступа там одна и тажа. или вы не умеете использовать стек в хипе? ну получается мифическая вера в размещении на стеке это "просто боговерования". т.к. не дает преимущества ни в скорости использования ни в способе размещения объектов
                  Ответить
                  • >почему вы решили что доступ к стеку быстрее доступа к heap?
                    Не доступ, а выделение.

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

                    Доступ к уже выделенной памяти не должен сильно отличаться.

                    https://publicwork.wordpress.com/2019/06/27/stack-allocation-vs-heap-allocation-performance-benchmark/
                    Ответить
                    • >> Выделение памяти в стеке это просто изменение значения одного регистра, а аллокатор в куче гораздо сложнее.

                      точно? чем это он сложнее?
                      1) *stack = malloc(100000000000)
                      2) stack++, stack--

                      все... что тут сложного? new (stack) Class1? что тут еще сложнее?
                      Ответить
                      • Если смотреть ня абстракции — разницы никакой. А если открыть, няпример, https://github.com/bminor/glibc/blob/master/malloc/malloc.c и почитать, как malloc() устроен внутри — сразу станет понятня, почему увеличение одного регистра всегда будет быстрее любого выделения в куче.
                        Ответить
                        • Ну справедливости ради, можно сделать быстрый стековый аллокатор поверх выделенного через malloc() куска
                          Ответить
                          • Но чем это тогда отличается от стека, если оно аллоцирует как стек, освобождает как стек и объекты из середины удалить нельзя?

                            Разве что отделить стек возвратов от стека данных ради безопасности. И то сомнительно.

                            З.Ы. А, ну всё, пора спать. Просто чтобы отвязать время жизни объектов в самодельном "стеке" от фреймов функций в реальном стеке.
                            Ответить
                            • Тем, что таких стеков может быть несколько, в один стек можно набрасывать одну хрень, которую мы освободим всем скопом вот в такой-то момент времени, в другой стек набрасывать другую хрень, которую освободим всем скопом, но вот в какой-то другой момент времени. Если же все срется в один единый стек, нельзя его вот так освобождать. Можно "выбивать" из стека разную хуйню, тогда он уже будет дырявым, и в дырки что-то аллоцировать, но это уже будет не стек, а какая-то хуйня, которая будет фрагментироваться.

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

                                Именно по такому принципу сделан young gen в «Йаже» и прочей мусоросборной питушне.
                                Есть джва указателя: на начало и конец стека. Когда он заполняется и приходит время чистить говно, живые объекты просто копируются, а в указатель конца стека присваивается начало.
                                Ответить
                          • Справедливости ради царский сборщик мусора и царский аллокатор на стеке (aka движения ESP для аллокации/деаллокации) уже давно стали практически бесплатны на x86.

                            Такие операции как mov; xor eax,eax; push и pop, просто выпиливаются не доходят до портов исполнения, даже не превращаются в МОПы.

                            x86 has dedicated stack machine operations. Instructions such as PUSH, POP, as well as CALL, and RET all operate on the stack pointer (ESP). Without any specialized hardware, such operations would would need to be sent to the back-end for execution using the general purpose ALUs, using up some of the bandwidth and utilizing scheduler and execution units resources. Since Pentium M, Intel has been making use of a Stack Engine.

                            The Stack Engine has a set of three dedicated adders it uses to perform and eliminate the stack-updating µOPs (i.e. capable of handling three additions per cycle).

                            Instruction such as PUSH are translated into a store and a subtraction of 4 from ESP. The subtraction in this case will be done by the Stack Engine. The Stack Engine sits after the decoders and monitors the µOPs stream as it passes by.

                            Incoming stack-modifying operations are caught by the Stack Engine. This operation alleviate the burden of the pipeline from stack pointer-modifying µOPs. In other words, it's cheaper and faster to calculate stack pointer targets at the Stack Engine than it is to send those operations down the pipeline to be done by the execution units (i.e., general purpose ALUs).

                            Ответить
                            • > stack engine

                              Какое пафосное название для сумматора.

                              З.Ы. На RISC'ах автоинкремент вроде тоже через отдельный сумматор?
                              Ответить
                              • А нет, там и основной можно юзать т.к. load и store больше ничего не считают.
                                Ответить
                              • Кстати они настолько короткие что push imm8 / pop при гольфинге часто заменяют mov r, imm32

                                ; шланг в теме 
                                push   0x2a   # 6a 2a
                                pop    rax    # 58
                                
                                ; gcc нет
                                mov    eax,0x2a # b8 2a 00 00 00

                                https://godbolt.org/z/4rzsoqbTf
                                Ответить
                        • а если почитать nalloc? а stack появляется тоже магическим свойством в программе ? или это тоже вызвали malloc? а что мне мешает сделать тоже самое вызвать один раз malloc размером в стэк и делать что хочу?
                          Ответить
                          • > а stack появляется тоже магическим свойством в программе ?

                            Его создает OS. Хочешь чтоб я тут лекцию про виртуальную память бесплатно написал? Погугли про эту хуйню, ну там про виртуальную память, как например то же ядро Linux парсит ELF файл, выделяет ему какую-то там память
                            Ответить
                            • т.е. это не маллок был.. или о нет .. может маллок вызывает ту же функцию что и OS когда выделяет память?
                              Ответить
                              • Нет, malloc() не выделяет стек при запуке ELF. Стек выделяется при запуске ELF файла через хуйню в ядре операционной системы, которая отвечает за загрузку ELF, и по ходу дела та память может расширяться.

                                malloc() это не какая-то первичная сущность, в Linux это обертка над mmap() и возможно что над brk() или еще какой-то такой хуйней, в винде это вообще какая-то лютая поебень. https://govnokod.ru/27497#comment643764 - там эту хуйню вроде обсасывали
                                Ответить
                          • > а что мне мешает сделать тоже самое вызвать один раз malloc размером в стэк и делать что хочу

                            Нативный стек ускорен на железячном уровне. Быстрее написать просто нельзя.

                            Ручной стек (даже предварительной выделенным куском памяти) и всё-равно будет чуть медленее.
                            Как минимум потому что там ручками нужно двигать аналог ESP и потом ещё лазить в память за данными.

                            А PUSH и POP это короткие 1-2 байтовые инструкции, которые автоматом и счётчик меняют, и двигают данные между регистрами и стеком.
                            Ответить
                      • Я правильно понимаю, что ты сравнил количество строк, требуемых для выделения памяти в стеке и куче в некоем гипотетическом языке, и пришел в к выводу, что сложность одинакова, так как кол-во строк одинаково?
                        Ответить
                        • нет не правильно... я показал что всегда можно уменьшить все до таких размеров что кол-во тактов будет идентична
                          Ответить
                          • До каких размеров что ты уменьшать собрался? Ты по-моему в этой теме вообще не разбираешься
                            Ответить
                            • тут нужно абстрактно думать а не буквально.
                              Ответить
                              • Можешь подумать абстрактно, в терминах структур данных, и сравнить оверхед и сложность алгоритмическую стека и кучи
                                Ответить
                    • и кто вас заставляет юзать древнейшие malloc? есть современные альтернативы которые не требут 100000 тактов для выделения памяти
                      Ответить
                      • > есть современные альтернативы которые не требут 100000 тактов для выделения памяти

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

                        Никаких "современных альтернатив" тут особо не придумать. Все эти т.н. "современные альтернативы" - давно обсосанная в компутер саенсе хуйня.
                        Ответить
                      • > современные альтернативы которые не требут 100000 тактов для выделения памяти

                        Да. Вот только потом люди узнают такие слова как: «heap fragmentation» и розовые очки спадают.
                        А вот стек не фрагментируется. Никогда.
                        Ответить
                        • потому что не существует операции "освободить три байта посреди стека"
                          Ответить
                          • Да. За скорость и простоту мы платим этим ограничением.
                            Ответить
                            • Почему бы тогда не запретить освобождать память в куче?

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

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

                                Мудрый Царь уже всё объяснил — его тупо заминусовали, затроллили и обсмеяли.

                                Я недавно смиренно повторил Царское Слово: аллоцируем либо slab.
                                По сути это отдельные типизированные кучки, с возможностью освободить память где-то в средине.
                                Т.к. они принимают однотипные объекты, то проблем из-за фрагментации не будет.

                                Ну либо страницами mmap, тогда и realloc (mremap) бесплатный O(1) вместо O(N).
                                И фрагментация есть но страничная, и там виртуальной памяти до чёрта потому проблем с выделением куска нужного размера быть не должно.
                                Ответить
                                • > realloc (mremap) бесплатный O(1) вместо O(N)

                                  Там тоже O(N) в общем случае всё-таки. Просто N в 500 раз меньше.
                                  Ответить
                                  • Да, верно. Я лоханулся.
                                    Ответить
                                    • > лоханулся

                                      Не, ну в теории можно и за О(1), если оставлять достаточно места и ремапать только целыми поддеревьями.

                                      Начинаем с 4к. Если 4к оказалось мало, ресайзим сразу до 2М и потом до 1Г. А дальше можно гигабайтными кусками двигать.
                                      Ответить
                                      • Полагаю на практике при достаточно большом N там начнутся TLB cache miss и всякие page fault.

                                        >А дальше можно гигабайтными кусками двигать.
                                        Так всё-равно O(N) при достаточно больших N.

                                        Я кстати пробовал гигабатные куски, для программы которая выделяла по 8-16 гиг.
                                        У них пирфоманс оказался ХУЖЕ чем у 2М.
                                        Возможно это связано с очень лимитированным TLB для гигабатных страниц или сырой реализацией в Линуксе.

                                        Но оптимальный перфоманс был именно на 2M.
                                        Ответить
                                        • > cache miss

                                          TLB промах будет только при росте на следующую ступень, так что не так уж и страшно выглядит. По сути всего 3 раза TLB кеш дропнется. Ну и дальше каждый гигабат.
                                          Ответить
                                        • >пирфоманс оказался ХУЖЕ чем у 2М

                                          Кстати, представь как быстро будут своповаться гигабайтные странички... Это прям игра ва-банк.

                                          > Так всё-равно O(N) при достаточно больших N.

                                          Ну там уже такой делитель, что насрать. На терабайте всего тыщу записей пофиксить.
                                          Ответить
                                          • Знаю одну контору, которая недавно серваки с 2TB RAM списала. Можно поискать на помойке.
                                            Ответить
                                            • А проц там какой?
                                              Ответить
                                            • >помойке

                                              Шведы смешные) У меня знакомый админ списанную технику прямо на авито и размещает
                                              Ответить
                                              • И сколько стоит вонючий сервак на 32 ядра проца?
                                                Ответить
                                                • Обязательно спрошу у него при случае.

                                                  Но я не советовал бы домой юнитовый сервер брать без надобности: очень много ебли с ним: память он будет хотеть ECC, диски будет не поддерживать неправильных производителей/типов, прошивка у него такая, что надо мануал на тридцать страниц читать, грузится по четыре минуты, гудит как боинг...
                                                  Ответить
                                                  • >> грузится по четыре минуты, гудит как боинг

                                                    У некоторых ноутбуки в таком состоянии.
                                                    Ответить
                                                    • >У некоторых ноутбуки в таком состоянии.


                                                      Да, Vista на 1GB памяти с HDD 5400 и антивирусом
                                                      Ответить
                                                      • Я видел Восьмёрку на 8GB, которая может так же. Иногда грузится нормально, а иногда при загрузке просыпается какая-нибудь служба и вспоминает, что в прошлый раз не успела доделать какую-то суперважную задачу вроде генерации нативных образов для дотнета.
                                                        Ответить
                                                        • Там обычно от диска зависит кмк.

                                                          Если у тебя SSD, то скорее всего скорость загрузки не будет твоей проблемой даже на сраных EVO

                                                          Если HDD, то тебя ждет ад сломанных бутпланов, xperf xbootmgr и пр

                                                          Иными словами, HDD не нужен
                                                          Ответить
                                                          • Мне кажется, что всё упирается не в диск, а в автозапуск. Бывает, что загрузка процессора 100%, а взаимодействия с HDD не видно. Системы бывают реально перегружены не особо нужными задачами.

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

                                                            *****

                                                            Кстати, я понял, почему у меня техника в режиме AHCI тормозила, а в режиме эмуляции IDE летала. Я рассказывал о спонтанных зависаниях и о загрузке процессора на 100% в режиме AHCI, даже когда обращения к диску не было.

                                                            Причина была в «Intel Rapid Storage Technology». Это говно, как я понял, вообще предназначено для RAID. Почему его пихают на всю технику, включая ноутбуки и нетбуки, я не знаю.

                                                            Стёр «Intel Rapid Storage Technology» — с микрософтовским драйвером AHCI в режиме AHCI подвисания прекратились. После этого режимы AHCI и эмуляции IDE стали работать примерно с одной скоростью.
                                                            Ответить
                                                            • >Бывает, что загрузка процессора 100%, а взаимодействия с HDD не видно

                                                              А каким-то конкретным процессом или System?
                                                              В ProceXP можно посмотреть Interrupts. Может быть это ебланит драйвер или железка с interrupts storm?

                                                              >Иногда помогает назначение какой-нибудь службе отложенного запуска

                                                              Ну тогда она тебя в систему пустит, потом будет тупить уже когда ты увидишь рабочий стол. Тоже мало приятного.

                                                              Я советую изучить ``xperf`` (Это часть WPT). Там профилируются все стадии загрузки и процессы и доступ к диску и вообще обычно понятно, что происходит.

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

                                                              На хабре и www.outsidethebox.ms были статьи про него.

                                                              > Intel Rapid Storage Technology»

                                                              Интелловый контроллер (встроенный в чипсет) умеет в два режима: AHCI и недорейд (полусофтварный рейд типа как винмодем). Ну еще он умеет в эмуляцию IDE, но это не важно.

                                                              Так вот выбор драйвера для него это отжельный челленж.

                                                              В какой-то момент они перешли на новую версию драйвера (IRST -- Intel Rapid Storage) (вместо одного файла стало миллион) и он стал работать ХУЖЕ

                                                              https://www.win-raid.com/t2f23-Intel-RST-RSTe-Drivers-latest-v-WHQL-v-WHQL.html

                                                              Disadvantages of the IRST Software installation:
                                                              1. extension of the boot time

                                                              (вообще советую ссылку почитать, там подробно питушня с этим разбирается)

                                                              Вот тут админы виндофайловых паомоек реально тестируют версии драйвера и выбирают его:

                                                              https://www.win-raid.com/t25f23-Which-are-the-quot-best-quot-Intel-AHCI-RAID-drivers.html

                                                              https://www.win-raid.com/t362f23-Performance-of-the-Intel-RST-RSTe-AHCI-RAID-Drivers.html
                                                              Ответить
                                                              • >> В какой-то момент они перешли на новую версию драйвера (IRST -- Intel Rapid Storage) (вместо одного файла стало миллион) и он стал работать ХУЖЕ

                                                                Ну вот я на нескольких машинах (родственники иногда просили узнать, из-за чего тормоза) заменил «IRST» на «generic», и стало работать быстрее.

                                                                >> полусофтварный рейд типа как винмодем

                                                                Возможно, в этом и разгадка.

                                                                А зачем нужен режим рейда на портативной технике с одним слотом под накопитель?

                                                                >> Вот тут админы виндофайловых паомоек реально тестируют версии драйвера и выбирают его

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

                                                                  Чтобы продавать говнище с SSD на 20 гиг и хдд под остальное. В теории, IRST может превратить это в более-менее рабочий конфиг, юзая SSD как кеш. Что там на практике -- хер знает.
                                                                  Ответить
                                                                  • 20 гигов явно не для «Винды»: там «WinSxS» и точки восстановления больше займут.
                                                                    Ответить
                                                                    • > займут

                                                                      Не суть, тут как со свопом главное -- это working set. Если ты активно юзаешь меньше 20 гиг, то будет норм. Это не 20 гигов под систему, это 20 гигов под горячие данные.
                                                                      Ответить
                                                                  • Оу, он умеет SSD делать кешем?
                                                                    Хардварные рейды тоже так умеют, иногда только за деньги)
                                                                    Ответить
                                                                    • это же виндовая фича readyboots
                                                                      Ответить
                                                                      • ready boobs.

                                                                        Никогда не пробовал, кстати. Тока читал, и вечно путал с readyboot (префетчером).

                                                                        Знаю, что у одного IBMовского рэйда поддержку SSD кеша (тн CacheCade) покупали за бабло
                                                                        Ответить
                                                                        • Редибюст — это виндовая фигня, которая пытается занять флешку под кэш для диска. Причём она предлагает задействовать любую флешку, воткнутую в USB.

                                                                          Не помню, как на неё выходил. Кажется, где-то в хелпе вылезло.
                                                                          Ответить
                                                                          • > предлагает задействовать любую флешку, воткнутую в USB
                                                                            Только потом говорит "да хрен тебе, слишком медленная флешка" или "да хрен тебе, и так всё быстро работает". Там наверно нужен тарасокомп или два ядра/два гига от разводилы-продавца с Авито. Или флешка из будущего, которая стоит дороже всего компа вместе взятого.
                                                                            Ответить
                                                                • > заменил «IRST» на «generic», и стало работать быстрее.
                                                                  Мог бы и на старый драйвер Intel откатить, который без SCSI фильтра (это есть в статье).

                                                                  > А зачем нужен режим рейда на портативной технике с одним слотом под накопитель?


                                                                  Не знаю, по моему ни за чем не нужен. На десктопе еще как-то можно понять зачем...
                                                                  Ответить
                                                                  • Спасибо за ссылку, хоть буду знать, что с чем едят.

                                                                    Блядь, как всё сложно.
                                                                    Ответить
                                                                    • Да, не просто

                                                                      Because of the big structural and functional differences between the "classical" Intel RST driver (just using the iaStor.sys) and the newer Intel RST(e) drivers (using iaStorA.sys and additionally the SCSI driver iaStorF.sys), users should be very restrictive regarding the switch from one driver sort to the other
                                                                      Ответить
                                                  • > грузится по четыре минуты
                                                    у меня так прыщи грузятся
                                                    и чем больше в пертинентный раздел записано, тем больше глюков и тормозов
                                                    Ответить
                                          • > Ну там уже такой делитель, что насрать.

                                            Ну формально всё-равно O(N).

                                            Я проверял на Хасвеле, это по-моему первое поколение куда завезли 1G страницы.

                                            Кстати нагуглил сайт с бенчами 7z.
                                            И у них тоже почему-то для Хасвела нету результатов теста 1G
                                            https://www.7-cpu.com/cpu/Haswell.html
                                            Data TLB: 4 entries.


                                            Зато есть для следующих поколений.
                                            https://www.7-cpu.com/cpu/Broadwell.html
                                                Data TLB L1: 4 entries. 4-way. Miss penalty = 8 ? cycles. Parallel miss: 1 cycles per access
                                                TLB L2 (STLB): 16 items. 4-way. Miss penalty = 8 ? cycles. Parallel miss: ? cycles per access
                                            
                                            https://www.7-cpu.com/cpu/Ice_Lake.html
                                                Data TLB L1 (loads): 8 entries, 4-way.
                                                L2 TLB: 1024 entries, 8-way. Shared with 4 KB pages TLB


                                            Может там какой-то баг был или добавился L2?
                                            Ответить
                                          • > Кстати, представь как быстро будут своповаться гигабайтные странички...

                                            По-моему они не свопаются. Ну по крайней мере как я тестировал.

                                            Выделял через механизм hugetlb pool, там оно сразу выделяет нужное количество страниц и отжирает соответствующий объём памяти.
                                            Ответить
                                          • Huge pages cannot be swapped out under memory pressure, слава богу

                                            Тут Пи может быть спокоен
                                            Ответить
                  • > т.к. не дает преимущества ни в скорости использования

                    Даёт. Верхняя часть стека всегда горячая, она в кеше, она постоянно реюзается, она локальна для треда. Поэтому мелкие локальные объекты на стеке работают очень быстро, они даже за пределы процессорного ядра не выходят. Даже сраная джава старается джитить мелкие объекты так, чтобы не выделять их в куче. Какие-то из них вообще могут в регистры поместиться.
                    Ответить
                    • что выделяет стэк для программы?
                      Ответить
                      • Смотря где. В контроллерах начальное значение стекпоинтера может быть и так выставлено куда надо и так при запуске контроллера, но можно его руками выставить. Если в контроллерах еще есть всякие операционные системы.
                        В FreeRTOS есть например https://www.freertos.org/xTaskCreateStatic.html

                        puxStackBuffer - Must point to a StackType_t array that has at least ulStackDepth indexes (see the ulStackDepth parameter above) - the array will be used as the task's stack, so must be persistent (not declared on the stack of a function).

                        Во всяких posix-совместимых ОС например есть https://linux.die.net/man/3/pthread_attr_setstack для тредов, ну и естественно ОС как-то там выделяет стек при запуске ELF файла. В виндопараше это надо отдельно уже смотреть, как эти обмудки там в своем винапи это реализовали.
                        https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createthread - тут вроде нет возможности указать адрес где стеку расти
                        Ответить
                        • как не крути это одна и таже память и выделяется она одинаково. вот если бы стэк размещался в CPU cache L1 2 3 4 - тогда я бы все понял .. а так все это лажа и одна и таже память
                          Ответить
                          • > как не крути это одна и таже память и выделяется она одинаково.

                            Нет, не везде. В контроллерах бывает отдельная память под стек.
                            Ответить
                          • > вот если бы стэк размещался в CPU cache L1 2 3 4 - тогда я бы все понял ..

                            В x86 есть особая срань чтобы это кешировалось

                            https://www.agner.org/optimize/microarchitecture.pdf

                            3.16 Returns (all processors except P1)
                            ...
                            The P1 has no return stack buffer, but uses the same method for returns as for indirect
                            jumps. Later processors have a return stack buffer. The size of this buffer is 4 in the PMMX,
                            8 in Atom, 12 in AMD k8, 16 in PPro, P2, P3, P4, P4E, PM, Core2 and Nehalem, and 24 in
                            AMD k10. This size may seem rather small, but it is sufficient in most cases because only
                            the innermost subroutines matter in terms of execution time. The return stack buffer may be
                            insufficient, though, in the case of a deeply nesting recursive function.

                            In order to make this mechanism work, you must make sure that all calls are matched with
                            returns. Never jump out of a subroutine without a return and never use a return as an
                            indirect jump. It is OK, however, to replace a CALL MYPROC / RET sequence with JMP
                            MYPROC in 16 and 32 bit mode. In 64 bit mode, obeying the stack alignment standard, you
                            can replace SUB RSP,8 / CALL MYPROC / ADD RSP,8 / RET with JMP MYPROC.
                            Ответить
                            • Ну это ведь для правильного предсказания возвратов, чтобы конвейер потом вилкой не чистить. Для данных эта штука не юзается.
                              Ответить
                • а document.close не надо
                  поэтому я за text/javascript
                  Ответить
                • > Умные указатели в C++ бывают нескольких видов: одни гарантируют свою уникальность, другие реализуют reference counting
                  > Ни то, ни другое объекты JS не делают.

                  Symbol is a built-in object whose constructor returns a symbol primitive — also called a Symbol value or just a Symbol — that’s guaranteed to be unique.

                  Опа!
                  Ответить
                  • Но этож никак не связано с unique, обычный Atom
                    Ответить
                    • Не понял. Объект гарантирует свою уникальность, что формально соответствует требованию написанному МАКАКА.
                      Ответить
    • > хрен знает как работают

      Именно поэтому я за захват локалок по значению, а не по ссылке.
      Ответить
      • Особенно хорошо это работает в таких языках как JS/C#/Java, где всё говнолежит в куче
        Ответить
        • Угу. Ссылка по значению считай бесплатно захватывается. Да и примитивы в общем-то тоже.

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

        Йажа вообще посмотрела на багры C#/js и ввела impicit final.

        Всё что хватает замыкание становится неявной константой (final можно не писать, просто при втором присваивании будет ошибка конпеляции).
        Ответить
    • тут есть умные? кто мне раскажет что это такое и зачем это надо?

      // The compiler generates calls to __clear_cache() when creating
      // trampoline functions on the stack for use with nested functions.
      // It is expected to invalidate the instruction cache for the
      // specified range.
      
      void __clear_cache(void *start, void *end) {
      ...
      Ответить
      • Ты собрался самомудифицировать код, и сбрасываешь кеш инструкций интринсиком?
        Ответить
      • Ну что, никто не знает?

        Полез изучать этот вопрос и ничего не понял. На «x86» эта функция вообще ничего не делает, потому что инструкции INVD и WBINVD можно выполнить только из нулевого кольца защиты (т. е. из драйвера, а не из пользовательской программы). Вроде на каких-то процессорах (на «ARM»?) аналогичную инструкцию можно выполнить из пользовательской программы, но зачем, я пока не понял.
        Ответить
        • Wild guess: на каких-то рахитектурах нужно явно очищать кеш инструкций, если ты модифицировал код, на каких-то нет
          Ответить
          • Так точно. Только там не только кеш, а вообще весь пайплайн вилкой прочищается т.к. в него уже могло говна натянуть. А у интела это как всегда на полной автоматике, чтобы любая макака могла кодить.
            Ответить
            • У интела как у гаишника: плати пенальти, да нарушай законы.
              Не программисты, а гавно
              Ответить
              • > плати пенальти

                В основном энергопотреблением и размером кристалла... По пирфомансу оно вроде норм.
                Ответить
                • Просто систему охлаждения побольше нафигачить, а так норм.
                  Ответить
                  • Макбук не троттлится.
                    Ответить
                    • Кстати, немало техники на «Эльбрусе» с архитектурой VLIW без вентилятора. Производитель считает, что в такой архитектуре греться особо нечему, в отличие от «Интела».
                      Ответить
                      • > техники на «Эльбрусе»

                        Её где-то можно купить без госзаказа?

                        > греться особо нечему

                        Там нет транзисторов? ;)

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

                  И ещё всякими Meltdown. Когда вроде прочищается, а вроде и нет.
                  Ответить
      • > trampoline functions on the stack

        Какой царь )))
        Ответить
        • >trampoline
          Это же наш гост

          >Какой царь )))

          Какой tiny mode ))
          Ответить
        • Я вспомнил ржачную ветку с «Царём»:
          http://govnokod.ru/13162#comment180767

          Ещё тут было весело:
          https://govnokod.ru/13183#comment181849
          Ответить
          • Спасибо, что напомнил. Тред про царские замыкания поистине эпичный был.
            Ответить
            • По-моему после него царь и распитушился?
              Ответить
              • Да, зарево было видно за несколько километров.

                В «Ideone» царские программы не запускались, потому что в «Ideone» компилятор с защитой стека типа «Stackguard» или «Propolice» (в новых версиях «gcc» вроде уже что-то штатное похожее накрутили).
                Ответить
                • Смешите видеть: бездарные неудачники спустя столько лет пытаются оклеветать Царя, обгадить помётом достойного человека.

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

                  > В «Ideone» царские программы не запускались

                  Потому что «Ideone» недостаточно хорош для Царских Программ.
                  Ответить
          • Тут и тут он пишет дело:

            https://govnokod.ru/13183#comment182519
            https://govnokod.ru/13183#comment182518
            Ответить
    • - Сидим, пьём, а Артур Атарбекович в Лондоне важные переговоры ведёт. Если у него всё получиться, то для нас будет очень хорошо.
      Ответить
    • У жeны oкaзaлся любoвник, и я уeхaл, брoсив всё, в дaльнee Пoдмoскoвьe, гдe у мeня былa oднoкoмнaтнaя квaртирa
      Ответить
    • У жeны oкaзaлся любoвник, и я уeхaл, брoсив всё, в дaльнee Пoдмoскoвьe, гдe у мeня былa oднoкoмнaтнaя квaртирa
      Ответить

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