The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Выпуск GNU Mes 0.23, инструментария для самодостаточной сборки дистрибутивов

15.03.2021 09:47

После года разработки состоялся выпуск инструментария GNU Mes 0.23, обеспечивающего процесс бутстрэппинга (bootstrap) для GCC и позволяющего добиться замкнутого цикла пересборки из исходных текстов. Инструментарий решает задачу верифицированной начальной сборки компилятора в дистрибутивах, разрывая цепочку цикличной пересборки (для сборки компилятора требуются исполняемые файлы уже собранного компилятора, а бинарные сборки компилятора являются потенциальным источником скрытых закладок, что не позволяет полностью гарантировать целостность сборок из эталонных исходных текстов).

В GNU Mes предлагается самодостаточный (self-hosting) интерпретатор для языка Scheme, написанный на языке Си, и простейший компилятор для языка Си (MesCC), написанный на языке Scheme. Оба компонента взаимособираемы. Scheme-интерпретатор даёт возможность собрать Си-компилятор MesCC, который затем позволяет собрать урезанную версию компилятора TinyCC (tcc), возможностей которого уже достаточно для сборки GCC.

Интерпретатор языка Scheme достаточно компактный, занимает около 5000 строк кода на простейшем подмножестве языка Си и может быть преобразован в исполняемый файл с использованием универсального транслятора M2-Planet или простейшего Си-компилятора, собранного с использованием самособираемого ассемблера hex0, не требующего внешних зависимостей. При этом интерпретатор включает полноценный сборщик мусора и предоставляет библиотеку загружаемых модулей.

В новом выпуске реализована поддержка архитектуры ARM ( armhf-linux и aarch-linux). Добавлена возможность использования Mes вместе с сокращённым набором bootstrap-файлов от проекта GNU Guix (GNU Guix Reduced Binary Seed). Реализована поддержка сборки Mes и библиотеки Mes C с использованием GCC 10.x. В компиляторе MesCC обеспечена поставка собственной библиотеки libmescc.a (-lmescc), а при сборке с GCC теперь указывается "-lgcc". Обеспечена поддержка сборки MesCC с Guile 3.0.x.

 
  1. Главная ссылка к новости (https://www.mail-archive.com/i...)
  2. OpenNews: Выпуск GNU Mes 0.22, инструментария для самодостаточной сборки дистрибутивов
  3. OpenNews: Выпуск системы инициализации GNU Shepherd 0.8
  4. OpenNews: Выпуск Mcron 1.2, реализации cron от проекта GNU
  5. OpenNews: Выпуск GNU Radio 3.9.0
  6. OpenNews: Мэйнтейнеры проектов GNU выступили против единоличного лидерства Столлмана
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/54759-mes
Ключевые слова: mes, bootstrap, gcc
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (207) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.2, user90 (?), 09:56, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • +6 +/
    > на языке Scheme

    Горжусь гнутыми! Никакой мерзкой попсы.

     
     
  • 2.4, zXZXz (?), 10:07, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Но разве Lisp... а ну да, он перестал быть попсой.
     
  • 2.5, Ordu (ok), 10:08, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • –4 +/
    Схема -- это попса ж чистой воды. Common Lisp для настоящих мужиков. Для фанатов Столламана есть elisp. А схема -- это попытка функционализировать Lisp, лишающая его всей его прелести. На схеме аж целый SICP запилен, и целое поколение личинок программистов в MIT училось по нему. Как раз то самое поколение, которое сегодня с радостью забросило C в пользу rust'а и go.
     
     
  • 3.9, user90 (?), 10:14, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +6 +/
    Это уже частности, а так-то Lisp был попсой лет 50 назад ;) Речь о том, что не петон и пр.

    > Для фанатов Столламана есть elisp

    Для юзеров Emacs ты хотел сказать. Спасибо, знаю, написал на нем дочерта (для себя).

     
     
  • 4.13, Ordu (ok), 10:32, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    Нет, я хотел сказать то, что сказал для фанатов Столлмана Столлман принципиаль... большой текст свёрнут, показать
     
     
  • 5.103, myhand (ok), 16:40, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Common Lisp стандартизован

    Осторожнее!  Граждане с IQ>70 еще найдут стандарты схемы (ISO и вообще всякие rX).  Оно нам надо?

    Набрасывай аккуратнее!

     
  • 3.49, Аноним (49), 13:06, 15/03/2021 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • +/
    >функционализировать Lisp

    Масло масляное?

     
     
  • 4.63, Аноним (63), 14:13, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Нет
    В смысле оставить только фп
     
  • 4.85, Ordu (ok), 15:54, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Нет, lisp не функциональный язык. Он начинался вроде как функциональный, потому что Маккарти придумал лямбды, а его студент решил сделать из этого язык, но результат не стал от этого функциональным. Во-всяком случае, в современном понимании функциональности языка. Там всё построено на мутабельности.
     
     
  • 5.110, myhand (ok), 17:03, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Мутабельность - опциональна в lisp.  Как и функциональность, соответственно.

    Функциональные языки - те, где _возможна_ функциональность (без соплей).  Например, если нету tail-call оптимизации - такая функциональность "нутыпонел"...

     
     
  • 6.114, Ordu (ok), 17:26, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > Мутабельность - опциональна в lisp.  Как и функциональность, соответственно.

    setcar/setcdr смотрят на тебя и ухмыляются.

     
     
  • 7.116, myhand (ok), 17:31, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    То, что у тебя есть наган - не повод стрелять себе в бошку.
     
     
  • 8.120, Ordu (ok), 17:53, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Не нравятся эти две А как насчёт setf setq Одним let ом единым в lisp е сыт не... текст свёрнут, показать
     
     
  • 9.121, myhand (ok), 18:03, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Браунингом тоже не обязательно мозги вышибать ... текст свёрнут, показать
     
  • 6.149, Ананоананоноаноанононаноа (?), 05:19, 16/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    А в стандарте Common Lisp как раз таки и нету требования TCO.
     
  • 3.102, myhand (ok), 16:37, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Во набросил!  Учитесь, детки.  Хотя...  Хоть кто-то понял?)
     
     
  • 4.115, Ordu (ok), 17:28, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Нет, как видишь. Я даже rust присобачил, чтобы незнакомых с lisp'ом подключить к беседе, но никто не клюнул.
     
     
  • 5.117, myhand (ok), 17:33, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Я даже rust присобачил

    Ну это - прибегут, рано-аль-поздно.  Но уже сильно ниже пояса.


     
  • 5.142, Sw00p aka Jerom (?), 22:36, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    "кодер-пох всея опеннет" занят видать, понедельник :)
     
  • 2.12, Последний из могикан (?), 10:29, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    Это потому что это нишевый продукт.При превышении определённого количества пользователей приползают,как слизни,как пиявки,вожделея крови,корпорации,и сначала поглощают,а затем и уничтожают продукт.Живой пример этого-Мозилла.Посмотрите во что она превратилась.
     
     
  • 3.20, Аноним (20), 11:14, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Честно - она с самого начала была говном, они даже не с нуля написали, а по сути допиливали уже готовый нетскейп.
     
     
  • 4.22, Последний из могикан (?), 11:26, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Честно - она с самого начала была говном, они даже не с
    > нуля написали, а по сути допиливали уже готовый нетскейп.

    Так мы ж движемся по инерции паравоза запущенного Отцами Основателями™,насколько я понимаю.А то что добавили led подсветку на колёса и громкую бибику,да перекрасили во все цвета радуги это функционала не добавляет.

     
  • 4.129, Аноним (-), 20:29, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    > Честно - она с самого начала была говном, они даже не с
    > нуля написали, а по сути допиливали уже готовый нетскейп.

    Почему, версии примерно к третьей лис был ничего себе прожкой. Все еще мелкой, аккуратной, более-менее функциональной, расширяемой, не сильно тормозной и не жирной.

    А, и еще опенсорсный - и не гадил втихаря как всякие оперы-шмоперы. И работал на куче платформ, в отличие от ишаков всяких. Нормальный был браузер, в общем то. Но, увы, потом набежали маркетологи и сделали мазилу корп первой скрипкой...

     
  • 3.112, Страшный рукожоп (?), 17:14, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Кстати, языки программирования тоже!
     

  • 1.7, InuYasha (??), 10:09, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    Scheme -> MesCC -> TinyCC -> GCC -> Linux
    Это интересно, конечно. А насколько хорошо у TinyCC с оптимизациями? Не получится ли что скомпилированный им GCC будет тормозным?
     
     
  • 2.11, a (??), 10:25, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +7 +/
    Во-первых, в приведённой вами последовательности скорее всего будет именно так, как вы предположили.
    Во-вторых:
    ...-> TinyCC -> GCC -> GCC -> Linux
     
     
  • 3.21, kusb (?), 11:15, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    tinycc > gcc > gcc > gcc?
     
     
  • 4.27, Аноним (27), 12:07, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +3 +/
    учитывая, что в gcc используется c++, то да — tinycc сначала собирает версию, которая написана еще на C, которая уже собирает современную версию gcc.
    у самого gcc вроде 3 этапа раскрутки, так что еще + > gcc
     
  • 4.29, InuYasha (??), 12:13, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > gcc -> gcc

    Ну, да. Через несколько минут после комментария и сам об этом подумал )

    Scheme -> MesCC -> TinyCC -> GCC -> GCC -> CLANG -> DM -> ICC -> MSVC :D

     
     
  • 5.130, Аноним (130), 20:32, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Scheme -> MesCC -> TinyCC -> GCC -> GCC -> CLANG -> DM -> ICC -> MSVC :D

    Не очень понятно как последние три получаются. Они сорцы дали? И если нет - не очень понятно ради чего тогда все эти тантры вообще были - какая там верификация и чего может быть? Что помешает блобу компилить по нечетным числам третьего месяца високосного года иначе чем сегодня?

     
  • 2.19, ComradeDOS (ok), 10:59, 15/03/2021 [^] [^^] [^^^] [ответить]  [] []     [к модератору]
  • –2 +/
    Пересобираешь GCC скомпилированный TinyCC GCC и будет тебе счастье.
     
     
  • 3.47, Таненбаум (?), 12:49, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    ого, да вы 10 лет молчали! вот это обет на опеннете, с возвращением из монастыря
     
     
  • 4.57, Аноним (57), 13:35, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Не бывает таких возвращений. А вот угоны стародавних акков - на ЛОРе были
     
     
  • 5.66, Аноним (-), 14:19, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Не бывает таких возвращений. А вот угоны стародавних акков - на ЛОРе были

    Конспиролухи-теоретики.
    Достаточно создать акк с ранее использованным (хоть кем), но не зарегистрированным ником.

     
  • 4.155, ComradeDOS (ok), 08:38, 16/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > ого, да вы 10 лет молчали! вот это обет на опеннете, с
    > возвращением из монастыря

    Можно еще 10 лет не читать нижний интернет - ничего не потеряю.

     
  • 2.52, Аноним (49), 13:12, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    >А насколько хорошо у TinyCC с оптимизациями?

    Нахрена ему оптимизации? Это промежуточный компилятор.

    >Не получится ли что скомпилированный им GCC будет тормозным?

    Не получится. При сборке GCC, сначала внешним компилятором собирается его внутренний вспомогательный компилятор. Затем этот вспомогательный собирает уже основные бинарники GCC. Поскольку промежуточный входит в состав конкретной версии GCC, уж он-то знает, как оптимизировать её.

     
  • 2.203, Аноним (203), 08:42, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    HEX -> ASM -> cc_* -> M2-Planet -> Scheme (Lisp) -> MesCC -> TinyCC -> GCC
     
  • 2.220, макпыф (ok), 10:29, 19/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    при процессе бутстрапинга gcc пересобирает себя три раза и окончательная версия (stage3) собрана gcc (stage2).
    половину stage3 либов собирает сам gcc stage3
    по этому оптимизации tinyCC не нужны и не влияют не на что
     

  • 1.10, Аноним (10), 10:23, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • –1 +/
    Что такое бутстрэппинг? А то переводчик калека, не написал термин на русском языке
     

     ....большая нить свёрнута, показать (115)

  • 1.36, Аноним (40), 12:21, 15/03/2021 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –5 +/
     
  • 1.42, mos87 (ok), 12:36, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • –2 +/
    классно было бы без лишпа
     
     
  • 2.64, kusb (?), 14:14, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    Наверное, там нужен язык, интерпретатор которого очень маленький.
     
     
  • 3.199, Аноним (203), 06:20, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Его можно легко написать на ASM и на нем собрать простейший компилятор C.
     
  • 2.108, myhand (ok), 16:55, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    классно было бы без тебя
     

  • 1.46, Аноним (44), 12:48, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    Почему с Gentoo выкинули stage1 и stage2 ?

    Stage1 - в терминологии Gentoo, bootstrap системы для сборки компилятора gcc. В контексте новости считать Lite Bootstrap.

    Stage2 - сборка gcc, binutils, glibc, ...

    Stage3 - сборка system, все что необходимо для базовой системы Gentoo.

    Stage4 - сборки ядра OS, загрузчика, пользовательского ПО.

     
     
  • 2.198, Аноним (198), 00:48, 17/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Тоже давно задавался этим вопросом. Но сейчас есть crossdev, а дальше по обстоятельствам...
     
     
  • 3.200, Аноним (203), 06:27, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Тогда он тоже был.

    Stage1 и stage2 надо в Gentoo вернуть. И можно добавить stage0 для сборки Scheme, MesCC и tynyCC.

     
  • 2.221, макпыф (ok), 10:32, 19/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    и как тогда в генте система собираеться? кросс компилятором?
     

  • 1.62, kusb (?), 14:13, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    А зачем нужна раскрутка компилятора? Почему не делают просто кросс-компиляцию без промежуточных этапов наполовину готовых компиляторов? А сборка может делаться удалённо, пока компилятор не завершён.
     
     
  • 2.69, Аноним84701 (ok), 14:27, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    -- Проще говоря, используя сторонний бинарный компилятор для сборки рабочего к... большой текст свёрнут, показать
     
     
  • 3.74, Аноним (74), 15:04, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    Так ведь всё равно никак не получить готовый бинарный компилятор без другого готового бинарного компилятора.
     
     
  • 4.75, Аноним (53), 15:15, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > Так ведь всё равно никак не получить готовый бинарный компилятор без другого
    > готового бинарного компилятора.

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

     
     
  • 5.94, Аноним (40), 16:11, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +5 +/
    А откуда взялся самый первый компилятор? Из большого взрыва?
     
     
  • 6.101, Аноним (27), 16:35, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    с перфокарты
     
  • 6.147, Sw00p aka Jerom (?), 23:08, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    "курица или яйцо" :) Самая первая версия ГЦЦ каким компилятором собиралась?
     
  • 6.162, Аноним (162), 09:45, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    Надо прочесть историю о Bell Labs, машине PDP, и двух отважных героях, которые в конце 1960-тых решили, что лучше синица в руках чем журавль в небесах. Придумали C, написали его компилятор на ASM и на C написали первый UNIX.
     
  • 6.210, Аноним (-), 15:11, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > А откуда взялся самый первый компилятор? Из большого взрыва?

    Первые программы ассемблеров (нет, даже еще не компилятора сей) таки с клавиатуры или тумблерного регистра на шине, а ассемблирование в опкоды таки и на тетрадном листочке могло быть сделано. Или, вот, если круть позволяла - перфокарты еще дырявить можно. Но это удел крутого и дорогого оборудования.

    А так то один раз журнал "для умелых рук" прикололся и хексдамп аж всего CP/M напечатал. Поэтому губитель спаявший комп имел некие шансы вбить сие с шестнадцатиричной клавиатуры - и обана - вместо мертвого металла у вас ОПЕРАЦИОНКА, ЦУКО.

     
     
  • 7.212, n00by (ok), 15:28, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > А так то один раз журнал "для умелых рук" прикололся и хексдамп
    > аж всего CP/M напечатал. Поэтому губитель спаявший комп имел некие шансы
    > вбить сие с шестнадцатиричной клавиатуры - и обана - вместо мертвого
    > металла у вас ОПЕРАЦИОНКА, ЦУКО.

    Издевался над детьми этот "для умелых рук", педалируя целый год модную тему. "Специалист" в итоге проще, дешевле и больше возможностей имел. Могли бы как-то его упростить.

     
  • 5.135, Lex (??), 20:56, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • –1 +/
    Хм, т.е как про облачную сборку или применение готовых бинарников компилятора - так рассказы про не_доверие третьей стороне и отсутсвие проверки на закладки.

    А как поэтапное исполнение кучи шагов со множеством модулей, ЯП и все равно, каким-то бинарником компилятора или вм, без которого те исходники - просто куча текста, так это правильно, секурно и вообще, (!!!) плохо быть столь недоверчивым, чтобы не верить в безопасность такого подхода.

    п.с: а если я не доверяю сгенерированному ассемблерному листингу ?
    Ведь вопрос даже не в том, как конкретно он переведется в машинные команды, а в том, какая логика и алгоритмы в нем заложены

     
  • 4.76, n00by (ok), 15:24, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Можно первый компилятор перевести в машинный код вручную. На деле именно эта задача автоматизируется: сначала собирается ассемблер, затем он транслирует небольшой по объёму компилятор, тот более сложный.
     
  • 4.77, Аноним (27), 15:24, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    да, но MesCC не требует компиляции, поскольку написан на Scheme. Можно предположить, что интерпретатор (который как раз бинарный) с закладками, но тогда этот интерпретатор должен распознать, что выполняется код MesCC и следует подложить закладки в собираемый бинарник. Ведь собираемый бинарник может оказаться интерпретатором, на котором потом запустят MesCC и соберут нормальный TinyCC
     
  • 4.78, Аноним84701 (ok), 15:28, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Неа Хотя основная идея конечно -- чем минималистичнее изначальный бинарь, тем... большой текст свёрнут, показать
     
     
  • 5.134, Lex (??), 20:48, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    Чем больше этапов, модулей и применяемых ЯП - тем проще проверять ?)
     
     
  • 6.137, Аноним84701 (ok), 21:17, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Чем больше этапов, модулей и применяемых ЯП - тем проще проверять ?)

    Естественно это проще, чем проверять бинарь "полноценного" Си-компилятора на соответствие исходному коду ( в том же TCC более 50 000 строк кода -- удачи и терперния с реверсингом всех 200-300KB бинарника).

    > Since version 0.22 it has again helped to halve the size of opaque, uninspectable binary seeds that are currently being used in the Reduced Binary Seed bootstrap of GNU Guix.
    > The final goal is to help create a full source bootstrap as part of the bootstrappable builds effort for UNIX-like operating systems.

     
  • 6.185, Аноним (185), 17:07, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Чем больше этапов, модулей и применяемых ЯП - тем проще проверять ?)

    Че больше автоматизация, тем легче верификация!

    https://github.com/oriansj/stage0 надо руками с клавиатуры вколотить бинарь всего 1000 байт stage-0.

    Stage-1 трижды пересобираем ASM от самого примитивного stage1_assembler-0 до вполне рабочего stage1_assembler-2 и макрос M0 (M1) можно уже этот этап автоматизировать.

    Stage-2 компилятор Lisp (Scheme)

    Stage-3 самый примитивный компилятор C на Lisp (Scheme)

    Это то что надо сделать сегодня. И вполне реально.

    А вот как долго рождался первый компилятор C: https://www.opennet.ru/openforum/vsluhforumID3/123569.html#168 для сравнения.

     
  • 5.183, Аноним (185), 16:56, 16/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > или простейшего Си-компилятора, собранного с использованием самособираемого ассемблера hex0, не требующего внешних зависимостей. <- this

    Неа! Нету C на ASM!!!


    А вот Lisp на ASM есть! Именно по этому для написания простейшего компилятора C был выбран Scheme: https://www.opennet.ru/openforum/vsluhforumID3/123569.html#181

     
     
  • 6.192, Аноним84701 (ok), 17:52, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    >> или простейшего Си-компилятора, собранного с использованием самособираемого ассемблера hex0, не требующего внешних зависимостей. <- this
    > Неа! Нету C на ASM!!!

    Ну нету так нету -- раз аноним так говорит, то ему видней.

    https://bootstrapping.miraheze.org/wiki/Stage0
    > cc_* + family[edit]
    > These are C compilers targeting a single architecture written in assembly
    > that support the following primitive types:



       void (and void*)
       int (and int*)
       char (char* and char**)
       FILE (and FILE*)
       FUNCTION (and FUNCTION*)
       unsigned (and unsigned*)
       long (and long*)



    > Which can be combined with struct and within structs, one may union members.

    https://github.com/oriansj/stage0/blob/master/stage2/cc_amd64.s
    > ;; A Minimal C Compiler

    ...



    ;; struct token_list* out in R12,
    ;; struct token_list* string_list in R11
    ;; struct token_list* global_list in R10
    ;; and struct token_list* FUNC in R9
    ;; and struct token_list* current_target in R8
    ;; R13 Holds pointer to global_token, R14 is HEAP Pointer
    ;; Returns the token_lists modified
    :postfix_expr_stub
    PUSHR R0 R15                ; Protect R0
    PUSHR R1 R15                ; Protect R1

    LOADUI R0 $open_bracket     ; Using "["
    LOAD32 R1 R13 8             ; GLOBAL_TOKEN->S
    CALLI R15 @match            ; IF GLOBAL_TOKEN->S == "["
    JUMP.Z R0 @postfix_expr_stub_next



     
     
  • 7.201, Аноним (203), 08:16, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    cc_ и M2-Planet - не есть компиляторами C Анон это первый раз видит, синтаксис... большой текст свёрнут, показать
     
  • 2.79, Аноним (27), 15:29, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > А зачем нужна раскрутка компилятора?

    чтобы собрать компилятор
    >Почему не делают просто кросс-компиляцию без промежуточных этапов наполовину готовых компиляторов?

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

     
  • 2.173, Ordu (ok), 13:25, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +2 +/
    Когда ты собираешь компилятор предыдущей версией компилятора, возникает интересн... большой текст свёрнут, показать
     
     
  • 3.182, Аноним (185), 16:48, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > В любом случае всё началось с gcc из гентушного stage-3. Но гентушный stage-3 компилятор был собран предыдущей версией гентушной сборки gcc. А если мы отследим назад в прошлое, то откуда был взят компилятор, которым первая гентушная сборка gcc была собрана? А впоследствии точно нигде никто не сделал с этой сборкой ничего такого?

    https://mirror.yandex.ru/mirrors/ftp.linux.kiev.ua/Linux/CD/Dystryk/

    Проходил бутстрап начиная со stage1 и много чего дополнительного. Он должен быть чист.

     

  • 1.123, Аноним (123), 18:36, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +2 +/
    Как замечательно. И никаких вам растов
     
     
  • 2.171, Gogi (??), 12:44, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    *прослезился* :))
     
  • 2.213, Аноним (213), 15:35, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Как замечательно. И никаких вам растов

    А хруст вообще способен сам себя бутстрапнуть? А то официальной версии надо еще LLVM здоровенный, который, вообще, на C++ ажно. Так что бутстрапать придется еще и росатый^W плюсатый компилер.

     

  • 1.124, Док (?), 18:44, 15/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    У Гну как всегда странное поделие которым пара гиков смогут пользоваться прочитав тонну документации
     
     
  • 2.127, hefenud (ok), 19:45, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +2 +/
    А это и не вещь для васьки из «одноклассников». Это система сборки дистрибутива позволяющая гарантировать, что в нем нет закладок, может быть нужна серьезным людям и не может быть нужна васькам и ванька.
     
     
  • 3.136, Аноним (-), 21:16, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +1 +/
    Зато сережки и сашки ссыца кипятками от них
     
  • 3.143, Онаним (?), 22:40, 15/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • –1 +/
    Ну фактически да, эта хреновина требует trusted kernel и trusted hardware, которых в бытовых и корпоративных условиях ныне нет.
     
  • 2.140, Онаним (?), 22:32, 15/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +1 +/
    Нормальное поделие. Хорошо понятно зачем нужное, и полностью укладывающееся в здравый смысл.
    Вот только глянул в репозитарии - правильнее на данном этапе конечно было назвать GNU Mess, а не Mes.
     

  • 1.168, Аноним (162), 11:56, 16/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  [] []     [к модератору]
  • +/
    1879 Begriffsschrift - 1948 Plankalk 252 l - 1951 Superplan - ALGOL 58, orig... большой текст свёрнут, показать
     
     
  • 2.170, Аноним (162), 12:04, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > В GNU Mes предлагается самодостаточный (self-hosting) интерпретатор для языка Scheme, написанный на языке Си, и простейший компилятор для языка Си (MesCC), написанный на языке Scheme.

    Надо делать простейший компилятор C через TMG на ASM. И TMG зацикливаться на самого себя.

     
     
  • 3.216, Аноним (213), 15:39, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    Сделайте если можете и залейте на https://github.com/oriansj/stage0

    Впрочем там есть некие компиляторы типа-си на 130 кило асмового сорца вроде.

     

  • 1.172, Аноним (-), 13:12, 16/03/2021 [ответить] [﹢﹢﹢] [ · · · ]  []     [к модератору]
  • –1 +/
    У них рекурсия заклинила. Собрать компилятор, что бы собрать компилятор, для того что бы собрать компилятор.
    Может сразу asm листинг для компилятора и погнали дистр собирать. Отсканил его, в текстовый файл, переобозвал и компилируй, пока не выкомпилируется.
     
     
  • 2.174, Аноним (174), 14:58, 16/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    > У них рекурсия заклинила.

    Никто не смог написать хоть простейший компилятор C на ASM!

    Легко написать компилятор Lisp на ASM.

    По этому простейший MesCC написан на Scheme. Хоть Scheme написан на C и оба взаимовыгодное собираемся для полного бутстрапа этого мало.

    https://github.com/oriansj/stage0

    Можно сделать полный бутстрап, надо меньше 1000 байт в HEX набить с клавиатуры. Потом создать ASM, макрос для перевода ASM в HEX и создать компилятор Lisp (Scheme) которым скомпилировать MesCC -> TinyCC -> GCC.

     
     
  • 3.178, n00by (ok), 15:52, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    >> У них рекурсия заклинила.
    > Никто не смог написать хоть простейший компилятор C на ASM!

    На flat assembler макросами реализуется похожий на Си язык. Определения переменных, функций, условные операторы и вызовы. Из-за ограничений fasm-а вместо { } придётся использовать символьные токены, а аргументы функций указывать в угловых скобках:

    printf <"Hello">;

    В новой версии (fasm g) больше возможностей, но я его толком не смотрел.

    В обшем, не пишут, не потому что "не смогли", а поскольку не принято писать лексеры ручками.

     
     
  • 4.181, Аноним (185), 16:34, 16/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    "After being told for months there is no way to write a proper C compiler in assembly and months of research without any human written C compilers in assembly found."
    https://github.com/oriansj/stage0

    А вот компилятор Lisp на ASM написать удалось быстро:
    "The next recommendation in bootstrapping was Lisp, so efforts were taken to design the most minimal Lisp with all of the functionality described in the original Lisp papers. The task was completed relatively quickly compared to the FORTH and even had enhancements such as a compacting garbage collector."

    Из этого следует что писать первичный компилятор C лучше на Lisp (Scheme).

     
     
  • 5.206, n00by (ok), 13:25, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > "After being told for months there is no way to write a
    > proper C compiler in assembly and months of research without any
    > human written C compilers in assembly found."
    > https://github.com/oriansj/stage0

    Билл Гейтс вроде на ассемблере написал свой Бейсик для Альтаира, но исходники не выложил. Для железа посерьёзнее на асме не писали из соображений экономии времени.

    > А вот компилятор Lisp на ASM написать удалось быстро:

    Не так уж и быстро. В lisp.s почти 3500 строк кода.

    Starting to implement lisp interpreter in assembly
    oriansj committed on 5 Feb 2017

    Release 0.0.9
    oriansj committed on 19 Aug 2017

    > Из этого следует что писать первичный компилятор C лучше на Lisp (Scheme).

    Это следует из общих соображений:
    1. писать компилятор проще на высокоуровневом языке;
    2. транслятор LISP проще чем транслятор С.

     
     
  • 6.207, Аноним (207), 14:47, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    FORTH говорят тоже подойдет. Они с Lisp не только высокоуровневые но и кросплатформенные. А ASM прибит гвоздями к архитектуре. Хорошо, что макросы M1 сделали платформонезависимыми.

    А Столман первый компилятор gcc на Lisp собрал?

     
     
  • 7.211, n00by (ok), 15:20, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > FORTH говорят тоже подойдет. Они с Lisp не только высокоуровневые но и
    > кросплатформенные. А ASM прибит гвоздями к архитектуре. Хорошо, что макросы M1
    > сделали платформонезависимыми.

    Так говорить не мешки ворочать, пусть напишут. FORTH это такой абстрактный ассемблер для процессора с одним регистром (аккумулятор) и стеком. Форт-машина должна быть проще Лисп-машины, но для транслятора важнее удобное сопоставление с образцом или поддержка BNF.

    > А Столман первый компилятор gcc на Lisp собрал?

    Не знаю, но думаю, что да. Насколько понимаю, Десятое правило Гринспена выросло из идеи, что низкий уровень следует писать на ассемблере, а высокоуровневую логику на LISP. Ассемблер заменили на Си, поскольку тот не привязан к процессору при близких возможностях.

     
  • 7.214, Аноним (213), 15:37, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > FORTH говорят тоже подойдет.

    Вон там https://github.com/oriansj/stage0 написано что именно говорили, но как до дела - слились. Поэтому оставлено как исторический артефакт, желающих попробовать что-то кроме рассказов про дойку кур.

     
  • 2.202, Аноним (203), 08:33, 17/03/2021 [^] [^^] [^^^] [ответить]  []     [к модератору]
  • +/
    https://www.opennet.ru/openforum/vsluhforumID3/123569.html#201

    > Может сразу asm листинг для компилятора и погнали

    Пока ниукого не получилось написать корректный компилятор C на ASM.

    https://www.opennet.ru/openforum/vsluhforumID3/123569.html#168
    Изначально первый компилятор C был наверно собран на B и потом уже пересобрал самого себя.

    B наверно был собран на спец языке для создания компиляторов BCPL с применением техник TMG.

     
     
  • 3.215, Аноним (213), 15:38, 17/03/2021 [^] [^^] [^^^] [ответить]      [к модератору]
  • +/
    > Пока ниукого не получилось написать корректный компилятор C на ASM.

    Бутстрапному компилятору не обязательно быть полновесным - https://github.com/oriansj/stage0 довольно много здравых идей дает.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2025 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру