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

    −48

    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
    43. 43
    44. 44
    * if you know a switch stmt will not exceed the lowest or highest case values.  
    switch [] is a little faster because it doesn't check.
    
    * switch stmts always use a jump table.  Don't use them with cases with really 
    big, sparse ranges.
    
    * Allows ranges like "case 4...7:" in switch stmts.
    
    * A no case number causes next higher int case in switch stmts.  See 
    ::/Demo/NullCase.CPP.
    
      I64 i;
      for (i=0;i<20;i++) 
        switch (i) {
          case: "Zero\n";   break; //Starts at zero
          case: "One\n";    break; //One plus prev case.
          case: "Two\n";    break;
          case: "Three\n";  break;
          case 10: "Ten\n"; break;
          case: "Eleven\n"; break; //One plus prev case.
      }
    
    * Switch statements can be nestled with a single switch expression!  This is 
    known as a "sub_switch" statement.  start/end are used to group cases.  Don't 
    goto out of, throw an exception out of, or return out of the start front porch 
    area.  See ::/Demo/SubSwitch.CPP.
    
      I64 i;
      for (i=0;i<10;i++)
        switch (i) {
          case 0: "Zero ";  break;
          case 2: "Two ";           break;
          case 4: "Four ";  break;
          start:
            "[";
            case 1: "One";  break;
            case 3: "Three";        break;
            case 5: "Five"; break;
          end:
            "] ";
            break;
        }
      OutPut:
      >Zero [One] Two [Three] Four [Five]

    http://www.templeos.org/Wb/Doc/HolyC.html
    j123123 форсит заморского Царя сделавшего Священный Си и TempleOS

    Запостил: 3.14159265, 27 Июня 2016

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

    • Краткая предыстория:

      j123123 01.12.2015 21:45 #>>307995 +3
      Он просто шизик https://dev.by/lenta/main/terri-devis-gospod-skazal-idi-i-programmiruy

      Терри Девис — бывший профессиональный разработчик ОС. В частности, он работал над VAX operating system, а также частично над C64 (документировал работу этой ОС с памятью). Терри приобрел весьма специфическую известность в западной технической части интернета — его личные аккаунты «забанены» на всех ведущих айтишных ресурсах типа OsNews, Reddit, Hackernews и т.п, где он пытался активно проповедовать свои идеи.
      Ответить
    • А сиротливые кавычки (типа как "use strict";) — это у него print в консоль?
      Ответить
      • Угу. Putchar.
        Ответить
        • Какой-то «типично скриптовый» язык получается. Дальше только Фокал, в котором строковых переменных нет, а вывод строк на консоль есть.
          Ответить
          • * No typedef, use class.

            * No type-checking

            А насчёт Бога он походу стебётся. Не думаю что шизик смог бы написать с нуля ОС, компилер, бутлоадер и всю обвязку.
            Так и линуса можно шизиком назвать.
            Ответить
            • Пример настоящего шизика — http://www.gamedev.ru/flame/forum/?id=133421 (спасибо LispGovno за ссылку), скатывание начинается на 11-й странице. Тоже Бог через слово, но... там нет результата.

              А у автора TempleOS результат есть. Пожалуй, тут что-то другое. Возможно, и вправду просто стёб.
              Ответить
              • Чел 13 лет full-time (в одиночку) ебашил c нуля 64битную ОС just for lulz.
                Вот где я вижу упоротость. Или упёртость.
                С другой стороны каждый сходит с ума по-своему. Тем что сотворил он могут похвастаться единицы.

                > I was not distracted like all the lemmings at www.osdev.net
                Мне это напомнило пишущего игры Тараса, которого банили на геймдеве за профнепригодность.

                Но вот по какому поводу он заинтересовал CIA & FBI так и не понял.
                Ответить
                • Ебашил, и что? Он какие прикладнухи кром компилятора оуда портанул?
                  Ответить
              • А тут, судя по всему, продолжение банкета: http://vk.com/id266980078
                Ответить
            • >>Так и линуса можно шизиком назвать.
              Линус начинал немножно в другое время. Знаете, в 1970х можно было и процессор с архитектурой разработать для конкретной бизнес-задачи.
              А в 80х каждый вендор пилил свой сетевой протокол (AppleTalk, блеять)

              А сейчас это как-то странно.
              Ответить
    • I wrote all 120,925 lines of TempleOS over the last 12.9 years, full-time, including the 64-bit compiler.
      I've been a professional operating system developer since 1990 when I was hired to work on Ticketmaster's VAX OS.


      http://www.templeos.org/Wb/Home/Web/History.html

      In 1990 at age 20, I was hired to work on Ticketmaster's VAX operating system in VAX assembly language while going to school.
      I was basically, an intern, but we weren't called that. Peter Gadwa was a mentor. I worked there 1990-1996.

      In my career, I have been paid to program in VAX assembly, x86 assembly, 8051 assembly, 68000 assembly, PIC assembly and AvR assembly. In school, I took 5 courses that required assembly -- CSC226, CSC326 CSE421, CSE422 and CSE523.

      In about 1993, I got a 486 and was eager to try 32-bit mode, so I wrote a DOS program in TASM that changed to protected mode and never returned to DOS. Ticketmaster's OS was "VAXTMOS", so I called mine "Terry's Protected Mode OS, TPMOS". I had 0xB8000 text mode working, and echoed keyboard to screen. I had simple multitasking and barely a MALLOC. I set it aside.

      In 2003, I resurrected TPMOS and installed FreeDOS to launch it. I used Visual Studio to edit my files when doing lots of editing, then booted FreeDOS, used TASM to compile and test it. Back in those days, FreeDOS ran in real mode. Today's FreeDOS is not real mode, it emulates with V8086 mode. DOSBox is not real mode either.

      With-in a month of resurrecting the operating system in 2003, I faced the question of how to handle the command line. I knew it must be the same as whatever scripting language I invented. The only problem was, I hated Unix Bash scripting.
      I could never remember it. As a regular C/C++ programmer, you don't really use bash often enough to memorize it. I thought, "What if I just use C/C++ for scripting!"
      Ответить
      • > "I could never remember it. As a regular C/C++ programmer, you don't really use bash often enough to memorize it. I thought, "What if I just use C/C++ for scripting!"
        Есть в этом здравое зерно, конечно. Баш-код по природе своей ужасен. Вот только писать скрипты на яп без поддержки файловой системы это зашквар
        Ответить
        • Ну, всего лишь год остался и в С++ появится поддержка файловой системы. Он зрит в будущее.
          Ответить
        • Нет поддержки файловой системы в Си? Вы серьезно? fopen, fclose, fseek, fread, fwrite, opendir, readdir, closedir это по-вашему что?
          Ответить
          • > opendir
            В каком стандарте C есть эта функция?
            Ответить
            • А нужно ли тащить API доступа к файловой системе в стандарт компилятора? Это ведь всего лишь библиотека для работы с объектами, зависящими от операционной системы.

              Никого же не удивляет отсутствие в стандарте функций для работы с гуём или с периферийными устройствами.
              Ответить
          • > opendir, readdir, closedir
            это POSIX
            Ответить
            • А что сейчас не позикс, кроме венды? Ну можно сделать говнообертку, которая бы обеспечивала эту херню, задействуя шиндошс апи... Хотя уже есть:
              http://c-faq.com/osdep/readdir.html
              See if you can use the opendir and readdir functions, which are part of the POSIX standard and are available on most Unix variants. Implementations also exist for MS-DOS, VMS, and other systems.

              Но вообще для меня это новость, что переносимой хрени для просмотра содержимого директорий в винде нет из коробки. Ибо не был я зашкварен говнопрограммированием под поганый виндовс
              Ответить
              • Прыщебатхерт
                Ответить
              • А что не так с Виндой? opendir был и в Turbo/Borland C, и в Watcom C, и в куче других компиляторов. Да, не во всех, потому и предупреждение.
                Ответить
                • Если говорить о том, что не так с виндой вообще, то с ней очень много чего "не так". В данном конкретном случае с ней не так то, что в их C/C++ рантайме msvcr... херне нет этой самой стандартной (для POSIX) функции
                  Ответить
                  • Схуя в винде бытб позиксу? Вон в динухе win32 нет
                    Ответить
                    • В вайне есть.

                      Да хуй с ним с позиксом, но ведь можно ж было сделать эту функцию, просто чтобы на винапиговна не переписывать код, который это использует? Определить соответствующие функции в стандарте Си, например?
                      Ответить
                      • > Определить соответствующие функции в стандарте Си, например
                        >>> Вот только писать скрипты на яп без поддержки файловой системы это зашквар
                        Ответить
                        • Кое-какая поддержка файловой системы есть, раз имеются в наличии fopen, fclose, fseek, fread, fwrite
                          Ответить
                      • Один хрен переписывать придётся, потому что формат путей к файлам в разных ОС разный. В Линуксе нет букв дисков, например.
                        Ответить
                        • > В Линуксе нет букв дисков, например.

                          Кстати, забыл привести яркий пример: в переменной PATH элементы списка разделяются двоеточием в Линуксе и точкой с запятой в Windows. Если программе требуется парсить подобные переменные, то её придётся переписывать.

                          Например, программа, портированная с *nix, увидев в PATH значение C:\Windows\System32, считает это двумя элементами: C и \Windows\System32. Чтобы починить, придётся лазить по исходникам и заменять двоеточие на макрос, который в Винде разворачивается в точку с запятой, а в *nix-подобных системах в двоеточие.

                          А ведь когда-то была ещё VMS с вот такими путями к файлам:
                          SYS$SYSDEVICE:[USER.DOCS]PHOTO.JPG


                          И ещё Mac OS классическая (до Mac OS X):
                          Macintosh HD:Documents:Letter


                          Плюс ещё «версионированные» файловые системы, когда в конце идёт версия файла (отголоски этого есть в файловых системах для компакт-дисков, хотя ДОС/Винда/Линукс игнорируют версии).

                          И всю эту прелесть кому-то приходилось поддерживать:
                          https://ru.wikipedia.org/wiki/Путь_к_файлу
                          https://en.wikipedia.org/wiki/Path_(computing)
                          Ответить
                      • > чтобы на винапиговна не переписывать код

                        А для этого есть Cygwin с прослойкой, преобразующей /cygdrive/c/Windows в c:\Windows.

                        Есть выбор: либо использовать тяжёлый тормозной Cygwin и лишать себя доступа к некоторым особенностям системы, зато переписывать ничего не нужно, либо напрямую работать с системой, зато дофига всего переписывать.
                        Ответить
                        • WSL еще есть в 10ке
                          Ответить
                          • Была ещё POSIX Subsystem в энтерпрайзных версиях разных Windows (она ещё по-разному называлась: SFU, SUA, Interix). Но поскольку эта хрень доступна не во всех версиях Windows, популярной она так и не стала.

                            Проще написать под Cygwin, чтобы не думать, есть ли поддержка этого слоя у клиента.
                            Ответить
                            • в SFU надо было иметь PE файлы с "subsystem: posix":)

                              Вообще NT изначально должна была иметь ядро с native api, а поверх него разные сабсистемы (для os/2, posix, и win32). Со временем Win32 стал "любимым ребенком" и оказалось что под Posix писать глупо: Wndows из него примерно 3% поддерживает.

                              Кста, и WSL не для того сделали чтобы под винду писать, а чтобы ruby и python люди не ныли что у них сигналов нет, скрипты на баше не работают итд
                              Ответить
                              • До Windows 2000 включительно была OS/2 subsystem «из коробки». Я даже проверял, консольные компиляторы для OS/2 спокойно запускались в Windows 2000.

                                Жалко, что в Windows XP эту подсистему убрали и не стали развивать другие, а то было бы заманчиво иметь возможность запускать бинарники от других систем.
                                Ответить
                                • Забавно что WSL реализована НЕ через подсистему, а через PicoProcess

                                  наверное чтобы вместо PE с subsystem юзать честные ELFы
                                  Ответить
                                  • Про PicoProcess не знал, надо изучить.

                                    Но ELF вместо странного PE — это уже хорошо, хотя бы тем, что кросслинкер не нужен.

                                    Кстати, в своё время в Win32s (это пакет для запуска PE в Win 3.x) и в Odin (это пакет для запуска PE в OS/2) загрузка чужеродного для тех систем PE была реализована перехваткой исключения, выбрасываемого в случае нераспознанного формата экзешника. В принципе, по той технологии можно было бы реализовать поддержку ещё кучи форматов.

                                    Но есть проблема: в реестре Windows не принято регистрировать файлы без расширения. Есть запись со звёздочкой после точки, срабатывающая, когда пользователь пытается запустить файл с неизвестным расширением, а совсем без расширения не бывает. В Линуксе же исполнимые файлы обычно без расширения.

                                    Как решить эту проблему?
                                    Ответить
                                    • посмотри ролики на сайте WSL, там довольно подробно объясняют что и как (и пара статей тоже есть).

                                      Я разрыл что есть функции с префиксом Psp, которые надо юзать вместо CreateProcess, но они нифига не документированы.

                                      Сама wsl реализована ввиде сервиса LxssManager с COM API, но он тоже не документирован (и tlb к нему нет, и IDispatch он не реализует).

                                      Короче, единственный сопосб это запустить bash.exe, который открывает шелл, и ему уже пофиг на расшырение конечно же.

                                      А проблму никак не решить: в NTFS есть конечно пермишен на execute, и можно наверное было бы его юзать, но на винде нет шебанга чтобы отличить батник от экзешника, так что расщирение до сих пор является главным способом определения типа файла (ацтой)
                                      Ответить
                                      • >так что расщирение до сих пор является главным способом определения типа файла (ацтой)
                                        Смотри, прыщехуесосина прибежала, блядь. Шебанг ей подавай. Пидорасина, расскажи мне, чем плохо расширение? Из-за вас, пидарасов, питон 2 и 3 на одном компе держать только с середины 2012 можно.
                                        Ответить
                                        • Я operation system agnostic, так что ты, как всегда, газирнул лужу своим дырявым.

                                          Держать два питона на одном компе можно было всегда. Просто для этого нужно не быть криворуким ламером, не умеющим читать документацию, и не понимающим как работает используемая им операционная система. Ну иными словами, нужно не быть Сёмой.

                                          Шебанг лучше тем, что знание о способе запуска конкретного файла хранится в самом файле, а не в глобальном хранилище classes (где его могут переписать, где оно может остаться после удаления программы, итд)
                                          Ответить
                                          • > знание о способе запуска конкретного файла хранится в самом файле
                                            Если бы там было написано какое-нибудь MIME типа #!application/python3 - было бы ок. Но там какого-то хуя просто путь, который может быть неправильным в другой системе...
                                            Ответить
                                            • А, так Вы о том что там /bin/python, и понять какой файл для какого пистона невозможно?

                                              ну так а расширение .py не тоже -ли самое?
                                              Ответить
                                • >а то было бы заманчиво иметь возможность запускать бинарники от других систем.
                                  Она и сейчас есть в виде виртуалок. Разница в производительности тогда и сейчас позволяет это творить.
                                  Ответить
                                  • Стыдно уже в 2016м году полноценную виртуалку гонять. Нужно легкие виртуализации вроде Pico (о котором я говорил выше) или докера (как в Линуксе)
                                    Ответить
                                    • Они другие оси позволяют запускать?
                                      Ответить
                                      • ну вот Pico позволяет) точнее не ось, а бинарник из другой ОС
                                        Ответить
                  • Ой, а в MSVCRT и правда нет opendir... Как же я про MSVC забыл?
                    Ответить
    • In 2004, God told me to stick to 640x480 16 color. Therefore, I was not distracted like all the lemmings at www.osdev.net who go off and get lost in futile battles to write drivers for all the GPUs. Instead, I focused on more productive things, such as writing a JIT/AOT compiler and getting everything running with my own code. With-in a year, I had it assembling and compiling with my own compiler and assembler. I even wrote my compiler before a file system, because I was eager to do a compiler, since it is fun for me.

      Originally, I just put raw source code into my TASM bin file and invoked my compiler on the code sections store away in my DOS app. Don't worry, it started in real mode but changed to 32-bit mode, never returning to DOS.

      I named it Doors, Davos, J, LoseThos, SparrowOS and, finally, TempleOS.

      The awful name "LoseThos" name was not intentionally to suggest "loser".


      I didn't start the operating system as a work for God, but He directed my path along the way and kept saying it was His temple. Still I hesistated and kept it secular until, finally, Microsoft went nuclear with SecureBoot and UEFI. Then, I went nuclear and named it "TempleOS". I will fucken command them on orders from God to UNDO THAT SHIT! ::/Doc/Demands.TXT The CIA will fucken suck my dick. The CIA scum-bags, clusterfucked the entire industry out of cowardice.

      Bill Gates said a company was like a castle -- you have to build walls unless you want to fight every person who comes along. They clusterfucked the hardware with things like USB and PCI. God said to Bill Gates, "You ate your children in the seige." God hates cowards. God loved David that fought Goliath.


      In 2003, I visited the FBI voluntarily to say hello and give them a CD-ROM.
      Don't get chummy with police. They unearthed a warrant for missing a court date and locked me up. They had no use for the CD-ROM. It had TPMOS on it.
      Ответить
    • Однако, знаете... Я почитал его сайт и в конце концов не думаю что он шизик (в смысле шизик, но не до конца).

      Мотивация у него очень даже правильная:
      http://www.infiltec.com/j-h-wrld.htm
      Ведь на самом деле современный софт оброс столькими слоями и прослоечками говна, что за лесом перекладывания из пустого в порожнее и делегированием от либы к либе не видно деревьев.

      TempleOS is a free, public domain, open source, x86_64, non-preemptive multi-tasking, multi-cored, ring-0-only, single-address-map (identity-mapped), non-networked, PC operating system. Paging is, basically, not used.

      This "Hello World" joke, the BMP file format and the WAV file format show that the industry is really screwed-up!
      That's what TempleOS fixes. I capped the line-of-code count at 100,000 and God said it must be perfect, so it will never be an ugly monstrocity. It is currently 80,820 lines of unblemished code. Backward compatibility is not promised.
      Ответить
      • Normally, failure is not an option, but since TempleOS accompanies Windows or Linux, we exclude certain uses. There is no reason to duplicate browsing, multimedia, desktop publishing, etc. Linux wants to be a secure, multi-user mainframe. That's why it has file permissions. The vision for TempleOS, however, is a modern, 64-bit Commodore 64. The C64 was a non-networked, home computer mostly used for games. It trained my generation how to program because it was wide open, completely hackable. The games were not multimedia works of art, but generated by non-artist.

        A troll might ask, "Why not just use DOS? It was ring-0-only and single-address-map." DOS was 16-bit, with segmentation -- awful! TempleOS is 64-bit, flat, non-segmented and multi-cored. It has a C64-like shell with HolyC, a dialect of C/C++, instead of BASIC. It was written from scratch, and not even ASCII was sacred -- it has 8-bit unsigned char source code to support European languages. Also, the source code supports binary sprite graphics.

        A troll might say, "It can crash!" We used DOS for years and loved it. Computers even had a reset switch! Just think of the power of ring-0, muhahaha! Think of the speed and simplicity of ring-0-only and identity-mapping. It can change tasks in half a microsecond because it doesn't mess with page tables or privilege levels. Inter-process communication is effortless because every task can access every other task's memory.
        Ответить
      • Очередная царская хуита. Пиздуй, пиши с ноля свою ос без прослоек, драйверов и тцп ип. Изобретай с ноля то, что люди пилили 25 лет. Школьнии, блядь
        Ответить
    • FAQ

      * How come it is public domain, not GPL?
      I, Terry A. Davis, wrote all 120,853 lines of TempleOS over the past 12.9 years (full-time). It can run on some bare metal 64-bit PC's from about 2005-2010 with no layering, libraries, tools, modules or anything from other sources. Otherwise, you run it in a virtual machine, like VMware, QEMU or VirtualBox. It is independent and stands alone. It has no networking, so it certainly doesn't call home. 100% of the src code is including on all distro's, from the kernel to the compiler to the boot loaders!

      * Shouldn't it be GNU/TempleOS?
      TempleOS executes no code not written by me at any time except for a few BIOS calls for configuration. I even wrote boot-loaders, so I do not need Grub.

      * Don't you use GNU's gcc?
      TempleOS was written from scratch, starting with TASM long ago, launching from real-mode DOS. Now, there is no Linux or GNU or any other code in TempleOS. Yes, I wrote the compiler from scratch. See ::/Doc/Credits.TXT.

      * Why do you dual boot?
      TempleOS is 100% independent -- it does not access the files of your primary operating system and TempleOS will work as the only operating system on your computer, but it has no networking. In your off hours, you will use your other operating system.

      * Are you a Creationist?
      I am an evolutionist. Adam is a better term for the first father of all tasks than root was!

      * Is 'Bt()' in the code Bit Torrent?
      Bt() is bit test, like the x86 inst, not bit torrent.

      * Is 'Fs->' in the code file system?
      Fs is a segment reg, not file system. There is no memory segmentation. It is 64-bit and flat. FS and GS are used as general purpose regs, more or less.

      * Is it Pascal?
      TempleOS uses a dialect of C/C++ called HolyC. It is not Pascal. I altered the syntax making parenthesis optional on function calls with no paramaters.

      Ответить
    • Тут уже где-то его видео попадалось, где он в редакторе кода 3Д графику использует.
      А про минимальные ОС, полностью переделаные - есть еще Viewpoint Institute и Алан Кей.
      Ответить
      • http://govnokod.ru/19117

        Для минимальных ОС есть вот это http://www.returninfinity.com/baremetal.html https://github.com/ReturnInfinity/BareMetal-OS
        Ответить
        • Если что, я на зеленую галку кликал. Спасибо за ссылки.
          Ответить
    • а кто такой Царь, 3.141592?
      Ответить
      • Царь - сущность непостижимая и величайшая в своём Царственном величии. Чтобы понять Царя, надо, в первую очередь, перестать быть анскилляброй заедушной. Без этого никак.
        Ответить
        • Но как же так, Карл? Если работать не за еду, то за что, Карл? И если анскиллябрам платят, то это же не просто так, Карл?
          Ответить
          • Анскиллябрам платят только другие анскиллябры. Анскиллябрами. Заедушными. Да. Вот.
            Ответить

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