long long ago; /* in a galaxy far far away */

 //
    //                       _oo0oo_
    //                      o8888888o
    //                      88" . "88
    //                      (| -_- |)
    //                      0\  =  /0
    //                    ___/`---'\___
    //                  .' \\|     |// '.
    //                 / \\|||  :  |||//     //                / _||||| -:- |||||-     //               |   | \\\  -  /// |   |
    //               | \_|  ''\---/''  |_/ |
    //               \  .-\__  '-'  ___/-. /
    //             ___'. .'  /--.--\  `. .'___
    //          ."" '<  `.___\_<|>_/___.' >' "".
    //         | | :  `- \`.;`\ _ /`;.`/ - ` : | |
    //         \  \ `_.   \_ __\ /__ _/   .-` /  /
    //     =====`-.____`.___ \_____/___.-`___.-'=====
    //                       `=---='
    //
    //
    //     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //
    //               ????         ??BUG
    //

«Слава богу, багов нет»

#define TRUE FALSE //Happy debugging suckers


    //
    //	Dear maintainer:
    // 
    // Once you are done trying to 'optimize' this routine,
    // and have realized what a terrible mistake that was,
    // please increment the following counter as a warning
    // to the next guy:
    // 
    // total_hours_wasted_here = 42


image

// Magic. Do not touch.

image

Коммент к AngularJS.

image

Коммент к исходникам Quake III Arena.

image

view-source:http://theoatmeal.com/

image

image

Резюме Сергея Брина

/* Stupid CSS hack because IE sucks */

На сайте microsoft.com

image

На сайте Amazon.com

image

На сайте Amazon.com

image

Welcome to Flickr — Photo Sharing

image

Home of the Mozilla Project

image

Flipkart

image

    .
                             _
     _._ _..._ .-',     _.._(`))
    '-. `     '  /-._.-'    ',/
       )         \            '.
      / _    _    |                  |  a    a    /              |
     \   .-.                     ;  
      '-('' ).-'       ,'       ;
         '-;           |      .'
            \           \    /
            | 7  .__  _.-\               | |  |  ``/  /`  /
           /,_|  |   /,_/   /
              /,_/      '`-'


image


"...just crawl it."

image


MS-DOS Operating System:

image

image

image

image

Source: Farts and f-bombs: see the hidden jokes in Microsoft's early code

Запись в .EXE file:

If you can read this, you too could become a great hacker!

image

Source Code of SpankBang

image

Вебсайт анимэшки.

image

    /** 
    * For the brave souls who get this far: You are the chosen ones, 
    * the valiant knights of programming who toil away, without rest, 
    * fixing our most awful code. To you, true saviors, kings of men,
    * I say this: never gonna give you up, never gonna let you down, 
    * never gonna run around and desert you. Never gonna make you cry,
    * never gonna say goodbye. Never gonna tell a lie and hurt you. 
    */

    //When I wrote this, only God and I understood what I was doing 
    //Now, God only knows

// Autogenerated, do not edit. All changes will be undone.

// sometimes I believe compiler ignores all my comments

    // I dedicate all this code, all my work, to my wife, Darlene, who will 
    // have to support me and our three children and the dog once it gets 
    // released into the public.

// drunk, fix later

    Catch (Exception e) {
     //who cares?
    }

    
/* 
 * You may think you know what the following code does. 
 * But you dont. Trust me. 
 * Fiddle with it, and youll spend many a sleepless 
 * night cursing the moment you thought youd be clever 
 * enough to "optimize" the code below. 
 * Now close this file and go play with something else. 
 */

    
//This code sucks, you know it and I know it. 
 //Move on and call me an idiot later.

// If this comment is removed the program will blow up 

//Dear future me. Please forgive me.
//I can’t even begin to express how sorry I am.

options.BatchSize = 300; //Madness? THIS IS SPARTA!

// I have to find a better job

// Catching exceptions is for communists

// Houston, we have a problem

// If I from the future read this I’ll back in time and kill myself.

// This is crap code but it’s 3 a.m. and I need to get this working


//Mr. Compiler, please do not read this.


B    FUBAR     # OK, I give up. Halt & take a dump!


/* don't ask, don't touch */


/* If you are reading this, I want you to know that I am probably on some kind of FBI watch-list because I googled “how to kill all children while leaving the parents alive”. So yeah, Linux is brutal */



    /*         ^          ^
     *		\______    ______/
     *       \  * \   / *   /
     *        -----   ------           /----     *              ||               -< Boo! |
     *             /__\                \----/
     *       \______________/
     *        \/\/\/\/\/\/\/
     *         ------------
     */



    /*
    This following code is a work of fiction. Variables, methods, classes and interfaces are either the products of the author’s imagination or used in a fictitious manner. Any resemblance to actual persons's code, living, dead or in coma is purely coincidental.
    */



    /*
     *
     *   ARRRRRRRRRRRRRRRRRRRRRR!
     *
     *
     *              |    |    |
     *             )_)  )_)  )_)
     *            )___))___))___)
     *           )____)____)_____)     *         _____|____|____|____\\\__
     *---------\                   /---------
     *  ^^^^^ ^^^^^^^^^^^^^^^^^^^^^
     *    ^^^^      ^^^^     ^^^    ^^
     *         ^^^^      ^^^
     *
     *
     */


