Как стать автором
Обновить

Комментарии 45

Почему на фоне КДПВ html?

Спасибо за внимательность. Подправили

Давненько нас Bright_Translate не радовал зачётными хабртортными переводами. Очень круто.

Только в начале опечатка: "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 – шитый байткод, или просто шитый код.

Если "шитый байткод", тогда это было бы "threaded bytecode", а это "байтовый шитый код", ну или см. ниже ещё вариант.

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

Благодарю!

Следующий шаг - самый маленький С компилятор, способный компилировать сам себя.

Поскольку он написан на ассемблере, достаточно добавить сюда асм-вставки и готово.

Я ради прикола попытался сократить немного код, получилось ужать его на 6 байт. Профит небольшой, конечно, но в целом там есть ещё порядка 30 байт на какие-нибудь фичи типа операторов / ! ~ break continue do-while ... чего там ещё нет? :)

Из того что я понял по описанию:

У функций нет аргументов, нет for, нет switch, нет никаких типов кроме int, нет указателей (только доступ через *(int*)), нет массивов, нет return (функции ничего не возвращают), нет строковых литералов, нет локальных переменных (только определённые вне функции), нет оператора деления, нет оператора остатка, и много чего еще...

Есть while, значит можно и do-while сделать. С for и switch сложно, в 30 байт вряд ли влезет. Массивы тоже вряд ли. Вот return ещё можно попробовать, вероятно.

Их можно преобразовать в while и if с дьявольской помощью goto

компилятор 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(), но не распознает его содержимое - тогда наверняка можно ужать размер до феноменального минимума

Как когда-то шутили...

  • Слушай, вчера написал новый архиватор. Любой файл сжимает в 5 байт!

  • Ну, просто рулез!..

  • Ага. Сейчас работаю над разархиватором...

Там деления нет, это очень неудобно ( Было бы неплохо его добавить!

Раз вы сами деление не добавили, добавил самостоятельно )

«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?

Есть что-то пародийное в мире "новой нормальности". Никчёмная картинка в статье про "компилятор Си в пределах 512 байт" занимает 1,6 мегабайта.

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

Вы правы, но отчасти прав и предыдущий комментатор — она должна занимать около 100КБ, её просто даже не подумали оптимизировать.

Да, или вероятно, но еть такой факт, что KolibriOS занимает разммер 1,44 Мб дискеты для загрузкм и демонстрации включённых программ в этом размере, а последние Windows требуют Гигабайты для своей установки, но при этом, к примеру, Win95/98 занимали не больше 200Мб при своей установке, а современные сборки Linux (Puppy) и сейчас в ISO файле не превышают 500Мб. т.е. что за вселенские данные включены в дистрибутив
WIN7,8,10,11 для установки на несильно вариативное железо?

P,S. Вопрос, конечно, риторический т.к. даже утилиты работы с диском типа Paragon от несколько сотен мегабайт, даже не рассматривая другой софт в подобных размерах.
Если в анализе такого положения фактов вещей — картельный сговор между производителями популярного всевозможного софта и бизнеса железячников.

Кучу всякого, чтобы "запускался калькулятор 1995 года сборки" и зоопарк библиотек для x86 и amd64, телега стандартных драйверов, чтобы хоть как-то можно было загрузить комп, черт в ступе разных версий внутри winsxs (хотя это вроде первый пункт) и так всякого по мелочи.

Если уж на всю глубину зарываться, то синусоида очень хорошо сжимается.

12212 cyknin537n2nkwhreovrsrxbsem.jpeg
 4873 cyknin537n2nkwhreovrsrxbsem.png

Из цветастой optipng всего 166 килобайт убирает.

обширный функционал

богатый функционал

Функциональность

IMHO лучше заменять на "возможности". Как в том анекдоте про имена: "Не однозвучно, но однозначно." ?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий