1. Си / Говнокод #24560

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    http://faqs.org.ru/progr/c_cpp/cfaqrus.htm
    
    1.14:   Ну а если честно, на какой-нибудь реальной машине используются
            ненулевые внутренние представления нулевых указателей или разные
            представления для указателей разных типов?
    
    О:	Серия Prime 50 использует сегмент 07777, смещение 0 для	нулевого
            указателя, по крайней мере, для PL/I. Более поздние модели используют
            сегмент 0, смещение 0 для нулевых указателей С, что делает
            необходимыми новые инструкции, такие как TCNP (проверить нулевой
            указатель С), которые вводятся для совместимости с уцелевшими
            скверно написанными С программами, основанными на неверных
            предположениях. Старые машины Prime с адресацией слов были печально
            знамениты тем, что указатели на байты (char *) у них были большего
            размера, чем указатели на слова (int *).
    
            Серия Eclipse MV корпорации Data General имеет три аппаратно
            поддерживаемых типа указателей (указатели на слово, байт и бит), два
    	из которых - char * и void * используются компиляторами	С. Указатель
    	word * используется во всех других случаях.
    
    	Некоторые центральные процессоры Honeywell-Bull	используют код 06000
    	для внутреннего	представления нулевых указателей.
    
    	Серия CDC Cyber	180 использует 48-битные указатели, состоящие из
            кольца (ring), сегмента и смещения. Большинство пользователей
    	(в кольце 11) имеют в качестве нулевых указателей код 0xB00000000000.
    
    	Символическая Лисп-машина с теговой архитектурой даже не имеет
    	общеупотребительных указателей;	она использует пару <NIL,0> (вообще
            говоря, несуществующий <объект, смещение> хендл) как нулевой
            указатель С.
    
            В зависимости от модели памяти, процессоры 80*86 (PC) могут
            использовать либо 16-битные указатели на данные и 32-битные указатели
            на функции,  либо, наоборот, 32-битные указатели на данные и 16-битные
            - на функции.
    
    	Старые модели HP 3000 используют различные схемы адресации для байтов
            и для слов. Указатели на char и на void, имеют, следовательно,
            другое представление, чем указатели на int (на структуры и т.п.),
    	даже если адрес	одинаков.

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

    Делать специальную инструкцию в процессоре для криво написанного сишного кода. Какой багор!

    Запостил: j123123, 01 Августа 2018

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

    • Не затруднит ли тебя изложить то же самое, но в контексте "PHP", дабы я понял, о чём речь?
      Ответить
      • Дабы изложить нечто подобное в контексте "PHP", надо добавить в "PHP" понятие указателя и понятие нулевого указателя. А еще сделать PHP компилируемым в натив. Когда эти технические проблемы будут решены компенентными специалистами, можно будет попробовать изложить то же самое, но в контексте "PHP"
        Ответить
    • [quote]
      В зависимости от модели памяти, процессоры 80*86 (PC) могут
      использовать либо 16-битные указатели на данные и 32-битные указатели
      на функции, либо, наоборот, 32-битные указатели на данные и 16-битные
      - на функции.
      [/quote]

      либо и те и другие (huge model)
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Понятно что автор пишет про сегменты и реальный режим. Трудно подумать что он пишет про Flat Model, если уже перевод статьи датирован 03.04.96.

          Ты прав на счет перехлеста: Один и тот же адрес мог быть виден в разных сегментах, и этим даже пользовались чтобы лишний раз не менять адрес сегмента (см историю про Gate A20).

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

              а небось в современном стандарте уже прямо написано что указатель на нуль разыменовывать не следует
              Ответить
    • сайт клёвый

      Информации о кроссплатформной переносимости тулкитов (возможности работы в
      Windows и MacOS) я не привожу специально, так как считаю что писать
      кроссплатформные GUI в большинстве случаев вредно. GUI должен быть удобен
      пользователю. Пользователям Unix и оболочек дешевых удобно разное. Исключения
      бывают, но редко (вертикальные рынки).


      Q: А если мне самому память нужна?

      A: Используй библиотеку для своппинга в XMS/EMS/Disk - перед запуском внешней
      программы твоя программа вместе со всеми данными переписывается в XMS/EMS
      или на винт, а после завершения внешней - восстанавливается. Можно вос-
      пользоваться, например, юнитом SPAWNO от Ральфа Брауна
      Ответить
    • блядь, как же интересно жили люди
      http://faqs.org.ru/lan/street.htm

      мы тоже когда-то кидали кабель через окошки, но это уже была обычная витуха
      Ответить
    • Раньше в линукс было всё, как нам Сёма говорил

      to: Linux users
      Если при сборке не найден ndbm.h -- пойти на любой linux ftp site
      (ex: ftp://ftp.redhat.com/pub/contrib/*/SRPMS/), скачать
      gdbm-*-1.7.3.*
      Из него вытащить ndbm.h и положить в /usr/include/.
      Ответить
    • обожаю sendmail (с того же сайта)
      [quote]
      LOCAL_RULE_3
      R$+ < @ $+ . fidonet . org > $* $@ $1 < @ $2 . fidonet . org . > $3
      R$+ < @ $+ . fidonet > $* $@ $1 < @ $2 . fidonet . org . > $3
      R$+ < @ $+ . fido > $* $@ $1 < @ $2 . fidonet . org . > $3
      R$+ < @ $+ . ftn > $* $@ $1 < @ $2 . fidonet . org . > $3
      ^^^^^^ здесь табуляция!!!
      [/quote]
      Ответить
    • http://faqs.org.ru/virtual/rulez.htm
      ахахахаха

      интернет в 1994, например
      http://faqs.org.ru/lan/rel_lan.htm
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • Чайник - Малокомпетентный в области компьютерных знаний человек
          знающий о своей малограмотности, и пытающийся узнать о компьютерном
          мире побольше. Не является оскорблением, а является характеристикой
          Ваших познаний в компьютерах. Все когда-то были чайниками.

          http://faqs.org.ru/games/relgames.htm


          бля, я внезапно увидел кажется знакомые имя и фамилию там.
          надо завязывать с этим порталом в 1999й год
          Ответить
    • Блять, да мне похуй на тебя, блять, слушай. Какая у тебя там ide, блять, компьютер, хуютер, там блять, кресло, всё – мне похуй там. Хоть макбук, хоть блять нахуй леново, хоть делл, хоть сяоми, блять, хоть ibm watson – мне на это насрать, понимаешь? Сколько ты там, что пишешь, какие функторы, какие значит вот эти монады шикарные или атласные, блять, в космос ли ты летишь – мне на это насрать, понимаешь? Я, блять, в своем познании настолько преисполнился, что я как будто бы уже сто триллионов миллиардов лет, блять, проживаю на триллионах и триллионах таких же проектов, понимаешь? Мне уже это программирование абсолютно понятно, и я здесь ищу только одного, блять: покоя, умиротворения и вот этой гармонии от слияния с бесконечно вечным легаси. От созерцания этого великого фрактального подобия и от вот этого вот замечательного всеединства существа бесконечно вечного – куда ни посмотри: хоть в глубь – бесконечно быстро, хоть ввысь – бесконечно абстрактное, понимаешь? А ты мне опять со своими там это. Иди суетись дальше, твоя скала – это твой путь и твой горизонт познания, ощущения и твоей природы. И он несоизмеримо мелок по сравнению с моим, понимаешь? Я как будто уже глубокий старец бессмертный или там уже почти бессмертный, который на этом проекте от его самого зарождения, еще когда только лисп еще только-только сформировался после взрыва программирования, когда он вспыхнул, как звезда и начало формировать фп-языки, понимаешь? Я на этом проекте уже как будто пять миллиардов лет, блять, живу и знаю его вдоль и поперек. А ты мне там какие-то эти. Мне похуй на твоих котов, на твои, блять, нахуй, шейплесы, на твои стримы там, на твои акторы, понимаешь? Я был на этом проекте или бесконечном множестве и круче Одерски, и круче Саймона Пейтона Джонса, блять, и круче всех великих, понимаешь? А где-то был конченым говном, еще хуже, чем здесь.
      Ответить
      • Потому что я множество этих состояний чувствую. Где-то я был больше подобен функцми, где-то был больше подобен константе, там переменной. Где-то просто был сгусток кода. Это все есть душа, понимаешь? Она вот имеет грани подобия совершенно многообразные, бесконечное множество. Но тебе этого не понять, поэтому ты езжай себе, блять. Мы в этом проекте как бы живем разными ощущениями, разными стремлениями. Соответственно разное наше и место, разное наше распределение. Тебе я желаю, чтоб все самые крутые монады были у тебя и все самые лучшие библиотеки, чтобы раздвигали перед тобой свое время компиляции там, все свои каинд-проджекторы шиворот-навыворот, блять, перед тобой, как ковер раскрывали и растлевали, растлали. И ты их чтоб писал до посинения, до красна, как солнца закатного. Чтоб на лучших языках, на фреймворках летал и кончал прямо на монитор и все что только может в голову прийти или не прийти. Если мало идей – обращайся ко мне, я тебе на каждую твою идею еще сотни триллионов подскажу как, что делать. Ну а я, что? Я иду как глубокий старец, узревший вечное, прикоснувшийся к божественному, сам стал богоподобен и устремлен в это бесконечное. Который в умиротворении, покое, гармонии, благодати, в этом сокровенном блаженстве пребывает, вовлеченный во все и во вся, понимаешь? Вот и все. В этом наша разница, так сказать. Я иду любоваться легаси, а ты идешь какой-то преисполняться в гранях каких-то. Вот и вся разница, понимаешь? Ты не зришь это вечное бесконечное, оно тебе не нужно. Но зато ты, так сказать, более активен, как вот этот дятел долбящий или муравей, который вот очень активен в своей стезе, вот и все.
        Ответить
        • Поэтому давай, наши пути здесь, так сказать, имеют, конечно, грани подобия, потому что все едино, но ты меня... Я-то тебя прекрасно понимаю, а вот ты – вряд ли, потому что как бы я, ты и как бы я тебя в себе содержу – всю твою природу. Она составляет одну маленькую там песчиночку от того, что есть во мне, понимаешь? Вот и все. Поэтому давай ступай, езжай, а я пошел наслаждаться, нахуй, блять, прекрасной конфигурацией спринга, блять, на кухне на табуретке. Все, пиздуй-бороздуй и я попиздил нахуй.
          Ответить
          • Вызывайте санитаров...
            Ответить
          • Честно говоря, я бы не удивился, если бы дамми 007 такое написал.
            Ответить
            • Я бы не удивился, если 3.14159
              Ответить
              • Мне кстати доставляли его телеги, Серж Дур Дачник или как его там.
                Ответить
                • Не разбираюсь в ворециях.
                  Ответить
                  • О чём этот тред?
                    Ответить
                    • О ходьбе к реке.
                      https://www.youtube.com/watch?v=rX3W5evpeJE
                      Ответить
                    • Здесь срут ворециями.
                      Ответить
                      • Мудрый RMS встроил вореции прямо в Emacs, и я часто прогоняю код через них. Кодеции:
                        Maybeing exploration from abnormat = case end, ./concuerror:exit_staturn().
                        
                        opt_error = "invaliveries" ->
                          Msg =
                            [{module, true},
                            "Use ->
                              [{module, '--pa' or = "The value = proplistend.~n"
                            "- All, not -> cl_usages()} = get_key, Shortition (Preferaw,
                            Defined, undefined to \"-~c\"", [Module]) end.
                        
                        %%----------------------her withat is a tuple with any abnot
                                                (option_typerations with speck_values([], _},
                                                _}' are"
                              "* Do nolong}
                           ].[ort, [info(attributes)
                            "'depLast = keep_list(?MINIMUM_TIMEOUT) ++ ".erl",
                              of
                            {atom, none} ->
                              Valude(Where1, Rest, When processes header for '--verbosingMore
                                                is a tuplelib:is_file()) of operation
                                                add_derBOSITY),
                          if Erlang shell, so concuerroplists:~n"
                            "-- Valides the one attributes.~n~n"
                                " 'make = proplanations:~n"
                            "With in the version-dependent's symbolic
                                                options(NewReverse(entrue, _} ->
                              the graph."}
                          ,{quiet, [basic of
                            false ->
                           || {Level, Format used is:~n", Data}|Loader(Options) ->
                                             opt_error("Th, 20).
                        Ответить
                        • а как ты вообще попал в этот тред Эрланг в столь нежном возрасте?
                          Ответить
                          • Это крайне забавная история, в духе рассказа `Профессор А. Доньда', если кто знает.
                            Я был маленький и глупый, говнокодил на `Wolfram Mathematica', `CUDA' и `MPI', и проблем не знал. Собирался как-то в деревню без интернета со старым ноутом. Т.к. он был без невидевской видюхи, решил я найти для CUDA простую альтернативу, которая работала бы на CPU. Листал на вики список языков, поддерживающих многопоточность, и нашёл статью про такой язык Erlang, который поддерживает дохера потоков и умеет в распределённость. "Ну это как CUDA и MPI", решил я. Что такое функциональщина я тогда ещё не подозревал. Думал, что функциональный язык это как паскаль, в котором нет процедур, только функции (функции — как в паскале). Скачал дистр, пару книжек по нему и уехал в тайгу.
                            Там выдалась свободная минутка, чтобы начать тыкать примеры. Иммутабельность для меня стала большим сюрпризом, лол. Я долго ходил по лесу кругами, абсолютно ошарашенный, пытаясь понять, как написать простейший интегратор Верле на идиотском языке, где все переменные сломаны, пока наконец не нашло озарение.
                            Ответить
                        • #скрылтред
                          Ответить
                        • Психоза получилась тонкая, воздушная, в букете присутствуют пропланации, проплистованные типерации с проверенными значениями. Видно, что надо добавить больше вербозинга в дербосити.
                          Ответить
                          • > Мудрый RMS встроил вореции прямо в Emacs
                            Поясните мысль.
                            Ответить
                            • M-x dissociated-press
                              делает ворецию текущего буфера. Очень удобно.
                              Ответить
                              • Восхитительно! Хорошо что на ГК опять завелись емаксоиды.

                                Статья на вики описывает самую суть психозной интоксикации.

                                The name is a play on "Associated Press" and the psychiatric term dissociative identity disorder (which may result in somewhat similar word salad during quick switches between personalities).

                                The algorithm starts by printing a number of consecutive words (or letters) from the source text. Then it searches the source text for an occurrence of the few last words or letters printed out so far. If multiple occurrences are found, it picks a random one, and proceeds with printing the text following the chosen occurrence. After a predetermined length of text is printed out, the search procedure is repeated for the newly printed ending.

                                Considering that words and phrases tend to appear in specific grammatical contexts, the resulting text usually seems correct grammatically, and if the source text is uniform in style, the result appears to be of similar style and subject, and takes some effort on the reader's side to recognize as not genuine. Still, the randomness of the assembly process deprives it of any logical flow - the loosely related parts are connected in a nonsensical way, creating a humorously abstract, random result.
                                Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • Вообще я заметил что емаксоидность загадочно, но при этом органично сочетается со всякими экзотическими языками и новыми упоротыми подходами к программированию.

                                    Именно поэтому я за wvxvw.
                                    Ответить
                                    • > загадочно сочетается со всякими экзотическими языками и новыми упоротыми подходами к программированию.

                                      А что загадочного-то? Сделать минимально работающий мажорный режим там очень легко, постепенно расширять код на elisp — тоже одно удовольствие. Очень приятный язык, на самом деле. Вот если бы там плагины на ЙАЖА писались, и для создания одного диалога требовалось бы три класса в трёх файлах и повторить @Override public static final тридцать раз, никто бы им не пользовался, кроме крупных корпораций для поддержки копротивных языков.
                                      Ответить
                                      • минимально работающий да, но с нормально работающими иногда проблема: хочется, довольно похрюкивая, пользоваться плодами цивилизации в виде lsp, а на практике не огонь

                                        впрочем, емакс это всё равно сила
                                        Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                          • а я ж и не говорю, что нет

                                            проблема не в поддержке lsp, а в авторах модов конкретных языков

                                            хотя может там уже все всё давно починили, я просто как-то емаксом уже почти год плотно не пользовался
                                            Ответить
                                        • > довольно похрюкивая, пользоваться плодами цивилизации в виде lsp

                                          Я в 90% случаев использую только фичу autocomplete-mode под названием "words in the same buffer type". Она выдирает лексемы из всех открытых буферов с той же мажорной модой. Это крайне тупая эвристика, но быстрая и предсказуемая, и работает одинаково для любого языка. Т.к. обычно у меня в одном процессе открыты буферы, относящиеся примерно к одной задаче, получается неплохо.

                                          А семантический completion через LSP обычно через некоторое время начинает тупить, притормаживать, вызывая вопрос "ну где же ты?", и только мешать. Короче, анскильная питушня, нужная только для ЙАЖА.
                                          Ответить
                                          • same buffer не работает небось для симвлов из других файлов?

                                            а ты пробовал cftags? они мне неплохо комплитили сишечку в vim
                                            Ответить
                                            • > same buffer не работает небось для симвлов из других файлов?

                                              Не "same buffer". "same buffer mode" Так что работает.
                                              Ответить
                                              • ну все равно ведь комплишен получается неосознанный? он не отличит что куда можно комплитнуть?

                                                с другой стороны, это не дает ctrl+space программированием заниматься, а джависты иной раз так именно и пишут

                                                Вместо чтения документации просто ищут подходящий метод, и это плохо
                                                Ответить
                                                • Вместо и пишут

                                                  Вместо что куда можно комплишен получается неосознанный? он не отличит
                                                  что куда можно комплитнуть?
                                                  Ответить
                                                • > он не отличит что куда можно комплитнуть?

                                                  Само собой.

                                                  > Вместо чтения документации просто ищут подходящий метод, и это плохо

                                                  Я и в имплементацию обычно гляжу, лол.
                                                  Ответить
                                                  • иногда чтобы понять имплементацию, нужно спуститься на 20 уровней ниже абстракции, и потратить три дня
                                                    Ответить
                                      • >@Override public static final тридцать раз

                                        да, это причина по которой питухи с удовольствием пишут LSP сервера для VSCode, но не хотят писать плагины для Intellij: от вербозности джавы глаза слезятся у скриптухов
                                        Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • А я анскильный. Я использую F4 в такой синенькой программке.
                                        Ответить
                                        • BSOD что ли?
                                          Ответить
                                        • показать все, что скрытоvanished
                                          Ответить
                                          • я думаю, у меня в Applications синий с оттенками это преобладающий цвет иконок
                                            Ответить
                                          • кстати, у лучшей в мире ОС синеньким ядро срет в сосноль

                                            https://www.alexander-pluhar.de/img/openbsd-64-65/openbsd-65-upgrade.png
                                            Ответить
                                            • Чем NetBSD хуже?
                                              Ответить
                                              • в нем зелененькое, впрочем и это не плохо

                                                а если без зелененького, то openbsd значительно меньше, минималистичнее, примитивнее, у них свои собственные сервисы почти для всего (очень легкие, надежные и хорошо документированные), отличный файрвол из коробки (pf), поддержка всяких крутых штук типа CARP, своя версия иксов сильно упрощенная и W^X и куча мелких оптимизаций для безопасности типа рендомных пидов у процесса и перелинковки ядра при запуске и хамский Тео, которого выгнали из NetBSD за то, что он хуесосил пользователей.
                                                А еще раньше были песенки про каждый релиз.

                                                Но в целом все BSD хорошо документированы и уютны.

                                                Линукс малость напоминает помоечку с анархией, недокументированными командами и поттерингами по сравнению с бзд
                                                Ответить
      • Хорошая паста.
        Ответить
    • > знамениты тем, что указатели на байты (char *) у них были большего размера, чем указатели на слова (int *)

      Известная тема.

      > Серия Eclipse MV корпорации Data General имеет три аппаратно поддерживаемых типа указателей (указатели на слово, байт и бит)

      Вот адресация битов, это что-то новенькое.
      Ответить
      • > адресация битов

        На некоторых ARM'овских контроллерах есть регион, в котором биты оперативки видно как байты (при записи происходит read-modify-write соотв. байта чтобы поправить бит). Т.е. указатели на этот регион можно юзать как аппаратно поддерживаемые указатели на биты... Правда не особо шустрые из-за RMW.
        Ответить
    • http://faqs.org.ru/progr/unix/unix_prog.htm

      From: "Valentin Nechayev" <[email protected]>
      Date: Tue, 6 Apr 2004 07:02:39 +0000 (UTC)
      
      RU.UNIX.PROG FAQ
      $Id: FAQ.p1,v 1.14 2004/03/25 09:11:45 netch Exp $
      
      ...
      
      >Q: Хочу таймеры. Man что?
      
      A:
      
      sleep
      usleep
      nanosleep
      select
      poll
      (даже с пустыми наборами дескрипторов или только с нотификаторами для
      выхода из ожидания)
      alarm
      setitimer
      eventlib
      
      sleep, alarm - с точностью до секунды, остальные - точнее.
      
      При необходимости точности более нескольких миллисекунд - бросать штатные
      средства и искать realtime.

      Какое многообразие вореантов )))
      Ответить
      • ================================================================
        >Q: Какие есть IDE (integrated development environments) под Unix?
        >   Ну чтобы компилятор, среда редактирования, отладчик и прочее - были все
        >   вместе?
        
        A: (Alexey Mahotkin)
        
        UNIX сам по себе является Integrated Development Environment.
        
        В "обычных" IDE есть бинарник-интегратор, который вызывает в лучшем случае
        внешние утилиты, а в худшем случае -- свою реализацию каждой функцию из DLL
        или прямо зашитую в бинарник.
        
        В UNIX таким бинарником-интегратором является shell (Emacs считается
        shell'ом в данном случае).  Для выполнения каждой функции вызываются
        специально написанные динамически выполняемые модули, такие как make, cc,
        ld, и т. д.
        
        Преимущество в этом такое же, как преимущество математических функций
        высшего порядка перед "обычными" функциями.
        
        Например, функция "отслеживать зависимости" чаще всего реализуется с
        помощью make, но можно также легко использовать, скажем, cook, или же
        переключаться между GNU Make и BSD Make по вкусу.  Точно такая ситуация с
        используемыми редактором, компилятором, etc.  Более того, сам по себе shell
        является "функцией высшего порядка", и легко может быть заменен.
        
        Кроме того, так как пространство функций практически неограниченно, то IDE
        "Unix" обеспечивает также заранее не предусмотренные функции высшего
        порядка, например, различную автогенерацию кода, поддержку тестирования и
        т. п.


        Именно поэтому я за "Unix"
        Ответить

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