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

    0

    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
    function* map<T, R>(a: T[], f:(i: T) => R)
    {
    	for (const v of a) yield f(v);
    }
    
    function main()
    {
    	let count = 0;
    	for (const v of map([1, 2, 3], (i) => { count++; return i + 1; }))
    	{
    		print(v);
    	}
    
    	assert(count == 3);
    }

    а ты, а ты так можешь на своем говно-с++ компиляторе ваять?

    Запостил: ASD_77, 07 Февраля 2022

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

    • результат работы

      C:\temp>rem C:\dev\TypeScriptCompiler\__build\tsc-release\bin\tsc.exe --emit=jit --shared-libs=C:\dev\TypeScriptCompiler\__build\tsc-release\bin\TypeScriptRuntime.dll C:\temp\1.ts  
      
      C:\temp>C:\dev\TypeScriptCompiler\__build\tsc\bin\tsc.exe --emit=jit --opt --shared-libs=C:\dev\TypeScriptCompiler\__build\tsc\bin\TypeScriptRuntime.dll C:\temp\1.ts 
      2
      3
      4
      Ответить
    • а кто хорошо попросит - получит дмпик
      Ответить
    • могу.
      Ответить
    • #include <iostream>
      #include <ranges>
      
      int main()
      {
          using std::views::transform;
          
          auto count = 0;
          auto numbers = {1, 2, 3};
          
          for(auto i:  numbers | transform( [&](auto x){ ++count; return x+1; } ) )
          {
              std::cout << i << '\n';
          }
      }
      Ответить
      • блядь что это за палочка? гоператор перегруженный чтобы как пайп выглядить?
        Ответить
        • > гоператор перегруженный чтобы как пайп выглядить

          Это кажись C++20.
          Я не фанат крестухи и значков, но по-моему няшно.
          Наконец-то украли что-то хорошее.

          В идеале конечно лолжно быть конь-сиськентнее
          {1, 2, 3}  | transform( [&](x){ ++count; return x+1; } ) | println
          Ответить
          • > но по-моему няшно.

            А по-моему херня
            Ответить
            • А мне нравитяся, можно писать:
              "my_file.txt"
              | read_all
              | process
              | ([](auto x){skhoronit("output.txt", x);});


              Постфикс!
              Ответить
            • Стандартизатор хватается за сердце. Его уносят.
              Ответить
          • это хуйня. views на то и views что трансформируют данные, тут петушни не нужно. для подобного есть копирование в острим используемое со времен 98
            #include <ranges>
            #include <iostream>
            int main(void)
            {
            	auto count = 0;
            	auto numbers = {1, 2, 3};
            	auto view = numbers | std::views::transform([&](auto x) -> decltype(x) { ++count; return x + 1; });
            	std::copy(std::begin(view), std::end(view), std::ostream_iterator<int>(std::cout, " "));
            
            	return 0;
            }

            https://godbolt.org/z/c6erz864r
            Ответить
            • ссылка на годболт к тому что компилится в честный цикл
              Ответить
      • а где "елды" ? как она тут представлена ?
        Ответить
      • а вообще скажи спасибо кто у вас "ranges" завезли.. "вот если бы еще концепты доделали"..
        Ответить
    • Говно какое-то нечитаемое, какие-то лямбды-хуямбды, генереторы, мапы-хуяпы.

      То ли дело "Си":
      #include <stdio.c>
      
      int main(void)
      {
          for (int i = 2; i <= 4; ++i) {
              printf("%d\n", i);
          }
          return 0;
      }
      Ответить
      • что это такое "%d\n"
        Ответить
        • Строка.
          Ответить
          • это я вижу. а "почему <=4 а не <5" а почему "++i" а не "i++" или "i = i + 1". а что будет если я напишу "%h\n\r". и кто меня остановит?
            Ответить
            • > почему "++i" а не "i++"
              i++ нипирфомансно и так пишут только анскильные лалки.

              > что будет если я напишу "%h\n\r". и кто меня остановит?
              Никто. Одной и основных парадигм С является «не мешай стрелять себе в ноги». Малоизвестный факт, что программисты на С являются pro-choice и поддерживают легализацию эфтаназии.
              Ответить
              • Есть такое наивное представление, что другие языки якобы мешают стрелять себе в ноги.
                На самом деле они мешают ходить на улицу без шапки (потому что программисты на других языках недостаточно умны чтобы принимать такие решения) а отстрелить себе ногу можно и в bash
                Ответить
              • > i++ нипирфомансно и так пишут только анскильные лалки.

                Поэтому сишники презирают C++? Надо было называть ++С?
                Ответить
              • я хоть и крестовик, но под каждым словом подписываюсь
                Ответить
              • рзница между i++ и ++i только в разных временах запихивания результата в стэк.... а так одно и тоже
                Ответить
                • Да, если результ инкремента не используется, однохуйственно. Но если конпелятор не умеет в оптимизации может выйти неоптимальный код.

                  Я это прочитал в статье про разработку под какую-то древнюю платформу, там не рекомендовалось использовать постинкремент.

                  Какая оптимизация )))
                  Ответить
                • > рзница между i++ и ++i только в разных временах запихивания результата в стэк.... а так одно и тоже

                  И это говорит программист на С++.

                  Hint: перегрузка операторов.
                  Ответить
                • > одно и тоже
                  #include <iostream>
                  
                  int main()
                  {
                      int i = 5;
                      std::cout << ++i << '\n';
                      
                          i = 5;
                      std::cout << i++ << '\n';
                      
                  }
                  
                  6
                  5

                  Хм...

                  #include <iostream>
                  #include <format>
                  
                  int main()
                  {
                      char drive = 'C';
                      std::string format1 = std::format("format {}: /P:1 /X", ++drive);
                      
                           drive = 'C';
                      std::string format2 = std::format("format {}: /P:1 /X", drive++);
                      std::cout << format1 << '\n' << format2 << '\n'; 
                      
                      std::string& format = format2;
                      // system(format.c_str());
                      
                  }
                  
                  format D: /P:1 /X
                  format C: /P:1 /X
                  Да, одно и то же. Никаких проблем.
                  Ответить
              • эрефтаназии
                Ответить
        • >что это такое "%d\n"

          чувак, как ты умудрился дожить до седых мудей, и ниразу в жизни не столкнуться с printf?
          У тебя в школе или инстике сишки не было?
          Ответить
          • Он скорее о том, что это тоже говно какое-то нечитаемое, о котором знать надо. Паттерны-хуяттерны.
            Ответить
            • Кстати о нечитаемом говне. Каждый раз, когда я вижу =>, я пытаюсь понять, что с чем сравнивается.
              Ответить
              • Поэтому я за `` >= / =< ''
                Ответить
              • > когда я вижу =>,
                А это всего лишь запятая:) Знаешь, в каком языке?
                Ответить
                • "PHP"?
                  Ответить
                  • не ебу что там в пхп

                    в перле это fat comma, в руби hash rocket. Но в перле она действительно синоним запятой
                    Ответить
                    • В «PHP» оператор => используется в единственном месте: в литералах ассоциативных массивов.

                      В «Перле» там тупо нечётные элементы используются как ключи, чётные — как значения, поэтому запятая и => равнозначны.

                      А вот в «PHP» разница есть, потому что может использоваться числовой ключ по умолчанию (как в массивах).
                      Ответить
                      • > потому что может использоваться числовой ключ по умолчанию (как в массивах).

                        Какой пиздец. Хорошо, что у нас в перле массивы и хеши четко отделены
                        Ответить
                        • Какой всё таки мощный выразительный язык.
                          Вот например веб фреймворк "Dancer2".
                          get qr{/hello/([\w]+)} => sub {
                              my ($name) = splat;
                              return "Hello $name";
                          };
                          Ответить
              • В языках с сиподобным синтаксисом бывают ещё такие конструкции:

                x <- 5

                x <-- y

                x --> 0

                x -=- 2

                x --==-- y

                x <<= 1

                x -->> 1
                Ответить
            • В смысле надо почитать мануал по printf?
              Ответить
            • Всё в мире можно назвать говном нечитаемым, о котором знать надо.

              Когда ты не умеешь читать, тоже нихуя непонятно. Именно поэтому я за иероглифы.
              Ответить
              • Ойй, простие, я имел ввиду пиктограммы.
                Ответить
              • Именно поэтому я против чтения.
                Ответить
              • Совершенно верно.
                Взять, к примеру, воть такой код:
                <?php echo 'Привет мир!'; ?>

                Почему php слева есть, а справа нет?
                Зачем они нужны если уже есть точка с запятой?
                Что значит "эхо"? Эхо обычно отражает что-то (дальнее эхо, ближнее эхо), а тут какое?

                Пиздец заебный язык, вообще не верю, что кто-то может его реально выучить
                Ответить
                • Взять, к примеру, вот такой код:
                  #include <iostream>
                  using namespace std;
                   
                  int main() 
                  {
                      cout << "Hello, World!";
                      return 0;
                  }

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

                  Пиздец заёбный язык, вообще не верю, что кто-то может его реально выучить. Поэтому я за PHP.
                  Ответить
                  • По этому я за "PHP":
                    Привет!
                    Ответить
                  • main()
                    {puts("Привет!");}


                    Вот:
                    https://ideone.com/DjArdD

                    Написать короче пока не получается.
                    Ответить
                    • В разы лучше, но этот "мэйн" с фигурными скобкам всё равно режет глаза. Какой, блядь, в этом "мэйне" смысл?
                      Ответить
                      • Да никакого. Казалось бы, зачем код, выполняющийся при старте программы, заворачивать в функцию? Но разработчики «Java» и «C#» пошли ещё дальше: там эту функцию нужно ещё завернуть в класс. Какая-то луковица или капуста получается.
                        Ответить
                      • Потому что нужно указать, что С — это важный язык, и пишут на нём важные люди, а не какие-то пыхомакаки.
                        Ответить
                        • Джава и C# еще более важные, получается?
                          Ответить
                          • Важность языка прямо пропорциональна времени компиляции написанного на нём кода.
                            Ответить
                            • Влажность
                              Ответить
                            • Тогда самый важный язык это тайпскрипт, особенно когда ты пишешь на нём под Angular2
                              Ответить
                      • > Какой, блядь, в этом "мэйне" смысл?

                        main — это точка входа в программу на Си, но точка входа находится в __libc_start_main.

                        Подумайте об этом, в этом нет смысла! С чего бы программе печатающей "Привет" начинаться с __libc_start_main?

                        В этом нет смысла!

                        Но что ещё более важно, вы должны спросить себя, а при чём тут данное дело? Да ни при чём, леди и джентльмены, это не имеет никакого отношения к данному делу. В этом нет никакого смысла!

                        Взгляните на меня, я адвокат, защищающий «PHP», и я веду речь о точке входа в программу на Си. Какой в этом смысл? Леди и джентльмены, я несу бессмыслицу, во всём этом вообще нет смысла!

                        Итак, запомните, когда вы, сидя в этой комнате, взвешиваете и сопрягаете «main» с фигурными скобками, есть ли в этом смысл? Нет, в этом нет смысла!

                        Итак, леди и джентльмены, если точка входа начинается в __libc_start_main, вы обязаны использовать «PHP».
                        Спасибо, ваша честь, я закончил.
                        Ответить
                        • Зависит от реализации библиотеки (даже не компилятора). В какой-нибудь другой библиотеке настоящая точка входа может называться не __libc_start_main либо она может вызывать не main.

                          Например, рантайм для подсистемы GUI Винды может требовать наличия WinMain в твоей программе, а main он будет игнорировать.

                          Но под гуй новичку вообще тяжело писать: какие-то коллбеки, какая-то обработка сообщений...
                          Ответить
                    • Попробуй на рубях
                      Ответить
                    • puts не будет без include работать в общем случае
                      Ответить
                      • Вообще программировать на няшной без прототипов стрёмно. Мой код работает только потому, что размер указателя на строку совпал с размером int, который в синтаксисе K&R выводился автоматически.

                        Хотя... тут даже совпадение не нужно. Вызов пихает указатель и puts ожидает указатель.
                        Ответить
                        • Но на PHP ты всё равно не перейдёшь.
                          Ответить
                        • Верно.

                          Потому я стараюсь в коде не использовать никакие типы данных, кроме int.
                          Это позволяет мне обходиться без .h файлов, то есть без дублирования кода.

                          Думаю, запретить все другие типы на уровне кодстайла в компании.
                          Ответить
                          • > Потому я стараюсь в коде не использовать никакие типы данных, кроме int.

                            Какой Б )))
                            Ответить
                          • У меня в "Assember" нет никаких типов
                            Ответить
                            • А как же, byte, word, dword, qword?
                              Ответить
                              • И ещё ptr
                                Ответить
                              • Это не "типы", это какие-то спецификаторы для мнемоник
                                Ответить
                                • А когда я объявляю
                                  x dd 0

                                  а потом пишу
                                  mov x, [ebx]
                                  и он понимает что надо мувать dword это разве не означает, что x имеет тип dword?
                                  Ответить
                                  • Блин, масма/тасма под рукой нет. ЕМНИП в них такое работало
                                    Ответить
                                  • Для фасма роботает
                                    Ответить
                                  • mov [x], eax
                                    Ответить
                                    • И mov [x], 42
                                      Ответить
                                      • > И mov [x], 42

                                        А если
                                        mov eax, x
                                        mov [eax], 42

                                        То он как-нибудь запомнит, что в eax вносился адрес на дворд, и поэтому 42 надо туда писать как дворд?
                                        Ответить
                                        • Нет, при такой адресации нужно явно указывать, сколько вешать в байтах.
                                          Ответить
                                  • > и он понимает что надо мувать dword это разве не означает, что x имеет тип dword?

                                    Это какая-то препроцессорная хуйня, а не "тип".
                                    Ответить
                                    • Кстати в "GAS" такой хуйни нет. Там директивами типа ".byte", ".float", ".double", ".string", ".string8", ".string16", ".2byte", ".4byte", ".8byte", ".hword", ".short" ".long", ".int", ".word" https://sourceware.org/binutils/docs/as/Pseudo-Ops.html ... можно нахуярить каких-то байтиков, но чтобы пропихнуть адрес тех байтиков в инструкцию, надо поставить перед нахуяренными байтиками метку, в инструкцию эту метку упомянуть, и в мнемонике явно упомянуть размер хуйни, если там это важно
                                      Ответить
                                      • Ну вот, значит, в GAS типов нет, а в ассемблерах, основанных на масмовском синтаксисе, типы есть.
                                        Ответить
                                        • Называть подобную хрень "типом" можно только с рядом оговорок. Это скорее неявная метка с подсказкой ассемблеру, что по этой метке хуйня с таким-то размером в байтах.

                                          Да и вообще, что такое типы в языках программирования?
                                          Ответить
                                          • > Это скорее неявная метка с подсказкой ассемблеру, что по этой метке хуйня с таким-то размером в байтах.
                                            Так это и есть тип. Что тебя смущает?
                                            Ответить
                                            • Возможно, его смущает что в типе не указана знаковость, её нужно при каждой операции указывать выбором знаковой/беззнаковой инструкции.
                                              Ответить
                                            • > Так это и есть тип. Что тебя смущает?

                                              Ну например как мне такой "тип" выделить на стеке? Это не "тип", это какой-то узкозаточенный костыль для того, чтоб не прописывать явно количество байт в мнемониках при записи в/из памяти
                                              Ответить
                                              • > Ну например как мне такой "тип" выделить на стеке?
                                                fld qword [F] 
                                                fstp qword [F]
                                                Чем не стек?
                                                Ответить
                                              • Что значит "выделить тип нас теке"?
                                                Ответить
                                                • В си это выглядит так
                                                  int main(void)
                                                  {
                                                    int a = 666; // я выделил int на стеке и присвоил туда 666
                                                    printf("%d\n" a);
                                                    return 0;
                                                  }


                                                  Можно еще массив так выделить.

                                                  Где в ассемблере "типы" для хуйни, которая существует в стекфрейме "функций"?
                                                  Ответить
                                                  • > я выделил int на стеке
                                                    Нет, ты объявил локальную переменную, она может быть и в регистре.

                                                    В ассемблере нету функций в таком понимании как в Си, со своим скоупом. Там ручками на стеке всё выделяется.

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

                                                      А если массив из int размером в 300 элементов?
                                                      Ответить
                                                      • Если регистр достаточно разработан... то в него и банка сгущёнки влезет.
                                                        Ответить
                                                    • > В ассемблере нету функций в таком понимании как в Си, со своим скоупом. Там ручками на стеке всё выделяется.

                                                      То есть в Сишке таки есть примитивный stack-based hardware-accelerated сборщик мусора.

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

                                                      Хотя в systemd вовсю юзают атрибут ((cleanup(...))).
                                                      Ответить
                                                    • > В ассемблере нету функций в таком понимании как в Си, со своим скоупом

                                                      Тут необязательно даже вводить "функции" вполне можно было б прикостылить такую хуйню, типа "в этом куске, ограниченной такими-то директивами доступ к адресам по смещению относительно ESP в таком-то диапазоне надо рассматривать как 16-битные переменные"

                                                      Но это всё говно убогое в любом случае. https://github.com/project-everest/vale - вот например херня для верификации ассемблера
                                                      Ответить
                                                      • https://www.cs.cornell.edu/talc/releases.html

                                                        The current implementation of Typed Assembly Language, TALx86, is based on Intel's IA32 architecture. This implementation extends the theoretical calculi described in our papers and provides support for sums, arrays, references, recursive types, subtyping, type tagging, and modules, among other features. Our distributions contain our Objective Caml source code and executables for the following:
                                                        * TAL tools including a type-checker for the assembly language.
                                                        * Popcorn: A prototype compiler for a safe C-like language.
                                                        * SCHEME--: A prototype compiler for a subset of the scheme language (written in Popcorn).

                                                        Опять это окамлеебство. Почему эти компутер сцаентисты так полюбили семейство ML язычков? Говно же
                                                        Ответить
                                                        • https://www.microsoft.com/en-us/research/wp-content/uploads/2016/12/coqasm.pdf
                                                          Coq: The world’s best macro assembler?

                                                          Abstract
                                                          We describe a Coq formalization of a subset of the x86 architecture.
                                                          One emphasis of the model is brevity: using dependent types, type
                                                          classes and notation we give the x86 semantics a makeover that
                                                          counters its reputation for baroqueness. We model bits, bytes, and
                                                          memory concretely using functions that can be computed inside
                                                          Coq itself; concrete representations are mapped across to math-
                                                          ematical objects in the SSREFLECT library (naturals, and inte-
                                                          gers modulo 2n) to prove theorems
                                                          Ответить
                                                      • > в этом куске, ограниченной такими-то директивами доступ к адресам по смещению относительно ESP в таком-то диапазоне надо рассматривать как 16-битные переменные
                                                        a equ word[esp]
                                                        Ответить
                                                        • Нет, это недостаточно гибко. Надо чтобы например "вот там-то и там-то относительно ESP мы интерпретируем как 16-бит, а вот там как 8-бит переменные"
                                                          Ответить
                                                          • a equ word[esp]
                                                            b equ byte[esp+2]
                                                            Ответить
                                                            • А диапазоном задать можно? Может у меня там массив из 10 элементов размером 16 бит на стеке, и я не хочу под каждую по переменной
                                                              Ответить
                                                              • В тасме/масме был синтакс a[index] (раскроется в word[esp][index]) в фасме только одни квадратные скобочки, не могу ничего придумать
                                                                Ответить
                                                  • > я выделил int на стеке
                                                    ты выделил это в .data :p
                                                    Ответить
                              • Ещё есть tbyte для плавающего питуха.
                                Ответить
                      • Можно написать
                        int puts(const char*);
                        и течь
                        Ответить
                        • Я как-то приносил историю про первый юникс, в котором не было SDK с .h файлами, а сигнатуры функций печтатались в обычной книжке.

                          И программист должен был их оттуда брать
                          Ответить
                          • Видимо препроцессор ещё не успели завезти?
                            Ответить
                    • То ли дело Forth:
                      .( Hello!)
                      Ответить
                    • > main() {puts("Привет!");}

                      Так это же православная СБишка.
                      Потому и выглядит заебато.
                      Ответить
                      • Посмотрел...

                        Единственый тип данных в бишке — мышиное слово, которое может интерпретироваться как целый питух, как символ и как указатель (значит, длинные указатели бишка поддержать не сможет). Отсюда и «автовывод» в инт у K&R, и неявные касты типов (целое <-> символ, целое <-> указатель).

                        А вот BCPL и CPL, считающиеся предшественниками бишки, на неё совсем не похожи. Они даже на Алгол непохожи.
                        Ответить
                        • > Единственый тип данных в бишке — мышиное слово, которое может интерпретироваться как целый питух, как символ и как указатель

                          Да.
                          И этот язык ГОРАЗДО ближе к тому что обсуждается выше:
                          >> Потому я стараюсь в коде не использовать никакие типы данных, кроме int.
                          >>У меня в "Assember" нет никаких типов

                          То есть на самом деле высокоуровневый, портируемый ассемблер это «B».
                          Есть машинный регистр, и все значения в программе неявно сводятся к нему.

                          Там всё просто и понятно: нет никаких опциональных int64_t и всякой дрисни вроде int_fast64_t.
                          И x86 говнища вроде cbw, cwd, cdq; mov dword ptr или fld dword[ref] там тоже нет.
                          Ответить
                          • А как тогда байт из структуры достать? Только масками и сдвигами?
                            Ответить
                            • Так же как и бит из байта. Масками и сдвигами.
                              Ответить
                              • Какой хардкор )))

                                Зато всё всегда выравнено на мышиное слово.
                                Ответить
                                • Мышиное слово хоть 64 бита в длинном режиме или как всегда в gcc?
                                  Ответить
                                  • До пришествия инцела же словом всегда было именно машинное слово.
                                    Ответить
                                    • так и в инцеле изначально всё было логично: размер чего угодно был один байт

                                      Вот в 1979-м году уже начались заморочки. Важной вехой можно считать высер XT, когда шину данных расширили до двух байт, и читать нечёт стало пинальтнее, чем чёт.
                                      Ответить
                            • > А как тогда байт из структуры достать? Только масками и сдвигами?

                              Ява-скипетры же вытаскивают баты & 0xFF, а их сердце даже человеку пересаживают.
                              Ответить
                      • в С# main() уже писать не надо
                        Ответить
                        • А как выглядит минимальная программа на C#, которая, например, выводит строку «Привет»?
                          Ответить
                          • Элементарно же
                            using System;
                            namespace HelloWorldApp {
                                  
                                class Sharp {
                                      
                                    static void Main(string[] args) {
                                        Console.WriteLine("Hello World!");
                                    }
                                }
                            }
                            Ответить
                        • Конечно, нужно писать класс и внутри него public static void Main
                          Ответить
                    • __cdecl printf(...);
                      main(void)
                      {
                          printf("Hello, world!\n");
                          return 0;
                      }
                      Ответить
                      • > return 0;
                        Зачем? Зачем?
                        Ответить
                        • Для поддержки старых стандартов, проверь на чём-нибудь в духе С89.

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

                              Потом зачем-то объявили return в main опциональным (нахуя?) Но тот же гцц строго следует стандарту и делает его опциональным только в новых стандартах, а в старых продолжает возвращать мусор.

                              Т.е. код конпелятора сложнее, чем мог бы быть, если бы он просто всегда считал его опциональным. И кроме как желанием отстрелить ногу программисту это сложно объяснить.
                              Ответить
                              • каждый раз когда вижу когда кто-то не пишет в main return хочется кодописателю пальцы выдрать.
                                хуже только void main...
                                Ответить
                                • Хуже только public static void main.
                                  Ответить
                                  • Звучит как заговор на стабильную работу программы.
                                    public — это чтобы продукт популярным был.
                                    static — это чтобы в компании реорганизаций и сокращений не было.
                                    void — это чтобы проекту постоянно денег давали, как в бездонную дыру.
                                    Ответить
                                  • friend int main(void)
                                    Ответить
                                    • Я целый день ходила по разным инстанциям и мне везде улыбались. Думаю: надо же, какие приветливые люди! А оказалось, что я платье надела наизнанку
                                      Ответить
                                      • ты заебал своей нейросетью весь сток забивать
                                        Ответить
                                        • Я думаю, что Тайсон победил бы Федора Емельяненко, потому что Тайсон откусывает уши
                                          Ответить
                                        • Ecjlu 6bl y me69 6bljla xomb kanejlbka mo3ra, mbl 6bl noH9jl, 4mo 3to He Heupocemb.
                                          Ответить
                                          • В августе мухи делятся на два вида – отмороженные и те, которые кусаются
                                            Ответить
                                          • Классический чат-бот, который выбирает готовые цитаты поиском по ключевому слову или псевдослучайно?
                                            Ответить
                                            • Ленский вышел на дуэль в панталонах. Они разошлись и раздался выстрел
                                              Ответить
                                        • Семь бед — один ответ:
                                          govnokod.ru##.entry-comment-wrapper:has(> .entry-info > .entry-author > a[href="https://govnokod.ru/user/26089"])
                                          Ответить
                                          • я специально оставил вас одних, чтобы вы убедились, кто истинное посрамление сия вертепа. Видите теперь, как всё вышло? И даже такой дырявый утырок, как Снаут, уже блокирует петухов, устав от их спамминга. Как поэтично! Пойду, просрусь.
                                            Ответить
                  • > Что, собственно, значит "коут"? В англо-русском словаре такое слово отсутствует.
                    > Зачем нужны два знака "меньше"? Почему не написать "привет мир" сразу после "коута"?

                    Вот мнение адекватного, незашоренного плюсами человека.
                    Зачем нужны два знака «меньше»? Зачем нужны два «двоеточия»? Зачем? Зачем?

                    >Что за странная конструкция "main" с фигурными скобками?

                    Кстати «B» был консистентнее. Как мы все знаем операторные скобки { ... } в си-подобных языках опциональны.
                    В «B» можно было опускать их и для функций если их тело состояло из одного гетигпа
                    add3(a) return (a+3);
                    Для этого нужно было написать return (...);
                    Но в Сишке, к сожалению, эту чудесную фичу похерили.
                    Осталась только малополезная возможность оборачивать возвращаемое значение круглыми скобками.

                    Короче въебал плюс.
                    Ответить
                  • > using namespace std
                    какой анскилл
                    Ответить
                    • Ротоёб прав. С эстетической точки зрения cout — омерзительное название.

                      Ещё более омерзительно писать джва джвоеточия std::cout.

                      А wcout подсказывает нам где место крестов. У параши.
                      Ответить
    • нет, ну что ты

      let mut count = 0;
          for  v in [1,2,3].map(|i| {count +=1; return i + 1;}) {
              println!("{}", v)
          }
          assert_eq!(count, 3);


      и без рукописного мапа
      Ответить
    • https://habr.com/ru/post/710186/

      Что есть функция в Python?

      Эта статья предназначена только для тех людей, которым хочется узнать, чем на самом деле является функция в python....НО! Предупреждаю, я не буду лезть в сурсы питона. Эта статья была создана только для обычных вроде меня программистов.

      https://habr.com/ru/post/710186/
      Ответить
      • У меня в ассемблере нет никаких "функций".
        Ответить
        • а что же делает у x86 инструкция call? Или у тебя не x86?
          Ответить
          • Функция — свойство структурированного кода.

            В асме я могу сделать call в середину «функции». Могу джампнуть из одной «функции» в другую (см. tail call optimization, например). Можно написать такую лапшу, что код не будет разбит на функции.

            В классическом Бейсике их тоже не было. GOSUB/RETURN имитировали ассемблер. Это уже потом в Кубейсике позаимствовали функции из Фортрана.
            Ответить
            • А разве возможность вызвать произвольный кусок кода отменяет наличие функций. Или они обязательно должны быть неделимыми?
              Ответить
              • Хороший вопрос!

                Ещё одно свойство функций — их можно употреблять в выражениях. Например:
                y = 2 * sin(x) * cos(x);


                А в ассемблере нет никаких «выражений». Именно поэтому я за «ассемблер».
                Ответить
            • Я как-то напоролся на какой-то старый бейсик где не работали вложенные вызовы, т.е. стека не было.
              Ответить
            • setjmp/longjmp

              похоже, в си и си плюсплюс тоже нет никаких функций
              Ответить
              • В Си всё-таки у функции есть свой блок, а setjmp/longjmp — скорее исключение, чем обычная практика.

                С другой стороны, в TASM/MASM есть блок proc...endp, но по факту он ничего не делает.
                Ответить
                • в асемблере прыгать в середину функции тоже не очень прилично.
                  proc/endp это же просто макросня чтобы не писать код вручную


                  Вообще учитывая сколько всего "хардварного" сделано в проце и не используется (сегменты, гейты для хардварного переключения контекстов и само это переключение и пр) удивительно, что call всё еще используется (а не заменен на джампы с ручными сохранением стека)
                  Ответить
                • Как это ничего не делают, когда оперделяют дистанцию, видимости, исползаемые регистры и даже рагументы?
                  Ответить
                  • Верно. Я просто директиву USES никогда не видел в реальном коде. Обычно просто PROC NEAR или PROC FAR, чтобы выбрать дефолт для инструкций RET.
                    Ответить
    • У меня начала лагать клава на ноуте. Может быть по пизде пошел контролер, а может клава. Клава стоит три копейки, и я решил её поменять.

      Оказалось, что у Dell чтобы снять клаву, нужно разобрать нахуй пол ноута, снять систему охлаждения, поменять термопасту (бо она всё таки одноразовая) и пр.

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

      Освещение пусть будет в стене, и закрыто прозрачным кафелем. Перегорела лампа? Ломай стену, хули
      Ответить
      • Поддерживаю! Сам в кишки Делла нырял...
        Ответить
        • Кстати, термопасту я сменил на КПТ-8. И вроде норм.
          Ответить
          • не знаю, есть ли тут КПТ-8

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

              Например, такие:
              https://www.ozon.ru/product/termoprokladka-0-5mm-smartmaster-pro-18-vt-mk-100x50mm-947186171/

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

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

            Айпады они впринципе не ремонтируют
            Ответить
            • — Здравствуйте. У Вас есть серебристый «Опель»?
              — Вы только неделю назад покупали такой.
              — А хули мне с ним делать, если у него уже пепельница полная?
              Ответить
              • ну просто аккум живет года два. Через два года ваш девайс за $900 устарел, и его нужно менять полюбому
                Ответить
                • а щас вообще есть не-кетай со съёмными аккумами? я имею в виду планешты и елефоны
                  Ответить
          • остров доктора макморо
            Ответить
          • Вот пидоры
            Ответить
        • с макаками всё понятно, в макаку я бы и не полез даже. А тут вроде обычный ноут...


          Короче я за десктопы
          Ответить
          • А я за IBM PC 5150. Там любой контроллер можно было перепаять обычным паяльником.
            Ответить
            • а я за Famicom
              там тоже можно что-то перепаять
              Ответить
            • Я за IBM PC 5150 по многим причинам
              * у него достаточно простая архитектура
              * там нет пхп, JS и пр
              * там нет вайтишников, потому что не существует видеокурсов "стань асембдлер программистом под 8080 за 24 часа" от Дениса Попова
              * там нет языков с ГЦ
              * там прикольная клава на свитчах
              Ответить
              • а там можно видосик смонтировать, кинчик позырить, в игру какую нормальную поиграть?
                Ответить
                • Я ничего этого не делаю на современных компах тоже, так что мне в целом пофиг
                  Ответить
                  • а что ты делаешь на современных компах? только на гк пишешь?
                    Ответить
                    • в основном да
                      Ответить
                      • так ты можешь вообще продать комп и использовать голубиное гк-реле
                        Ответить
                        • Можно запилить оффлайновый шлюз в гк, раньше это называлось флоппинет. Записываешь на дискету все говно, что хочешь послать, и уносишь тому, у кого есть сеть.

                          Ну вот можно от руки написать коммент, и по бумажной почте послать
                          Ответить
                  • может ты ещё и полторасик бочкарёва не уважаешь?
                    Ответить
                • Можно позырить кинчик в формате GIF.

                  И игры были. Правда, джвухмерные, как оняме.
                  Ответить
                  • Только если CGA (кинчик в формате 4 цвета) потому что на MDA ты разве что матрицу посмотришь

                    А еще надо оверлеить --- подгружать каждый следующий кадр с дискеты с скоростью 30 fpm
                    Ответить
                    • 30fpm — это круто. Я видел такое, когда какой-то мудак на медленные тачки (486SX, но они почему -то были медленнее трёшек, возможно, растактовку ОЗУ неправильно выставили) поставил Windows 95.

                      И ещё я видел XT и NEC V20. У последнего на клавиатуре был светодиод «Online». Если он погас, значит, комп в глубокой задумчивости и топтать клаву бессмысленно.
                      Ответить
                      • Я тоже видел Win95 на четвёрке, и она там даже как-то работала на четырёх метрах памяти (привет говноедам из 2024 с их 700-мегабайтными хеллоувролдами на JS)

                        Разница между SX и DS, ЕМПИН, была в размере шины.
                        Но правда это речь про 386. У четёрки разница могла быть в чем-то другом.


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

                          А сейчас с двумя гигами тяжко: заходишь на современный сайт с жопоскриптом, и у тебя всё в своп вываливается и тормозит, а то ещё и ООМ приключится.
                          Ответить
                          • У нас используется одно говноприложение с веб-интерфейсом. Это часть пайплайна для CI. Оно написано на каком-то невообразимом говне типа скомпилированного под JS котлина, причем написано оче современно, в духе SPA, потому оно грузится 40 секунд, и занимает несколько гигов памяти в хроме.

                            Так вот, у этой параши есть REST API.

                            Я думаю написать команд-лайн утилиту для работы с этим говном на каком-нить Go, потом прикрутить псевдографику, и потечь
                            Ответить
                        • Мне ещё нравятся хеллоуворлды в Андроиде на > 50 мегабайт (автор просто включил в зависимости все библиотеки, которые смог вспомнить). Кае будто все забыли J2ME с кучей на полмегабайта...
                          Ответить
      • у некоторых hp тоже снять клавиатуру это целая сука эпопея. ещё и "корд" кабелей просто заебись удобно сложен прямо под ней
        Ответить
        • там надо пинцетом пирдолица

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


        Prerequisites
        1. Follow the procedure in Before working inside your computer.
        2. Remove the base cover.
        3. Remove the battery.
        4. Remove the speakers.
        5. Remove the memory.
        6. Remove the solid state drive1.
        7. Remove the solid state drive2.
        8. Remove the heat sink.
        NOTE: The system board can be removed or installed together with the heat sink attached. This simplifies the
        procedure and avoids breaking the thermal bond between the system board and the heat sink.
        9. Remove the left fan.
        10. Remove the right fan.
        11. Remove the I/O board.
        12. Remove the display assembly. <------чтобы поменять клавиатуру блядь!!!!!!!!!!!
        13. Remove the system board.
        Ответить
        • 9. Remove the left fan.
          10. Remove the right fan.

          а кто мне тогда на онлифансах донатить будет
          Ответить
          • реально ли собрать донаты на онлифанс снимая видео "не очень примые руки разбирают ноут смотреть бесплатно без регистраци"?
            Ответить
            • если назовешь его "залезаю внрутрь своими пальчиками :sweat_drops: :sweat_drops: :sweat_drops:"
              Ответить
        • до 12-го пункта дошел, дальше пока заламало. Вычистил пыль, собрал обратно. Пять раз так сделаю, на шестой раз дойду до конца
          Ответить
        • У одного ноутбука я отрезал пластмассовую перекладину, чтобы можно было снимать материнку, не откручивая охлаждающую систему. И вроде как на прочность конструкции это не повлияло.
          Ответить
      • В сервис-мануале делла написано, что разбирать надо с антистатической хуйней. Это правда так?
        Ответить
        • Чорт! Я столько техники неправильно разобрал и собрал. Придётся теперь покупать антистатическую хуйню, чтобы пересобрать технику правильно.
          Ответить
      • > Когда я стану диктатором вселенной, я издам указ, чтобы у инжинеров компании Dell кухню совместили с туалетом, и вход в нее сделали через ванную. А вход в спальню я сделаю через балкон.

        Так бы сразу и сказал, что переселишь их в «лофт» или в «коливинг».
        Ответить
    • https://pbs.twimg.com/media/FgzWelnVQAANgtI?format=jpg&name=large
      Ответить
      • МУДАК «ЮБИЛЕЙНЫЙ»
        Ответить
      • Меня больше привлекло шоу "зачет" для студентов. Очевидно, что там будет кладезь оригинального юмора. Как жаль, что я уехал из страны и не смогу попасть на такое шоу.
        Ответить
        • может, там "зачёлка"
          Ответить
        • Там всегда 1996-й и всегда пора пить чай
          Ответить
          • здравствуйте, мои дорогие, гыгы
            Ответить
            • В эфире юмористическая программа Кривое Зеркало. Вас ждут новые шутки от Елены Степаненко
              Ответить
            • а где фирменная еврейская картавость?
              Ответить
              • евреи давно уже не картавят... Картавят отродья ватников, которые учатся по учебникам, написанным для них евреями.
                Ответить
    • кто дудосит гк?
      Ответить
    • ничего необычного, просто рустнёвый макрос из пакета "tokio", а вовсе не рулы sendmail. Лисатйте дальше
      (@ { start=$start:expr; $($t:tt)* } else =&gt; $else:expr $(,)?) =&gt; {
              $crate::select!(@{ start=$start; $($t)*; $else })
          };
          (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr =&gt; $h:block, $($r:tt)* ) =&gt; {
              $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c =&gt; $h, } $($r)*)
          };
          (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr =&gt; $h:block, $($r:tt)* ) =&gt; {
              $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if true =&gt; $h, } $($r)*)
          };
          (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr =&gt; $h:block $($r:tt)* ) =&gt; {
              $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c =&gt; $h, } $($r)*)
          };
          (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr =&gt; $h:block $($r:tt)* ) =&gt; {
              $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if true =&gt; $h, } $($r)*)
          };
          (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr =&gt; $h:expr ) =&gt; {
              $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c =&gt; $h, })
          };


      Справедливости ради, я это понимать не обязан (как не обязан крестовик понимать код буста)
      Ответить
    • https://support.microsoft.com/en-us/windows/windows-update-is-now-carbon-aware-a53f39bc-5531-4bb1-9e78-db38d7a6df20
      Ответить

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