image


image


// somedev1 - 6/7/02 Adding temporary tracking of Login screen
     // somedev2 - 5/22/07 Temporary my ass .


//If you have reached here, you're probably doing something wrong. 


//Increase the counter when you have tried hard to optimize this code and failed. 
    //total_hours_wasted=21


// No comments, as it was hard to code, it should be hard to understand.


//f**k the customers. 


/* Please work */


 //Hey John, please fix the errors. 
    //Hey Abraham, please fix the errors. 
    //Abraham says F**k you both .


    /*
    The CEO of the company (and my former boss) sold the company
    leaving me free to comment the code as I should have. The 
    former CEO of the company will be referred  to as Dip Shit, or DS for short.
     
    DS thinks he is a software developing genius. Unfortunately for
    me (the maintenance programmer) I spent too much time cleaning
     up Dip's Shit.
    DS is a daredevil developer. Like Evel Knievel his code uses
     the GOTO statement frequently jumping daringly from a code 
    module into the middle of an IF...THEN structure in a different 
    module that has nothing to do with the first module.
    Speaking of IF structures DS loves them. He has no idea what a 
    CASE or SWITCH logic block is. Instead, I get to play code 
    archaeologist, and dig though a massively nested (and un-
    indented) IF...THEN...ELSE logic blocks.
     
    DS thinks of himself as clever, and this shows though with the 
    variable names he chooses:
     
      global i=0;
      global dateMyWife = 1;
      datesAreAFruit = '12/12/98';
      giveDatesToMyWife = datesAreAFruit + dateMyWife;
      if (someStuid)
      {
        giveDatesToMyWife = false;
      }
     
      // Ryan. Why does this sometimes crash? 
      if (giveDatesToMyWife) goto :hotTub 
     
      // Well, DS because you changed giveDatesToMyWife data type, 
    (also, adding an integer to the string -- which the compiler 
    warned you about)... Anyway in a weakly typed language you 
    obtained drain bramage by conditionally changing the data type 
    from a string to a Boolean, so that when the 
    if(giveDatesToMyWife) executes, when the variable is a string 
    the program correctly crashes -- because a string is not a 
    conditional bool type. Also, since someStuid is global, the 
    invisible pink unicorn only knows where this value is set, or 
    where and in what modules it gets changed.
     
    DS only knows how to scope variables as global. Stating when he  
    "tried using local, or private, my programs would always error 
    with variable not found error, so it's just easier to make 
    everything a global."
     
    I could go on, but as you dig though this flying-spaghetti-
    monster nightmare code you will see what I mean.
    */


    var c = 0,
    	safeCounter;
    ...
    safeCounter = function () {
          ...
          c++; // this is not subliminal
          ...
    },
    ...


    int x; 				// x is an int
    int y; 				// y is an int
    int z; 				// z is an int
     
    /* more code here ... */
     
    if (x)				// do something here
    	return x;
    else if (x == 0) 	// do something else here
    	return y;
    else				// do something entirely different
    	return z;


Коммент в исходниках VMWare:
//This exception should never happen, if it does gods help us.


И все же ЭТО однажды случилось, и бог не помог...

image


Has the Large Hadron Collider destroyed the world yet?

image


image


image


image

Исходники Apollo 11

И напоследок, крик души:


    # Stop using anal as a variable! 
    # Wherever I look I see anal this and anal that!
    # So please stop.
    # Use analyze or xbvvzr or whatever and not anal_insert or anal_check

P.S.


// I'm sorry.

Комментарии (128)


  1. ZyXI
    26.11.2017 01:30

    А что не так с


    // Autogenerated, do not edit. All changes will be undone.

    ?


    1. lopatoid
      26.11.2017 02:20

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


      1. Survtur
        26.11.2017 12:46

        Почему вы так решили?


        1. Amenothis
          26.11.2017 20:09

          Встречал эту штуку в приколах, где написано что-то вроде: «Чтобы ваш код никто не трогал, добавьте в нее эту строчку».


    1. dipsy
      26.11.2017 06:51
      +1

      На StackOverflow там ещё был комментарий на этот комментарий: «This seems to stop morons from messing my code...»


  1. 3dcryx
    26.11.2017 01:40

    Почему коментарии без соответсвующего кода?
    Почему не перевели комментарии?


    1. lam0x86
      26.11.2017 02:33

      Мы не на Пикабу, чтобы комментарии переводить. Общепринято, что язык комментариев — английский, не зависимо от того, для кого написан софт.


      1. 3dcryx
        26.11.2017 03:43

        Оон оно как, не знал. А кем кстати "общепринято"? Может стоит уведомить все крупные конторы об этом правиле?


        1. Anarions
          26.11.2017 03:47

          Крупные конторы и так в курсе.


          1. 3dcryx
            26.11.2017 04:53

            Яндекс, 1С, Сбертех как-то пропустили мимо ушей. Хотя это наверно недостаточно крупные.


            1. sumanai
              26.11.2017 05:02

              Яндекс исправляет на английские и кается. 1С стыдно поминать, Сбертех… Тоже.


              1. TheKnight
                26.11.2017 05:23
                -1

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


                1. nochkin
                  26.11.2017 06:48
                  +2

                  Цитирую: «каемся».


                  1. TheKnight
                    26.11.2017 12:16

                    Нет вхождения такого слова на странице по вышеприведенной вами ссылке.


                    1. nochkin
                      26.11.2017 21:00
                      -1

                      Я ссылок не приводил. Её надо через Яндекс искать самому.


                      1. TheKnight
                        27.11.2017 01:04

                        А, это была попытка троллинга…


                        1. nochkin
                          27.11.2017 03:37

                          Интересное определения шутки. Каждому — своё.


            1. samodum
              26.11.2017 23:08
              +1

              Лови 1С-ника!


            1. OKyJIucT
              27.11.2017 13:15
              +2

              Что с 1С взять, если у них даже код на русском?


        1. Muzzy0
          26.11.2017 11:05

          Тех, кто пишет комменты не на английском, надо бить до посинения.
          Доводилось мне ковыряться в коде, который писали фрицы и итальянцы. В первом случае хватало магии, во втором — адские спагетти. И комменты на немецком и итальянском, соответственно. Разработка была для заказчиков, которые не розуміють ни по-немецки, не по-итальянски.
          Я очень долго ругался и уйму времени потратил только на перевод комментов. В случае с немецким особо доставляло то, что надо локаль менять, иначе теряются некоторые символы — вот такие, например: «gro?».

          Сам пишу на английском.


          1. F0iL
            26.11.2017 11:23

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


            1. Muzzy0
              26.11.2017 12:02

              Это уровень nightmare :)


            1. TheKnight
              26.11.2017 12:21

              Встретил код с комментариями на корейском с побитой кодировкой!
              Благо что строк кода мало и вообще это AI гомункула для игры Ragnarok Online — нет необходимости сидеть и разбираться, если не идет.


            1. Mirn
              26.11.2017 12:40

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


              1. Free0N
                26.11.2017 16:08
                +1

                Вы бы определились — или «быдлокод», или «разложен и оформлен»…
                Если каменты не на английском, то предполагается, что продукт дальше страны не пойдет. Так или иначе, на родном языке воспринимаются намного проще (при условии «толковости» написания).


                1. Mirn
                  26.11.2017 16:38

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


                  1. вызывается в итоге одна чудо функция в которую передаётся ВСЁ, десять типов изображений, все опции и все указатели на другие функции которые аккуратно и тчательно обёрнуты, но NULL или указатель не на ту функцию с другими параметрам передать можно хотя с++.
                  2. функция нахождения медианы из 5 чисел — сотни строк аккуратнейшего кода (хотя во всех DSP и сигнальных либах это 30-40 строк и десять compare&swap)
                  3. на каждый вид и размерность матрицы свои функции которые принимают (void *) БРРРР!!! холодный пот!!! ну и прочие миксы си и си++.
                  4. зачем то умножения расписаны в деления и сдвиги, хотя целевая плис аппаратных умножителей содержит в 10 раз больше чем требуется даже этому быдлокоду.


                  1. Korogodin
                    26.11.2017 22:31
                    +1

                    С++ и целевая ПЛИС — балуетесь HLS? Как впечатления? Нет проблем с С++'овскими фишками?


            1. AnutaU
              26.11.2017 13:56

              О, тоже бывало. Но всё же лучше комментарии на корейском, чем вообще никаких, и код, кхм, нетривиальный.
              А так больше документация на корейском попадается, либо переписка.


            1. SergBell
              27.11.2017 06:46

              Буквально пару недель назад разбирал исходники, комментарии к которым были написаны на китайском в древней кодировке GB18030. Сами китайцы закатили глаза, пожелали удачи и умыли руки.


          1. khim
            26.11.2017 17:26
            +1

            В случае с немецким особо доставляло то, что надо локаль менять, иначе теряются некоторые символы — вот такие, например: «gro?».
            А нужно просто пользовать вменяемые редакторы.

            Самый цимес, что я видел (правда давно) — файл, который был одновременно написан в трёх кодировках. После моих правок он стан написан в четырёх кодировках… и я не о комментариях. Комментарии там, как раз, были вполне себе на английском.


            1. Muzzy0
              26.11.2017 18:13

              А нужно просто пользовать вменяемые редакторы.
              Спасибо, Кэп! Step 5, Step 7.

              Самый цимес, что я видел (правда давно) — файл, который был одновременно написан в трёх кодировках.
              Только один вопрос: зачем?!


              1. khim
                26.11.2017 20:27
                +3

                Только один вопрос: зачем?!
                Это был спеллчекер. На входе был, понятно, UTF-8 (XXI век, всё-такое), но дальше — оно перегонялось в однобайтовую кодировку (ядро было универсальным, но поддерживало только однобайтовые кодировки). windows-1252 для европейских языков, понятно, windows-1250 для центральной европы и, кажется, windows-1253 для греческого (вот тут могу соврать — давно дело было).

                Ну а вишенкой на торте было наличие некоторого количество таблиц в коде (валидные символы для разных языков), символы, «нерелевантные» для текущего языка (как и символы не поддерживаемые в текущей кодировке) перегонялись в "?" плюс таблички с классификаторами (гласные/согласные/etc).

                Ну и как понятно табличка для немецкого была в windows-1252, а для польского — в windows-1250… для русского, понятно, ещё windows-1251 добавился…

                Всё в одном файле, да. Достаточно было этот файл в каком-нибудь новомодном Eclipse открыть и один пробел поставить — и всё, тесты начинали падать (да, несмотря на весь этот ужас с кодировками в остальном-то там всё неплохо было, unit-тесты, CI, вот это вот всё)…


                1. Muzzy0
                  26.11.2017 23:56

                  Похоже, движок у этого спеллчекера — адское легаси..


              1. romansur
                27.11.2017 00:46

                Зато в TIA Portal'е немцы исправились, даже теги на русском создавать можно)


                1. andersong
                  27.11.2017 08:14

                  Но не нужно. Тэги на английском получаются короче и понятней, чем на русском)


                  1. romansur
                    27.11.2017 09:54
                    +1

                    Не спорю) Но вопрос стоял в перевариваемости продуктом разных языков.


                1. Muzzy0
                  27.11.2017 09:47

                  TIA Portal во многих отношениях был шагом назад, только сейчас догоняют былое. Комменты на русском мы ещё в Step 7 писали (в России и для российских заказчиков).

                  даже теги на русском создавать можно)
                  А вот это ни за что и никогда.
                  С языками ещё одна подстава, актуальная для меня: из списка языков, которые можно добавить в проект, исчез иврит. Не сильно критично, выбираем какой-нибудь другой. Но неприятно. Из плюсов — больше не надо писать на иврите для панелей задом наперёд. Старые, под Flexible на WinCE, не поддерживали RTL.


            1. alix_ginger
              26.11.2017 18:16

              одновременно написан в трёх кодировках
              Но ведь английские буквы и всякие плюсы-минусы во всех кодировках в одном и том же месте? Или в коде были неанглийские?


              1. grossws
                26.11.2017 19:12

                Скажите это BOCU1 ,)


              1. khim
                26.11.2017 20:36
                +2

                В коде были не английские. То есть было что-то в духе:

                  switch (CurrentSpellcheckerLanguage) {
                    case LanguageGerman:
                      if (std::find_if(it1, it2, '?') {
                       ...
                      }
                      break;
                    case LanguagePolish:
                      if (std::find_if(it1, it2, 'l') {
                       ...
                      }
                      break;
                    case LanguageRussian:
                      if (std::find_if(it1, it2, 'ш') {
                       ...
                      }
                      break;
                  }
                
                И, соответственно вот эти вот '?', 'l' и 'ш' — были в разных кодировках. Прямо внутри одной функции…


                1. Deosis
                  27.11.2017 08:13

                  Насколько трудно кусок между case и break вынести в отдельный файл?
                  Или проще есть кактус?


                  1. khim
                    27.11.2017 12:44

                    Насколько трудно кусок между case и break вынести в отдельный файл?
                    В конце-концов это и сделали… когда ресурсы нашли.

                    До сих пор не знаю как к этому относится: код в результате стал сложнее и медленнее, но зато его можно редактировать Eclipse'ом не опасаясь всё уничтожить неловким движением. Ну и количество WTF'ов уменьшилось…


                  1. alix_ginger
                    27.11.2017 12:58
                    +1

                    По-моему, еще проще было бы сделать что-то вроде

                    #define CODE_GERMAN_ESZETT = 223
                    #define CODE_RUSSIAN_SHA = 248
                    и сравнивать по коду символа


                    1. khim
                      28.11.2017 04:09
                      -1

                      Ну как паллиатив — возможно. Но последний раз, когда я этот код видел правила вынесли во внешний файл специального формата, «типа понятного лингвистам»… правда правил новых там после этого за пару лет не добавилось… Но фиг его знает, может просто с лингвистами туго было…


                1. Muzzy0
                  27.11.2017 10:03

                  Т.е. сама программа нормально работала с кодировками, только сам файл с данными был восьмибитным?

                  PS вам повезло, что ко всей этой прелести не добавилась кодировка windows-1255 :)


                  1. khim
                    27.11.2017 12:49

                    Т.е. сама программа нормально работала с кодировками
                    Как я уже писал: ядро у неё нормально работало с любой однобайтовой кодировкой — а языков там было… много.

                    PS вам повезло, что ко всей этой прелести не добавилась кодировка windows-1255 :)
                    А чем тут windows-1255 плох? Это бы как-то повлияло только на тех, кто поддержку иврита бы добавлял, остальные бы видели в этих местах разные свои буквы…


                    1. Muzzy0
                      27.11.2017 14:22

                      Тем, что к некоторой свистопляске с кодировкой добавляется свистопляска с RTL. Хотя, возможно, на уровне текстового файла это не влияет.


          1. Muzzy0
            27.11.2017 09:51

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


          1. freeart
            27.11.2017 17:33
            +1

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


            1. Muzzy0
              27.11.2017 18:12

              Мне попадалось немало комментариев на иврите :)


    1. yarric
      26.11.2017 10:59
      +2

      Так нормально?


      длинный длинный тому_назад; /* в далекой-далекой галактике */


      1. hdfan2
        26.11.2017 15:01
        +2

        #define давным long long
        давным давно; /* в далекой-далекой галактике */
        


        1. Wyrd
          28.11.2017 21:58

          Undefined symbol «давно» :)


          1. khim
            28.11.2017 22:38
            +1

            Эт-то что за наезды? Это — честный C++. Можете проверить.


      1. kazarey
        26.11.2017 15:11
        +1

        Справедливости ради, один из комментариев по-русски звучит как влитой:

        // Catching exceptions is for communists

        // Отлавливать исключения - занятие для коммунистов


  1. manok
    26.11.2017 01:43
    +1

    float boat;   // must be a float, otherwise it sinks.


    // I can’t divide with zero, so I have to divide with something very similar 
    result = number / 0.00000000000001


    // no comments for you
    // it was hard to write
    // so it should be hard to read


    1. fatronix
      26.11.2017 10:55

      А зачем надо было делить на ноль?)


      1. Morozov_5F
        26.11.2017 11:41

        Получить почти бесконечность?..


      1. Zoolander
        26.11.2017 12:18
        +1

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

        решение — делать перед вычислением
        if(divider==0) return SomeSpecialResult


        1. KvanTTT
          26.11.2017 14:40
          +2

          А разве стандарт float не позволяет делить на ноль? Есть же специальные значения для Nan, PositiveInfinity, NegativeInfinity.


          1. khim
            26.11.2017 17:52

            А разве стандарт float не позволяет делить на ноль?
            Лучше бы не позволял.

            Есть же специальные значения для Nan, PositiveInfinity, NegativeInfinity.
            +inf и -inf — ещё себя прилично ведут. Но nan
            nan < 0false
            nan > 0false
            nan == 0false
            nan != 0false
            Разработчики, которые это извращение изобрели на stack overflow рассказывают сказки, но… звучит это примерно как «мины замедленного действия — это жутко круто, кишки намотанные на люстру — это просто восхитительно».

            Дело в том, что если вы задумаетесь, то поймёте, что неявное предположение о том, что == — это отношение эквивалентности (в частности A == A для любого A), а <= — это отношение порядка (в частности если A < B — false, то A >= B — true) заложено в такое количество алгоритмов, что возврат из функции nan'а — это почти акт саботажа…


            1. grossws
              26.11.2017 19:19

              Одна из причин почему в rust разделили типажи Ord/PartialOrd и Eq/PartialEq это как раз ieee754


            1. MrShoor
              26.11.2017 21:38
              +1

              Справделивости ради в машинных инструкциях операции сравнения с NaN возвращают не False, а отдельное сотояние, которое можно понимать например как NaB (Not a Boolean. Термин не общепризнанный, но результату операции соответствуют 2 флага вместо одного, что дает нам третье состояние). Проблема в том, что это самое Not a Boolean никак не влазит в boolean, у которого только 2 состояния. Поэтому разработчики языка забили болт, и сказали, что это Not a Boolean кастится к False всегда, и не волнует.
              Вы же в свою очередь можете разработать свой язык и компилтор, для которого результат сравнений больше/меньше/равно будет возвращать 3 состояния, и тогда проблема с nan == nan исчезнет.


              1. khim
                26.11.2017 22:02
                +1

                Вот только не надо мне сказок про машинные инструкции сочинять, я с ними, как бы, каждый день сталкиваюсь. cmpss возвращает либо 0, либо -1, других вариантов нет. Или вы про ucomiss? Да — там для NaN отдельный флаг есть, но… его-таки нужно отдельноa проверять! Для проверок же «равно»/«неравно» и «больше»/«меньше» возвращаются, опять-таки true или false — при этом инструкция перехода может либо смотреть на флаги ZF/SF, либо на PF.

                Так что мне придётся создавать не свой собственный компилятор, а свой собственный процессор — что гораздо сложнее и безумнее. Гораздо более разумное решение: при обнаружении nan прекращать вычисления вообще. Проще, надёжнее, быстрее.


                1. MrShoor
                  28.11.2017 04:43

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

                  но… его-таки нужно отдельноa проверять! Для проверок же «равно»/«неравно» и «больше»/«меньше» возвращаются, опять-таки true или false
                  Дело в том, что его нужно в ряде случаев обязательно проверять. Иначе может оказаться, что любое число будет меньше и равно NaN. И компиляторы частенько проверяют оба флага, чтобы сгенерировать false.


      1. Muzzy0
        27.11.2017 10:04

        Либо делитель вычисляется и может оказаться нулём, либо есть цель вызвать исключение.


    1. untilx
      27.11.2017 13:16
      +1

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


  1. PapaBubaDiop
    26.11.2017 01:58

    Оказывается, у всех это было. И будет.


  1. decomeron
    26.11.2017 02:01

    Что это было?


  1. MuratovTM
    26.11.2017 02:10
    +1

    // Нужно обязательно дунуть, потому что если не дунуть, 
    // то никакого чуда не произойдет...
    // © Амаяк Акопян
    


  1. AC130
    26.11.2017 02:14

    Про извлечение обратного квадратного корня в исходниках Quake на хабре есть более подробная статья, где объясняется вся магия.


  1. PastorGL
    26.11.2017 03:40

    // Please do not refactor, you probably won't optimize this better.

    — в заголовке метода на 2000 с лишним строк. Ну, я его на сотню строк всё же сумел ужать.


    // contrary to popular beliefs no magic is done here

    — перед блоком, где выполнялось 15 битовых операций подряд. Код на Java.


    // talk to the hand ?-?
    Handler hand = new TerminationHandler();

    — автор не поленился найти в Юникоде символ для очков, которые примерил Терминатор.


    1. mistergrim
      26.11.2017 08:56

      > — в заголовке метода на 2000 с лишним строк. Ну, я его на сотню строк всё же сумел ужать.

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


      1. evilgeek
        27.11.2017 00:47
        +1

        Если мы говорим про один и тот же тетрис, то можно выкинуть в этом тетрисе строку копирайта и таблицу рекордов и ничего сложного. Но с таблицей рекордов есть фича — уложиться максимально близко к 64К-1, что тоже один из челленджей, так что такое выкидывание заметно меняет использование.


        1. mistergrim
          27.11.2017 08:01

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


    1. Interreto
      26.11.2017 14:35
      +1

      для вас рефакторинг это ужатие количества строк? тогда я бы до 1 ужал :-D


      1. PastorGL
        26.11.2017 22:17
        +1

        ну, там реально был алгоритм межсерверной синхронизации на полсотни шагов с состоянием, протаскиваемым с начала до конца. чисто механически порезать на куски можно было, но вот какой смысл? 23 переменных из метода в метод передавать — это уже слишком, даже если их в класс запаковать. а одним куском это было хотя бы с пятого раза читаемо.


    1. Muzzy0
      27.11.2017 10:12

      Напомнило историю про русского, придумавшего формулу.
      Правда, я бы не стал удалять таблицу сразу. Как минимум, запустил бы что-то вроде
      SELECT COUNT(A)
      FROM Table
      WHERE B <> A*3


      1. dimkss
        27.11.2017 20:43

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


        1. Muzzy0
          28.11.2017 10:28

          Т.е. возможны варианты, когда целочисленное умножение исполняется за переменное количество тиков, а SQL запрос к немаленькой таблице — за постоянное?
          Гонка из-за чего? из-за нескольких параллельных обращений к формуле/таблице? Не думаю, что там это было актуально. А даже если, то слишком легкомысленно полагаться на одинаковое время исполнения и не отлавливать потенциальные гонки.


          1. dimkss
            28.11.2017 10:56

            > SQL запрос к немаленькой таблице
            Это не обязательно таблица. Возможно просто внешняя память.

            > Гонка из-за чего? из-за нескольких параллельных обращений к формуле/таблице? > Не думаю, что там это было актуально.
            Мы наверно никогда не узнаем.

            > А даже если, то слишком легкомысленно полагаться на одинаковое время исполнения.
            Согласен. Кстати, насколько я помню, некоторые платы реального времени именно так и работают.


  1. therhino
    26.11.2017 04:49

    Исходники Apollo 11 — the best


    1. Fedcomp
      26.11.2017 08:18

      temporary i hope i hope?


  1. zenn
    26.11.2017 09:06

    Простите за зануду, но не нашел подтверждений для "Исходники Apollo 11". Исходники давно опубликовали на гитхабе chrislgarry/Apollo-11. Не в текущем master, ни в инициирующем комите #7 (6e8c67f53145375d48d8a1af8f85384d1b10ec51) не удалось найти ни одного вхождения по «anal», если и используется то вполне корректно как «analysis». Естественно самого комментария в коде нет. Возможно, конечно, он был на стадии разработки проекта, но что-то я в этом сильно сомневаюсь.


    1. saluev
      26.11.2017 10:29

      Подпись относится к тому, что над ней.


    1. VezhLos
      26.11.2017 14:36
      +1

      Я вот не знаю, как там у Apollo, а в нашей больничной БД названия всех таблиц и полей, имеющих отношение к лабораторным анализам, начинаются с ANAL_. Например, ANAL_DIR, ANAL_COMMON и т.п. В общем, всё через жо… Простите, через ANAL.


      1. Muzzy0
        27.11.2017 09:55

        Когда вышестоящие товарищи захотели сократить слово «ANALOG(_INPUT)» я тоже предложил не маяться дурью и сократить до ANAL_IN.

        А ещё лекарство есть — ANAL GIN :)


    1. zooks
      26.11.2017 14:57

      Либо легенда, либо процензурировали.


  1. fatronix
    26.11.2017 10:38

    //DNA - Because fuck you and your magic numbers being all over the codebase.
    #define DNA_BLOCK_SIZE   3
    


    1. askv
      26.11.2017 10:43

      Зря ноль перестали зачеркивать :)


      1. yizraor
        26.11.2017 11:12

        Что именно Вы имеете в виду?
        В командной строке и многих IDE по дефолту используются шрифты с зачёркнутым нулём.
        Или Вы про хабр речь ведёте? В блоках кода действительно нули обычные… Ну, можете предложение кинуть админам хабра, чтобы со шрифтом поиграли для блоков кода.


        int x = 0;  // обычный нолик :)
        


        1. vvzvlad
          26.11.2017 13:38

          Эээ…


          1. yizraor
            26.11.2017 14:04

            Серьёзно?
            А у меня по-другому...



            По настройкам в своём профиле пробежался, вроде как ничего не нашел по настройкам шрифтов… У Вас какой браузер/ОС, если не секрет? (у меня Mozilla/Win10)


            1. vvzvlad
              26.11.2017 14:06

              Chrome/MacOS


              1. yizraor
                26.11.2017 14:08

                Может быть, дефолтный шрифт в браузере разный?
                У меня "Times New Roman" стоит. Может быть, у Вас "программерский" шрифт на дефолте?


                UPD:
                поменял дефолтный шрифт на "Consolas", ничего не изменилось :(
                какая-то бага хабра, как думаете?


                1. vvzvlad
                  26.11.2017 14:21

                  У меня просто стоит Menlo(специально не ставил, вообще в первый раз его вижу осознанно), который указан в стилях, он и используется, видимо — в нем нолик перечеркнутый.


        1. AreD
          26.11.2017 14:26

          У меня для вас плохие новости :) Хабр использует моноширинный системный шрифт. Ниже скриншот моей ОС:
          image
          А вот код стиля для шрифта исходников хабра:

          font-family: Menlo, Monaco, 'Courier New', monospace
          

          Предположу что вы читаете Хабр под Windows, а в Courier New ноль без зачеркивания.


          1. yizraor
            26.11.2017 14:41

            Да, Вы правы :)
            Я скачал и установил в системе шрифт Monaco, теперь блоки кода сменили вид и отображаются этим шрифтом.
            Спасибо!


            1. yizraor
              26.11.2017 14:48
              +1

              Черкнул в службу поддержки предложение пересмотреть список шрифтов в стилях…
              Правда, не знаю, сочтут ли этот вопрос достойным рассмотрения — так-то невелика проблема


              1. BeppeGrillo
                27.11.2017 15:03

                Вообще, раз это сайт для профессионалов, следует использовать профессиональный шрифт с лигатурами типа github.com/tonsky/FiraCode

                /CC msdos9 AreD vvzvlad askv Boomburum


                1. faiwer
                  27.11.2017 15:29

                  Мне кажется это плохая идея, тащить лигатуры в статьи. Все эти автозамены уместны в уютном, под себя настроенном, редакторе, а в статьях будут создавать лишь путаницу и вызывать множество вопросов. К тому же, они не всегда идеально работают. Использую FiraCode и иногда натыкаюсь на появление символов там, где я бы не хотел их видеть.


                  1. BeppeGrillo
                    27.11.2017 16:04

                    Так я и не предлагаю использовать его в статьях, только в блоках кода :)


                1. vvzvlad
                  27.11.2017 16:18

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


            1. msdos9
              27.11.2017 10:40

              Тоже скачал и установил Monaco в ОС, но шрифт блоках кода на хабре не изменился ((( Пользуюсь Win7/Firefox


              1. yizraor
                27.11.2017 18:30

                Проверьте название шрифта :)
                У меня тоже первая попытка была неудачной, но это был шрифт "Monaco Plain".
                Затем я поискал ещё, нашёл шрифт с точным названием "Monaco" и вот на нём уже всё заработало :)


        1. gban
          26.11.2017 14:37

          int x = 0; // обычный нолик :)

          и так сойдет ;)


          1. vvzvlad
            27.11.2017 16:19

            А у меня мало того, что нолик с палочкой, так еще и зачеркнут теперь!


  1. yarric
    26.11.2017 11:02
    +1

    А можно подписи к изображениям писать над самими изображениями? Я, конечно, понимаю — ЕСКД там, ГОСТ и все дела, но удобнее читать сверху-вниз всё-таки...


  1. Error1024
    26.11.2017 11:37

    Извините, но это не статья, это куча надерганных из интернета скриншотов.


    1. Muzzy0
      27.11.2017 09:57

      Тут самое ценное — обсуждение со своими примерами ;)


  1. Aquahawk
    26.11.2017 12:42

    const {
      __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,
    } = require('ReactNative');
    
    module.exports =
      __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactDebugTool;


    https://github.com/facebook/react-native/blob/678a7f3c39e495db602e90e994894051eb7aab10/Libraries/Renderer/shims/ReactDebugTool.js


  1. PravdorubMSK
    26.11.2017 13:10

    Тонкий юмор, присущий лишь задротам. Даже не знаешь, плакать или смеяться.


  1. GRaAL
    26.11.2017 13:31

    В сорцах игрового движка Phaser

        // now draw those suckas!
        gl.drawElements(gl.TRIANGLES, this.currentBatchSize * 6, gl.UNSIGNED_SHORT, 0);



  1. DrLivesey
    26.11.2017 13:54

    #define TRUE FALSE //Happy debugging suckers

    Это слишком просто, здесь есть на много больше интересного.


  1. Ruins
    26.11.2017 14:39
    +1

    //Why i rewrite this again…


  1. bogdanvex
    26.11.2017 14:39

    Я немного не понимаю: что это?


    1. speciman
      26.11.2017 16:36

      Это юмористические комментарии в коде


    1. Slavik7
      26.11.2017 16:43

      Выдержки из исходников различных проектов. Чтиво для программистов в общем, нормальные люди не поймут. Поздравляю, вы — нормальный!


  1. pankraty
    26.11.2017 16:35
    +1

    Достойное пополнение коллекции

        /*
            COME TO THE DARK SIDE!!!
    
                     _.-'~~~~~~`-._                                                    
                    /      ||      \                                                   
                   /       ||       \        
                  |        ||        |                      
                  | _______||_______ |                                                 
                  |/ ----- \/ ----- \|                                                 
                 /  (     )  (     )  \                                                
                / \  ----- () -----  / \                                               
               /   \      /||\      /   \                                              
              /     \    /||||\    /     \  
             /       \  /||||||\  /       \                                            
            /_        \o========o/        _\                                           
              `--...__|`-._  _.-'|__...--'                                             
                      |    `'    |                         
    
        */
    


    Из заголовочной части одного очень заморочного модуля.


  1. Shchvova
    26.11.2017 17:37

    Кому интересно, pterodactyl.me когда-то редиректил сюда theoatmeal.com/comics/ptero


  1. AkshinM
    26.11.2017 18:25

    есть еще такая

    Вот


  1. Daniil1979
    26.11.2017 21:41
    -2

    Спасибо! Супер!


  1. lassana
    26.11.2017 21:54

    1. Muzzy0
      27.11.2017 10:18

      Если есть цель оскорбиться, то всегда можно найти, чем именно. Главное — поискать. Лично я бы просто не догадался до такой нумерологии.
      Вот 0xDEADBEEF — другое дело.


  1. MacIn
    27.11.2017 00:49

    MS-DOS Operating System:

    А на скриншотах путь с Word 1.1


  1. ainoneko
    27.11.2017 10:43

    А для чего два раза комментарий с рикроллом (текстом и картинкой)?


  1. arch1tect0r
    27.11.2017 11:51

    Последнее прям вообще доставило… Есть у меня код в котором есть вот такие забавные методы PasteAnalExecute, DelAllAnalExecute, CopyAnalExecute

    P.S. и это не софт для игрушек 18+


  1. shomnest
    28.11.2017 14:02
    +1

    Из Вики ru.wikipedia.org/wiki/RMI

    int q=centralWarehouse.getQuantity("SuperSucker 100 Vacuum Cleaner");