SUBLEQ – язык программирования с одной командой (2017)

subleq8211языкпрограммированиясоднойкомандой2017

DawnOS – это новая операционная система, разработанная чтобы не только покончить с неэффективностью основных операционных систем, таких как Home windows, но и «освободить людей от империалистического гнета» Intel. Его создатель, которого зовут только Джери, построил его на subleq чип с subleq «компьютер с одним набором инструкций» (или OISC), язык программирования / архитектура только с одной командой. Это означает, что в языке отсутствует goto и , а для потока элемент управления, или , если для ветвления, или даже приращение , заменив их все одной операцией – но это Turing Full, способная поддерживать всю операционную систему. Я разговаривал с создателем DawnOS, и текст нашего интервью приводится ниже. , но сначала может быть полезно познакомиться с subleq.

Язык SUBLEQ

OISCs (произносится как «виски») га ve команд, которые эффективно сочетают в себе некоторые формы управления потоком, ветвления и манипулирования данными. Часто это происходит путем объединения программы и пространства памяти, что фактически превращает ее в самомодифицирующуюся программу. Можно рассматривать OISC как крайнюю форму архитектуры RISC (иногда их называют URISC для компьютера с окончательным сокращенным набором команд). В архитектурах RISC двоичные файлы разбиваются на гораздо более длинный список машинных операций , но они требуют меньше транзисторов для работы и могут быть конвейерными из-за их одинакового размера.

Одна команда Subleq дает ему имя: «ВЫЧИТАТЬ и перейти, если меньше чем или EQual». Каждая программа представляет собой список чисел. У каждого числа есть две роли: это указатель на другое место в памяти, а также данные, с которыми можно работать. Команда Subleq читает по три за раз, рассматривая каждый как указатель: представьте их как A, B и C.Команда Subleq переходит в место, на которое указывает A, вычитает его из местоположения, на которое указывает B, и сохраняет это в B. Если B меньше или равно нулю, он переходит в позицию C, в противном случае он переходит к следующим трем числам. Например, с этой программой:

Мы начинаем с вычитания 7 из 7 (местоположения A и B) и сохраняем результат (0) в ячейке B. Поскольку результат, 0, меньше или равен 0, выполняется переход к указанному местоположению данных. в C, который равен 6:

Теперь мы делаем то же самое более или менее, используя ячейки памяти 6, 7 и 8 в качестве параметров A, B и C. Так как C хранит значение 0, он вернет управление обратно в первую ячейку памяти при завершение:

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

Для более подробного примера:

программа «Hello World» ( на самом деле печатает «Привет») на вики-странице esolangs

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

DawnOS в действии

DawnOS

Хотя может показаться, что subbleq быстро превратится в трагический клубок указав на большой проект, Джери нашла его минимализм противоядием от антиутопии современного компьютерного мира . Он рассматривает разработку микросхем и ОС как политический акт на рынке, где доминирует корпоративная неэффективность. DawnOS – это сложная и полностью пригодная для использования система, поддерживающая интерфейс с сенсорным экраном, экранную и физическую клавиатуру, ввод и вывод звука и даже имеющую такие игры, как шахматы и амебы. Даже работая на виртуальном процессоре (физический процессор еще не создан), он опережает Home windows и Linux. Я говорил с Джери о его проекте; его английский иногда немного грубоват, но его страсть проявляется ясно.

»Как вы начали работу над этим проектом? Почему вы выбрали работу с SUBLEQ для DawnOS?

Я чувствовал себя очень неудовлетворенным обоими GNU / linux и home windows. со временем ощущение начало становиться еще сильнее: linux и home windows стали больше и медленнее, linux теперь использует 5 – 20 okay никчемные пакеты для рисования иконок на экране , между тем он даже не поддерживает значки для двоичных файлов. По сути, каждое программное обеспечение Linux требует загрузки сотен пакетов отдельно из Интернета, так как они создаются сценаристами, которые случайным образом используют внешние библиотеки даже для преобразования rgb в bgr, а не настоящими программистами, которые имеют представление о написании программ. новейшие версии kde секунд, чтобы вызвать меню «Пуск» на моем нетбуке Atom 1,6 ГГц. Окна тоже застряли в его жизни – корпоративные клоуны обогнали развитие: они просто случайно собрались вокруг костра и решили, что им не нужно стартовое меню. это решение обошлось им, вероятно, очень дорого, поскольку они вернули его в окна 20, жаль, что теперь он будет показывать рекламу, если вы нажмете на него. им совершенно не удалось выйти на рынок оружия, у них, вероятно, не было работодателя, способного написать приложение уровня x 86, чтобы запустить хотя бы существующие приложения, но они все равно не смогли выпустить одно. это серьезные проблемы, это указывает на то, что и gnu / linux, и home windows находятся на грани смерти. настоящие творцы, имевшие технические или иные знания или чутье, давно покинули эти области. также отсутствуют технические знания на стороне Linux, например, большинство дистрибутивов Linux не могут даже определить тип процессора и заставить ядро ​​использовать PAE или ядро ​​SSE на 6x 106 cpu, который, конечно, вылетит при загрузке. не говоря уже о том, что ядро ​​Linux мгновенно вылетает, если у него заканчивается оперативная память, и эта ошибка не была исправлена ​​в последнем лет, даже если это технически возможно на сложных аппаратное обеспечение … за последние два десятилетия не было сделано никаких реальных разработок для Home windows или Linux.

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

Я понятия не имел, на какую платформу следует ориентироваться. я изначально планировал x 106, но я понял, насколько это плохо – в конце концов, текущий x 106 является результатом приблизительно 30 + годы работы 1 миллиона разработчиков оборудования, все добавили в него свою какашку, чтобы иметь процессор. какой-то идиот проснулся утром и решил добавить MOV со своими дерьмовыми префиксами и разными кодировками. другой идиот проснулся утром и решил добавить инструкцию с плавающей запятой, которая добавляет целые числа к плавающей запятой и сохраняет результаты в регистре с плавающей запятой. проснулся еще один идиот и решил добавить код операции для одновременного сложения 4 чисел. 4914 Идиот проснулся, добавил свой код операции, различные режимы адресации памяти, и сегодня x 106 был родился, минимум с миллиардом транзисторов только для загрузки операционной системы. не говоря уже о том, что каждый код операции имеет случайную длину и инкапсулирует полу недокументированную сегментацию, которая создает x 106 настолько сложен, что наш x 86 процессоры на самом деле являются рисковыми процессорами, эмулирующими x . ни одна корпорация не может сделать x 106 процессоров больше нет, они такие сложные как минимум 21 лет работы от 10000 Специалистам по разработке микросхем он понадобится даже для загрузки Home windows (не говоря уже о том, что также должна быть создана совместимая io-система). x 256 является формой угнетение, одна из основных причин, по которой у нас не было никакого реального шага вперед.

конечно, я не просто волшебным образом осознал это, мне пришлось выучить это на собственном горьком опыте (когда я пытался создать эмулятор x 256 для отладки причины). затем мое внимание переключилось на ARM, но я должен был узнать, что теперь он идет по той же кривой сложности, где x 86 (в настоящее время процессоры arm фактически не являются рисками, они имеют переменную длину инструкций (обычная + большой палец), 3 разных типа fpu, различная внутренняя работа методы).

тогда я был avare, мне нужно было создать некоторую инструкцию самостоятельно, сначала я поговорил с некоторыми людьми, активными вокруг секций комментариев этих тем cpus, и после разговора с ними для долгих и долгих обсуждений я собрал полезные идеи и решил сделать хибрид с фиксированной длиной risc / vliw, который имел вид кусок 64, каждый код операции мог работать с 2 или 3 регистрами и т. д. Я определил это, разработчик fpga чувак начал создавать его аппаратно, я быстро начал собирать компилятор, чтобы посмотреть, что происходит. результаты были трагичными, производительность была крайне низкой, fpga даже не была завершена, но уже охватила миллионы ворот. мы говорили об этом и отменили весь план. такие вещи просто не работают.

кто-то упомянул для меня subleq много лет назад, поэтому я решил попробовать. это было на удивление просто и эффективно. сначала я ожидал, что у него будет на десятки тысяч циклов больше, чем у любых других вещей, чтобы выполнять то же самое, что и другие архитектуры, но на самом деле он предлагал очень похожую производительность с другими архитектурами, как если бы вы компилировали код C, волшебная производительность других архитектур также исчезает . subleq хорошо справился с prety, поэтому я выбрал его и быстро закончил начальную версию компилятора для него. производительность была на удивление приятной, размер двоичного кода – единственная проблема на данный момент, но все еще не слишком большой.

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

Сравнение времени загрузки DawnOS и Linux

»Означает ли архитектура SUBLEQ один и тот же двоичный файл? будет иметь намного больше машинных инструкций, чем на x 106?

да, я упоминал раньше, это требует гораздо больше кодов операций для выполнения операции. но на самом деле x 106 тоже делает. если вы сложите два числа на x 106, у вас есть инструкция, которая сначала должна быть загружена в ОЗУ, затем инструкция и сегментация должны быть загружены из ОЗУ и декодированы, затем необходимо выполнить несколько инструкций, чтобы добавить сегменты к целям выполнения и источникам, выполнить подкачку, которая также добавляется для адресов, выполняет фактическую операцию и выполняет запись в память. добавление номера в подзаголовок – тоже самое. разница в самом коде операции, x 106 иметь один бесполезный недокументированный код операции бога для его (и всего остального), в то время как subleq требуется короткий код houdini для его выполнения, что приводит к большему двоичному файлу, но не обязательно приводит к разнице в скорости выполнения, поскольку внутренне очень похожие вещи будут происходить в ЦП.

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

»Сколько работы вам нужно было сделать напрямую в инструкции SUBLEQ, чтобы развить это? Вам это показалось сложным?

после того, как я написал компилятор C, в основном нет. Мне пришлось правильно составить головоломку с компилятором, чтобы определить, когда он должен синхронизироваться из стека (поскольку нет управления аппаратным стеком или нет регистров в подзаголовке), или какие коды операций мне следует вставить, когда я вижу адрес массива, или некоторые базовые такие операции, как добавление двух чисел и т. д., поскольку subleq – это очень картофель, мне пришлось исправить много ошибок и много размышлять о них, но это не так много двоичного кода subleq, так как более сложные вещи я писал на самом c ( умножения и т. д.), и я также полностью написал операционную систему на C., так что в основном есть очень мало, но чрезвычайно сложных вещей, которые мне приходилось делать непосредственно в subbleq, и все они находятся в самом генераторе кода компилятора. нигде в коде нет встроенных субкадров.

Наконец, я спросил Джери о том, как ему называть его на сайте, и о его венгерских корнях.

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

ОБНОВИТЬ: Reddit обсуждение этого сообщения