Комментарии 45
Почему на фоне КДПВ html?
Только в начале опечатка: "512 Кб" - должно быть 512 байт.
Попробовал собрать код проекта с Github
Получил такое сообщение:
sectorc.s:157: error: invalid combination of opcode and operands
т.е. на код
mov es:[si-2],ax ; patch "src - 2"
P.S. При сборке версией nasm 2.11?, но возможно имеет смысл проверить рекомендуемый 2.16.01
Upd: Да, c 2.16.01 ошибок не отобразилось
byte-threaded code – шитый байткод, или просто шитый код.
Я ради прикола попытался сократить немного код, получилось ужать его на 6 байт. Профит небольшой, конечно, но в целом там есть ещё порядка 30 байт на какие-нибудь фичи типа операторов / ! ~ break continue do-while ... чего там ещё нет? :)
Из того что я понял по описанию:
У функций нет аргументов, нет for, нет switch, нет никаких типов кроме int, нет указателей (только доступ через *(int*)
), нет массивов, нет return (функции ничего не возвращают), нет строковых литералов, нет локальных переменных (только определённые вне функции), нет оператора деления, нет оператора остатка, и много чего еще...
Есть while, значит можно и do-while сделать. С for и switch сложно, в 30 байт вряд ли влезет. Массивы тоже вряд ли. Вот return ещё можно попробовать, вероятно.
компилятор C
отсутствует большая часть языка
Да, меня это тоже возмутило. Даже открыть описание в оригинале, и там в первом абзаце:
It supports a subset of C that is large enough to write real and interesting programs. It is quite likely the smallest C compiler ever written.
Когда поддерживается лишь малая часть базового функционала языка. И это автор называет языком Си. А затем и "самым маленьким Си компилятором".
Тогда можно пойти ещё дальше и написать "компилятор", который распознает main(), но не распознает его содержимое - тогда наверняка можно ужать размер до феноменального минимума
Там деления нет, это очень неудобно ( Было бы неплохо его добавить!
Раз вы сами деление не добавили, добавил самостоятельно )
«byte-threaded code»
Байтовый свёрнутый шитый код.
Круто, сказал я и пошёл скачивать обновление в сотню гигабайт ))
Надо теперь написать 128-байтное ядро, для него 256-байтный докер, поверх 512-байтный JVM, и потом килобайтный компилятор Kotlin, а то микросервисы будет неудобно писать иначе.
Почему именно в загрузочный сектор? Код из 510 байт там, как известно, нормально не поместится, да и нет никакого смысла его там размещать.
Автор, вдохновился продемонстрированными вызовами по размещению некоторого подмножества Lisp и Forth в 512-бут секторе, что отмечено на странице его проекта
и предложил свой вариант для C-подмножества языка.
P.S. Вот познавательная статья такого вызова Разместить FORTH в 512 байтах (в профиле переведены и другие статьи из блога этого проекта)
Я понимаю только стремление продемонстрировать серьезную функциональность в малом объеме, за это автору респект.
Но совершенно непонятен акцент на том, что сектор именно загрузочный. К задаче "самостоятельно сделать себе комфортную среду с нуля" это не имеет ни малейшего отношения.
Даже стремление уложиться именно в 512 байт обосновано исключительно символизмом числа, ибо все остальное всяко придется дочитывать с диска, а там уже нет никакой разницы, какое количество секторов указать в int 13.
*Прим. пер.: буду признателен, если сведущий читатель подскажет корректную формулировку этого выражения автора на русском языке.
"Шитый код" (или "шитый байт-код" ?).
См. https://ru.wikipedia.org/wiki/Шитый_код
Спасибо за ссылку
Вот ещё видео лекция о Шитом коде.
https://www.youtube.com/watch?v=C9sLcsd8QT4
P.S. И некоторая лекция о Форт (Forth): https://youtu.be/Np5pdDAswEI
Упомянутая статья на WikiPedia (и др.) — MovingForth by Brad Rodriguez есть в переводе в разделе статей русскоязычного форума по Форт (Forth) и другим саморасширяющиися системам программирования
Для интересующихся реализацией "кишочков" Форт, есть перевод статей из авторского блога по JonesForth частоупоминаемый в проектах на Github Минимальный Форт с нуля
Шитый код можно найти в реализации Форт-систем по классике: к примеру amForth, FlashForth, CamelForth, Mecrisp и других.
компилятор Си
Это не компилятор C. Это попытка впихнуть невпихуемое - зачёт :)
Please make a C IDE for the spectrum 48k?
Like? CC64 for Commodore :)
cc64 is a small-C compiler written in Forth, hosted on the Commodore C64, Plus4 and C16 with 64k, and on the Commander X16. It is targeting the 6502 CPU.
Есть что-то пародийное в мире "новой нормальности". Никчёмная картинка в статье про "компилятор Си в пределах 512 байт" занимает 1,6 мегабайта.
Никакая новая нормальность тут ни при чем. Ресурсы во все времена занимали в разы и на порядки больше, чем код. Скажем, когда 25 лет назад мы покупали игры на CD, мы же понимали, что кода там от силы пара мегабайт, остальные 700 мб - картинки, звук, описания уровней и т.д.
Вы правы, но отчасти прав и предыдущий комментатор — она должна занимать около 100КБ, её просто даже не подумали оптимизировать.
WIN7,8,10,11 для установки на несильно вариативное железо?
P,S. Вопрос, конечно, риторический т.к. даже утилиты работы с диском типа Paragon от несколько сотен мегабайт, даже не рассматривая другой софт в подобных размерах.
Если в анализе такого положения фактов вещей — картельный сговор между производителями популярного всевозможного софта и бизнеса железячников.
Если уж на всю глубину зарываться, то синусоида очень хорошо сжимается.
12212 cyknin537n2nkwhreovrsrxbsem.jpeg
4873 cyknin537n2nkwhreovrsrxbsem.png
Из цветастой optipng всего 166 килобайт убирает.
обширный функционал
богатый функционал
Функциональность
Спасибо, просветили, исправил. Хотя вот, что пишут лингвисты по этому поводу. https://aif.ru/society/education/funkcional_ili_funkcionalnost_kak_pravilno
SectorC: компилятор Си в пределах 512 байт