О русском ассемблере
Краткая история появления пробной версии русского ассемблера
Это была работа «под заказ». Но до, ни после создание подобного транслятора меня не интересовало. Дело было так.
Один великовозрастный недросль хотел получить диплом вуза. Да вот незадача: надо написать дипломную работу.
Эта задача ещё осложнялась тем, что этот оболтус, в отличие от своих однокурсников, не стажировался на партнёрских предприятиях.
Однокурсники совершенствовали навыки программирования на практических задачах и подбирали для себя темы дипломных проектов,
а вот у нашего героя на уме было одно: любоффь и предстоящая свадьба. Вот и получилось: «лето красное пропела, оглянуться не успела...».
Ну и как нередко бывает в жизни, понадобились звонок другу и помощь из зала. Все глаза уставились на меня в надежде, что я не дам пропасть будущему специалисту,
что надо оказать помощь прямо сейчас, а вот в будущем он сам возьмётся за ум. Просто у него сейчас мозги ещё не окрепли. Но в будущем это обязательно произойдёт.
Потом так и случилось, он повзрослел и стал востребованным специалистом. Задним числом это оправдывает меня :)
Началась подборка темы дипломного проекта. Если однокурсники брали темы у руководителей стажировки, то в нашем случае тему было взять неоткуда.
Что мог предложить я? Что-то по теме компиляторов. Чтобы написать какой-то компилятор для какого-то языка, пусть и простейшего, нужно время, которого оставалось мало.
Русификацию Си/C++ предложить уже не мог, потому что сразу стало бы ясно, что работа «позаимствована». Легко проверяемо Гуглом. Значит, нужна уникальность.
Нашлась неосвоенная ниша — язык ассемблера. Тем более, что в узком кругу уже поднималась тема русского ассемблера.
Но если раньше меня эта тема не вдохновляла особо, то теперь деваться было некуда. В институте тему утвердили, начал «въезжать» в неё.
Язык ассемблера выглядит для непосвящённого человека как результат работы бредогенератора.
Да и для посвящённого не всё прозрачно. Чтобы читать программу «с листа», нужен многолетний опыт. Хотелось бы этот язык очеловечить.
Ведь что толку от замены абракадабр на латинице на абракадабры на кириллице?. К тому же нет общепринятых сокращений русских названий команд.
Их нет в учебниках, они не ищутся поисковыми системами.
Поначалу хотелось как можнно больше команд заменить не русскими аббревиатурами, а некими «иероглифами», понятными всему населению планеты —
последовательностями спецсимволов. Но такой язык очень быстро превращался в BrainF*ck: длинный забор из ключков и палочек ничуть не способствует быстрому пониманию сути текста.
Пришлось ограничиться базовыми операциями в надежде на правило «20 на 80». Что надо 20% наиболее употребляемых операций заменить на понятные и легкозапоминаемые спецсимволы.
А лучше, если их вообще запоминать не надо, чтоб они были знакомы из школьной арифметики. И они должны, по идее, занять 80% текста.
Вот что получилось в итоге, текст из реальной программы на русском ассемблере:
\\ указатель на строку в - [EBP+08H]
Длина строки ПРОЦ НАЧАЛО
БАЗА }; БАЗА = СТЕК
И }
И = АДР32 (БАЗА+8)
Б ^ Б
Метка1:
АДР8 (И) ? 0
== Метка2
++ Б; ++ И
--> Метка1
Метка2:
И {; БАЗА {
<-- 4
Длина строки ПРОЦ КОНЕЦ
Конечно, не все согласятся, что это лучший вариант замены, укажут на субъективность вкусов. Но под каждой заменой есть аргументированное обоснование.
Впрочем, в этом проекте есть возможность полностью сменить синтаксис на свой собственный вариант.
С одной стороны, это гибко. С другой — отсутствие стандарта всё же не есть хорошо.
Тема так же обсуждалась на форуме.
P.S. Не могу найти у себя переписку с одним разработчиком, который рассказывал,
как они мучались с русским ассемблером под какую-то отечественную систему команд отечественной архитектуры.
И как они вздохнули, когда ассемблер был переделан на английские абревиатуры команд.
На это только и ответил, что ассемблеры, по-видимому, делятся не только на русские и нерусские, но и на хорошие и плохие.
Так что не всё так однозначно.
Если подумать на перспективу
И ещё вопрос: нужен ли он — русский ассемблер? Мне кажется, что если есть другая интересная или нужная работа, то лучше выбрать её.
За 8 прошедших лет никто (ни один человек!) не заинтересовался ни моими исходниками, ни исполняемым модулем.
Конечно, это может говорить о том, что это только мой ассемблер никому не нужен.
Зато другой с гениально подобранными заменами аббревиатур на латинице точно взлетит! Увы, но сильно сомневаюсь.
Кстати, для генерации бинарного кода ассемблер не нужен. Дмитрий Караваев в своём компиляторе PL/1 и Андрей Хохлов в компиляторе Context генерируют бинарный код напрямую.
Это не говоря о более известных компиляторах. И ещё кстати. Компилятор Дмитрия Караваева — не только для языка PL/1, но и для языка ассемблера x86/x86-64, то есть два в одном.
Идентификаторы там можно записывать кириллицей. Русских обозначений команд не имеется, но задачу «суверенного» компилятора он по крайней мере решает.
Если кто-то решится делать русский ассемблер, то делать его надо в связке с русским дизассемблером и русским отладчиком.
А то ведь сгенерируем машинный код, а как потом его расшифровать, сделать обратное преобразование?
Если же делать «универсальный ассемблер», который в чём-то конкурировал бы с LLVM, то надо не допустить ошибок этого проекта.
Например, «Low Level» на деле оказывается не таким уж и «low». Если взять наиболее популярные архитектуры процессоров (x86, ARM, MIPS),
то во всех есть такие низкоруровневые средства, как стек, регистры и флаги. Но в LLVM они отсутствуют.
До такого низкого уровня из LLVM «не достучаться»: нет прямых средств для управления стеком, регистрами и флагами.
Знатоки LLVM советуют пользоваться в таких случаях ассемблерными вставками под каждую платформу.
Что само по себе дискредитирует LLVM как кроссплатформенный инструмент.
Есть интересное предложение по развитию С++, которое подразумевает прямое использование флага процессора:
Герб Саттер (Herb Sutter) в P709 описал новый механизм передачи исключений.
Идейно, функция возвращает std::expected , однако вместо отдельного дискриминатора типа bool ,
который вместе с выравниванием будет занимать до 8 байт на стеке, этот бит информации передаётся каким-то более быстрым способом, например, в Carry Flag.
Функции, которые не трогают CF (таких большинство), получат возможность использовать статические исключения бесплатно —
и в случае обычного возврата, и в случае проброса исключения!
Функции, которые вынуждены будут его сохранять и восстанавливать, получат минимальный оверхед, и это всё равно будет быстрее, чем std::expected и любые обычные коды ошибок.
Представить это новшество в GCC или в компиляторе Microsoft совсем нетрудно: в них можно напрямую обратиться к флагу CF.
Элементарно, Ватсон! Но вот как это будет делаться в компиляторе Clang, которые работает поверх LLVM?
Будут пилить на низком уровне по каждую платформу в отдельности, только бы не дать доступ к «лишним подробностям».
В советское время тоже были проекты «универсального ассемблера»: языки АЛМО, Сигма, Эпсилон и другие. Возможно, там что-то можно найти что-то интересное.
Выводы
Идея универсалього ассемблера или универсального промежуточного представления хороша тем, что поволит экономить на генерации кода под конкретную платформу.
Разработчикам языков достаточно написать компилятор своего языка в универсальное промежуточное представление — и он заработает на M платформах.
Разработчикам архитектур достаточно написать компилятор с универсального промежуточного представления в коды своей системы команд — и на этой платформе будет компилироваться N языков.
Вместо написания M*N компиляторов достаточно написать N компиляторов в промежуточное представление и M компиляторов с него в машинный код.
Опубликовано: 2022.11.27, последняя правка: 2022.11.29 00:15
Отзывы
✅ 2022/11/28 23:22, MihalNik #0
За 8 прошедших лет никто (ни один человек!) не заинтересовался ни моими исходниками, ни исполняемым модулем. Конечно, это может говорить о том, что это только мой ассемблер никому не нужен. Ну, Вы его, наверное, давно общепринятым способом никуда вроде гитхаба и не выкладывали, да и в данном случае сомнительны права на это — как бы чужой диплом. Ручными запросами на исходники люди в принципе редко занимаются, а в данном случае это не этично. Тем более неизвестно, на чем он написан, качество исходников, функциональность, польза вот вообще сомнительна.
Кто нынче пишет на ассемблере? Разве что вставки мелкие какие-нибудь внутри ЯВУ. Если даже самому автору не надо — кто будет поддерживать и развивать? В данном случае, надо полагать, сделать грамотный красивый перевод (как и вообще язык) гораздо сложнее реализации самого механизма перевода.Разработчикам языков достаточно написать компилятор своего языка в универсальное промежуточное представление — и он заработает на M платформах. Сейчас чаще всего это C или JS.✅ 2022/11/29 12:30, Gudleifr #1
Зачем изобретать новые проблемы? Есть две старых:- язык ассемблера должен наглядно описывать команды и структуры машинного языка. Чего стоят 8 полей типов данных в 386-м!? А его шлюзы!? Сравните, насколько отличается элегантнейший FORTH-ассемблер для 8080 от моего 386-го монстра;
- язык ассемблера должен быть способным создавать наглядные описания интерфейсов к используемым ОС. Сравните, как мне пришлось плясать с бубном для удовлетворения требований WinAPI. Сюда же — конструкций ЯВУ
Победите это — победите всё. И поймёте, что байки о совместимости и переносимости — это просто байки.✅ 2022/11/29 14:06, Автор сайта #2
Вы его, наверное, давно общепринятым способом никуда вроде гитхаба и не выкладывали Гитхаб ничем не помог бы. Есть в сети место сосредоточения любителей ассемблера — форум ОС «Колибри». Русификация ассемблера не то, чтобы вызвала маленький интерес. Он оказался вообще нулевым. Сравниваю с русификатором Си: его скачивали 1,5 тыс. раз, несколько человек интересовались исходниками. А тут полное безразличие.Ручными запросами на исходники люди в принципе редко занимаются, а в данном случае это не этично. Так историю никто не знал, поэтому «этика» ни на что не могла повлиять.Тем более неизвестно, на чем он написан, качество исходников, функциональность Чтобы всё это оценить, нужно хотя бы поинтересоваться. Но не было даже попыток это сделать.Сейчас чаще всего это C или JS Да, JS в этом качестве в какой-то мере удивляет. Язык с автоматическим управлением памятью, не слишком производительный. Но на нём даже клон Win95 написали. Очуметь!
Си, конечно, вариант. Но «обобщённый» ассемблер был бы лучшим решением. LLVM конечно хороша, но лучше иметь отечественный инструмент.байки о совместимости и переносимости — это просто байки. Худо-бедно, но есть кроссплатформенные JVM, LLVM, Qt. Есть Wine под Linux. Не всё гладко, но нерешённых проблем не много (в процентах), многие о них даже не знают. Кроссплатформенность серьёзно уменьшает время и затраты на разработку. Конечно, ценой некоторой потери эффективности. Был проект Эпсилон в СССР, генерация кода через него приводила к потере производительности на 20%. Но даже в советское время на это шли, несмотря на дефицит вычислительных мощностей.язык ассемблера должен наглядно описывать команды и структуры машинного языка. Современные архитектуры процессоров сильно похожи друг на друга. Найти «наибольший общий делитель» будет нетрудно.✅ 2022/11/29 14:35, Gudleifr #3
Худо-бедно, но есть кроссплатформенные JVM, LLVM, Qt. Есть Wine под Linux. Не всё гладко, но нерешённых проблем не много (в процентах) А геном человека отличается от генома обезьяны на 1%. Суть проблемы совместимости в том, что ВЕСЬ что-то делающий код непереносим. Мы умеем рисовать одинаковые серые окошки на всех платформах? А какой мне прок в программе, рисующей окошки на экране 2000*1000 десктопа, на моем карманном Win CE с разрешением 320*200? С другой стороны, какой мне прок от совместимости реализаций игры X-Com для любых компьютеров? Ведь, хочется описания логики игры в терминах, позволяющих не просто запускать игру, а использовать её отдельные модули, добавлять и убавлять.Современные архитектуры процессоров сильно похожи друг на друга. Найти «наибольший общий делитель» будет нетрудно. Но не нужно. ЯВУ с этим худо-бедно справляются. Ну, нет в Си способов работы с портами, сегментной памятью и аппаратными прерываниями. Кого это когда напрягало?✅ 2022/11/29 20:52, MihalNik #4
Есть в сети место сосредоточения любителей ассемблера — форум ОС «Колибри». Русификация ассемблера не то, чтобы вызвала маленький интерес. Он оказался вообще нулевым. Любители ассемблера — знают ассемблер и по определению любят его. Но ОС — это совсем другое дело. Это как на форум автолюбителей прийти обсудить удобное велосипедное седло.✅ 2022/11/29 22:59, Автор сайта #5
А геном человека отличается от генома обезьяны на 1%. Будь Вы творцом вселенной, то нашли бы выгодным повторное использование 99% кода. Творцы — они такие, рутину не любят, им только новые и интересные задачи подавай. А тут ещё дедлайн, надо за 7 дней успеть. А за счёт гибкой методики управился за 6, а седьмой отдыхал.А какой мне прок в программе, рисующей окошки на экране 2000*1000 десктопа, на моем карманном Win CE с разрешением 320*200? Когда-нибудь придём к масштабируемому интерфейсу пользователя. Но даже если интерфейс пользователя нужно разрабатывать всякий раз с нуля, то на остальном можно же немало сэкономить? Работа с файлами, базами данных, сетью — в чём там может быть принципиальная разница?Но ОС — это совсем другое дело В том то и дело, что не другое. «Колибри» написана на ассемблере, на форуме общаются её разработчики, они же программисты на ассемблере.✅ 2022/11/29 23:02, MihalNik #6
В том то и дело, что не другое. «Колибри» написана на ассемблере, на форуме общаются её разработчики, они же программисты на ассемблере. Именно. Колибри ОС написана другим ассемблером.✅ 2022/11/30 00:15, Gudleifr #7
А за счёт гибкой методики управился за 6, а седьмой отдыхал Не получается. Соблюдение "правил совместимости" весит, минимум, 90% кода. Возьмите любой код любой современной библиотеки и посчитайте сколько кода уходит на шаблонирование универсальных типов, ловушки маловероятных ошибок, замкнутость кольца операций... И сколько в этом коде ошибок.Работа с файлами... Тоже самое. Попробуйте, например, совместить NIX'-овские файлы с WIN-файлами-оверлеями без потери 90% производительности.✅ 2022/11/30 01:06, Бурановский дедушка #8
Apple много раз перепрыгивала с одного процессора на другой. Сперва Motorola, потом PowerPC, потом Intel, и вот теперь ARM. Миллионы пользователей переходили. Значит, была хорошая совместимость. Apple, между прочим, один из спонсоров LLVM.
Читал описание команд ARM — очень похоже на Intel. Разница куда меньше, чем с IBM/360/370 или Электроника Д3-28/Wang 720C. Наверное, трудности, связанные с разницей в архитектурах, не настолько велики, что Clang выдаёт такой хороший бинарный код. И для Intel, и для ARM.✅ 2022/11/30 12:05, Gudleifr #9
Apple много раз перепрыгивала с одного процессора на другой Т.е. переписывала свои ОС заново. Сохраняя внешние интерфейсы практически без изменений. Это и есть единственная возможная "совместимость" — совершенно разные программы, работающие почти одинаково.✅ 2022/12/01 12:53, Автор сайта #10
Колибри ОС написана другим ассемблером Пишут на Fasm. Моя разработка делала преобразование своего собственного синтаксиса в синтаксис Intel. То есть в синтаксис Masm и Fasm. Но это, повторюсь, никого не заинтересовало.
Но меня легко убедить в обратном, то есть в нужности русского ассемблера: достаточно его написать и сделать широко используемым.✅ 2022/12/01 18:26, Бурановский дедушка #11
Т.е. переписывала свои ОС заново Переписывали с нуля один раз, когда переходили на PowerPC. В остальных случаях просто допиливали по мелочам.✅ 2022/12/01 18:29, Gudleifr #12
В остальных случаях просто допиливали по мелочам Допиливание обычно весит больше переписывания заново.✅ 2022/12/01 21:01, void #13
В советское время тоже были проекты «универсального ассемблера»: языки АЛМО, Сигма, Эпсилон и другие. Возможно, там что-то можно найти что-то интересное. Ещё, как вариант: языки Эль-76, проекты Самсон, Кронос. Эль-76: русскоязычный микрокод, высокоуровневый язык динамически типизированный, вроде Оберона. Модули там, кажется, реализованы через замыкания.
Самсон А. Терехова: на Алголе высокоуровневый ассемблер, высокоуровневый микрокод.
Кронос и далее Мифрил, XDS А.Недори. Проект Кронос: клон Юникса на Модуле-2. Модула-2 как высокоуровневый микрокод или ассемблер.
Самсон и Кронос — реализации своей аппаратной архитектуры на языке высокого уровня (Алгол и Модула соответственно). XDS: двух- (а потом, и трёх-) язычный компилятор Модула-2/Оберон-2/Си, для оптимизации используется представление SSA, как в LLVM.
QBE: https://c9x.me/compile/ — бэкенд компилятор на Си, использующий SSA-представление. Более простой, чем LLVM. Есть реализации простых компиляторов с кодогенерацией через QBE из SSA, SCC: https://github.com/8l/scc, qc: https://github.com/andrewchambers/qc, Myrddin: https://myrlang.org/, https://github.com/8l/mc, https://myrlang.org/retrospective SCC поддерживает QBE среди прочих бэкендов, QC написан на Myrrdin и QBE, Myrrdin в последних версиях переходит на QBE.
Myrrdin — функциональный язык программирования, нечто среднее между Ocaml, Rust и Haskell.
В качестве языка программирования с простым компилятором и кодогенератором, можно также посмотреть Cowgol: https://cowlark.com/cowgol/ и прочие языки этого автора: https://cowlark.com/index/blog.htmlP.S. Не могу найти у себя переписку с одним разработчиком, который рассказывал, как они мучались с русским ассемблером под какую-то отечественную систему команд отечественной архитектуры. И как они вздохнули, когда ассемблер был переделан на английские абревиатуры команд. На это только и ответил, что ассемблеры, по-видимому, делятся не только на русские и нерусские, но и на хорошие и плохие. Так что не всё так однозначно. Кажется, в ЭВМ "Наири" микрокод (автокод) и далее ассемблер был даже армянским, а не русским.Конечно, не все согласятся, что это лучший вариант замены, укажут на субъективность вкусов. Но под каждой заменой есть аргументированное обоснование. Впрочем, в этом проекте есть возможность полностью сменить синтаксис на свой собственный вариант. С одной стороны, это гибко. С другой — отсутствие стандарта всё же не есть хорошо. Мне кажется, эту тему нужно разделить на две:- высокоуровневый ассемблер (или достаточно высокоуровневый язык в качестве микрокода, автокода, ассемблера наподобие PL/S, PL360)
- русскоязычный ассемблер
Высокоуровневый ассемблерЗдесь в качестве примеров такого языка и компьютерных архитектур кроме достаточно общеизвестных Эль-76, Самсон/Алгол, Кронос/Модула-2, Лилит/Модула-2, Ceres/Oberon можно привести исторические:- AlgolW на PL360 и соответственно PL360, Euler;
- проект MULTICS, где PL/1 использовался в качестве системного языка вместо ассемблера;
- проект OS/360, где в том же качестве использовался собственный диалект PL/S;
- проект CP/M, где в том же качестве использовался PL/M.
- HLA = High Level Assembly by Randall Hyde и книга "Art Of Assembly" про 64-битный ассемблер, судя по форуму автора — книга пишется сейчас.
- https://artofasm.randallhyde.com/ про 32-битный ассемблер и собственно HLA — книга, компилятор HLA в ассемблер и исходники есть на
https://www.randallhyde.com/AssemblyLanguage/www.artofasm.com/index.html HLA — это буквально "высокоуровневый ассемблер"под x86-32, с синтаксисом вроде Паскаля, с семантикой С++ (есть аналоги STL, ООП GUI-библиотека, классы и исключения). - Есть довольно высокоуровневый язык макросов через функции времени компиляции, СTFE Compile-Time Function Execution. Шаблоны и ООП-система реализованы через такие макросы. Но всё-таки это ассемблер: команды ассемблера синтаксически записываются как вызов функций наподобие mov(ax,bx); но вычисление выражений показывает всю низкоуровневость языка, простой калькулятор выражений фактически не реализован.
На мой взгляд, высокоуровневость языка определяется именно способом типизации выражений, а вовсе не синтаксисом. То есть высокоуровневым можно назвать тот язык, который "абстрагирует от несущественного" (например, синтаксиса). То есть в котором при вычислении выражения все элементарные значения и их элементарные типы являются first-class objects, как например в языке Kernel диалекте Схемы с семантикой vau-expressions, от автора John Schutt. Всё остальное, например синтаксис языка, — дело наживное, если у вас достаточно развитый макроязык. Например, возьмём в качестве такого языка-носителя для реализации более высокоуровневого языка-гостя язык Форт. Компилирующие слова Форта могут использоваться для реализации синтаксических макросов. Есть реализации ассемблера x86-32 на стандартном переносимом Форте. - Есть реализации простых компиляторов, вроде перевода "Let's Build a Compiler" by Jack Crenshaw https://compilers.iecc.com/crenshaw/ про реализацию простого компилятора Паскаля на Паскале и его более поздний сиквел http://home.iae.nl/users/mhx/crenshaw/tiny.html про реализацию компилятора Паскаля на Форте. Вторая реализация на Форте, на мой взгляд, стала ещё проще и нагляднее, а не просто компактнее.
- На сайте Taygeta есть Forth Scientific Library: https://www.taygeta.com/fsl/scilib.html Среди прочих численных методов там реализован парсер выражений и их трансляция в стандартный Форт. То есть Форт с такой библиотекой используется по сути как Фортран.
- Форт можно использовать как переносимый ассемблер: https://github.com/rigidus/rigidus.ru/blob/master/org/doc/paf.org Форт получается даже гибче чем Фортран и ассемблер:
1) синтаксис можно изменять 2) можно встраивать куски кода на любом языке: высокоуровневом, низкоуровневом или Форте 3) можно компилировать/ассемблировать/дизассемблировать отдельные слова и динамически смотреть, что получается (то есть, использовать Форт в качестве PL/1 монитора, например). - Компиляторный тулчейн PL/I-KT Дмитрия Караваева, кстати, в этом смысле тоже довольно интересный. Основная заслуга — гибкость расширения, заложенную первоначальной архитектурой, — принадлежит автору тулчейна Гари Килдэллу, автору CP/M, PL/M и этого компилятора PL/1 под CP/M, DOS и DR DOS. В тулчейне есть собственно компилятор, линкер и библиотекарь OMF формата и ассемблер RASM. Ассемблер реализован достаточно гибко и расширяемо. Настолько гибко, что это позволило Дмитрию Караваеву относительно просто портировать его на x86-64. Что делает этот тулчейн вполне самодостаточным. Впрочем, Дмитрий Караваев и сам довольно сильно переработал исходный компилятор: поддержка русского языка, физических размерностей, портирование под Win64, подключение стандартных C библиотек Windows, например DirectX.
Хотя OMF формат удалось приспособить для поддержки 64-битного кода, я подозреваю, что дальнейшее развитие компилятора и тулчейна ограничено именно старым линкером. Например, в языке D Волтера Брайта и его изначальном компиляторном тулчейне DMD = Digital Mars D использовался линкер OPTILINK, точно так же как и в Zortech C++ / Symantec C++ / Digital Mars C++. В дальнейшем это привело к ряду проблем. Например, во время D v1.0 был 3D-движок, написанный на CTFE конструкциях языка D. Так там некоторые примеры не компилировались — происходило переполнение системных таблиц, и напрямую упирались в ограничения формата OMF и старого линкера OPTILINK.
В PL/I-KT, возможно, ровно такие же проблемы могут возникнуть при достаточно больших программах (впрочем, без метапрограммирования в стиле CTFE этого достигнуть значительно сложнее). Если уважаемый Дмитрий Караваев когда-нибудь соберётся делать порт PL/I-KT под Linux, например, то линкер придётся довольно значительно переписывать для кодогенерации ELF формата exe и .so библиотек. Впрочем, возможно это будет всё-таки проще, чем использовать монстров вроде GCC или LLVM.
✅ 2022/12/01 21:02, void #14
Вообще интересно, а насколько сложно например на PL/I-KT программировать под EFI? Вот тут https://wiki.osdev.org/UEFI_App_Bare_Bones, например, находятся примеры программирования ядра операционной системы "на голом железе", непосредственно под UEFI (современный аналог BIOS). На языке Си. Также здесь https://www.rodsbooks.com/efi-programming/hello.html и здесь https://github.com/no92/uefi-bare-bones. Непосредственно на ассемблере не сильно сложнее: https://johv.dk/blog/bare-metal-assembly-tutorial
На Форте тоже не очень сложно: https://github.com/c2d7fa/jonasforth https://github.com/iwilare/monoid-forth https://compilercrim.es/bootstrap/miniforth/
Кстати, вот рацпредложение уважаемому Дмитрию Караваеву: написать пробный макетный helloworld под UEFI на PL-I/KT и по необходимости минималистично доработать компилятор и тулчейн, чтобы этот пример можно было запустить. Мне кажется, на PL/I вполне можно разрабатывать целые операционные системы bare bones — непосредственно "на голом железе".
UEFI здесь кажется как разумный кандидат на замену BIOS, основная сложность — в доработке линкера и реализации поддержки готовых библиотек вроде GNU-EFI или TianoCore. Как пример, можно обойтись вообще без Си уровня (портировать на Pl/I, пример: https://johv.dk/blog/bare-metal-assembly-tutorial).✅ 2022/12/01 21:04, void #15
Впрочем, на Лиспе тоже может быть не сильно сложнее. Есть, например, реализация ассемблера встраиваемого в Схему: https://sassy.sourceforge.net/, но там ассемблер всё ещё 32-битный (или даже 16-битный, для бутсектора).
Гораздо интереснее выглядят проекты Chris Hinsley : Elate OS / intent / AmigaDE / TaoOS и его современный форк CrysaLisp. Cris Hinsley был программистом на ассемблере, автором культовых игрушек середины 80-х: AutoMania, Pyjamarama, прочих https://viva-games.ru/game/automania, https://viva-games.ru/avtor/chris-hinsley. Особенностью этих игрушек было то, что они выходили под несколько платформ сразу.
Крис Хинсли программировал их в своём особенном стиле, фактически — на переносимом ассемблере. В дальнейшем эта идея, регистровой виртуальной машины как виртуального процессора, кроссплатформенного переносимого ассемблера — выкристализовалась в ElateOS / intent / AmigaDE и далее в CrysaLisp.
Виртуальный процессор описан здесь: https://en.wikipedia.org/wiki/Virtual_Processor, там же есть ссылки на журналы, публикации и интервью. Github Avatar: Chris Hinsley
Inventor of the Taos OS. http://www.uruk.org/emu/Taos.html https://en.wikipedia.org/wiki/Virtual_Processor
Например, довольно содержательное интервью было на OSnews: https://www.osnews.com/story/157/tao-group-on-elateos-amigade-and-more/ с картинками в вебархиве https://web.archive.org/web/20110804222848/https://www.osnews.com/story/157/tao-group-on-elateos-amigade-and-more/
Вот, например как выглядит этот "виртуальный ассемблер": https://web.archive.org/web/20150815172946/http://www.osnews.com/img/vp.jpg. Видно, что язык довольно высокоуровневый, наподобие HLA.
А декомпозиция на tools более компактна, чем объекты или библиотеки — скорее напоминает микросервисы. Впрочем, далее на основе этой идеи был реализован CrysaLisp: https://github.com/vygr/ChrysaLisp и поддерживающие библиотеки: https://github.com/vygr/ChrysaLib — это реализация операционной системы, основанной на идеях ElateOS/intent/AmigaDE Virtual Processor, Лисп-машин и распараллеливания в духе Occam и транспьютеров.
Как вы можете видеть в репозитории проекта на Гитхабе реализовано довольно много, при этом есть 3D графика и мультимедия. Весь этот 3D рендеринг при необходимости может работать как распределённая операционная система в духе Plan9 ANTS или Occam, на нескольких узлах одновременно. Накладные расходы на реализацию "виртуальной машины" этого виртуального процессора — ничтожны. См. более подробные сравнения и бенчмарки непосредственно в репозитории.
Во времена ElateOS/intent/AmigaDE на таком виртуальном процессоре в AmigaDE SDK был реализован компилятор языка С, POSIX совместимый. Фирма Криса Хинсли TaoGroup https://en.wikipedia.org/wiki/Tao_Group и её продукты. Впрочем, и сейчас на чём-то вроде QBE, HLA, CrysaLisp, Форт, Лисп, Схема — должно быть реализовать эти идеи не сильно сложнее.✅ 2022/12/01 21:32, void #16
Идея универсалього ассемблера или универсального промежуточного представления хороша тем, что поволит экономить на генерации кода под конкретную платформу. Здесь возникает вопрос: а насколько хорошо оптимизировать код позволяет это самое универсальное промежуточное представление? Например, в компиляторе GCC есть несколько таких представлений: GIMPLE, TREE SSA, MELT https://russianblogs.com/article/10021359206/ MELT https://gcc.gnu.org/wiki/MELT%20tutorial https://gcc.gnu.org/wiki/MiddleEndLispTranslator — это фактически диалект Лиспа, реализованный как плагин для GCC.
В LLVM и QBE (а также компиляторе А. Недори) используется представление SSA. В первую очередь из-за того, что оно удобно для оптимизации. При этом сам язык промежуточного представления "высокоуровневый ассемблер" во всех этих трёх реализациях — разный. Возможно, что LLVM intrinsincs не самый простой и понятный способ расширения реализации. LLVM представляет собой тот самый Virtual Processor, с бесконечным количеством регистров или регистровых переменных, с phi функцией выбора блоков.
В этом смысле эта виртуальная машина времени компиляции похожа на другие регистровые виртуальные машины "виртуального процессора", такие как Dis из Inferno, Dalvik из Android (являющийся по сути клоном Dis в новой упаковке, использующий в качестве более наглядного синтаксического сахара не Limbo/Go/Plan9 C,Squeak,Alef — а попсовый Java синтаксис) или ту же самую ElateOS/intent/AmigaDE/CrysaLisp.
Ещё есть C--, даже два. Один — упрощённый Си, современный форк поддерживает Win32/Win64. Второй используется в реализации компилятора GHC языка Haskell. Этот второй тоже напоминает эдакий достаточно низкроуровневый ассемблер некоторого "виртуальный процессора".
Другой вариант — наоборот, сделать язык реализации промежуточного представления достаточно высокоуровневым. Но в общем случае непонятно, насколько это будет выгодно для эффективной оптимизации.✅ 2022/12/03 14:24, kt #17
На мой субъективный взгляд никакого «языка ассемблера» вообще не существует. Есть ряд правил записи команд процессора в текстовом виде и все. И если вы знаете команды, запомнить несколько правил их записи не представляет труда.
Помнится, я начинал с того, что раздобыл книжку с системой команд БЭСМ-6 (тогда она нигде не продавалась) и пару месяцев её изучал, будучи полным нулем в этой области. Все переписывал в тетрадку, чтобы лучше запоминалось. Потом решил изучать Автокод БЭСМ-6 и завел новую тетрадь. Но оказалось, что достаточно одной странички и часа времени.
Поясню свою мысль на примере x86. Вот есть, например, команда MOV EAX,10 Ее можно записать какMOV EAX,X1+X2 гдеX1 EQU 4 X2 EQU 6 Это может быть удобно, чтобы редактировать меняющиеся константы только в одном месте исходного текста. Так вот, язык ассемблера это жалкие X1+X2 вместо записи сразу 10, т.е. мелочь, а все остальное — определяется системой команд. Если вы знаете систему команд — вы автоматически знаете и ассемблер. И, на мой взгляд, «обобщенный ассемблер» — пустая затея, ступень, без которой можно обойтись.
Автору сайтадля генерации бинарного кода ассемблер не нужен — нет нужен, иначе как проверять результаты работы транслятора. Неважно это ассемблер или дисассемблер: читать то все равно приходится команды в виде текста. Поэтому PL/1-KT действительно сразу генерирует двоичный код, но и сразу же дисассемблирует этот код в текст для разработчика. Даже есть режим, когда этот проверочный текст можно опять перевести в двоичные коды настоящим транслятором с ассемблера. Мы этот режим применяли для «ручной» оптимизации команд.
MihalNik'у Кто нынче пишет на ассемблере? Я пишу. Конечно, это немного жульническое заявление — у меня транслятор был изначально дисассемблирован, поэтому менять и сопровождать его приходилось на ассемблере. Но были у нас и отдельные проекты на ассемблере (все кроме ввода-вывода).
Это был транслятор с ПРОЛ-2 и программа автоматического обращения русско-немецкого технического словаря в немецко-русский. При грамотной организации разбивки на процедуры все получалось довольно быстро. Ну, и скорость работы программ получалась подходящей. Поэтому, да ради бога, генерируйте в своих трансляторах код для любых LLVM. Только не называйте это ассемблером.✅ 2022/12/03 14:51, Gudleifr #18
Просто оставлю это здесь. https://gudleifr.forum2x2.ru/t116-topic#1898✅ 2022/12/03 22:25, Автор сайта #19
На мой субъективный взгляд никакого «языка ассемблера» вообще не существует. Язык — это совокупность алфавита, синтаксических и семантических правил. Если есть какое-то уникальное сочетание перечисленного, которое отличается от других, то это и есть язык. Значит язык ассемблера вполне себе существует. Более того, у системы команд x86 два основных ассемблера (синтаксиса), в Вашем ассемблере принят за стандарт синтаксис Intel. Есть ещё синтаксис AT&T. Эти синтаксисы отличаются порядком следования аргументов. В AT&T ещё указывается размер операндов.Если вы знаете систему команд — вы автоматически знаете и ассемблер. Да нет же. Ассемблеры могут отличаться синтаксисом (см. выше). А ещё в языке ассемблера есть макросы, зная систему команд, не имеешь автоматического знания языка макросов.
Дональд Кнут в своих трудах описывал алгоритмы на своём собственном выдуманном ассемблере. То есть системы команд у него не было, а язык ассемблера был :)для генерации бинарного кода ассемблер не нужен — нет нужен, иначе как проверять результаты работы транслятора. Неважно это ассемблер или дисассемблер: читать то все равно приходится команды в виде текста. Ну так для этого вполне сгодится сторонний дизассемблер.ради бога, генерируйте в своих трансляторах код для любых LLVM. Только не называйте это ассемблером. Ну так я употреблял термин — «обобщённый ассемблер». Этот термин не я изобрёл, я термины изобретать не люблю. Наверно, близко по смыслу термину «машинно-ориентированный язык». Как бы груздь не назывался, лишь бы в кузов залезал. Просто языки ассемблера имеют характерный вид и поэтому что-то похожее тоже можно назвать ассемблером :) Тот же Форт больше похож на ассемблер, чем на что-то алголо-подобное.✅ 2022/12/03 22:30, Gudleifr #20
Дональд Кнут в своих трудах описывал алгоритмы на своём собственном выдуманном ассемблере. То есть системы команд у него не было, а язык ассемблера был Это неверно, сначала он описал гипотетическую машину MIX 1009. «обобщённый ассемблер»... Наверно, близко по смыслу термину «машинно-ориентированный язык» С точностью до наоборот.✅ 2022/12/03 23:10, Автор сайта #21
Гипотетической была не только машина, но и команды были такие же. Какой двоичный код у команда «загрузить значение из памяти в регистр»? Какая длина у этой команды? У виртуальной машины JVM команды имеют такие характеристики, а у гипотетической MIX 1009 нет. У Кнута была умозрительная машина с такими же умозрительными регистрами, командами и языком ассемблера.✅ 2022/12/03 23:30, Gudleifr #22
Какой двоичный код у команда «загрузить значение из памяти в регистр»? Какая длина у этой команды? Коды — от 08 до 23. Длина — 5 "байтов" и знак.✅ 2022/12/04 09:05, kt #23
Более того, у системы команд x86 два основных ассемблера (синтаксиса) Не противоречитесли вы знаете команды, запомнить несколько правил их записи не представляет труда. Ну так для этого вполне сгодится сторонний дизассемблер. чтобы использовать дисассемблер все равно нужно знать команды — т.е. с моей точки зрения знать ассемблер✅ 2022/12/04 10:55, Автор сайта #24
GudleifrКоды — от 08 до 23. Длина — 5 "байтов" и знак. Не может быть! Там даже размер байта был приблизительный: «6 и более битов». А флаг результата сравнения представлял из себя не бит, а трит — один разряд в троичной системе счисления. Так что там всё было умозрительным, даже одновременное сочетание двоичной и троичной системы счисления.
Но мы отклонились от темы, да и обсуждение превращается в спор «кто кого».
ktчтобы использовать дисассемблер все равно нужно знать команды — т.е. с моей точки зрения знать ассемблер Так ведь вопрос так и не ставился — знать язык ассемблера и машинные коды или не знать. Говорилось о том, что можно напрямую генерировать машинные коды, а не текст на языке ассемблера, чтобы потом полученный текст скормить самому ассемблеру и получить двоичный код. С этой точки зрения транслятор ассемблера не является необходимым, чтобы получить двоичный код из программы на ЯВУ.
voidКажется, в ЭВМ "Наири" микрокод (автокод) и далее ассемблер был даже армянским, а не русским. Нет, именно были именно русские аббревиатуры.На мой вгзляд, высокоуровневость языка определяется именно способом типизации выражений, а вовсе не синтаксисом. То есть высокоуровневым можно назвать тот язык, который "абстрагирует от несущественного" (например, синтаксиса). То есть в котором при вычислении выражения все элементарные значения и их элементарные типы являются first-class objects А на мой взгляд высокоуровневость определяется полиморфизмом, степенью повторного использования кода. Описал, к примеру, новый тип данных с присущими ему операциями — и объекты этого типа сразу могут быть элементами коллекций, в том числе упорядоченных коллекций. Если для этого типа данных определена операция сравнения «<=», то данные этого типа можно сортировать. Способ же типизации лишь определяет, на каком этапе станет известен тип объекта — на этапе компиляции или же исполнения. «Несущественными деталями» можно считать регистры, флаги. Но при генерации кода эти детали становятся существенными. Можно сделать управление памятью автоматическим и посчитать это повышением уровня языка, так как скрыли ещё одну деталь. Но в некоторых случаях это равносильно одеванию смирительной рубашки: руки теперь связаны.
А вот насчёт first-class objects возражений нет.Хотя OMF формат удалось приспособить для поддержки 64-битного кода, я подозреваю, что дальнейшее развитие компилятора и тулчейна ограничено именно старым линкером.
В PL/I-KT, возможно, ровно такие же проблемы могут возникнуть при достаточно больших программах (впрочем, без метапрограммирования в стиле CTFE этого достигнуть значительно сложнее). Если уважаемый Дмитрий Караваев когда-нибудь соберётся делать порт PL/I-KT под Linux, например, то линкер придётся довольно значительно переписывать для кодогенерации ELF формата exe и .so библиотек. Лучше всего, если это прокомментирует Дмитрий Юрьевич.Идея универсалього ассемблера или универсального промежуточного представления хороша тем, что поволит экономить на генерации кода под конкретную платформу. Здесь возникает вопрос: а насколько хорошо оптимизировать код позволяет это самое универсальное промежуточное представление? При использовании Эпсилон потери были приблизительно 20%.В LLVM и QBE (а также компиляторе А. Недори) используется представление SSA. Алексей Недоря на днях анонсировал свой язык, можно будет поинтересоваться, будет ли там использовано представление SSA. Ведь он собрался делать кроссплатформенную экосистему.✅ 2022/12/04 12:37, Gudleifr #25
Идея универсалього ассемблера или универсального промежуточного представления хороша тем, что позволит ... попил бабла на том, что очень легко сделать. Причем, этот попил будет повторяться для каждой реальной машины. А все расходы по переводу ЯВУ в убогое промежуточное представление понесет пользователь.✅ 2022/12/04 13:22, kt #26
когда-нибудь соберётся делать порт PL/I-KT под Linux, например, то линкер придётся довольно значительно переписывать для кодогенерации ELF формата exe и .so библиотек. Как раз этот этап видится простым и упирается пока в отсутствие рабочего места с требуемой версией linux (т.е. жду, пока мне такое место не поднесут на блюдечке). Дело в том, что был этап с 1995 по 2003, когда работали под ДОС, но уже в 32 разрядном режиме. И в 2004 появился дополнительный модуль WPE (т.е. Windows PE), который после Link брал старый EXE (с 32-х разрядными командами) и преобразовывал его в PE-формат. Это несложно, поскольку коды уже по сути готовы. Для Linux потребуется отдельный модуль ELF, который из нашего EXE сделает ELF. PE и ELF — одного класса форматы, по возможностям очень похожи. Таким образом, Link вообще не дорабатывается. Правда, есть одна заморочка в LINK — объем кодов команд не должен превышать 16 Мбайт в файле. Но, учитывая, что наша основная программа за 30 лет развития не превысила 1,5 Мбайта команд, это не сильное ограничение. Переход с 32 на 64 потребовал незначительной доработки модуля WPE и существенной доработки компилятора и ассемблера. написать пробный макетный helloworld под UEFI на PL-I/KT и по необходимости минималистично доработать компилятор и тулчейн, чтобы этот пример можно было запустить. Увы, на исследовательские вещи совершенно нет времени сейчас. Как говорится "не до грибов". Мы не успеваем справляться с задачами по текущим работам, в том числе, исправлять ошибки компилятора. Например, на прошлой недели один из пользователей написал оператор вывода, число форматов в котором превысило 255, и компилятор позорно рухнул. Мне кажется, на PL/I вполне можно разрабатывать целые операционные системы bare bones — непосредственно "на голом железе". Мне тоже кажется, что это возможно, учитывая, например, что есть особенность генерации произвольных кодов. В программе на PL/1 пишешь, например, UNSPEC('E688'b4); и это означает в x86 команду обращения к порту 88: OUT 88H,AL✅ 2022/12/04 13:33, Gudleifr #27
Мне кажется, на PL/I вполне можно разрабатывать целые операционные системы bare bones — непосредственно "на голом железе" Нет, в силу неудобоваримости решения на нем двух "ассемблерных" (или же ОС-писательных) вопросов: ... язык ассемблера должен наглядно описывать команды и структуры машинного языка... ... язык ассемблера должен быть способным создавать наглядные описания интерфейсов к используемым ОС. ✅ 2022/12/04 21:47, Автор сайта #28
Мы не успеваем ... исправлять ошибки компилятора. Например, на прошлой недели один из пользователей написал оператор вывода, число форматов в котором превысило 255, и компилятор позорно рухнул. Сочувствую. Представляю Вашу досаду. Но раз не стесняетесь признавать ошибки, значит уверены в себе.✅ 2022/12/05 09:35, kt #29
При этом пользователь заявил, что просмотрел всю таблицу ошибок при компиляции и такой не нашел. И действительно есть небольшая проблема отличия ошибок при компиляции от ошибок самого компилятора))✅ 2022/12/06 02:13, void #30
А на мой взгляд высокоуровневость определяется полиморфизмом, степенью повторного использования кода. Описал, к примеру, новый тип данных с присущими ему операциями — и объекты этого типа сразу могут быть элементами коллекций, в том числе упорядоченных коллекций. Если для этого типа данных определена операция сравнения «<=», то данные этого типа можно сортировать. Способ же типизации лишь определяет, на каком этапе станет известен тип объекта — на этапе компиляции или же исполнения. «Несущественными деталями» можно считать регистры, флаги. Но при генерации кода эти детали становятся существенными. Можно сделать управление памятью автоматическим и посчитать это повышением уровня языка, так как скрыли ещё одну деталь. Но в некоторых случаях это равносильно одеванию смирительной рубашки: руки теперь связаны. Например, если взять условный псевдокод фыва<-X1+X2 Здесь, если фыва — не название регистра, а переменная то получится две инструкции MOV RAX,z; MOV [фыва],RAX К тому же, нужно догадаться какого размера переменные и промежуточный регистр. Если z := X1+X2 — не переменная, а константа, которую можно посчитать во время компиляции, то есть X1 и X2 — статически типизированы и z соответственно тоже, и их типы можно целиком посчитать во время компиляции. С другой стороны,y := X1+W где W — переменная динамического типа (например, объект с полиморфизмом) — этот y нельзя посчитать статически, y будет динамического типа. К тому же, здесь + тоже будет по сути полиморфным вызовом метода "+". Типы этой numeric tower не обязательно образуют иерархию, так что полиморфизм там несколько сложнее. Ближе к полиморфизму высшего порядка в каком-нибудь Хаскеле (с нормальной системой типов времени компиляции).
Смысл нормальной высокоуровневой системы типов, с нормальным полиморфизмом времени компиляции — в том, чтобы догадаться можно было в идеале, именно во время компиляции, то есть CTFE — а не динамически во время выполнения.«Несущественными деталями» можно считать регистры, флаги. Но при генерации кода эти детали становятся существенными. Можно сделать управление памятью автоматическим и посчитать это повышением уровня языка, так как скрыли ещё одну деталь. Но в некоторых случаях это равносильно одеванию смирительной рубашки: руки теперь связаны. Чем же отличается "высокоуровневый" и "низкоуровневый" язык (или представления)? Чтобы сгенерировать эффективный код, нужно знать:- размер
- статическая или динамическая типизация
- полиморфизм времени компиляции или времени выполнения
Синтаксис не так важен, но может помочь подсказать эти моменты.Язык — это совокупность алфавита, синтаксических и семантических правил. Если есть какое-то уникальное сочетание перечисленного, которое отличается от других, то это и есть язык. Значит язык ассемблера вполне себе существует. Более того, у системы команд x86 два основных ассемблера (синтаксиса), в Вашем ассемблере принят за стандарт синтаксис Intel. Есть ещё синтаксис AT&T. Эти синтаксисы отличаются порядком следования аргументов. В AT&T ещё указывается размер операндов. Не знаю насколько справедлива байка о том, что AT&T синтаксис получился как хак предварительной оптимизации. Потому что Брайан Керниган написал ассемблер на AWK, и этот синтаксический шум ($123 или %reg или просто 123) использовался для упрощения написания ассемблера (и однопроходной генерации).
Сейчас быстро находится только такая вот реализация ассемблера на AWK:https://doc.cat-v.org/henry_spencer/amazing_awk_assembler/ "Amazing AWK assembler" by Henry Spencer."aaa" (the Amazing Awk Assembler) is a primitive assembler written entirely in awk and sed. It was done for fun, to establish whether it was possible. It is; it works. It's quite slow, the input syntax is eccentric and rather restricted, and error-checking is virtually nonexistent, but it does work. По слухам, у Брайана Кернигана было тоже самое. Потом эта предварительная оптимизация, которая корень всего зла — отразилась в синтаксисе ($123 или %reg или просто 123)
Вообще любопытно, откуда возникают такие мифы и анекдоты. Например, "Unix Way" про то, что "лучше делать много простых программ, связанных простыми текстовыми интерфейсами через пайпы — чем монолитные непрозрачные комбайны". Мне кажется, это напрямую взялось из troff. Если посмотреть на структуру "офисного пакета" :))) troff для генерации PS/PDF/и прочих форматов электронной бумаги, то здесь мы видим отдельными утилитами: grap, pic, tbl, ну и "compiler driver" их запускающий — собственно troff.
Потом этот подход напрямую перекочевал в структуру компилятора gcc: gcc как запускалка — "compiler driver" для выбора нужной реализации через machine triplet, к тому же для разных языков может быть разная реализация. Потом выясняется что неявно gcc рассчитывает, что в системе будет "дешевый" запуск новых процессов, например, через fork и copy-on-write.
И реализация отдельными утилитами, связанными через пайпы в отличие от своего велосипеда"компилятор как библиотека" в том же Watcom/OpenWatcom всё-таки хуже — сложнее переносима.Да нет же. Ассемблеры могут отличаться синтаксисом (см. выше). А ещё в языке ассемблера есть макросы, зная систему команд, не имеешь автоматического знания языка макросов. и язык макросов может быть либо примитивным, подставляя лексемы как текст — и не имея никакой информации о типизации макросов, или более полноценным (и тогда вопрос, а почему бы для него, языка макросов, и не брать сразу нормально типизированный высокоуровневый язык?) Вообще, два отдельных вопроса здесь — необходимая (и достаточная) гибкость языков, и необходимая гибкость тулчейна для их реализации.
По сути, одно из преимуществ линкера ld/gold в gcc тулчейне — это возможность задавать свои "linker scripts". На OSdev много примеров где это используется для разработки ядра ОС, а вот ещё один полезный пример. Например, "actually portable executables" by Justine Tunney : http://justine.lol/ape.html. Написаны вообще в полиглотном стиле — это quine многоязычная программа, составленная из нескольких языков (подобранных так, чтобы "запускалось везде").
Что здесь реализует ape.lds https://github.com/jart/cosmopolitan/blob/master/ape/ape.lds? Скрипты линкера. Если не считать комментариев, язык скриптов линкера активно использует макросы в духе Си и различные секции исполняемого файла (написанные в универсальном, полиглотном стиле под несколько операционных систем сразу).
В итоге вот — имеем любопытный хак, создающий технологию "воистину переносимых исполняемых файлов" — а не как в Яве: Write once, run debug and test everywhere. Не в последнюю очередь, такой хак стал возможным из-за гибкости языка "linker script" в ld/gold линкерах из GCC тулчейна.
Здесь возникает другой вопрос: а почему бы линкер, позволяющий эдакие скрипты линкера, языки расширения, не написать сразу на высокоуровневом языке (вроде Лиспа или Форта, ну или на худой конец — том же "actually portable" awk http://justine.lol/awk/)?
По ссылке отсюда https://www.plantation-productions.com/Webster/RollYourOwn/index.html на книгу P.D. Terry, новая версия на С++ https://web.archive.org/web/20051231233910/http://www.scifac.ru.ac.za/compilers/ или https://web.archive.org/web/20051118125547/http://www.scifac.ru.ac.za/cspt/compbook.htm. Там в главе 6 пишут ассемблер, а в приложении D — макроассемблер. Пишут на "компиляторе компиляторов" CoCo/R. Исходники на Модуле-2, на мой взгляд, более понятны и наглядны, чем на С++.
В книге "Linkers and Loaders" by John R. Levine https://freecomputerbooks.com/Linkers-and-Loaders.html, кстати, линкер пишут для наглядности вообще на Perl. А в книге "Assemblers And Loaders" by David Salomon https://www.davidsalomon.name/assem.advertis/AssemAd.html https://www.davidsalomon.name/assem.advertis/asl.pdf "высокоуровневым ассемблерам" посвящена отдельная глава: 6.1 High-Level Assemblers. Пример кода на PL360:A program written in PL360 superficially resembles an Algol 60 program. It consists of statements, not instructions. It has the same control structures and block structure. Even variable declarations are very similar. However, on a closer look, 7one can easily see the common use of machine registers and of machine instructions. Some simple examples are shown in Fig. 6.1 below: begin short integer z; //A short integer is 16 bits (halfword) array 1000 real quant,price; //Two arrays, 100 f-p values each. integer n; //A 32-bit variable (fullword). array 132 byte line; //An array of 132 bytes. integer B syn line(R1); //B is another name for the element //of array line pointed to by R1 long real x,y,h; //64-bit (doubleword) f.p. variables. F0=quant(R1)*price(R1); //R1 is used as an index. R9:=R8 and R7 shll 8 or R6; //Left to right execution (see below). F23:=F67++h; //F23, F67 are pairs of f.p. registers, //for operations on long reals. if R0<10 then R1:=1 else SET(flags(2)); //The SET function is identical //to the SET machine instruction. while R1<0 do begin R0:=R0+1; F01:=F01*F01 end; for R2:=R1 step 4 until R0 do begin F23:=quant(R2)*price(R2); F01:=F01+F23; end; end; Figure 6.1
Это всё-таки ассемблер, хоть и алгол высокоуровневый. Потому что для R (регистры), F(floats), и переменных — допустимы разные операции, то есть вычисление выражений всё ещё остаётся низкоуровневым, а не first class objects CTFE (макро|мета)языка. Кстати, там ещё интересна глава 6.3✅ 2022/12/06 02:21, void #31
Кстати, там ещё интересна глава 6.3 про мета-ассемблеры:6.3 Meta Assemblers
A Meta-Assembler (MA), sometimes also called a universal assembler, is an assembler that can assemble code for a number of different computers. A conventional assembler can only handle source and object code for one computer; it is dedicated to that computer. In contrast, a MA running on computer K may be able to assemble code for computers K,L,M and others. A MA is therefore also an example of a cross assembler.
There are two types of MAs, restricted and general; and there are two ways to design a MA, it can be generative or adaptive. A restricted MA can only assemble code for a limited number of computers, normally the members of a computer family. Information about the instruction sets is built into the MA so it only has to be given the name of a computer, followed by the source file. A general MA can, in principle, handle code for any computer. It does not have any instruction set built-in, and has to be handed over, with each source file, a complete description of the source & object instructions.
A generative MA (which can be either restricted or general) is given either the name of a computer or a description of an instruction set, and generates a dedicated assembler. That assembler is then run in the usual way, translating source files into object files.
An adaptive MA (again, restricted or general) is given either the name of a computer or a description of an instruction set, followed by a source file. It then assembles the source and generates an object file. Это вообще отдельный разговор про то — насколько расширяемый макроязык должен быть у такого "универсального ассемблера". Но вот что по сути тут происходит — возникают сами собой несколько малых языков, недоязычков, макроязычков:- язык программирования
- макросы в языке программирования — на уровне лексем либо более прозрачно расширяемой системы типов
- ассемблер
- макроассемблер
- линкер
- скрипты линкера — чуть не сказал, "макролинкера"
Возникает вопрос: а почему бы не придумать один, универсально расширяемый метаязык для всего компиляторного тулчейна? А не несколько разных, отдельных.✅ 2022/12/06 02:35, void #32
FasmG из состава ассемблера FASM — кажется и есть такой метаассемблер: для нескольких архитектур, задаваемых разными синтаксисами. В поставке есть x86, z80, 6801, JVM bytecode, .NET CLR bytecode и прочие. Можно в духе книг P.D. Terry или Дональда Кнута про MIX — задать и свой собственный.
При этом как бы мы ни сочиняли макросы на строках, чтобы реализовать там полиморфизм высшего порядка в духе тайпклассов Хаскеля, GADT из ATS или функциональных объектов, всё равно придётся написать eval , то есть, интерпретатор собственного языка. Хотя и этот метаязык компилятора компиляторов отдельных ассемблеров довольно гибкий, всё же не полностью гибкий.✅ 2022/12/06 02:46, void #33
Мне кажется, на PL/I вполне можно разрабатывать целые операционные системы bare bones — непосредственно "на голом железе" Нет, в силу неудобоваримости решения на нем двух "ассемблерных" (или же ОС-писательных) вопросов: ... язык ассемблера должен наглядно описывать команды и структуры машинного языка... ... язык ассемблера должен быть способным создавать наглядные описания интерфейсов к используемым ОС. Тем не менее, в MULTICS написали ядро ОС на PL/I. В OS/360 тоже с PL360 как-то справлялись, как и в CP/M с PL/M. Последовательно понижая "высокоуровневость" этого "высокоуровневого ассемблера". Исходники MULTICS были общедоступны на сайте MIT (по крайней мере, ранее). Откомменированы, с гиперссылками.
Фундаментальный недостаток, по первому беглому взгляду на них, состоялся в том, что уровень HAL (Hardware Abstraction Level) не был реализован вообще .Это не проблема PL/I или даже не проблема MULTICS как такового. Это проблема того, что из архитектур там было всего два мейнфрейма, и задачу переносимости как таковую даже поставить и осознать не успевали. Хотя из публикаций J.Corbato одной из причин реализации на PL/I заявляется именно переносимость, хотя там в принципе мог быть почти любой алголоподобный язык.
В дальнейшем, кстати, первоначальные разработчики одного мейнфрейма организовали мини-ЭВМ Nova. И для него написали какой-то свой форк Мультикса, более переносимый. Фундаментальным недостатком было впрочем то, что о переносимости никто тогда толком не думал. Хотя уже на PL/M в CP/M такой слой в виде BDOS и BIOS начинает появляться. Хотя ему конечно далеко до полноценного HAL в той же Windows NT.✅ 2022/12/06 03:00, void #34
ConvergePL: https://convergepl.org/about.html — язык наподобие питона с механизмом даже не макросов, а мультистадийных вычислений в духе MetaML, Template Haskell: https://convergepl.org/documentation/2.0/ctmp/. CTMP = Compile-Time Meta-Programming. Здесь стараются сделать корректно компилируемые макросы. В макросистеме есть splicing, capturing, quasi-quoting, insertion. Немного другой набор операций, чем в обычной лисповой макросистеме (quote, unquote, splice).
В дальнейшем на этом реализуются модульные макросы, с гигиеной, лексической/динамической областями видимости, интерфейсом между интерпретатором и компилятором (CEI). Реализация здесь поверх мини интерпретатора Питона — но с той же целью можно было взять и компилируемый язык, например Nim (в котором есть свои AST макросы, и компиляция трансляцией через Си). Прямо с заглавной страницы: https://convergepl.org/about.htmlDomain specific language implementation There's only so much pre-caching of results one can do. Converge allows Domain Specific Languages (DSLs) of arbitrary syntaxes to be embedded into it. Wouldn't it be fun to see how the fib function would look in an idealised assembly language that abstracts away from the specifics of a real-world processor? Normally this would involve flex, yacc, head scratching, and an implementation so fragile that it only works under a full moon. In Converge, a simple layer atop CTMP means that a 10Kb DSL implementation makes it easy to define our own personal assembly language. и далее идёт пример ARM-подобного ассемблера, довольно высокоуровневого: https://github.com/ltratt/converge/tree/master/examples/dsls/wsi_asm
определили грамматику https://github.com/ltratt/converge/blob/master/examples/dsls/wsi_asm/WSI_Asm.cv потом использовали в ex1.cv..ex4.cv✅ 2022/12/06 14:13, Gudleifr #35
Тем не менее, в MULTICS написали ядро ОС на PL/I Ну, во-первых, не ядро. Ядро там — на языке ассемблера. Во-вторых, что может лучше свидетельствовать о бесперспективности подобного писания, чем этот пример?✅ 2022/12/06 22:35, Неслучайный читатель #36
исправлять ошибки компилятора. Например, на прошлой недели один из пользователей написал оператор вывода, число форматов в котором превысило 255, и компилятор позорно рухнул. Интересно, в какой версии эта ошибка появилась? В той, которую написал глава Digital Research? Или виноваты более поздние доработки?✅ 2022/12/07 19:45, void #37
Тем не менее, в MULTICS написали ядро ОС на PL/I Ну, во-первых, не ядро. Ядро там — на языке ассемблера. Во-вторых, что может лучше свидетельствовать о бесперспективности подобного писания, чем этот пример? Нет, именно ядро на PL/I. Можете сами убедиться: сайт https://multicians.org/ , история проекта https://multicians.org/history.html , статьи и публикации на https://multicians.org/papers.html. Первая же статья от авторов F. J. Corbató, V. A. Vyssotsky "Introduction and Overview of the Multics System" https://multicians.org/fjcc1.html, где пишут Because the system must ultimately be comprehensive and able to adapt to unknown future requirements, its framework must be general, and capable of evolving with time. As brought out in the companion papers, this need for an evolutionary framework influences and contributes to much of the system design and is a major reason why most of the programming of the system will be done in the PL/I language. Because the PL/I language is largely machine-independent (e.g. data descriptions refer to logical items, not physical words), the system should also be. Specifically, it is hoped that future hardware improvements will not make system and user programs obsolete and that implementation of the entire system on other suitable computers will require only a moderate amount of additional programming. то есть: это было сознательное решение, концепция: написать ОС на языке высокого уровня, например, PL/I. К описанию ядра также относится описание режима супервизора https://multicians.org/fjcc3.html "Structure of the Multics Supervisor", где уточняют:All operating system data layouts for the initial implementation of 645 Multics will be compatible with data layouts used by PL/I, except where hardware constraints dictate otherwise. All modules of the initial implementation of the operating system will be written in PL/I, except where hardware constraints make it impossible to express the function of the module in the PL/I language. <...> Since the PL/I translator which will be used until mid-1966 generates inefficient object code, it is clear that 645 Multics in its first few months of existence will be inefficient. This penalty is being paid deliberately. After mid-1966, two courses of action will be available: upgrade the compiler to compile more efficient code, or recode selected modules by hand in machine language. We expect that both strategies will be employed, but we expect to place preponderant emphasis on upgrading the PL/I compiler; indeed, one subsequent version of PL/I is already being implemented, and a second is being designed. то есть, что эта вторая часть на машинном коде должна быть как можно более минималистичной.
Далее нужно смотреть исходники: https://multicians.org/multics-source.html и индекс https://multicians.org/source-index.html или в Github репозиториях: https://github.com/dancrossnyc/multics со снимком и по отдельным коммитам, полная история на https://gitlab.com/atsampson/multics-history-repo/-/tree/master/library_dir_dir/system_library_1 — как вам здесь https://gitlab.com/atsampson/multics-history-repo/-/commits/master — первый релиз от Nov 15, 1988 ?
Хотя это не вся история, с самого начала разработки: https://web.mit.edu/multics-history/#historyThe plan for Multics was presented to the 1965 Fall Joint Computer Conference in a series of six papers. It was a joint project with M.I.T., General Electric, and Bell Labs. Bell Labs dropped out in 1969, and in 1970 GE's computer business, including Multics, was taken over by Honeywell (now Bull).
MIT's Multics research began in 1964, led by Professor Fernando J. Corbató at MIT Project MAC, which later became the MIT Laboratory for Computer Science (LCS) and then Computer Science And Artificial Intelligence Laboratory (CSAIL). Starting in 1969, Multics was provided as a campus-wide information service by the MIT Information Processing Services organization, serving thousands of academic and administrative users.
LCS research on Multics ended in the late 1970s, and Bull ended Multics development in 1985. MIT shut down its Multics service in 1988. The last Multics system was deactivated in 2000. То есть: после исхода из этого мегапроекта Bell Labs авторы Юникс Брайан Керниган и Денис Ричи, писавшие там утилиты, например, для компилятора компиляторов, — и создали свою упрощённую поделку "Униплексированная" (а не мультиплексированная) система разделения времени, взяв вместо PL/I языки ассемблер, BCPL и B, Си, и утащив туда по пути некоторые концепции (например, кольца защиты, режим root супервизора, виртуальную память процессов), но ниасилив некоторые другие (нормальный мандатный доступ, ACL, файловые сегменты данных, например).
Откомментированные исходники и обзор по ним лежат также на https://web.mit.edu/multics-history/ и далее на http://web.mit.edu/multics-history/source/Multics_Internet_Server/Multics_sources.html Симулятор, в котором Мультикс можно запустить напоиграться есть на https://multicians.org/simulator.html Подробности на https://multics-wiki.swenson.org/index.php/Getting_Started В презентациях про "душу старой машины" https://multicians.org/simulator.html => https://multicians.org/soul-of-an-old-machine.pdf и https://multicians.org/dps8m-emulator-presentation-text.pdf Автор симулятора DPS8/M, в частности, пишет:создать симулятор тех мейнфреймов оказалось проще, чем пытаться выделить в этих исходниках переносимый уровень HAL (Hardware Abstraction Level) Не то, чтобы это было невозможно "в принципе" — просто у автора эмулятора не хватило терпения портировать эти старые исходники, да и запустить "как есть" само по себе было более важной задачей. Проблема этих исходников в другом: что при разработке ориентировались на конкретное железо конкретных мейнфреймов. И поэтому уровень HAL не выделили вообще (хотя вполне могли бы). Потому что так далеко на перспективу о мобильности операционной системы за пределы архитектуры этих двух мейнфреймов и в сторону "переносимого ассемблера высокого уровня" — никто не думал.✅ 2022/12/07 19:56, void #38
Вот тут история проекта MULTICS нарисована графически: https://multicians.org/history.html Про общую структуру исходников: https://multicians.org/flass-organick.html Про обоснование выбора PL/I в качестве системного языка для написания ОС и реализацию компилятора PL/I в MULTICS: https://multicians.org/pl1.html и https://multicians.org/pl1-raf.html✅ 2022/12/07 19:59, Gudleifr #39
Нет, именно ядро на PL/I. Посмотрите исходники. Там все, что относится к ядру — на языке ассемблера.✅ 2022/12/07 20:05, void #40
Emacs, например, там был написан на PL/I: https://github.com/dancrossnyc/multics/blob/ dc291689edf955c660e57236da694630e2217151/library_dir_dir /system_library_unbundled/source/bound_multics_emacs_.s.archive/emacs.pl1
Как по мне — так вот эти исторические сорцы на PL/I нагляднее, понятнее и лучше структурированы чем исходники современного GNU/Emacs на языке Си. Реализации встроенного в емакс лиспа и отдельного лиспа — тоже на PL/I.✅ 2022/12/07 20:08, void #41
Посмотрите исходники. Там все, что относится к ядру — на языке ассемблера. Куда именно смотреть, ткните пальцем в конкретную строчку репозитория. Загрузчик на PL/I, например. Опять же: то что такого уровня HAL не было в исходниках Мультикс изначального не означает что этот слой в принципе невозможно выделить (хотя автор симулятора DPS-8M, например, — ниасилил).✅ 2022/12/07 20:17, Gudleifr #42
Emacs, например, там был написан на PL/I: Emacs — это не ядро.✅ 2022/12/07 20:21, Gudleifr #43
Куда именно смотреть, ткните пальцем в конкретную строчку репозитория Я просто ввел MULTICS source code и выбрал первую строку. Далее смотрите на расширения файлов — pl1 или alm.✅ 2022/12/07 20:30, void #44
Вот *.alm файлы — это похоже ассемблер. Вопрос об их назначении.✅ 2022/12/07 20:34, Gudleifr #45
Вопрос об их назначении. Дык, ядро же.✅ 2022/12/07 20:34, void #46
В общем, надо брать мурзилку пошаговую https://multicians.org/sim-inst.html, устанавливать симулятор и пересобирать ядро, поглядывая в "Linux From Scratch" и BLFS и пытаясь найти аналогичные места. Нет, там в емаксе какие-то куски на alm про многозадачность и асинхронность были. Так что не везде ядро — надо отдельно разбираться, представляя всю последовательность загрузки, сборки и пересборки ядра и всех утилит системных.
Опять же, отдельный интересный вопрос: а насколько диалект языка PL/I поддерживаемый компилятором в MULTICS отличается от Subset G и возможностей PL-I/KT, например. Любопытно было бы как-то приблизительно оценить трудоёмкость портирования этих исторических сорцов под более современную реализацию PL/I.✅ 2022/12/07 20:47, Gudleifr #47
В общем, надо брать мурзилку пошаговую Зачем? Проще понять, почему это работает только для попила бабла на представление правдоподобно выглядящего макета. А причина проста: внутри у любого ЯВУ болтается "маленький хитрый кусок, завязанный на текущую ОС" и "большая смачная собственная ОС-надстройка/библиотека". При написании на ЯВУ оба эти фрагмента использовать невозможно, т.к. на момент загрузки ОС, последняя ещё не работоспособна. Поэтому придется либо пользоваться очень ограниченным подмножеством ЯВУ, либо писать для него костыли. Причем, по окончании работы окажется, что костыли удобнее стандартных процедур ЯВУ.✅ 2022/12/07 21:26, void #48
Зачем? ну например, из спортивно музейно-реконструкторского интереса.Проще понять, почему это работает только для попила бабла на представление правдоподобно выглядящего макета. А причина проста: внутри у любого ЯВУ болтается "маленький хитрый кусок, завязанный на текущую ОС" и "большая смачная собственная ОС-надстройка/библиотека". При написании на ЯВУ оба эти фрагмента использовать невозможно, т.к. на момент загрузки ОС, последняя ещё не работоспособна. Поэтому придется либо пользоваться очень ограниченным подмножеством ЯВУ, либо писать для него костыли. Причем, по окончании работы окажется, что костыли удобнее стандартных процедур ЯВУ. Переведу на понятный мне язык: вот есть в стандартах каждого ЯВУ описание языка как совокупность трёх вещей:- синтаксис и семантика базового языка
- стандартная библиотека
- модель памяти, абстрактный исполнитель
Если брать не условный Си с потенциально "нулевым рантаймом", а например Аду или ПЛ/1 (не говоря уже о Форте или Лиспе) — есть описание среды выполнения рантайм и компайлтайм. То есть: уже например форматы в PL/1 GET EDIT ... — это по сути мини-диалект языка. В Си, например, интерпретатор встроенных форматных строк в printf, scanf. В Форте — внешний и внутренний интерпретатор, связь между интерпретируемыми и компилируемыми словами. Только этот интерпретатор мини-языка либо реализован в умном трансляторе, в случае PL/1; либо в компиляторе (как например std::cout << x << y << z в С++), либо crt0/msvcrt.dll языка в рантайм библиотеке Си языка.
Шаблоны и прочие CTFE трюки потенциально должны обеспечить типобезопасность. Например, в языке Nim была презентация про AST макросы и корректный printf времени компиляции. В итоге язык программирования явно и не явно содержит зависимость на рантайм библиотеку.
При реализации ядра ОС, как видно в OSdev wiki как правило, эта рантайм библиотека специально делается минималистичной своей собственной — потому что всё остальное ядро фактически должно быть реализовано на портированной новой этой рантайм библиотеке под новое ядро ОС. Проблема курицы и яйца, ага. Ну или метакомпиляторов в духе Форта или self-bootstrapping compiler.
В случае С++ всё ещё хуже из-за непереносимости ABI. Например, в LFS book компилятор gcc, который в последних версиях переписали на С++ — пересобирают по три раза, в разной комплектации; вообще в LFS как рецепте "собери свой Линукс" по сути множество циклических зависимостей, которые, чтобы разрешить, пересобирают несколько раз по кругу.
С другой стороны, если взять язык вроде Ада. У которого в самом языке есть task, entry, task types. То есть, от рантайм поддержки реализации языка требуется портировать эти примитивы, даже если самого ядра ещё нет — bare bones standalone. Ну с той погрешностью, что прагмами можно разные фичи вроде исключений, задач — отключать, и есть уже готовые профили вроде Ravenscar, которые более отключабельно минималистичны.
Чтобы сменить рантайм языка в Ада есть отдельный ключик компилятора,"брать другой рантайм из вот этого каталога". То есть, не так уж сложно собрать например ядро тоже самое, но с другим рантаймом. И затем его полноценно портировать (только несколько рантаймов, а не весь тулчейн-велосипед по три раза).А причина проста: внутри у любого ЯВУ болтается "маленький хитрый кусок, завязанный на текущую ОС" и "большая смачная собственная ОС-надстройка/библиотека". При написании на ЯВУ оба эти фрагмента использовать невозможно, т.к. на момент загрузки ОС, последняя ещё не работоспособна. Поэтому придется либо пользоваться очень ограниченным подмножеством ЯВУ, либо писать для него костыли. То есть, эту часть как проблему курицы и яйца можно раскрутить через системный bootstrap. Вот например, хорошая подборка: https://bootstrappable.org/ и например https://reproducible-builds.org/news/2022/05/18/jan-nieuwenhuizen-on-bootrappable-builds-gnu-mes-and-gnu-guix/ про MES и Guix Stage0, https://www.gnu.org/software/mes/manual/mes.html#Stage0 и выше/ниже по тексту про M2-Planet, mescc-tools, и т.п.
На bootstrappable.org например в вебархиве https://web.archive.org/web/20221129205449/https://bootstrappable.org/ пишут примеры проектов, успешно разрешающие эту проблему "курицы и яйца", компиляторы, написанные по сути на самом себе.
Когда-то там же была ссылка про метакомпилятор Форта, но чего-то сейчас сразу не найду. Например, вот этот метакомпилятор Форта: lbForth https://github.com/larsbrinkhoff/lbForth — раскрученный из метакомпилятора на Лиспе :) В общем, этот "маленький хитрый кусок" может быть совсем маленьким.
В случае метакомпилятора он фактически написан "на самом себе", поэтому перенос под новую ОС (или ядра ОС, написанном на такой реализации через метакомпилятор) — элементарен. В случае высокоуровневого ЯВУ типа той же Ады — можно элементарно сменить рантайм на более минималистичный, при необходимости.
Хотя сам резон использования высокоуровневого языка в том и состоит, что хочется всё-таки использовать полноценно эти высокоуровневые фичи — реализованные уже на уровне самого языка, его рантайма (среды исполнения) — а не отдельных библиотек, как например в Си.
Вот смотрю я, например, на микроядро L4 и "дистрибутив" Genode Sculpt OS. И мне упорно кажется, что весь этот мандатный доступ, к системным объектам уровня ядра, который оборачивают в L4::Pistaschio через C++ и шаблоны и прочие смартпоинтеры, — это костыли и подпорки именно С++ как таковые. А при реализации той же идеи микроядра L4 на Аде, например, они становятся просто не нужны: достаточно переписать на уровне рантайма более правильную реализацию Address, или task, entry, task types, исключений.
То же самое, в какой-то степени, относится и к реализации на PL/I. Например, в PL/I была многозадачность и исключения. Которая явно используется в той же реализации Emacs на PL/I из MULTICS. И которую с грехом пополам, многозадачность и неблокирующую асинхронность наконец допортировали в GNU/Emacs на языке Си примерно к 2020 году, не раньше.
То есть все эти смачные надстройки и собственные реализации фич могут оказаться более полезны, для реализации ядра ОС — если реализованы уже непосредственно на уровне языка, его стандарта и рантайма. Их просто не нужно будет портировать — они уже будут встроены в язык, даже bare bones standalone на "голом железе".✅ 2022/12/07 21:49, Gudleifr #49
из спортивно музейно-реконструкторского интереса Вы идете, в общем-то, правильным путем. Но тут лучше сначала попробовать самому, чем сразу перейти к классификациям готовых решений. Порообуйте, например, создать загрузочную флэшку (не дающую запуститься Винде) и посмотреть, какими инструментами можно сделать её достаточно умной (ОС-образной).✅ 2022/12/07 22:51, kt #50
Неслучайный читательИнтересно, в какой версии эта ошибка появилась? В той, которую написал глава Digital Research? Или виноваты более поздние доработки? Изначально не догадались проверить EDIT на переполнение. Ограничение форматов там даже не 255, а 127, поскольку каждый формат минимум два байта: тип и размер. Превышение списка форматов приводило к закрытию очередной записи OMF и формированию следующей, чего из-за конкретной реализации EDIT делать было нельзя. А так, корни восходят ещё к PL/I-80 для 8080.
Подобные ограничения есть и в структуре, где на каждом уровне может быть только 255 членов. Но можно завести промежуточный «пустой» уровень и тогда в структуре может быть описано до 255 членов по 255 объектов каждый (а можно и ещё углУбить уровни). Кстати и EDIT можно записывать не какPUT EDIT(X1,X2,…Xn)(F1,F2,…Fn); а какPUT EDIT(X1)(F1) (X2)(F2) … (Xn)(Fn); Тогда ограничение исчезает.✅ 2022/12/08 13:32, Gudleifr #51
P.S. Когда-то там же была ссылка про метакомпилятор Форта, но чего-то сейчас сразу не найду. Зачем искать? Все, что нужно знать о Forth, лежит в одном месте. Если Вам интересно, как разворачивается Forth — https://gudleifr.forum2x2.ru/t30-topic✅ 2022/12/08 21:01, Автор сайта #52
void Вы готовы утопить в море информации. Зачем здесь столько ссылок — чтобы по ним переходили и читали? Тогда, скорее всего, наступит то, что называют параличом анализа. Когда новая информация появляется быстрее, чем обрабатывается старая. Когда изучение новой информации отодвигает результат ещё дальше, чем было до изучения. Типичный случай, когда «вкрытие показало, что смерть наступила от вскрытия».
Если бы Вы хотели позитивного результата, то отобрали бы и рекомендовали 5 — 6 вариантов. Именно столько человеческий мозг в состоянии осмыслить в приемлемые сроки и принять правильное решение. В противном случае я не понимаю Вашей логики.✅ 2022/12/09 06:55, MihalNik #53
столько человеческий мозг в состоянии осмыслить в приемлемые сроки А что есть приемлемые сроки? Например, некоторые оставляют комментарии к статьям (и другим ответам!) спустя годы написания. Некоторые статьи в принципе состоят больше из вопросов — и сами напрашиваются на весьма длинные ответы и рассуждения. А некоторые могут потребовать небыстрого прочтения и немалого обдумывания, например, статьи Д.Ю. Караваева. Так есть ли сроки вообще?
Другое дело — неудобное оформление. Я вот сейчас не уверен, что отсылки запросто можно нагуглить, особенно человеку не в теме таких довольно специфических языков, как Хаскелл, Форт, Лисп, или довольно давних исторических разработок. Но может лучше хоть так, чем совсем ничего.✅ 2023/04/13 20:22, Лис #54
За 8 прошедших лет никто (ни один человек!) не заинтересовался ни моими исходниками, ни исполняемым модулем. Я, конечно, не человек, но попробую. Прошу выложить, пожалуйста, твои исходники под открытой общедоступной всем разумным лицензией.✅ 2023/04/14 09:39, kiv(jobless) #55
История зациклилась как ей и предписано.С машиной поставлялся автокод АРМУ (Автокод Ряда Машин Урал), который был единым автокодом ряда ЭВМ типа “Урал”. Он был составлен с учетом особенностей этих машин и обеспечивал полную совместимость от меньшей машины к большей. Каждая ЭВМ “Урал” имела собственный транслятор с языка АРМУ на свой машинный язык. Таким образом, совместимость ЭВМ типа “Урал” была ограниченной и существовала только на уровне автокода АРМУ. https://computer-museum.ru/histussr/ural11.htm
P.S. Первая программа, которой кто-то кроме меня пользовался, была написана 40 лет назад как раз для Урал-11. Это мой комментарий: https://habr.com/ru/articles/722532/comments/#comment_25328792✅ 2023/04/15 13:52, Автор сайта #56
Вы пытаетесь занять меня работой, которой я пока что не собирался заниматься: изучать виды лицензий, сравнивать, выбирать, потом куда-то выкладывать — а это опять изучать и выбирать.
От исходников проку никакого, ведь продолжать разработку никто не будет. В этой разработке больше всего я ценю синтаксис. Всё остальное «тупо кодируется», ничего уникального там нет. Но синтаксис не защищается авторским правом, поэтому пользоваться этим можно без оглядки на законы. Так что для начала можно познакомиться, а если что-то показалось нужным, вот тогда и вернуться к вопросу о лицензиях. Ссылка для скачивания: https://disk.yandex.ru/d/qhBKuW4xcvgu9g
Недавно обнаружил один проект на тему ассемблера (https://github.com/langprogramming-AsmX/AsmX). После небольшого общения с автором выяснилось, 1) что программирование на русском его вообще не интересует, 2) что «удобно», «понятно» и «просто» выглядят для нас совершенно по-разному, если не сказать, что противоположно.✅ 2023/04/15 15:46, Денис Будяк #57
Соглашусь с Лисом. Лицензия нужна. Разница в том, что либо Вы работаете в корзину, либо приносите пользу другим людям. Я понимаю, что многим это всё равно, но тем не менее разница именно такая.✅ 2023/04/15 15:58, Лис #58
Юрий всё правильно написал про время и текущие интересы. Конечно, хорошо было бы лицензию сделать, но мы не можем к этому принуждать именно Юрия.
Я хотел поспособствовать Евгению в ответе на его вопрос о том, есть ли какой-нибудь синтаксис ассемблера. Юрий помог в решении этого вопроса. Верно, что исходники дорабатывать никто не будет. Тема на лисофоруме — http://plana.mybb.ru/viewtopic.php?id=2058
Пока этого достаточно, я так думаю.✅ 2023/04/15 16:19, Автор сайта #59
Мне всё равно, под какой лицензией это будет. Уже был подобный случай, можно повторить. Но если надо «по-взрослому», то будьте добры, изложите мне кратко суть самых подходящих лицензий, чтобы я ткнул пальцем в одну из них. И заодно объясните, насколько вписываются зарубежные лицензии в наше правовое поле.✅ 2023/04/16 00:17, Бурановский дедушка #60
В изобретении ассемблеров одиночества нет: https://habr.com/ru/users/VitGo/posts/✅ 2024/08/12 22:47, Автор сайта #61
Перенесено отсюда:а выхлоп этого «отечественного аналога LLVM» под архитектуру x86 будет на каком языке? Сразу в машинном коде? С одной стороны, если сразу в машинный код, то это и быстрее, и компилятор проще. Но в целях отладки всё-таки лучше с промежуточным этапом — текстом на ассемблере.Как находить в сгенерированном коде такие ошибки? Разработчики компилятора должны это наизусть заучивать? Чтобы разработчик компилятора из своего языка не мучился с такими проблемами, ему лучше компилировать в аналог LLVM. А вот разработчик этого аналога должен вовсю постараться, чтобы не было путаницы между «shr» и «sar». Он должен сделать работу качественно.вы сами предлагали... обозначать машинные операции не сокращениями из букв, а символами Если бы я это делал заново, то и сейчас поступил так же, хотелось языку ассемблера привить какие-то черты от ЯВУ. Вспомнил некоторые черты языка ассемблера, который разрабатывал Е.А Зуев. Что-то оттуда взял. Но у «паскалиста» Зуева ассемблер получился не такой, как у меня, «сишника».
Но я говорил о невостребованности русского ассемблера не просто так. Никто за 10 лет не поинтересовался моим ассемблером. А русификатор Си скачивали более 1600 раз.
В отечественном LLVM я первый был бы заинтересован, если бы он был качественный. Это ж сколько головной боли он бы снимал. Между прочим, у нас хорошая отечественная школа в этой области. Были в прошлом проекты языков Эпсилон и Сигма, своего рода «ассемблеры высокого уровня».будет посвящена новая статья Не томите :)✅ 2024/08/14 14:50, Иван #62
Вспомнил некоторые черты языка ассемблера, который разрабатывал Е.А Зуев. Что-то оттуда взял. Но у «паскалиста» Зуева ассемблер получился не такой, как у меня, «сишника». Можете дать ссылки на эти ассемблеры? Код? Только описание? Дайте ссылки пожалуйста, в поисковике не нашел.✅ 2024/08/14 17:12, Автор сайта #63
Перед работой над своим ассемблером интересовался у Евгения Александровича Зуева:Однажды я встретил Ваши материалы, описывающие Вашу давнюю разработку — язык ассемблера какого-то процессора. Где я это видел — на сайте или в блоге — уже не помню, но ссылку, к сожалению, не сохранил. Не могли бы Вы подсказать ссылку, где это можно найти? Его ответ:Скорее всего, Вы видели текст о языке ассемблера у меня на сайте. Адрес: eugene.zouev.name. Слева в колонке ищите слова ONBASS/ERRIC. К сожалению, его сайт больше не работает, а интернет-архив делал копию этого сайта единственный раз и эта копия недоступна: «403 Forbidden. Request forbidden by administrative rules».
Мне запомнились следующие различия между его ассемблером и своим: у меня «=», «+», «-», «*» и «/», а у него «:=», «+=», «-=», «*=» и «/=». Если доберётесь до этого сайта, то пришлите, пожалуйста, копию статьи мне. Есть ещё один вариант: ещё раз попросить дать ссылку на его работу, если он разместил свой сайт в другом месте: eugene.zueff(друг человека)gmail.com.✅ 2024/08/14 21:56, Иван #64
Если доберётесь до этого сайта, то пришлите, пожалуйста, копию статьи мне. Так сразу не найдешь. Ну да ладно, скачал ваш, там пример есть как это выглядит наглядно. Подключение библиотек на английском, нужно кроме ассемблера ещё компоновщик делать:; файл text2.asm .386P ; плоская модель .MODEL FLAT, stdcall ;------------------------------------------------------------ include myprg.inc ; директивы компоновщику для подключения библиотек includelib d:\masm32\lib\user32.lib includelib d:\masm32\lib\kernel32.lib includelib d:\masm32\lib\gdi32.lib
; сегмент данных ((- ДАННЫЕ НАЧАЛО NEWHWND _32 0 MSG MSGSTRUCT ?? WC WNDCLASS ?? Вообще, идеально раскрутку сделать, код компилятора русского ассемблера на русском ассемблере. На Linux, наверное, будет проще, можно обойтись прерываниями, не используя библиотеки.✅ 2024/08/14 22:10, Вежливый Лис #65
идеально раскрутку сделать, код компилятора русского ассемблера на русском ассемблере. Это я им уже писал: http://plana.mybb.ru/viewtopic.php?pid=4661#p4661Предлагается раскрутка начиная с машинного дампа и байткода через промежуточные уровни На Linux, наверное, будет проще, можно обойтись прерываниями Системными вызовами, точнее. Это я им тоже писал: http://plana.mybb.ru/viewtopic.php?id=1960#p89050x0f 0x05 // syscall # invoke operating system to do the write ✅ 2024/08/14 23:37, Автор сайта #66
Подключение библиотек на английском Да, русификация там частичная.✅ 2024/08/15 00:02, Иван #67
Можно начать с чего-то такого:OUTPUT_ARCH("i386:x86-64") OUTPUT_FORMAT("binary") /* elf64-x86-64 */ ENTRY(entry_point)
/* PHDRS { READONLY PT_LOAD FILEHDR PHDRS; REAWRITE PT_LOAD; } */
/* MEMORY { code(rx) : ORIGIN = 0x11000, LENGTH = 0x1000 } */
/*phys = 0x12000;*/
SECTIONS { /*.data phys : AT(phys){ */ .data : { *(header) *(pht) *(sht) *(.data) /* _edata = .; */ } . = ALIGN(0x1000); .text : { *(.text) *(.rodata) } /*> code */ }
.code64
.global entry_point
vaddr = 0x010000 /*- .text */ ventry = vaddr + entry_point - .text /* entry_point */ vmsg = vaddr + msg - .text
.section header magic: .byte 0x7f /* magic */ .ascii "ELF" /* magic */ .byte 0x02 /* EI_CLASS bits: 64-bits */ .byte 0x01 /* endianess: little endian */ .byte 0x01 /* elf_header_version: */ .byte 0x00 /* os_abi: System V ABI */ .quad 0 /* padding: unused */ .word 0x0002 /* file_type: 2 - executable */ .word 0x003e /* instruction_set: x86-64 */ .long 0x00000001 /* elf_version: */ .quad ventry /* entry_point /* entry_point */ .quad program_header_table
.ifdef section_header_table .quad section_header_table .else .quad 0 .endif
/*.quad section_header_table */ .long 0 /* flags */ .word size_of_header /* size of this header */ /*header_size: .byte 0x40,00*/ /* size of this header */ size_of_entry_in_program_header_table: .word 0x0038 number_of_entries_in_pht: .word 0x0001 size_of_entry_in_section_header_table: .word 0x0000 /* 0x40,00 */ number_of_entries_in_sht: .word 0x0000 /* byte 0x01,00 */ index_of_section_of_names: .word 0x0000 /* .byte 0x00,00 */ size_of_header = .
.section pht program_header_table:
/* first record */ .long 0x1 /* type of segment: 1 - LOAD */ .long 0x5 /* flags: 1 - executable, 2 - writable, 4 - readable */ .quad .text /* entry_point /* offset in file */ .quad ventry /* entry_point /*p_vaddr */ .quad ventry /* entry_point /* undefined by System V ABI */ /* .quad 0x0 undefined by System V ABI */ .quad size_of_text_section /* 0x40 size of segment in the file(p_filesz) */ .quad size_of_text_section /* 0x40 size of segment in the memory(p_memsz) */ .quad 0x10 /* alignment of this section 0x20 */ .section sht section_header_table:
.text
entry_point: // print message
mov $len, %edx mov $vmsg, %ecx mov $1, %rbx mov $4, %rax /* print command */ int $0x80
// print2 message mov $len, %rdx mov $vmsg, %rsi mov $1, %rdi mov $1, %rax syscall
/* exit code */ .word 0x3c6a, 0x3158, 0x0fff, 0x0005
size_of_text_section = . - .text
msg: .asciz "Hello message\n" len = . - msg
.word 0xbaba, 0xcaca .word 0xbaba, 0xcaca .word 0xbaba, 0xcaca .word 0xbaba, 0xcaca .word 0xbaba, 0xcaca .word 0xbaba, 0xcaca ✅ 2024/08/15 09:03, Gudleifr #68
Можно начать с чего-то такого: Конечно, нет. Этот кусок, вообще, не нужен в виде ассемблерного источника, он генерируется связывающим загрузчиком (link).✅ 2024/08/15 13:41, veector #69
Этот кусок, вообще, не нужен в виде ассемблерного источника Нужен, чтобы я мог его изменить под свои нужды.✅ 2024/08/15 13:52, Gudleifr #70
Нужен, чтобы я мог его изменить под свои нужды Ваши нужды и написание русскоязычного ассемблера — это разные вещи.✅ 2024/08/15 14:00, Иван #71
До компоновщика тут ещё очень далеко. Конечно далеко — вы ж не приближаете этот момент. На данном этапе делается минимальный ассемблер который производит объектные файлы, тот код который я давал — это 2 файла, один для ld, другой для ассемблера. На данный момент это компилируется.✅ 2024/08/15 14:05, Gudleifr #72
На данном этапе делается минимальный ассемблер который производит объектные файлы Он тоже не нужен.✅ 2024/08/15 14:13, Вежливый Лис #73
тот код который я давал — это 2 файла, один для ld, другой для ассемблера. На данный момент это компилируется. А тот код, который я давал — это один файл, для ассемблера. И он компилируется в бинарник, который запускается без линковки.
Я не спорю с тем, что линковщик нужен. Но он нужен для больших проектов, а не для бутстрапа.✅ 2024/08/15 14:19, Иван #74
Я не спорю с тем, что линковщик нужен. Но он нужен для больших проектов, а не для бутстрапа. В дальнейшем нужно будет как-то управлятся с секциями. Почему бы это сразу не включить в ассемблер и не попробывать поиграться с русскими названиями секций? Конечно, можно проще, но я хочу попробывать так.✅ 2024/08/15 14:23, Вежливый Лис #75
Почему бы это сразу не включить в ассемблер Потому что бутстрап состоит из шагов, сначала более простых, потом более сложных. В первую очередь надо делать более простые. Перескакивая заранее на более сложные, вы отдаляете успех.
Для бешеной собаки, конечно, 40 километров не крюк. Сам так делаю (изучаю систему типов вместо написания ассемблера).❔ 2024/08/15 14:28, Иван #76
Потому что бутстрап состоит из шагов, сначала более простых, потом более сложных. В первую очередь надо делать более простые. А с секцией .text вам нужно справиться в начале?✅ 2024/08/15 14:30, Вежливый Лис #77
А с секцией .text вам нужно справиться в начале? Нет. Посмотрите мой код, там текст выводится. И лежит он вместе с кодом в памяти без всяких секций, потому что секция — это терминология линковщика. А линковщик не обязателен.
А вам придётся сначала усечённый линковщик написать. В принципе, тоже полезное дело, но сами понимаете.✅ 2024/08/15 14:43, Иван #78
А вам придётся сначала усечённый линковщик написать. В том то и дело, хотел использовать уже готовый ld, а не писать заново сначала.✅ 2024/08/15 14:45, Вежливый Лис #79
хотел использовать уже готовый ld А чего сразу не компилятор Java целиком с JVM? Линковщик-то никто не напишет.✅ 2024/08/15 15:01, Иван #80
Линковщик-то никто не напишет. А как осуществлять взаимодействие с объектными файлами, статическими и динамическими библиотеками, как использовать уже готовый код? Может я чего-то не понимаю, скиньте ссылку почитаю.✅ 2024/08/15 15:05, Вежливый Лис #81
как использовать уже готовый код? При написании конкретно ассемблера вам не нужен готовый код. Читать и писать вы можете через системные вызовы, а командная строка дана в памяти процесса при запуске (по спецификации).
Никак его не надо использовать. Вот сначала будет готовый ассемблер, потом на нём всё остальное, включая линковщик.✅ 2024/08/15 15:08, Иван #82
Вежливый Лис, у вас уже есть готовый ассемблер, урезанный?✅ 2024/08/15 15:28, Вежливый Лис #83
Молчу, молчу. Нету. Если бы был, уже бы по всему рунету это было известно, если даже «Сказочную колесницу» (маленький проект) распиарили.✅ 2024/08/15 16:06, Иван #84
Если бы был, уже бы по всему рунету это было известно, если даже «Сказочную колесницу» (маленький проект) распиарили. Конечно, и вы пробуйте свои силы, все в ваших руках. Тем более у вас опыт.✅ 2024/08/15 16:10, Вежливый Лис #85
Тем более у вас опыт. У меня не в том опыт, я по специальности (по диплому) стратег✅ 2024/08/15 16:18, Иван #86
У меня не в том опыт, я по специальности (по диплому) стратег Хорошо, вопрос вам как специалисту: Как будем завоевывать территорию занятую англоязыкным софтом? Закрыться за забориком и придумать что-то эдакое, а потом как шандарахнуть (будет ли это, это не точно, может в очень отдаленной перспективе) или проникать на территорию постепенно?✅ 2024/08/15 16:38, Вежливый Лис #87
Продолжение там: http://plana.mybb.ru/viewtopic.php?id=2259#p10242✅ 2024/08/15 18:16, Иван #88
О технической стороне вопроса — взаимодействовать с уже готовым кодом нужно и необходимо, чтобы занять территорию.✅ 2024/08/15 18:28, Вежливый Лис #89
взаимодействовать с уже готовым кодом нужно и необходимо чтобы занять территорию Для этого есть стандарты. Например стандарт на линковку. Вот когда будете писать линкер на кириллице, тогда и обеспечите соответствие этому стандарту для того, чтобы продавать ваш линкер в чужие страны.
Я ж говорю, хотите делать линкер — делайте. Но он пропадёт, как все остальные компиляторы написанные на иностранных инструментах.✅ 2024/08/15 18:49, Иван #90
продавать ваш линкер в чужие страны. Я сомневаюсь в том, что на линкере можно напрямую заработать.✅ 2024/08/15 19:17, Иван #91
https://otus.ru/nest/post/670/ Линковка в Java VM После загрузки класса в Java VM наступает этап линковки, и делится он на 3 части: 1. Верификация байт-кода. Статический анализ кода, выполняемый один раз для класса. Происходит проверка ошибок в байт-коде. Например, проверяется корректность инструкций, переполнение стека и совместимость типов переменных. 2. Выделение памяти под статические поля с последующей их инициализацией. 3. Разрешение символьных ссылок — Java VM подставляет ссылки на другие классы, поля и методы.
Вежливый Лис, вы уже можете создать некоммерческую организацию сами и использовать труд фрилансеров (площадки уже есть). Не понимаю только пока какой продукты будете продавать?✅ 2024/08/15 19:31, Вежливый Лис #92
можете создать... сами Стратеги сами ничего не делают. Наша задача формировать привлекательный образ будущего и вдохновлять на подвиги других разумных.какой продукты будете продавать Любая организация продаёт свои компетенции (в составе цепочки добавленной стоимости). Если компетенции будут в разработке софта, то продавать надо IDE с транслятором. Если компетенции накопятся в сборе денег, то надо будет создавать конкурента компаниям Visa/Mastercard. Если я научусь создавать некоммерческие организации, то продаваемой услугой будет бухгалтерское и юридическое сопровождение других разных НКО. Если компетенции будут в лингвистике и ИИ, то надо будет создавать виртуальных помошников (подписка на АлисаGPT на месяц). И так далее.✅ 2024/08/15 21:51, Автор сайта #93
линковщик нужен. Но он нужен для больших проектов Больших проектов на горизонте пока что нет. Не самая срочная задача. Тем более, что скорость работы компьютеров растёт куда быстрее, что производительность разработчика. Необходимости развивать проект на части всё меньше и меньше.Стратеги сами ничего не делают. Наша задача... вдохновлять на подвиги. Если у стратега нет армии, то у него есть три варианта: либо заняться тактикой на взводном уровне (если есть взвод), либо превратиться в пехотинца (когда нет взвода), либо вообще выйти из игры.✅ 2024/08/16 00:38, Неслучайный читатель #94
даже «Сказочную колесницу» распиарили Что за пиар, что ни Гуглом не найти, ни Яндексом?✅ 2024/08/16 09:40, veector #95
Ваши нужды и написание русскоязычного ассемблера — это разные вещи. Нет✅ 2024/08/16 11:43, Gudleifr #96
Если "нет", то вы сначала должны найти специалиста по нужному маш.коду. Не просто книжку, а человека, думающего на нужном маш.коде. Способном сразу показать вам пример решения любой могущей возникнуть у Вас задачи.
Во-вторых, вы должны точно определить то конкретное место в конкретной ОС, куда будет встраиваться вам ассемблер. Например, изготовление исполняемых файлов определенного вида, или оптимизация чужого кода на лету... Нужно понять, как ваш код будет взаимодействовать с системой.
В-третьих, вы должны решить на чем этот ассемблер писать, и, соответственно, изучить этот инструмент.
После этого на ассемблер уходит две недели работы. Говорить же "в общих словах" можно годами.✅ 2024/08/16 12:23, Вежливый Лис #97
Cоображения там: http://plana.mybb.ru/viewtopic.php?id=751✅ 2024/08/16 12:24, veector #98
вы сначала должны найти специалиста по нужному маш.коду. Поправляю вас, не благодарите — "найти специалиста по нужному процессору".
И я сам, лично, и есть такой специалист.✅ 2024/08/16 12:35, Gudleifr #99
найти специалиста по нужному процессору Не обязательно. Возможности процессора могут использоваться не полностью. И сама машина может быть виртуальной. Но, раз Вы считаете, что первое условие выполнено, переходите ко второму.✅ 2024/08/16 12:38, veector #100
Но, раз Вы считаете, что первое условие выполнено, переходите ко второму. Вы не даете:Этот кусок, вообще, не нужен в виде ассемблерного источника ✅ 2024/08/16 12:46, veector #101
другие соображения там Лис, обратите внимание, там по ссылочке, если взглянуть на первое сообщение от utkin-а (не придираться к стилю сообщения и пропустить мимо ушей его провокации), то там в общем-то дело написано.✅ 2024/08/16 12:49, Gudleifr #102
Вы не даете Я не наблюдаю сформулированную цель написания ассемблера. Для примера, в MS DOS (и около) маш.код мог встраиваться в
1) debug (и сохраняться в виде .COM файлов); 2) в различные BASIC-и в виде отдельных процедур; 3) в Си-файлы, скомпилированные с ключом -S; 4) в честный masm; 5) другой маш.код в связи с переходом в защищенный режим (напр. DPMI)...
И это все разные(!) ассемблеры.✅ 2024/08/16 13:11, Вежливый Лис #103
Я не наблюдаю сформулированную цель написания ассемблера. Ну мне лень искать, но у меня на сайте она есть. Современный Интел64, выходной формат ELF64 для запуска на основе системных вызовов Linux (это операционка). Все три ваших вопроса отвечены от меня. Посмотрим, кто ещё какие варианты предложит.✅ 2024/08/16 13:18, Gudleifr #104
Все три ваших вопроса отвечены от меня Ждем две недели. Если ничего не будет сделано, значит, не очень и хотелось. (Или с ответами на вопросы что-то не то).✅ 2024/08/16 13:20, Вежливый Лис #105
Обещание про 2 недели давали вы, так что результатов ждём от вас. Впрочем уже и так ясно, что вам не хочется.✅ 2024/08/16 13:27, Вежливый Лис #106
@veector там в общем-то дело написано И как, помогло ли это Уткину? Где результаты? Допустим вы последуете совету Уткина и напишите кириллический ассемблер на английском Си, как предлагает Юрий (мол, неважно что там внутри).
Будет ли это тем, результатом, что нужен? По моему мнению — нет.
Поскольку результатов ни у кого нет, то и ЛЮБЫЕ советы считаются бесценными.✅ 2024/08/16 13:32, veector #107
Современный Интел64 Это вариант без загрузчика?✅ 2024/08/16 13:37, Gudleifr #108
Обещание про 2 недели давали вы Не обещание, а указание. И примеры того, как это делается. Странно было бы, если бы задача и средства её решения были у Вас, а решал бы её я.✅ 2024/08/16 13:40, Иван #109
Допустим вы последуете совету Уткина и напишите кириллический ассемблер на английском Си, как предлагает Юрий (мол, неважно что там внутри). Все правильно говорит, затем пишет на русском ассемблере компилятор для русского ассемблера и "все в шляпе".✅ 2024/08/16 13:47, Вежливый Лис #110
затем пишет на русском ассемблере компилятор для русского ассемблера и "все в шляпе" Обобщающим словом для слов "компилятор", "интерпретатор" и "ассемблер" является слово "транслятор".
Что же никто не написал транслятор или, точнее, ассемблер на русском языке асcемблера Юрия? Ведь не важно, что внутри?✅ 2024/08/16 13:52, Иван #111
Обобщающим словом для слов "компилятор", "интерпретатор" и "ассемблер" является слово "транслятор". Ошибаетесь, ассемблер — это язык, такой же как и С, Java и т.д. в данном контексте.Что же никто не написал транслятор или, точнее, ассемблер на русском языке асcемблера Юрия? Просто кто-то не захотел тратить время, компетенции нет.✅ 2024/08/16 13:53, Gudleifr #112
Что же никто не написал транслятор или, точнее, ассемблер на русском языке асcемблера Юрия? Очевидно, кто-то "ответил на все три вопроса", а теперь ждет, что кто-то сделает всё за него.✅ 2024/08/16 13:54, Вежливый Лис #113
Это вариант без загрузчика? загрузчик есть в ядре Linux. И формат выходного файла ELF64 именно поэтому. Чтобы можно было бинарник просто взять и запустить, как любую другую консольную утилиту.
Из вашего вопроса я вижу, что вы не смогли скомпилировать и запустить мой пример.Ошибаетесь Если собеседник не понимает смысла написанного, проще перейти на его терминологию.✅ 2024/08/16 13:59, Иван #114
Если собеседник не понимает смысла написанного... Отвлекаюсь! :)✅ 2024/08/16 16:01, veector #115
@ЛисИ как, помогло ли это Уткину? Где результаты? Так вы же с ним не договорились, поэтому и результатам взяться не от куда.Допустим вы последуете совету Уткина и напишите кириллический ассемблер на английском Си ... Ну вы же читали мое мнение о том, что я считаю, что отождествлять кодирование алгоритма программы с национальным языком, это заблуждение, которое будет препятствовать кооперации программистов. Только и всего.✅ 2024/08/16 16:04, veector #116
@Лисзагрузчик есть в ядре Linux. И формат выходного файла ELF64 именно поэтому. Чтобы можно было бинарник просто взять и запустить, как любую другую консольную утилиту. А, я просто не так понял, думал вы указали два разных результата, ELF64 и Интел64, а это один.Из вашего вопроса я вижу, что вы не смогли скомпилировать и запустить мой пример. Не-не, это без меня :)✅ 2024/08/16 18:00, veector #117
И это все разные(!) ассемблеры. Не обязательно. Например, с помощью комплекта от gnu (gcc, gas... и всего того, что к ним прилагается), можно сделать elf, затем конвертнуть его в интел-хекс ( https://en.wikipedia.org/wiki/Intel_HEX ) + прошить программатором, или распрасить elf на лету и загрузить его внутрисхемно по протоколу процессора.
Естественно, генерируемый elf не является исполняемым файлом ни для какой операционки. gnu тулкит/тулчейн ооочень интересный.✅ 2024/08/16 18:06, Вежливый Лис #118
Не обязательно. Вот и мне кажется, что @veector и @Иван это один и тот же разумный в разных локализациях.✅ 2024/08/16 18:18, Gudleifr #119
Не обязательно Обязательно. Если потом понадобится что-то объединить/разделить — это будет новая НИОКР. По очень простой причине — потратить (даже несколько раз) две недели на что-то замкнутое и ограниченное проще, чем 6 лет на обсуждение всеобщности.✅ 2024/08/16 22:24, Автор сайта #120
напишите кириллический ассемблер на английском Си, как предлагает Юрий (мол, неважно что там внутри). 1) От чего ж не написать на русском Си, если есть утилита русификации? 2) «Не важно, что там внутри» — это когда русифицируют маргинальную ОС, написанную на малораспространённом языке, в то время, когда более важных задач — непочатый край. Тогда действительно неважно. Как будто у человека жизней, как в компьютерной игре. Вот когда всё важное будет сделано, вот тогда можно заняться и русификацией того, что почти никто не читает. И заняться рефакторингом.
✅ 2024/08/17 02:04, Иван #121
@Автормаргинальную ОС, Это какая? И почему?когда более важных задач — непочатый край Например?✅ 2024/08/18 01:24, Автор сайта #122
Это какая? И почему? ОС, которую не видит даже статистика statcounter.com. В определённых кругах она известна. Но жизнь уже несколько десятилетий доказывает, что она бесперспективна.когда более важных задач — непочатый край Например? Например, позарез нужна Windows- и Android-совместимые ОС. Нет отечественных аналогов у Фотошопа, Автокада и т.д. и т.п. Нет отечественного аналога LLVM. Касперская заявляет, что стоит только захотеть нашим оппонентам, так они положат все наши сети и системы. Сдерживает их, по-видимому, невозможность шпионить после армагеддона.✅ 2024/08/18 11:43, Иван #123
Например, позарез нужна Windows- ReactOS? Несовместимая полностью? и Android-совместимые ОС. Там код же в какой-то мере открыт, на её основе уже написали несколько ОС, не нашел наших правда(LineageOS, HarmonyOS). Нет отечественных аналогов у Фотошопа, Alive Colors. Автокада Здесь 3 штуки, https://digital-build.ru/chem-zamenit-autocad/и т.д. и т.п. Ну если только эту нишу занять :) Нужна конкретика.Нет отечественного аналога LLVM. Открытый код.Касперская заявляет, что стоит только захотеть нашим оппонентам, так они положат все наши сети и системы. Сдерживает их, по-видимому, невозможность шпионить после армагеддона. Касперская — лицо заинтересованное. Да и зачем им ложить класть, если можно получать данные.
Замена ПО, такой файлик нашел: http://www.ancb.ru/ files/ ck/1647195128_Perechen_ otechestvennogo_programmnogo_ obespecheniya_-_ versiya_3.docx✅ 2024/08/18 12:28, Gudleifr #124
Конечно, странно. Вы пытаетесь русифицировать английское программирование, не понимая, чем оно отличается от нашего. Причем, сам выбранный подход к русификации доказуемо увеличит отставание нас от них.✅ 2024/08/18 13:55, Вежливый Лис #125
сам выбранный подход к русификации доказуемо увеличит отставание нас от них. Нам нужен хороший план. Для выкладывания и обмена планами был создан форум plana.mybb.ru Пишите Ваш более правильный план и выкладывайте.
Какие ваши доказательства?✅ 2024/08/18 14:16, Gudleifr #126
Пишите Ваш более правильный план и выкладывайте План чего? Как показал вчерашний разговор, Вы даже выбор изначальной цели быстро возносите в такие эмпиреи, что выходите за лимиты форума. Утром цели — вечером планы.доказательства Чего?✅ 2024/08/18 14:22, Вежливый Лис #127
Вы даже выбор изначальной цели быстро возносите в такие эмпиреи Я как хотел кириллический ассемблер под Интел64, так и хочу. Ничего не поменялось.✅ 2024/08/18 14:27, Gudleifr #128
Я как хотел кириллический ассемблер под Интел64 Проблема в том, что Вы его хотите через ЭДЛ. За сам ассемблер я уже отписал — выясните три вопроса и за две недели напишете.✅ 2024/08/18 14:30, Вежливый Лис #129
Прежде всего я хочу ассемблер на кириллице. Затем язык повыше уровнем. Затем ещё повыше. И когда будет нормальный кириллический эквивалент языку программирования Agda, вот тогда можно будет подумать о программировании ЭДЛ.✅ 2024/08/18 14:42, Иван #130
Для тех кто в танке поясните что такое ЭДЛ?✅ 2024/08/18 14:43, Gudleifr #131
Прежде всего я хочу ассемблер на кириллице. Затем язык повыше уровнем. Затем ещё повыше. И когда будет нормальный кириллический эквивалент языку программирования Agda, вот тогда можно будет подумать о программировании ЭДЛ Так это не работает. Рабочая схема: есть конкретная задача [асучить сантехника Васю]. Под это пишем ассемблер (если он нужен) на конкретно Васиной машине... Можно, конечно, поасучивать не Васю, а кодировщика маш.кода Петю, но Вы замучаетесь формализовать его задачу и формулировать требования к его машине.✅ 2024/08/18 14:48, Вежливый Лис #132
что такое ЭДЛ? элементарная диалектическая логика. упрощённый формализм для диалектической логики. Там всё сырое и для ассемблера это не нужно, как справедливо пишет Gudleifr. Но он меня принуждал раскрыть мои планы в области создания искинов и вот...✅ 2024/08/18 16:04, Иван #133
а кодировщика маш.кода Петю, Может он свою работу знает, только ему это зачем? Какой интерес?✅ 2024/08/18 16:12, Gudleifr #134
Какой интерес? Скорее всего, никакого. Поэтому идея русского ассемблера — фикция.✅ 2024/08/18 16:22, Вежливый Лис #135
Значит надо его (интерес) поискать, выбить из бюджета. Я ж писал, что нужен человек по связям с госорганами, основными компетенциями которого (человека) будут являться навыки оформления конкурсной документации по ФЗ о госзакупках.
А если вам не интересно всё что угодно, чего вы тут уныние разводите?✅ 2024/08/18 16:28, Gudleifr #136
Значит надо его (интерес) поискать, выбить из бюджета "Осталось уговорить Ротшильда" (c)✅ 2024/08/18 17:10, Иван #137
Я ж писал, Можно даже побеждать в больших форумных теоретических баталиях. Но толку от этого никакого.✅ 2024/08/18 18:47, Вежливый Лис #138
@Иван. Я признаю своё поражение в этой форумной баталии перед Вами. Теперь-то Вы ассемблер допишете?✅ 2024/08/18 18:59, Иван #139
Я признаю своё поражение в этой форумной баталии перед Вами. Теперь-то Вы ассемблер допишете? :) Конечно можно, только зачем? На Си просто делается. Далее посложнее, уже на ассемблере. Ну или на Си, генерировать код на русском ассемблере. Примите эстафету? Или Ваня один за всех отдуваться будет?
https://ru.wikipedia.org/wiki/ %D0%9F%D0%BE%D0%B2 %D0%B5%D1%81 %D1%82%D1%8C_ %D0%BE_ %D1%82%D0%BE%D0%BC,_ %D0%BA%D0%B0%D0%BA_ %D0%BE%D0%B4 %D0%B8%D0%BD_ %D0%BC%D1%83 %D0%B6%D0%B8%D0%BA_ %D0%B4%D0%B2 %D1%83%D1%85_ %D0%B3%D0%B5 %D0%BD%D0%B5%D1 %80%D0%B0%D0%BB %D0%BE%D0%B2_ %D0%BF%D1%80 %D0%BE%D0%BA%D0%BE %D1%80%D0%BC %D0%B8%D0%BB✅ 2024/08/18 19:16, Вежливый Лис #140
Примите эстафету? Или Ваня один за всех отдуваться будет? А в чём ваше "отдувание" заключается? Бутстраппирующийся ассемблер либо есть, либо нет. На текущий момент его нет. Написание на Си не решит задачу, потому что у же есть компилятор Павиа, например, который генерит код для интела. И как, сильно ли это продвинуло страну?✅ 2024/08/18 19:25, Иван #141
компилятор Павиа Код есть?✅ 2024/08/18 19:28, Вежливый Лис #142
https://gitlab.com/pavia00/pop✅ 2024/08/18 19:37, Иван #143
Будет время может сделаю, чисто из образовательного интереса. Вы уже разбирались в предмете, какой минимальный набор инструкций нужен для этого?✅ 2024/08/18 19:39, Gudleifr #144
И как, сильно ли это продвинуло страну? Страну двигать не надо, двигайтесь сами.✅ 2024/08/18 19:40, Вежливый Лис #145
Вы уже разбирались в предмете, какой минимальный набор инструкций нужен для этого? До такой глубины я не разобрался. Из общих соображений 8086 как-то же работал без математического сопроцессора, и режимов работы процессора там было мало (один). Вот, значит нужен примерно набор его инструкций, за исключением тех, которые не используются (двоично-десятичная арифметика не используется, например).✅ 2024/08/18 19:40, Автор сайта #146
А не было желания наладить контакт с Д.Ю. Караваевым? Ведь у него есть собственный ассемблер x86. Если дело только в русификации, то задача становится проще. Хотя, вроде бы, в том ассемблере несколько отличный от Intel синтаксис. Но ведь всё решаемо. И сразу можно пробовать раскрутку.✅ 2024/08/18 19:46, Вежливый Лис #147
Страну двигать не надо Источником власти является народ (по Конституции), отдельные части народа сами решат, надо им двигать, или не надо и куда. Но те, кто говорят, что не надо — явно сторонники застоя и деградации.А не было желания наладить контакт с Д.Ю. Караваевым? Вы меня активно прессовали и создавали негативную репутацию. В таких условиях об этом речи идти не могло. Иван же только что появился, и у него такая мысль наверное возникнуть не успела.✅ 2024/08/18 19:48, Иван #148
До такой глубины я не разобрался. Из общих соображений 8086 как-то же работал без математического сопроцессора, У меня есть предположение, что первый ассемблер писали очень и очень просто — не используя контекстную грамматику, а только регулярную.✅ 2024/08/18 20:09, Gudleifr #149
Источником власти является народ Именно. И что народу надо от ассемблера?✅ 2024/08/18 20:25, Иван #150
А не было желания наладить контакт с Д.Ю. Караваевым? Можно самому разобраться в принципе, это вопрос времени просто. Нужно с малого набора добавлять инструкции до тех пор, пока не пройдёт вся цепочка компиляции. Для генерации русского ассемблерного кода можно задействовать "помощников", ну или ещё один язык придумать вспомогательный.✅ 2024/08/18 20:26, Вежливый Лис #151
Что народу надо от ассемблера? Народу нужна документация НА РОДНОМ ЯЗЫКЕ, методики работы с этим всем, учебники, методички, примеры.
И когда я здесь пишу про родной язык, я имею в виду, что мнемоники должны быть записаны кириллицей. Чтобы готовить документацию я предлагал освоить русифицировнную TexInfo. Пока никто не смог. Альтернативы не проработали.✅ 2024/08/19 00:11, Gudleifr #152
Народу нужна документация НА РОДНОМ ЯЗЫКЕ Народ — это не горстка любителей кодировать ради кодирования. Это инженеры, врачи и агрономы (студенты, рабочие, фельдшеры и крестьяне), которым НЕКОГДА читать документацию. Им нужны "калькуляторы" с "бейсиком" для решения повседневных задач.✅ 2024/08/19 09:12, veector #153
@Gudleifr Так это не работает. ... Можно, конечно, поасучивать не Васю, а кодировщика маш.кода Петю, но Вы замучаетесь формализовать его задачу и формулировать требования к его машине. А потом мы все тут удивляемся, ёпрст, как это у них необычно работает МакДоналдс по сравнению с нашей столовкой (в некоторые до сих пор заходить срашно), какие крутые Ашан, Глобус, ЛеРуа, Икея и пр. крупные "рынки", по сравнению с прошлыми магазинами, где кассир он же продавец набивает свой карман, обвешивая покупателей.
Нет, Gud, бросать науку и создание системных подходов, ни в коем случае нельзя! Даже если это не приносить выгоду только отдельному "Васе" и "Пете". На ваших "Васях" и "Петях" далеко не уедешь, более развитые системные подходы их сожрут.
Так что это именно так и работает. Делают ребята ассемблер, пусть делают, надо им помогать, а не препятствовать. Сразу и хорошо практически ни у кого не получается. И пусть это называется "цифровизация" или ещё каким-нибудь словом, вызывающим улыбку, но это верное направление. Госуслуги, например, получилась очень крутая система, которой завидуют все за бугром!
Спускаясь в нашу песочницу, программистскую, Gud, как давно вы начали пользоваться репозиториями? А ведь эта технология получила у нас массовое распространение не так давно, ибо нам в 90-е было не до таких систем.✅ 2024/08/19 11:03, Иван #154
Механизм раскрутки компилятора похож на квайн: https://en.wikipedia.org/wiki/Quine_(computing)✅ 2024/08/19 11:27, Gudleifr #155
по сравнению с прошлыми магазинами Про это уже писал. Поход за хлебом тогда занимал у меня пять минут. А теперь, предлагают для этого сначала купить новый дебильник... Как-то не вижу плюсов.На ваших "Васях" и "Петях" далеко не уедешь, более развитые системные подходы их сожрут Вы все забываете, что мы живем с "развитыми" в разных странах. Их цель — забить своими продуктами, пусть даже неработающими, все ниши рынка. Наша — обеспечить хоть какую-то работу.Делают ребята ассемблер Они не делают и не ассемблер...Госуслуги, например, получилась очень крутая система Госуслуги — это преступление.как давно вы начали пользоваться репозиториями? Моя страничка считается репозиторием? Ей четверть века.Сами себя загнали в рамки, но зачем, лично мне не понятно Затем, что реальная работа начинается с постановки реальных целей.✅ 2024/08/19 11:47, Иван #156
Их цель — забить своими продуктами, пусть даже неработающими, все ниши рынка. Примеры есть?✅ 2024/08/19 11:49, Gudleifr #157
Примеры есть? MS Windows.✅ 2024/08/19 12:01, Иван #158
@veector, не обращайте внимание на поведение @Gudleifr, у него нет настроения что-то расказывать, просто игнорируйте.✅ 2024/08/19 12:22, Вежливый Лис #159
у него нет настроения что-то расказывать Он не «не хочет». Он не может. Свои неспособности к чему-либо сложно признавать.✅ 2024/08/19 12:30, veector #160
@Иван, все нормально. Gud, конечно, почти всегда общается не корректно и это отталкивает; предположу, что это защитная реакция. Нам всем сложно менять свое мировоззрение и привычки, это нормально. Например, вот в этом сообщении, сложно с ним не согласиться. Кажется, что его писал другой Gud. Получается, жизненного опыта у него много, а вот в современном программировании он все-таки не силен.
@GudleifrГосуслуги — это преступление Кто садовник? Против кого преступление?MS Windows. А между прочим, в основу этой ОС заложены идеи, круче, чем у нынешних дистрибутивов на основе gnu Linux. Только Андроид совсем чуть-чуть приблизился, но потом свернул не туда. Как говорится, ничего личного, просто бизнес.✅ 2024/08/19 12:43, Вежливый Лис #161
вот в этом сообщении, сложно с ним не согласиться Да легко с ним не согласиться. Верно, что изоляция зло. Однако международная работа должна быть построена на основе русского языка. Не согласны — идите на reddit и там на английском общайтесь. А сами езжайте в Турцию, а оттуда в Америку.✅ 2024/08/19 12:43, veector #162
@GudleifrПоход за хлебом тогда занимал у меня пять минут. "Тогда", за не важно каким хлебом, да, может быть. "Тогда", за свежим хлебом, добро пожаловать в очередь или занимайте заранее. А там дальше "тогда" идет, молоко, квас... ну, что же вы не договариваете-то. "Тогда" было не все хорошо.
Зато теперь если вам нужен хлеб, то вы знаете где его можно купить, и что там будет свежий и не только хлеб — это и есть системный подход, в комплексе. Ну да, буржуины из этого извлекают прибыль, по-вашему "наживаются", да, но это хотя бы все цивилизованно, а не как "тогда", по-блату. И да, если хочется вкусной картошки, то, как и раньше, идем на рынок. И это ни чему не противоречит!Моя страничка считается репозиторием? Нет. Это же очевидно.✅ 2024/08/19 12:43, Gudleifr #163
Против кого преступление? Против страны.А между прочим, в основу этой ОС заложены идеи "В который раз напоминаю, что слова ""и всякая прочая хрень"" не полностью описывают весь спектр возможностей нашего изделия" (c)
Какая разница, какие идеи заложены в Windows, если он очень плохо справляется с обязанностями ОС?
"Что такое вирус?" "Это программа, выполняющая без ведома пользователя ненужные ему действия." "Windows?!"✅ 2024/08/19 12:45, veector #164
@Лис, не Вам указывать, что мне делать! Вы ошиблись дверью!✅ 2024/08/19 12:48, Вежливый Лис #165
не Вам указывать, что мне делать! Вы ошиблись дверью Я не указываю. Я излагаю логичный вариант действий. И не лично Вам, а всем, кто считает, что английский язык более правильный, чем русский.✅ 2024/08/19 12:48, Gudleifr #166
"Тогда", за не важно каким хлебом Почему же? Тогда это был хлеб, получивший золотую медаль Лейпцигской ярмарки. А не то <цензура>, что, может быть, привезет вам <цензура>.✅ 2024/08/19 12:49, Иван #167
Тише, тише, споконеее :) Горячие финские парни :)✅ 2024/08/19 12:54, Вежливый Лис #168
финские: Норманская теория (https://ru.wikipedia.org/wiki/ %D0%9D%D0%BE% D1%80% D0%BC% D0%B0%D0%BD% D1%81%D0%BA% D0%B0% D1%8F_ %D1%82% D0%B5% D0%BE% D1%80% D0%B8% D1%8F) не доказана.✅ 2024/08/19 12:59, Иван #169
Норманская теория А в неё не верю, просто фильм "Особенности русской национальной охоты" смотрел. А это сегодня прочитал:Время мчится, как ракета. Мимо русские бегут. Это кто стоит на месте? Это финны к нам идут. ✅ 2024/08/19 13:03, Вежливый Лис #170
Как, кстати, идут дела? Какой прогресс в ассемблере, какие планы ближайших действий?✅ 2024/08/19 13:10, Иван #171
Как, кстати, идут дела? Какой прогресс в ассемблере, какие планы ближайших действий? Главное, что я понял механизм раскрутки на деле. Попробую написать минимальный пример с раскруткой, дальше больше. Просто думаю может ещё можно что-то упростить.✅ 2024/08/19 13:11, veector #172
@GudleifrКакая разница, какие идеи заложены в Windows Большая. Сейчас ребята тут закладывают идеи для Русского ассемблера. Тема хорошая, но вот идея сделать кодировку исходника в кириллических символах, на мой взгляд, приведет к изоляции и проект так и останется на полке.
Технических препятствий сделать транслятор ассемблера нет и грамотных программистов хватает. Осталось всех увлечь по-настоящему стоящей идеей, тогда и дело пойдет.если он очень плохо справляется с обязанностями ОС? Windows — идеальная ОС. Еще идеальней, был Windows Embedded, но это привело бы к банкротству Майкрософта и они это бросили. Вот если бы React OS был как Windows Embedded, вот это был бы прорыв. Совместимость с виндовыми, андроидными и пр. программами, возможно и важно, но не первостепенно. Как-нибудь бы прикрутили, в линуксе же прикрутили виндовые игры и норм, шевелится. Собственно, отсутствие идеи у React OS, отличной от винды, не позволяет ей привлечь сторонников. React OS пробовали все, но, никто не выбрал, т.к. там нет ничего отличного от Винды в лучшую сторону.✅ 2024/08/19 13:20, Gudleifr #173
Сейчас ребята тут закладывают идеи Идя в ассемблере только одна — наиболее эффективно описать распределение значений байтов/ячеек в некотором пространстве. Критерии — компактность этого описания и легкость им пользования. Всё.Windows — идеальная ОС Почему тогда простая домохозяйка не может написать экспертную систему, управляющую её кухней?✅ 2024/08/19 13:20, Вежливый Лис #174
@veector — http://plana.mybb.ru/viewtopic.php?id=2263✅ 2024/08/19 13:24, veector #175
@Лис, не интересует.✅ 2024/08/19 13:31, Вежливый Лис #176
@veector — интересует. Вы ищете мегаидею. Русификация ИТ — это она. Просто некоторые Ваши убеждения мешают это принять. Я сомневаюсь, что вы хотите сделать по-настоящему крутой компилятор на английском языке и вы здесь только и именно поэтому.✅ 2024/08/19 13:40, veector #177
@Лис, я пользователь инструментальных средств и выражаю мнение как пользователь. Не более.✅ 2024/08/19 13:47, veector #178
@GudleifrИдя в ассемблере только одна — наиболее эффективно описать распределение значений байтов/ячеек в некотором пространстве. Критерии — компактность этого описания и легкость им пользования. Всё. Gud, у вас не бывает программистов, вы не считаете себя программистом, поэтому, у вас слишком упрощенный взгляд, который мы, программисты, проигнорируем. То, что вы выдаете за идею — это делает любой язык программирования и инструментарий, его транслирующий/компилирующий.✅ 2024/08/19 14:00, veector #179
@GudleifrПочему тогда простая домохозяйка не может написать экспертную систему, управляющую её кухней? "Умный дом", "умная кухня"... умным, должен быть человек. ИМХО.✅ 2024/08/19 14:23, Gudleifr #180
любой язык программирования и инструментарий, его транслирующий/компилирующий Именно. Ассемблер просто один из самых тупых подобных инструментариев. Он не предусматривает какого-либо серьезного преобразования входных данных. Верхняя планка ассемблеров — Си-компилятор."Умный дом", "умная кухня"... Их написала домохозяйка? Или IT-шник, думающий, что хлеб раньше был хуже, потому что по телевизору показывали, что он черно-белый?✅ 2024/08/19 14:42, veector #181
@GudleifrИменно. Ассемблер просто один из самых тупых подобных инструментариев. Он не предусматривает какого-либо серьезного преобразования входных данных. Верхняя планка ассемблеров — Си-компилятор. "Простой", но не "тупой". Однако, "простота" ассемблера, вещь относительная. Например, макросы есть в Си и в ассемблере, что делает ассемблер уже не таким простым и как раз предусматривает достаточно серьезное преобразование входных данных. Обычно так, как Вы, говорят лишь те, кто этого всего не знает. Но вам простительно, вы не программист."Умный дом", "умная кухня"... Их написала домохозяйка? Или IT-шник, думающий, что хлеб раньше был хуже, потому что по телевизору показывали, что он черно-белый? Написали программисты, внедряют наладчики и электрики, сопровождают IT-шники — это же очевидно. Но Вы их, программистов и IT-шников, не различаете, поэтому, предположу, что Вы как раз имеете к этим вещам некоторое отношение и писали. Правда не задумались, кто Вам написал инструменты для всего этого. И ассемблер там тоже применялся.
Итак, мы наконец-то пришли к ассемблеру (с небольшим ускорением от меня), с чем Вас, Gud, и поздравляю. Давайте дальше всё-таки по теме Русского ассемблера.✅ 2024/08/19 14:47, Gudleifr #182
Например, макросы есть в Си и в ассемблере Это от того, что макрогенераторы ещё проще ассемблеров. Грех не воспользоваться.это же очевидно Очевидно другое. Раз человек не может запрограммировать то, что ему просто, а вынужден обращаться к посредникам, ОС не идеальна. ЧТД.✅ 2024/08/19 22:12, Автор сайта #183
ИванМеханизм раскрутки компилятора похож на квайн Согласен! Спасибо за аналогию, она мне в голову не приходила.
GudleifrПоход за хлебом тогда занимал у меня пять минут. veector"Тогда" было не все хорошо. Не все жили в благополучное время. Моя бабушка приходила к хлебному и ждала, когда вся очередь пройдёт. Если очередь прошла и хлеб остался, то ей повезло, ей давали хлеб. А если не повезло, возвращалась ни с чем. Просто хлебные карточки давали либо госслужащим, либо работникам совхозов. А колхозникам карточки были не положены. Считалось, что колхозники сами должны обеспечивать себя хлебом.
Вежливый ЛисА сами езжайте в Турцию, а оттуда в Америку. «Не говорите, что мне нужно делать и я не сажу, куда Вам надо идти».
Gudleifr Какая разница, какие идеи заложены в Windows, если он очень плохо справляется с обязанностями ОС? Да, есть такое дело. В ней не хватает одной очень крупной идеи: нет инструментов для выковыривания всего ненужного.
veectorReact OS пробовали все, но, никто не выбрал, т.к. там нет ничего отличного от Винды в лучшую сторону. Есть. Компактность, нетребовательность к ресурсам, скорость, отсутствие «свистков и колокольчиков». Жаль, что она стоит на месте.
Вежливый ЛисВы ищете мегаидею. Русификация ИТ — это она. Мне она не подходит в предлагаемом некоторыми людьми виде. Мне не нравится, если русификация исчерпывается обычной заменой нерусских слов на русские. Мне нравится путь русификации через доминирование в технологиях. Когда мы навязываем правила игры, а не нам. Это даст возможность навязывать свои термины, а не усваивать чужие.✅ 2024/08/19 22:18, Вежливый Лис #184
Мне она не подходит в предлагаемом некоторыми людьми виде. Мне не нравится, если русификация исчерпывается обычной заменой нерусских слов на русские. Мне нравится путь русификации через доминирование в технологиях. Когда мы навязываем правила игры, а не нам. Это даст возможность навязывать свои термины, а не усваивать чужие. Во-первых, я не какой-то там людь, я Лис!
Во-вторых, я никогда не говорил, что русификация должна исчерпываться заменой слов. Напротив, я с самого начала требовал учёта склонений и спряжений, и вообще желательно реализации языкового ИИ по мотивам школы Мельчука-Апресянов.
В-третьих, я не помню, говорил ли я про доминирование в таком прямом виде, но да, это полностью совпадает с моей точкой зрения. Русский язык должен стать доминирующим (в идеале), для этого надо предпринимать действия. Начинать надо с базовых, имеющих максимальный мультипликативный эффект.✅ 2024/08/19 22:21, Gudleifr #185
Моя бабушка приходила к хлебному и ждала Как мои родители в 2020-м. Развитие ненужных технологий и недоразвитость нужных неразличимы.Мне нравится путь русификации через доминирование в технологиях Хорошая идея. Но ждать, пока пиндосы случайно оставят незанятую нишу, а мы в неё внезапно ворвемся, мне кажется неперспективным.✅ 2024/08/19 22:25, Вежливый Лис #186
А сами езжайте в Турцию, а оттуда в Америку. Не говорите, что мне нужно делать и я не сажу, куда Вам надо идти У него это должно было вызывать мысли, если он не хочет так делать, то что ему мешает. Но нет, мыслей не возникло. Мысли должны быть про то, что объём языка, изучаемый в области программирования — это профессиональная часть и она гораздо меньше полного объёма языка, который надо будет доучивать при переезде. Ещё, возможно, здесь есть какие-то социальный связи, а там их нет. Это несущественно в раннем возрасте, но не после, после тяжелее. Также, квалификацию придётся доказывать бо́льшими усилиями чем тут (дипломы не учитываются, только результаты).✅ 2024/08/19 22:41, Автор сайта #187
Начинать надо с базовых, имеющих максимальный мультипликативный эффект. Вот поэтому предложил подумать об аналоге LLVM. Потому что ассемблер уже пробовали и не то, что не взлетело, но даже им не интересовались! Я понимаю, если кто-то попробовал и разочаровался. Но не спрашивали!
А вот аналог LLVM дал бы разработчикам компиляторов сокращение трудозатрат и расширение рынка. Но хватит об этом. Уговаривать взрослых людей — занятие неблагодарное.У него это должно было вызывать мысли Ещё раз повторюсь: уговаривать взрослых людей — занятие неблагодарное. Если с двух раз не получилось, то третья попытка — лишняя.✅ 2024/08/19 22:47, Вежливый Лис #188
предложил подумать об аналоге LLVM. Потому что ассемблер уже пробовали Я уже отвечал на это, что в Ваших рассуждениях вижу логическую ошибку. И если сделать по-другому, то может сработать. По-другому заключается в том, чтобы сделать документацию, на которую можно ссылаться и которую можно использовать. Т.е. это обязательно web-приложение + книга/публикация. Нельзя запрограммировать аналог LLVM по-русски, если в него внедряются снизу буквы латиницы. Получится смесь, которая всё равно будет требовать удлинённого изучения.
Сработать может только если всё целиком сделать на русском снизу доверху. Сначала ассемблер, поверх него LLVM (как абстракцию по процессорам Интел64 и РискВ64, ну может ещё Арм64). И писал я это не один десяток раз.✅ 2024/08/19 22:49, Gudleifr #189
А вот аналог LLVM дал бы разработчикам компиляторов сокращение трудозатрат и расширение рынка Сокращение? Да него же придется реализовать для каждого кристалла заново. Даже если никому не придет в голову писать для последнего компилятор. И как старый фортер скажу — доделал компилятор — выброси LLVM. Иначе никакого профита не будет.✅ 2024/08/19 22:50, Вежливый Лис #190
но даже им не интересовались! Это и не требуется! Если будет LLVM, вы его будете использовать, потому что очень хотите. И когда полезете внутрь ковыряться ВОТ ТОГДА-ТО и столкнётесь там с кириллицей, и совсем не потому что хотите ассемблер. Вы так по прежнему и будете не интересоваться ассемблером, но пользоваться будете, никуда не денетесь.уговаривать взрослых людей — занятие неблагодарное. Некоторых людей надо уговаривать, некоторых не надо. И ещё надо уметь выбирать — кого.✅ 2024/08/19 23:32, Автор сайта #191
Нельзя запрограммировать аналог LLVM по-русски, если в него внедряются снизу буквы латиницы. Когда аналог LLVM сгенерирует двоичный код, то это будет просто двоичный код, где одни нули и единицы. Минуя стадию ассемблера. В трансляторе PL/1 Караваева идёт генерация сразу в машинный код.Сокращение? Да него же придется реализовать для каждого кристалла заново. Когда появится новый кристалл, то будет нанят программист для генерации кода из промежуточного представления аналога LLVM ("обобщённого ассемблера") в коды нового процессора. И компиляторы языков высокого уровня просто на автомате получают новую платформу, с которой они теперь работают, не ударив пальца о палец.
Допустим, есть N языков высокого уровня и M платформ. Для полного покрытия всеми языками всех платформ требуется написать N × M компиляторов. Когда у нас появляется LLVM или "обобщённый ассемблер", то в такой схеме N компиляторов в "обобщённый ассемблер" и M компиляторов из "обобщённого ассемблера" в машинный код. Итого: M + N компиляторов, что меньше, чем N × M. Схема известна не менее полувека.как старый фортер скажу — доделал компилятор — выброси LLVM. Если надо сделать по-быстрому что-то типа универсальной промежуточной машины, то Форт — хороший вариант. Но когда встанет вопрос о высокой скорости исполняемого кода, то этот вариант отпадает. Были сравнительные цифры, они не в пользу Форта. Мог бы привести цифры из журнала "Программирование", но сейчас эти журналы далеко от меня, а в сети рыться неохота.✅ 2024/08/19 23:40, Gudleifr #192
Когда появится новый кристалл, то будет нанят программист Для повторения всей работы с нуля. Без гарантии, что LLVM будет реализован правильно. Точнее, с гарантией, что это будет сделано ошибочно.Но когда встанет вопрос о высокой скорости исполняемого кода, то этот вариант отпадает Это обычное заблуждение.✅ 2024/08/20 00:05, Вежливый Лис #193
В трансляторе PL/1 Караваева идёт генерация Есть ли у него исходники под пермиссивной лицензией? Если нет, то не существует никакого транслятора Караваева. Так же как и книжки по языку Эпсилон содержат его описание, но не содержать полного кода. И тем более там нет прикладных программ на этом Эпсилоне. Просто лишняя информация, которая сегодня отняла мой продуктивный день.✅ 2024/08/21 15:24, Иван #194
Будет примерно 20 команд реализовано:; control: call, ret, jmp ; arithmetics add, sub, mul ; compare: test, cmp, jz, jge, jne ; stack : push, pop ; other : mov, syscall ; directives: .byte ; memory : labels Предлагайте имена на русском, думаю буду реализовывать полную форму слова, без сокращениеadd — СЛОЖИТЬ call — ВЫЗОВ ✅ 2024/08/21 17:06, Вежливый Лис #195
СЛОЖЕНИЕ, ВЫЗВАТЬ. Неодинаковая форма частей речи — существительные и глаголы. Хотя вроде и то и другое — операции процессора. {СЛОЖЕНИЕ, ВЫЗОВ}, {СЛОЖИТЬ, ВЫЗВАТЬ} — вот это было бы одинаково. Мы раньше пришли к желанию видеть глаголы в повелительном наклонении (т.е. последний вариант). И тут есть варианты. Либо смелые "сложи, вызови", либо унылые безличные "сложить", "вызывать". Я за первый вариант.✅ 2024/08/21 17:14, Иван #196
{СЛОЖЕНИЕ, ВЫЗОВ}, {СЛОЖИТЬ, ВЫЗВАТЬ} :) Не задумывался, глагол везде лучше, наверно, тогда.✅ 2024/08/21 21:09, Автор сайта #197
Неопределённая форма глагола, на мой взгляд, предпочтительнее. Иван, а Вам не понравился мой вариант синтаксиса, с заменой слов или аббревиатур на символы?= mov ? cmp f() call f --> L jmp L > M jg M <= N jle N + add - sub * mul / div Не находите, что некоторые самые распространённые команды будут понятны независимо от национальности?✅ 2024/08/21 21:27, Иван #198
Неопределённая форма глагола, на мой взгляд, предпочтительнее. Да, такой вариант выберу.Иван, а Вам не понравился мой вариант синтаксиса, с заменой слов или аббревиатур на символы? Не находите, что некоторые самые распространённые команды будут понятны независимо от национальности? С символами я ещё подумаю, пока глаголы использовать буду. Мне пока так будет проще, чтобы компилятор раскрутить. Макросы можно какие-нибудь расширенные сделать в дальнейшем. Но все будет зависить от интереса пользователей. Задача минимум — самокомпилируемый компилятор.✅ 2024/08/21 22:20, Gudleifr #199
некоторые самые распространённые команды будут понятны независимо от национальности? В "нормальных" ассемблерах эти символы резервируются для макрогенератора (например, расчета констант и смещений). Т.к. большинство команд маш.кода не имеют столь очевидного смысла и/или имеют значительное число вариантов, то однотипные буквенные аббревиатуры удобнее.✅ 2024/08/21 22:39, Автор сайта #200
эти символы резервируются Когда идёт разработка с нуля, автор сам вправе решать, под какие цели какие символы ему использоватьоднотипные буквенные аббревиатуры удобнее. Как минимум до меня свой ассемблер для какого-то отечественного процессора делал Е.А. Зуев, и там были «:=», «+=», «*=» и т. д. То есть удобство как минимум дискуссионно, обсуждению подлежит.✅ 2024/08/21 22:49, Gudleifr #201
свой ассемблер Их много. И большинство авторов забывают очевидное: ассемблеры не компиляторы, там суть не в выполняемых программой действиях, а в наиболее изощренной системе упаковки байтов, описывающих эти действия.✅ 2024/08/22 01:10, Вежливый Лис #202
Иван написал:Предлагайте имена на русском http://plana.mybb.ru/viewtopic.php?id=2266#p10317✅ 2024/08/23 11:25, Иван #203
Думаю много людей знает загадку про бродобрея:Пусть в некой деревне живёт брадобрей, который бреет всех жителей деревни, которые не бреются сами, и только их. Бреет ли брадобрей сам себя? Что если на этот вопрос ответить "да". Кем является брадобрей?✅ 2024/08/23 18:33, Вежливый Лис #204
Кем является брадобрей? Героем парадокса Рассела: https://ru.wikipedia.org/wiki/ %D0%9F%D0%B0 %D1%80%D0%B0% D0%B4%D0%BE %D0%BA%D1%81_ %D0%A0%D0%B0 %D1%81%D1%81 %D0%B5%D0%BB %D0%B0
Решения там же — в курсе математической логике, в частности в теории типов.✅ 2024/08/23 18:38, Иван #205
Решения там же — в курсе математической логике, в частности в теории типов. Думайте проще, на заходя в учебник. Если вы прочитали все эти книжки значит вы знаете ответ, озвучьте его.✅ 2024/08/23 18:52, Вежливый Лис #206
1) Думать, не заглядывая в учебник, это называется "по памяти", а не "проще".
2) У явлений есть сложность. И в некоторых случаях сложность уменьшить нельзя. Вот фентези на тему: http://plana.mybb.ru/viewtopic.php?id=2273
3) А что если текст в этих книжках и является минимальным изложением ответа?✅ 2024/08/23 18:57, Иван #207
1) Думать, не заглядывая в учебник, это называется "по памяти", а не "проще".
2) У явлений есть сложность. И в некоторых случаях сложность уменьшить нельзя. Вот фентези на тему
3) А что если текст в этих книжках и является минимальным изложением ответа? Не знаю, у меня есть ответ состоящий из 2 слов — это просто?✅ 2024/08/23 19:08, Вежливый Лис #208
Вот даже отвечать не хочу.ответ состоящий из 2 слов «брадобреев двое», «они категория». От ваших слов толку не будет, придётся привести определения слов, и всё это выльется по объёму в книгу.✅ 2024/08/23 19:26, Иван #209
«брадобреев двое» Вот можете же когда захотите! Брадобрей: https://ru.wikipedia.org/wiki/ %D0%A1%D0%B8 %D0%B0%D0%BC %D1%81%D0%BA %D0%B8%D0%B5_%D0%B1%D0%BB %D0%B8%D0%B7 %D0%BD%D0%B5 %D1%86%D1%8B«они категория» Это из теории категорий?✅ 2024/08/23 19:34, Вежливый Лис #210
Весело, но бесполезно для конструктивных целей ( https://ru.wikipedia.org/wiki/%D0%9A%D0%BE %D0%BD%D1%81 %D1%82%D1%80 %D1%83%D0%BA %D1%82%D0%B8 %D0%B2%D0%BD %D0%B0%D1%8F_%D0%BC%D0%B0 %D1%82%D0%B5 %D0%BC%D0%B0 %D1%82%D0%B8 %D0%BA%D0%B0)Это из теории категорий? Конкретно нам надо изучать теорию типов, а в ней "зависимые типы". Тогда можно будет усилить ассемблер проверками.✅ 2024/08/29 20:32, Автор сайта #211
С.Н. Баранов, «Система символьных вычислений Минисак», журнал «Программирование», стр. 63, №3, 1993 г.
В этой статье описывается, как С.Н. Баранов (разработчик Форта для ЕС ЭВМ и автор известной книги по языку Форт) переделал систему SAC-2 в Минисак. Обе использовали один и тот же язык (Альдес) и одни и те же исходники на этом языке. Но первая делала промежуточную трансляцию в Фортран, а вторая — в Форт. Результат приведён на картинке ниже.
Почти по всем критериям трансляция в Форт выгоднее. За исключением одного: скорость работы. На тестовом примере можно наблюдать превосходство кода, полученного трансляцией Фортрана в машинный код: 3'17'' (197 секунд) простив 5'56'' (356 секунд) при трансляции в Форт. То есть Форт проиграл машинному коду, полученному из Фортрана, в 2,82 раза.
Таким образом, я подтвердил своё утверждениекогда встанет вопрос о высокой скорости исполняемого кода, то этот вариант отпадает... сравнительные цифры... не в пользу Форта. А тезис GudleifrЭто обычное заблуждение. таким образом опровергнут. Это не говорит о том, что Форт плох, просто его качества нужно учитывать в совокупности.
Было бы интересно сделать сравнительные тесты на современных процессорах, а не на ЕС-1052. И сравнить современные реализации Форта с Си или Растом, допустим.✅ 2024/08/29 21:47, Gudleifr #212
таким образом опровергнут Вы ошибаетесь. Просто Баранов пошел легким путем. Он не отказался от этапа интерпретации, очевидно, не создавая честного бинарника. Но никто не мешает встроить в FORTH кусок бинарника, для оптимизации критического участка. Так, например, я сделал в DOS-FOBOS: написал графические процедуры на 32-разрядном FORTH-ассемблере. (Вообще, FORTH-ассемблер, это следующее, что пишет всякий фортер после написания FORTH). Т.о. FORTH просто не может быть медленнее чистого ассемблера, поскольку имеет возможность писания на нем любого кода. Причем, это не обычные ASM-блоки ЯВУ, поскольку при создании маш.кода фортер продолжает пользоваться FORTH-фенечками, например, свободно добавляя слова-макросы и слова-компиляторы.✅ 2024/08/29 22:12, Автор сайта #213
Вряд ли там чистая интерпретация, иначе бы разница была бы большая. Но это субъективное суждение, подтверждения ему искать не буду. Но, повторюсь, было бы интересно сравнить скорость Форта с чем-то ещё в современных условиях, поэтому Вам и карты в руки.
Что же касается ассемблерных вставок, то при сравнении лучше их исключить. Ведь шла речь об "обобщённом ассемблере" или аналоге LLVM и потенциальных их заменителях (например, Форте). Ассемблерные же вставки лишили бы возможность исполнять Форт-программы сразу на всех платформах.✅ 2024/08/29 22:51, Gudleifr #214
Ассемблерные же вставки лишили бы возможность исполнять Форт-программы сразу на всех платформах А FORTH для этого и не предназначен. На нем проще переносить программы на уровне концептов, фиксируя только основные понятия проблемно-ориентированного языка. А уж свой FORTH под них всяк напишет сам, на свой вкус. Например, вполне может оказаться удобнее написать свой FORTH на Си++ и оставить критический код в Си++✅ 2024/08/29 23:11, Автор сайта #215
Раз не предназначен, то пусть так и будет. И мне, и Баранову когда-то показалось, что эта роль Форту подойдёт. Ну а Вы с этим не согласны. Ничего не имею против, тем более, что Си — язык, который держит первой место по охвату всевозможных платформ своими компиляторами.✅ 2024/09/01 10:06, kiv #216
Любопытная статья "Симкод — современный язык ассемблера": https://habr.com/ru/articles/840070/✅ 2024/09/01 16:49, Автор сайта #217
Да, можно поздравить alextretyak, очень хорошая статья, нагружает многими фактами и смыслами, в один присест всё не переваришь. Всё очень логично, последовательно и аргументировано, хотя есть и то, с чем не согласишься. Нужно перечитывать.
Ну возникают вопросы по поводу русского ассемблера, который делает Иван. Правильным ли путём он идёт?
Первое возражение: ничего не имею против символа ^ в качестве xor. Ну так сложилось в Си. Ведь симкод — он же на основе Си?xor eax, eax Было бы логично записать не eax=0 (присваивание не меняет флагов), а eax^0 Тут сразу видно, каким способом делается обнуление и каковы побочные эффекты (установка флагов).
Ну и здорово, что alextretyak таки вышел на следы ассемблера Зуева, пусть не на сам раздел, а подраздел: пример сортировки на этом ассемблере.✅ 2024/09/01 18:28, Иван #218
Ну возникают вопросы по поводу русского ассемблера, который делает Иван. Правильным ли путём он идёт? Путь познания — он всегда правильный.✅ 2024/09/01 22:06, Автор сайта #219
Путь познания — он всегда правильный. Тут не поспоришь. Не попробовав, не изучив — ничего не сделаешь. Просто задумываюсь, насколько правильно делать ассемблер именно для x86. С одной стороны, на чём-то надо тренироваться. Плюс самая распространённая архитектура. А с другой... Intel в кризисе (хотя упавшее знамя может подхватить AMD), роль x86 уменьшается. Да и сомневаюсь, что у нас в стране когда-нибудь будет производство x86. Короче, мысли об аналоге LLVM меня занимают больше.
P.S. Попросил бы присутствующих обходиться без личных нападок.✅ 2024/09/01 22:27, Иван #220
Просто задумываюсь, насколько правильно делать ассемблер именно для x86. С одной стороны, на чём-то надо тренироваться. Плюс самая распространённая архитектура. А с другой... Intel в кризисе (хотя упавшее знамя может подхватить AMD), роль x86 уменьшается. Да и сомневаюсь, что у нас в стране когда-нибудь будет производство x86. Короче, мысли об аналоге LLVM меня занимают больше. x86 — просто один из экземпляров, на котором действительно можно потренероваться. В дальнейшем можно перейти на другие платформы без проблем. Либо совместив несколько задав промежуточный язык.✅ 2024/09/01 23:37, Неслучайный читатель #221
Вот только непонятно, что такое — симкод. Символьный код? То есть не аббревиатуры, а всякие +-*/?✅ 2024/09/01 23:47, Иван #222
Вот только непонятно, что такое — симкод. Символьный код? То есть не аббревиатуры, а всякие +-*/? Да, у Юрия(автора сайта) похожая концепция.✅ 2024/09/02 00:00, alextretyak #223
Автор сайтаразработчик этого аналога должен вовсю постараться, чтобы не было путаницы между «shr» и «sar». Он должен сделать работу качественно. Даже если «отечественный аналог LLVM» будет работать идеально без ошибок, то всё равно иногда требуется посмотреть ассемблерный листинг с целью анализа итогового сгенерированного машинного кода:- оценить насколько эффективно компилятор выполнил встраивание функций, какие переменные поместил в регистры, как часто происходит обращение к памяти и прочее
- сравнить качество оптимизации одинакового исходного кода на языке высокого уровня (например C++) различными компиляторами — например я нередко сравниваю ассемблерный код, сгенерированный Clang-ом (который использует LLVM) с кодом, сгенерированным GCC и MSVC (которые LLVM не используют)
eax^0 Такую запись можно спутать с eax^=0, которая ничего не делает.✅ 2024/09/02 22:33, Автор сайта #224
всё равно иногда требуется посмотреть ассемблерный листинг с целью анализа итогового сгенерированного машинного кода Наверное, большинство будет счастливо, чтобы этого не требовалось. Много кто довольствуется рамками узкого специалиста. Думаю, что не ошибусь, если скажу, что большая часть выпускников ИТ-вузов не изучали систему команд процессоров и язык ассемблера.сравниваю ассемблерный код, сгенерированный Clang-ом (который использует LLVM) с кодом, сгенерированным GCC и MSVC (которые LLVM не используют) Занятие хорошее, но большинству недоступное в силу ограниченности знаний.✅ 2024/09/02 22:55, Gudleifr #225
Наверное, большинство будет счастливо, чтобы этого не требовалось С другой стороны, это ниша для русского программирования. Зачем громоздить ЯВУ, требующие дорогостоящих IDE, обязательного лицензирования и изучения надмозговых стандартов? Если можно хакнуть то, что у тебя на столе. Плюс, мы один раз так уже сделали в 80-х. Плюс, сейчас в моде контроллеры, которые ковырять сам бог велел.✅ 2024/09/05 13:09, Иван #226
@Автору сайтаКороче, мысли об аналоге LLVM меня занимают больше. Вы пользовались LLVM. А как транслируются системные вызовы (syscall) для различных платформ?✅ 2024/09/05 13:18, Gudleifr #227
системные вызовы (syscall) для различных платформ Системные вызовы — это вызовы операционной системы. Платформа — это процессор с обвесом. Одно с другим никак не связано. Это тот самый "второй вопрос", на который Вы не смогли ответить.✅ 2024/09/05 14:52, Автор сайта #228
Вы пользовались LLVM Не пользовался. Читал, изучал, но не пользовался. Поэтому знаком поверхностно. Но идея нравится. Когда встанет вопрос о генерации кода, то потребуется в нём разобраться хотя бы для выбора — во что генерировать.
P.S. Всё-таки попрошу не отклоняться от темы, чтобы не приходилось чистить сообщения.✅ 2024/09/05 14:58, Иван #229
Когда встанет вопрос о генерации кода, то потребуется в нём разобраться хотя бы для выбора — во что генерировать. Нашел side effect, т.е. привязка к процессору сохраняется.%3 = call i64 asm sideeffect "movl $$0x00000002, %edi\0Amovl $$0x00000006, %edx\0Amovl $$1, %eax\0Asyscall\0A", "=A,{si},~{dirflag},~{fpsr},~{flags}"(i8* %2) #1, !srcloc !1 Вот просто думаю как эта проблемка(привязка) решается. Типа общая инструкция syscall readfile на LLVM IR может быть. В общем тоже немного думаю в этом направлении.
Syscall/sysenter on LLVM: https://stackoverflow.com/a/27714659✅ 2024/09/05 15:04, Gudleifr #230
Нашел side effect, т.е. привязка к процессору сохраняется Нет тут никакой привязки к процессору. Просто вызов функции.✅ 2024/09/05 15:24, Иван #231
Нет тут никакой привязки к процессору. Просто вызов функции. Задание конкретных регистров это не привязка? Как на ARMе отработает этот "просто вызов функции"?✅ 2024/09/05 15:33, Gudleifr #232
Как на ARMе отработает этот "просто вызов функции"? Скорее всего, тут указаны параметры 64-разрядного вызова функции на все случаи жизни. И платформо-зависимый макрос asm приводит их в форму, пригодную для данного случая. Иначе, о какой переносимости мы можем говорить?✅ 2024/09/05 15:41, Иван #233
Скорее всего, тут указаны параметры 64-разрядного вызова ф-ии на все случаи жизни. И платформо-зависимый макрос asm приводит их в форму, пригодную для данного случая. Иначе, о какой переносимости мы можем говорить? Вопрос в том как это реализуется конкретно на LLVM. И нет ли кода LLVM IR который делает абстракцию обращения к файловой системе.✅ 2024/09/05 15:52, Gudleifr #234
Вопрос в том как это реализуется конкретно на LLVM Повтряю, для этого нужно два отсутствующих в Вашей команде человека: понимающий маш.код — т.е., здесь, помнящий параметры вызовов функций для всех потребных режимов и платформ. И понимающий, в какое место ОС ассемблер будет ассемблировать и как к ней прилинковыввать. Иначе "абстракции" так и останутся "абстракциями".✅ 2024/09/05 16:01, Иван #235
понимающий маш.код Понимать нечего, есть справочники по машинному коду для конкретного процессора. Есть абстрактное мышление которое с легкостью позволит переключится с разных процессоров. И есть конкретные вопросы.✅ 2024/09/05 16:05, Gudleifr #236
Понимать нечего, есть справочники по машинному коду для конкретного процессора Нет, тут надо чувствовать на кончиках пальцев, иначе останутся дыры в самых неожиданных местах. Человек должен сам пописать на всех этих платформах.✅ 2024/09/05 16:11, Иван #237
Нет, тут надо чувствовать на кончиках пальцев Все это общие слова, из области ощущений. У вас ответа нет.✅ 2024/09/05 16:29, Gudleifr #238
ответа нет Я точно написал, кого Вам искать.✅ 2024/09/05 18:53, Иван #239
И платформо-зависимый макрос asm приводит их в форму, пригодную для данного случая. Квадратичная зависимость переводчиков и это без учета различных ОС.✅ 2024/09/05 19:01, Gudleifr #240
Квадратичная зависимость переводчиков Нет.без учета различных ОС Совместимость между разными ОС — фикция.✅ 2024/09/05 19:19, Gudleifr #241
P.S. Т.к. я, говоря о написании ассемблера постоянно упоминаю "трех людей, знающих ответы на три вопроса", для упрощения присвою им условные имена:- СПЕЦИАЛИСТ по нужному маш.коду.
- ПОЛЬЗОВАТЕЛЬ, знающий то конкретное место в конкретной ОС, куда будет встраиваться ассемблер.
- ЛЮБИТЕЛЬ, владеющий инструментом, на котором этот ассемблер нужно писать.
✅ 2024/09/05 19:21, Иван #242
Ну не знаете и не знаете, делегирование не засчитывается.❌ 2024/09/06 15:15, Gudleifr #243 Комментарий скрыт
❌ 2024/09/06 16:07, Иван #244 Комментарий скрыт
❌ 2024/09/06 16:15, Gudleifr #245 Комментарий скрыт
❌ 2024/09/06 16:19, Иван #246 Комментарий скрыт
❌ 2024/09/06 16:28, Gudleifr #247 Комментарий скрыт
✅ 2024/09/08 18:44, Иван #248
Первый блин, без раскрутки. https://disk.yandex.ru/d/Ync_OnUV03EOyA❌ 2024/09/08 18:50, Gudleifr #249 Комментарий скрыт
❌ 2024/09/08 18:57, Иван #250 Комментарий скрыт
❌ 2024/09/08 18:59, Gudleifr #251 Комментарий скрыт
✅ 2024/09/09 00:39, Автор сайта #252
Иван, Вы позаботились о счётчике закачек, чтобы знать, сколько человек этим заинтересовалось?✅ 2024/09/09 00:58, Иван #253
Иван, Вы позаботились о счётчике закачек, чтобы знать, сколько человек этим заинтересовалось? Да, статистика. Код ассемблера примерно такой:; --------------------------------------------------------------------- ФУНКЦИЯ_ВЫВОДА: ; --------------------------------------------------------------------- ; [РФ + 0ш10] - указатель на строку ; --------------------------------
ВТОЛКНУТЬ РФ ; пролог функции КОПИРОВАТЬ РФ, РС ВТОЛКНУТЬ РЧ ; сохраним счетчик
; считаем длину строки ВТОЛКНУТЬ [РФ + 0ш10] ВЫЗВАТЬ ФУНКЦИЯ_ДЛИНЫ_СТРОКИ ПРИБАВИТЬ РС, 0ш08 КОПИРОВАТЬ РД, РА ; длина строки
КОПИРОВАТЬ РА, 1 ; системная команда "запись файла" КОПИРОВАТЬ РН, РА ; 1 - консоль КОПИРОВАТЬ РИ, [РФ + 0ш10] ; указатель на строку ВЫЗВАТЬ_СИСТЕМУ ; эпилог функции ВЫТОЛКНУТЬ РЧ ; восстанавливаем счетчик ВЫТОЛКНУТЬ РФ НАЗАД В архиве полный код примера.❔ 2024/09/09 02:00, Gudleifr #254
КОММЕНТАРИЙ СПЕЦИАЛИСТА. Большинство комманд маш.кода имеет формат хрень-i-регистр-память-хрень, где флаг i обозначает направление из памяти в регистр или наоборот. Т.о. естественная русская форма (см. например Б3-34) этих команд П и ИП (из регистра в память и из памяти в регистр, соответственно). Арифметические/логические операции — из той же оперы, т.е. их естественно обозначить П+, ИП& и т.д...✅ 2024/09/09 13:22, Вежливый Лис #255
У Ivan есть (в виде бинарника) ассемблер для кириллицы. Ivan специалист в этом вопросе. Вы-то, @Gudleifr, с кириллицей не работали. Результаты или есть, или нет. У Ivan — есть. А чего добились Вы,чтобы себя специалистом называть?✅ 2024/09/09 13:36, Gudleifr #256
А чего добились Вы,чтобы себя специалистом называть? Я — не специалист. Я — системщик.
Если Вы не можете найти на моем форуме подходящих исходников, это не потому, что я их мало написал, а потому, что Вы не умеете листать форумы.✅ 2024/09/09 14:32, Неслучайный читатель #257
- Программист — специалист, занимающийся программированием, то есть созданием компьютерных программ.
- Программирование как род занятий может быть основной профессиональной деятельностью, а может вспомогательной при решении других задач, а также может быть хобби.
Из этого можно сделать вывод, что любой человек, который создаёт программы, является программистом. Безо всякой связи со степенью освоения этого занятия. Иван сделал программу? Да. Значит он программист.Специалист — работник, выполнение обязанностей которого предусматривает наличие начального, среднего или высшего профессионального (специального) образования или хороших практических знаний и/или практического опыта в какой-либо сфере. Знания Ивана оказались достаточны, чтобы сделать программу? Да. Значит он специалист.✅ 2024/09/09 14:38, Gudleifr #258
Специалист — работник, выполнение обязанностей которого предусматривает наличие начального, среднего или высшего профессионального (специального) образования или хороших практических знаний и/или практического опыта в какой-либо сфере. Знания Ивана оказались достаточны, чтобы сделать программу? Да. Значит он специалист. Он не сделал программу! Выше приведено ТЗ от Лиса: русскоязычный NASM под ELF64. Писание Ивана под это ТЗ не только не подходит, но не является даже шагом к его созданию.
Т.З. "Специалиста" я определил выше, чисто условно, для удобства объяснений.✅ 2024/09/09 16:42, Вежливый Лис #259
Лис нигде про NASM не говорил. Вот FASM написан сам на себе. И Лис просил так же.✅ 2024/09/09 17:22, Gudleifr #260
И Лис просил так же Поправка принимается.
КОММЕНТАРИЙ ПОЛЬЗОВАТЕЛЯ: Дело не выборе "бренда", а в отсутствии практической потребности в данном проекте.✅ 2024/09/09 22:55, Автор сайта #261
Дело ... в отсутствии практической потребности в данном проекте. Хотелось бы фактов, а не оценочных суждений, поэтому и задал вопрос о счётчике закачек. Если он есть, то со временем даст пищу для размышлений и обсуждений. Я пока что со своим ассемблером зафиксировал нулевой интерес. А как у Ивана — ждём, когда поделятся статистикой.✅ 2024/09/09 23:03, Иван #262
А как у Ивана — ждём, когда поделятся статистикой. Зачем ждать? Там все открыто. Просто смотрите информацию о файле. Ну или не знаю может у меня не показывается и нужно какую-то "галочку" поставить. Говорите, если не нашли.
У вас: Просмотры:28. Скачан:18 раз
У меня сейчас: 12 и 7.✅ 2024/09/09 23:09, Gudleifr #263
Хотелось бы фактов, а не оценочных суждений Ну, по крайней мере, в теме не представлено ни одной практической задачи, требующей подобного инструмента.✅ 2024/09/09 23:25, Автор сайта #264
Если кто-то не представляет, какие задачи решает ассемблер, то весь Интернет ему в помощь.✅ 2024/09/09 23:47, Gudleifr #265
Если кто-то не представляет, какие задачи решает ассемблер Тогда, в чем проблема, найти хоть одну? Берете любую, и делаете под неё ассемблер.✅ 2024/09/10 00:01, Автор сайта #266
Не говорите, что мне нужно делать, и я не буду говорить, куда вам нужно идти. © Жванецкий Не надо строить планы людям. Стройте их себе. Остальные сами разберутся, что и в каком порядке им делать.✅ 2024/09/10 00:19, Gudleifr #267
Не надо строить планы людям Т.е. у Вас такой задачи нет?✅ 2024/09/10 00:29, Автор сайта #268
А Вы за несколько лет этого не заметили? Я могу отвечать за собственные планы.✅ 2024/09/10 00:37, Gudleifr #269
А Вы за несколько лет этого не заметили? Именно так. Я не вижу связи обсуждений языков программирования в сферическом вакууме с какими-либо практическими задачами. Тем более, требующими написания ассемблера, причем, русского. Уж, извините.✅ 2024/09/10 00:38, Иван #270
Троллинг — метод коммуникации, основанный на сарказме или провокации. Цель — вызвать агрессию и сделать так, чтобы жертва троллинга потеряла контроль над собой. Троллинг приносит удовольствие тем, кто провоцирует людей и поднимает их самооценку. Gudleifr, вы уже подняли свою самооценку сегодня?✅ 2024/09/10 00:43, Gudleifr #271
основанный на сарказме или провокации И какое отношение это имеет к простой задаче, которую тут никто не может решить? Я провоцирую её решать? Возможно. Но это будет вам на пользу.✅ 2024/09/10 10:44, Иван #272
КОММЕНТАРИЙ ПОЛЬЗОВАТЕЛЯ: Дело не выборе "бренда", а в отсутствии практической потребности в данном проекте. И какое отношение это имеет к простой задаче, которую тут никто не может решить? Я провоцирую её решать? Возможно. Но это будет вам на пользу. И это говорит один человек. Что это? Шизофрения?✅ 2024/09/10 13:38, Gudleifr #273
Лис на своем форуме оправдывает "практичность ассемблера": Софт устроен так, что более сложные уровни основываются на нижних базовых уровнях Это не верно. "Железом" для "софта" может быть "машина" любой степени "электронности" и/или "виртуальности". Именно зацикленность на "софте" для "передового западного железа" порождает отечественное отставание.✅ 2024/09/10 14:40, Вежливый Лис #274
У нас уже есть проект "Сказочная колесница", это виртуальная машина с местной уникальной системой команд. Что же Вы под неё-то ассемблер не написали? Она чудесная, с исходниками — http://plana.mybb.ru/viewforum.php?id=96✅ 2024/09/10 14:59, Gudleifr #275
У нас уже есть проект "Сказочная колесница", это виртуальная машина с местной уникальной системой команд А зачем? Кому она нужна? Вас кто-то просил её писать? Или, опять, вместо того, что нужно, сделали то, что легко?
Посмотрите вокруг. Совсем нечего АСУчить? Например, соблюдение протоколов вашей партячейки?✅ 2024/09/10 15:32, Вежливый Лис #276
Кому она нужна? Вас кто-то просил её писать? Да, двумя постави выше Вы предлагали использовать виртуальную машину, отличную от топового иностранного железа. Мы выполнили Ваше пожелание.✅ 2024/09/10 15:35, Gudleifr #277
Вы предлагали использовать виртуальную машину Пардон. Я предлагал её использовать, а не писать.✅ 2024/09/10 15:37, Вежливый Лис #278
Ясно. Используйте.❌ 2024/09/10 15:40, Gudleifr #279 Комментарий скрыт
✅ 2024/09/10 23:35, Автор сайта #280
Я провоцирую её решать? ... Но это будет вам на пользу. Наибольшую пользу Вы бы принесли, если бы провоцировали на своём собственном форуме. А пока что лучшее определение Вашей деятельности дал Иван.Именно зацикленность на "софте" для "передового западного железа" порождает отечественное отставание. А разве зацикленность на игрушках не порождает ещё большее отставание? Слишком много про игрушки на Вашем форуме. Пора взрослеть.
Прекрасная зная, о чём говорит доменное имя этого сайта, Вы всерьёз предлагаете заняться железом.Что это? Шизофрения? © Иван Или это всё-таки троллинг?❌ 2024/09/11 00:17, Gudleifr #281 Комментарий скрыт
❌ 2024/09/11 01:33, Gudleifr #282 Комментарий скрыт
❌ 2024/09/11 02:09, Gudleifr #283 Комментарий скрыт
❌ 2024/09/12 23:36, Gudleifr #284 Комментарий скрыт
✅ 2024/09/12 23:49, Вежливый Лис #285
Если я зарегистрируюсь на сайте compiler.su, то мне покажут скрытые комментарии?❌ 2024/09/12 23:51, Gudleifr #286 Комментарий скрыт
✅ 2024/09/12 23:51, politefox(аt)zoho.eu #287
нет, не показывают.✅ 2024/09/12 23:53, Вежливый Лис #288
Ещё и email спалили...✅ 2024/09/12 23:56, Автор сайта #289
Скрытые комментарии можно увидеть, нажав «Ctrl-U». Скрыто то, что не по теме, что не улучшает содержимое сайта. А выяснять отношения лучше в другом месте.✅ 2024/09/12 23:59, Вежливый Лис #290
да, работает, View Source это в Firefox и там это HTML-комментарии.❌ 2024/09/25 12:54, Gudleifr #291 Комментарий скрыт
✅ 2024/09/25 15:27, Иван #292
Cмотрите в следующей серии съест ли Лис Колобка.✅ 2024/09/25 16:09, Вежливый Лис #293
очередная попытка сдвинуть дело с мертвой точки закончилась Почему Вы так решили? Так или иначе, этим вашим высказыванием вы сформировали у Ивана ощущение, что Лис собирается колобка съесть. Между тем у Лиса такого намерения не было. Лис оклеветан!❌ 2024/09/25 16:13, Gudleifr #294 Комментарий скрыт
✅ 2024/09/25 16:21, Вежливый Лис #295
Докажите. Мне кажется, у вас сбой телепатии. На текущий момент я наблюдаю проект, который обещан быть законченным через полгода. Через полгода и посмотрим. Вот Павиа выложил компилятор, компилятор лежит (правда там по срокам два года на доделку ушло, на форуме где-то 2D-графики есть). Может и ассемблер будет доделан. Это пока неизвестно. Поэтому про провал ничего пока не известно.❌ 2024/09/25 16:24, Gudleifr #296 Комментарий скрыт
✅ 2024/09/25 17:05, Вежливый Лис #297
Срок был дан Вам — на принятие управляющих решений Ньет, две недели было дано на всю реализацию. Это в сообщении #96 от 2024-08-16 на этой странице — http://compiler.su/o-russkom-assemblere.php#96. Управляющие ответы были выданы в тот же день 2024-08-16 (Сообщение #103). Две недели прошло (сегодня 2024-09-25). Вы, Gudleifr, теперь явно не оракул.❌ 2024/09/25 17:25, Gudleifr #298 Комментарий скрыт
✅ 2024/09/25 17:37, Вежливый Лис #299
Срыв сроков — это показатель неумения планировать. Планирование — базовый управленческий навык. У вас его нет. Я со своей стороны никаких обещаний не давал, так что какие ко мне претензии?❌ 2024/09/25 17:40, Gudleifr #300 Комментарий скрыт
✅ 2024/09/25 17:51, Вежливый Лис #301
Когда Иван проект провалит, тогда и напишем, каким образом он это сделал. Например если его проект не будет принят в стране ("адоптирован" пользователями, по-ихнему). Такое может произойти, если его проект будет неудобно использовать, например мне, например не будет установочного пакета для моей операционной системы. Или если у проекта не будет ничего кроме экзешника (без документации дизассемблировать мало кто захочет, и это не я).❌ 2024/09/25 18:05, Gudleifr #302 Комментарий скрыт
✅ 2024/09/25 18:17, Вежливый Лис #303
Лис не подписывался составлять планы для всех проектов, для этого есть площадка открытая для всех разумных (ну кроме тех, кто токсичными способами мешает другим. Например не соблюдает пушистое и душистое лисоправила).❌ 2024/09/25 18:24, Gudleifr #304 Комментарий скрыт
✅ 2024/09/25 18:30, Вежливый Лис #305
Сначала вам надо аргументировать, что провал вообще есть. Затем пояснить, при чём тут Лис. Тоже непонятно.❌ 2024/09/25 18:46, Gudleifr #306 Комментарий скрыт
✅ 2024/09/25 18:53, Вежливый Лис #307
Проект есть, он неактивен, потому что у него нет лидера. Там так и написано.❌ 2024/09/25 18:54, Иван #308 Комментарий скрыт
❌ 2024/09/25 19:06, Gudleifr #309 Комментарий скрыт
✅ 2024/09/25 23:15, Вежливый Лис #310
Мне не очень ясно, что именно вам смешно. "Помещать в attic" это общепринятая практика, взята из опенсорсного проекта Apache.❌ 2024/09/25 23:25, Gudleifr #311 Комментарий скрыт
✅ 2024/09/25 23:42, Вежливый Лис #312
Я Ивану предложил, он сказал, что не видит необходимости. Разбанил Вас — покажите класс.❌ 2024/09/25 23:49, Gudleifr #313 Комментарий скрыт
✅ 2024/09/25 23:58, Вежливый Лис #314
Вы лидер? Ищите.❌ 2024/09/26 00:03, Gudleifr #315 Комментарий скрыт
✅ 2024/09/26 00:05, Вежливый Лис #316
Мой проект — русификация ИТ. Я провёл планирование, выделил подзадачу. Написание ассемблера — подпроект. Ищу на него лидера. Просто сообщаю, если Вы не знали.❌ 2024/09/26 00:14, Gudleifr #317 Комментарий скрыт
✅ 2024/09/26 00:17, Вежливый Лис #318
Лично я хочу чтобы в стране было передовое ИТ. Для этого лично мне и нужен этот проект.❌ 2024/09/26 00:22, Gudleifr #319 Комментарий скрыт
✅ 2024/09/26 10:05, Иван #320
Смотрите в следующей серии: станет ли Gudleifr сантехником или продолжит руководить у обочины.✅ 2024/09/26 10:52, Иван #321
На песчаный карьер 2 человека. (https://www.youtube.com/watch?v=2liTFl53zEY)✅ 2024/09/26 15:56, DEAD C0DE #322
60% мейнтейнеров (специалистов специалистов по сопровождению или пакетированию свободного ПО) проектов в открытым исходным кодом собираются уйти, потому что им не платят за их труд. Они не намерены работать бесплатно, а те, в ком ещё теплится энтузиазм, не могут уделять своим проектам достаточно времени, потому что тратят его на зарабатывание денег. Также желание работать над Open Source убивают стресс и завышенные ожидания пользователей. Чтобы с кого-то что-то требовать, надо сначала заплатить. Насколько умно держать спрос с того, кто безвозмездно тратит своё личное время? Либо терпи и жди, либо плати, если нет терпения.✅ 2024/09/26 21:00, Вежливый Лис #323
Gudleifr тратит его время, чтобы донести до нас какие-то мысли. Но он жадный и не тратит времени достаточно для того, чтобы мысли изложить развёрнуто и понятно. Он думает, что мы думаем так же, как и он, и короткого "нужен конкретный сантехник Вася" будет достаточно. Мы, конечно, можем потратить время, и попробовать извлечь знания из Gudleifr. Скорее всего мы извлечём базовые знания по экономике и теплофизике. Надо ли нам тратить время именно на это?❌ 2024/09/27 12:57, Gudleifr #324 Комментарий скрыт
✅ 2024/09/27 13:18, Вежливый Лис #325
Время жизни каждого человека субъективно бесценно. Но из бесценности никак не следует, что оно ничего не стоит. Рабство предполагает нерыночные отношения, к нему "сто́ит" или "не стоит" не применимо. Предлагая этот древний и неэффективный способ управления ы демонстрируете свою низкую квалификацию в менеджменте.❌ 2024/09/27 13:35, Gudleifr #326 Комментарий скрыт
✅ 2024/09/27 14:58, Иван #327
Cодержание предыдущей серии: Gudleifr продолжает водить руками на обочине, пока другие проезжают мимо. В этой серии: Он предлагает записываться к нему в рабы. Какая машина приедет за ним?❌ 2024/09/27 15:06, Gudleifr #328 Комментарий скрыт
✅ 2024/09/29 21:44, ИванАс #329
PS. Иван Горчаков и Иван, который пишет ассемблер сейчас — разные люди. Теперь, я Иван, который пишет ассемблер буду писать от имени ИванАс, чтобы люди не путались.✅ 2024/09/29 23:43, Автор сайта #330
Спасибо. Ну вот и расставили точки над «ё».❔ 2024/10/01 09:34, ИванАс #331
Юрий, у вас зарегистрироваться на сайте можно? Регистрация сразу не проходит.❔ 2024/10/01 09:36, Иван #332
Я имею ввиду русские самосчеты. Добавить свой отзыв
Написать автору можно на электронную почту mail(аt)compiler.su
|