Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Принципы » bootstrapping


bootstrapping

Сообщений 1 страница 13 из 13

1

Для того, чтобы сделать экосистему независимой от английского языка вообще, нужно последовательно реализовать ряд стадий:

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

В опенсорсе это сейчас уровни:
коды -> ассемблер -> компилятор C -> компилятор C++ -> управляемые языки (вроде rust, java, C#)

Сколько минимально нужно инструкций для тьюринг-полного языка?
http://stackoverflow.com/questions/9439 … -to-be-con
говорят что одна:
https://en.wikipedia.org/wiki/One_instr … t_computer

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

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

Этого достаточно, чтобы из одной области памяти странслировать текст программы в виде символов в другую область памяти в байты.

И всё. Можно смело заявлять, что есть русский транслятор, который совсем никак не зависит от иностранных, но умеет разбирать русскую кодировку.
Про фичи-то не обещалось, что их будет много.

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

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

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

можно в ПЗУ поместить загрузочный транслятор и цепочку исходников, последовательно реализующих бо́льшее количество возможностей
и передавать управление между ними по мере компиляции следующих версий.
Это будет дольше, чем загрузка сразу нужной предварительно скомпилированной версии, зато из исходников.
(и это нужно будет делать один раз, а на каком-то из этапов прошить новый код в ППЗУ)

К чему я это всё? К тому что одной русскости мало. Не очень сложно сделать очень минимальный русский транслятор.
Важна ещё полнота набора фич языка.

2

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

3

ок, ассемблре с каким синтаксисом выбираем (tasm nasm yasm masm)?
платформа 32 или 64 и я так понимаю x86?
elf pe mac?

4

Яр написал(а):

ок, ассемблре с каким синтаксисом выбираем (tasm nasm yasm masm)?
платформа 32 или 64 и я так понимаю x86?
elf pe mac?

Ответы на все эти вопросы есть в исходном сообщении.

Платформа - любая, поддерживаемая QEMU, например Z80 - http://wiki.qemu.org/Features/Z80 (ну, можно, конечно и x86)
Выходной формат - blob (elf pe mac - нужны операционным системам. А если прошивать в BIOS, там это ненужно всё)

Синтаксис - собственный, как-то так:

текст := { инструкция } ;
инструкция ::= инструкция транслятору | инструкция процессору ;
инструкция транслятору ::= байты
    | метка ;
байты ::= "байты" , неотрицательное число ;
метка ::= имя метки , ":" ;
инструкция процессору ::= "вычесть" , имя метки , ",", имя метки
    | "перейти-если-меньше-нуля" , имя метки ;
имя метки ::= буква , { буква | цифра } ;
буква ::= [А-Я][а-я] ;
цифра ::= [0-9] ;
неотрицательное число :: = цифра, { шестнадцатеричная цифра } , "(16)" ;
шестнадцатеричная цифра ::= [0-9АБВГДЕ] ;
разделитель ::= новая строка | комментарий | пробел ;
новая строка ::= 0А(16) | 0Г(16) | 0А0Г(16) ;
комментарий ::= "{" , { любой символ - "}" } , "}" ; (* комментарий - это разновидность пробела, не склеивает символы слева и справа от комментария в один токен *)
пробел ::= 020(16) ;
любой символ := . ;

(* Здесь недописано, как разбираются пробелы, концы строк, и комментарии.
разделители не вставлены в правила грамматики
грамматика не приведена к виду, пригодному к использованию алгоритмом recursive descent *)

Ну и синтаксис грамматики надо тоже отдельно описать. Потом. Как-нибудь.
Написали же 20 лет назад ISO/IEC-14977 - https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf
Там 12 страниц всего, хорошему аналитику уровня Павиа по нормативам это на 3 дня работы.

хотел с двумя командами, но сейчас думаю, что надо делать переносимый транслятор и команду оставить одну.

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

Какими показателями анализировать минимальность? Можно попробовать минимизировать суммарный объем кода (исходных текстов) и документации. Но сложно при этом не упустить часть документации просто выкинув её.

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

Отредактировано Лис (2017-01-10 10:01:28)

5

Лис
Есть такая вещь архитектура процессора или ISA По русски это устройство процессора. Так вот инструкции процессора отражают его устройство, то что его делает особенным уникальным отличным от других.
Поэтому взять любую архитектуру и ассемблер не вяжется.

Выходной формат - blob (elf pe mac - нужны операционным системам. А если прошивать в BIOS, там это ненужно всё)

Что за формат Blob? Где описание.
По повуду БИОС там efi-pe.

Что касается минимального переводчика, то уже есть Контекст:
http://www.avhohlov.narod.ru/

6

Павиа написал(а):

Что за формат Blob? Где описание.

ну в википедии например. Был бы у Вас кругозор побольше, вопрос не возник бы.

Павиа написал(а):

Есть такая вещь архитектура процессора или ISA

мне это известно. Но вы мне это говорите считая меня дурачком. То есть Вы хамите, Павиа.

Павиа написал(а):

Поэтому взять любую архитектуру и ассемблер не вяжется.

И хамите Вы Павиа, не от большой сообразительности и внимательности. Обратите внимание, что во втором моём сообщении из треда слово ассемблер заменено на транслятор.

Павиа написал(а):

По повуду БИОС там efi-pe.

А какая мне разница? Я свой стандарт делаю.

Павиа написал(а):

Что касается минимального переводчика, то уже есть Контекст:
http://www.avhohlov.narod.ru/

Посмотрел, он не настолько минимальный, насколько я хочу.

7

У меня кругозор обширный и вашь термин Blobs окромя wiki негде более и неиспользуется.

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

Можно и меньше  чем 1000 строк сделать. Вон брейн-фак компиляторы и интерпретаторы ещё меньше. Но смысла невижу. За сутки 1000 строк написать сложно, но можно. Так что Контекст вполне себе отличная основа для транслятора.
Если хочется, то можно упростить.
Да  и по сравнению с бесиком на xt размером в 8 кб он малютка.
Трансляттр формул укладывается в 60 строк.

А какая мне разница? Я свой стандарт делаю.

А что сразу по нормальнрму написать нельзя? 

Почему z80? А не 8051?  Очень отличный процессор.

8

- Лис, - Павиа,
Я склонен думать, что вы шутите, а не ругаетесь... ))) Сарказм - вещь хорошая.  В современном мире человек имеет право "не знать".
Я вот ваще нечё не знаю и не стесняюсь этого но, играя роль пятиклассника - желал бы иметь достаточно терпеливых наставников, умеющих любому "чайнику" преподать тот "кусочек знаний", коего ему не хватает на данном этапе развития... )))
Для себя - сохраню вот эту ссылочку.

Отредактировано Сандро (2017-01-10 20:38:15)

9

Сандро

Я склонен думать, что вы шутите, а не ругаетесь... )))

Это хорошо, что у нас мысли совпадают.
Ничего что нос не дорос, главное про всё выведать вопрос. Не бойтесь спрашивать готов ответить на любой вопрос.

https://ru.wikipedia.org/wiki/BLOB

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

В компьютерном мире это слово можно встретить в СУБД для обозначения данных переменной длины. Если типы int, Float, char[10] имеют постоянный размер, то Blob является альтернативой с переменной длиной. Понятно что жвачка как-то не очень технически звучит поэтому маркетологи придумали акроним, чтобы люди с закостенелыми мозгами могли тоже радоваться. Binary Large Object - BLOB — двоичный большой объект - БЛОБ.

После понятия для табличных СУБД перешли на ООП. А сейчас BLOB используется как синоним к фразе массив байт переменной длины (или просто байты{bytes}).
Правда так обычно редко кто пишет.

А в среде прошивок и БИОС это слово не используется. Там используются объектные(obj) или бинарные(binnary) данные иногда сыре(raw) иногда плоские (flat).
В файлах-контейнерах части (chunks), коробки(boxes), рамки(frames).
Как видите синонимов у слова хватает.

Чуть не забыл почему - клякса? В математики/геометрии это поверхность кривой плоскости или внутренность некоторой замкнутой фигуры и в компьютерной графике Blobs называют однотонные участки изображений. При сегментации изображений на нём выделяются одинаковые участки - кляксы.

10

Павиа написал(а):

chanks

chunks

11

Павиа написал(а):

frams

frames, да и boxes тоже

Отредактировано Лис (2017-01-10 21:17:57)

12

- "и создал Творец исполнителей команд, "Элов" и "Элей" по Единому начальному чертежу, но различных по специфике назначения".
И присвоил им имена и снабдил набором команд, многие из которых являлись "общими". 

- Вот их начальный перечень:
(здесь следует перечень команд общего назначения в двоичном его написании)...
- И был день, и было утро... )))

13

Лис написал(а):

Для того, чтобы сделать экосистему независимой от английского языка вообще

А зачем? Щоб було? Тогда сначала надо создать свой процессор. Без процессора -- детский лепет.


Вы здесь » Ремесло программиста » Принципы » bootstrapping