Pull to refresh
-7
0
Send message

извините, но ведь это просто деревья кстати они бвх, это часть UI, разве нет?

тоесть колбасим паттерн на УИ из бвх образующего дерева(ограничивающиеся отсекающиеся последовательности в 2д же - идеально поидее), создаём корень на таргет диалог, кидаем нужные квадратики и УИ готов и кликабелен, другой корень например на панельку для игрока, другой корень на УИ игрока - итого 3 корня(включая тестовый диалог)

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

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

раз за разом смотришь так, кто-то пишет ОС, неужели это не интересно, если нужно ОС почему обязательно делают форки, форки менеджеров пакетных, ведь это и оправдано выходным запросом если нужна ОС ), а по итогу это энтузиасты пишут ОС-ки или не только, интересно

по итогу это интересно только в образовательных целях почему-то, когда в другой ОС, свои правила или пакетном менеджере

попробуйте написать свой простенький компилятор, и запустите цикл с принтом до 1000000 и замерьте время, благо щас можно компилятор заточить на такое, и там всё станет очевидно, понятно, что компилятор будет медленнее или не совсем если оставить только принт до 1000000, но там будут моменты где вы увидите почему так, раст вроде на окамл или на С++, но сути не меняет, скан генерация, дерево, и машинный код

кстати, что на llvm писать парсер, что свой даже не знаю из плюшек только как я понял это машинный код и IR, из '-' толстая зависимость

многие примеры по компиляторам это либо бейсик либо лсп, либо на питоне, либо С++, как я понял голд версия это ansi, с прямой прокидкой в машинный код, но это уровень gcc ), вот попробуйте написать С на С, через байткод и там будет всё очевидно

парсинг - время, вставки, и генерация машинного кода с оптимизациями, или генерация jit

врятли будут конкуренты, это же 1с )

вот кароче как выглядит байт-код(с циферкой) и исполнение(ниже без циферок но с //)

Скрытый текст
------------------
файл с кодом
int main(){
  int a=4*5+5;
  int b=0;
  while(b<10){
   print(b+a);
   b=b+1;
  }
  return 0;
}
-------------------
отладка визуализация с байткодом
---------------------------------
Function: main
TEST b 	// Отладочный вывод компилятора: 'b' имеет индекс 1
TEST b 	// Отладочный вывод компилятора: 'b' имеет индекс 1
TEST a 	// Отладочный вывод компилятора: 'a' имеет индекс 0
TEST b 	// Отладочный вывод компилятора: 'b' имеет индекс 1

--- Сгенерированный байт-код ---
1	// PUSH 4
1	// PUSH 5
4	// MUL
1	// PUSH 5
2	// ADD
18	// STORE 0
1	// PUSH 0
18	// STORE 1
7	// LOAD 1
1	// PUSH 10
11	// CMPLT
15	// JUMP_IF_FALSE 36 <-
7	// LOAD 1
7	// LOAD 0
2	// ADD
6	// PRINT
7	// LOAD 1
1	// PUSH 1
2	// ADD
18	// STORE 1
16	// JUMP 14
1	// PUSH 0
0	// HALT/RET          <-
0	// HALT/RET
--------------------------------
отладка с выводом - принципиально должен был быть вывод но пока я оставил так
//PUSH val 4
//PUSH val 5
//MUL
//PUSH val 5
//ADD
STORE 25 in index 0
//PUSH val 0
STORE 0 in index 1
LOAD 1
//PUSH val 10
CMP_LT: 0 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 25
LOAD 1
//PUSH val 1
//ADD
STORE 1 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 1 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 26
LOAD 1
//PUSH val 1
//ADD
STORE 2 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 2 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 27
LOAD 1
//PUSH val 1
//ADD
STORE 3 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 3 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 28
LOAD 1
//PUSH val 1
//ADD
STORE 4 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 4 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 29
LOAD 1
//PUSH val 1
//ADD
STORE 5 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 5 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 30
LOAD 1
//PUSH val 1
//ADD
STORE 6 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 6 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 31
LOAD 1
//PUSH val 1
//ADD
STORE 7 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 7 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 32
LOAD 1
//PUSH val 1
//ADD
STORE 8 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 8 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 33
LOAD 1
//PUSH val 1
//ADD
STORE 9 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 9 < 10 result 1
JUMP_IF_FALSE to 36 if 1 is false?
LOAD 1
LOAD 0
//ADD
PRINT 34
LOAD 1
//PUSH val 1
//ADD
STORE 10 in index 1
JUMP to 14
LOAD 1
//PUSH val 10
CMP_LT: 10 < 10 result 0
JUMP_IF_FALSE to 36 if 0 is false?
//PUSH val 0
//HALT 
---------------------------------------
конец
Байт-код сохранен в 

вот кароче, else пока нету ) вобщем это интересная штука советую)

вся эта суета пока интересна пока она на ansi C, с генерацией ассемблера сложнее, но я думаю об этом уже, ну и байткод перенос есть уже ) вообще классно работает, вдохновило это bytecode

эмуляция терминала подразумевает линкер ld-<worldOrHost?>.so как и ядро так и user-space имеют линкер, тоесть хост асм-С надо проделать тогда станет ясно, что такое создание ОС как я понимать начинаю

щас я возможно кого-то отрезвлю 1 момент пример из мира линукса буквально вчера разбирался и хотел писать из линукса реализацию С на ассемблере насм и вот к чему я пришел, когда стал нужен -pie

nasm -felf64 main.asm -Iinclude/ -o main.o && 
nasm -felf64 asm_lib.asm -Iinclude/ -o asm_lib.o && 
ld -dynamic-linker=/lib64/ld-linux-x86-64.so.2 -pie main.o asm_lib.o -o my_program

ld-linux-x86-64... как я понял имеет ключевую ситуацию в виде библиотеки скомпанованая в виде ld чтоли

для более глубокого понимания что такое С можно посмотреть мейкфайл наверно самого tinyC наверно, ведь gcc под ос это что-то там такое, которое реально несёт смысл на какой ОС запуск

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

жалко что у вас webgl, так бы можно было бы сделать гпу драйвен на gl4.6, а у вас происходит сжатие данных? ведь меши можно сжимать получается, что-то типо
создали меш - карту

посчитали факторы сжатия

записали

.......

открыли-распаковали-данные готовы

(понятно что это не RLE, но может это было бы тоже интересно)

в геометрии помимо точки и плоскостей есть обьём, это тоже фундамент, тоесть получается можно расширять все примеры до обьемов с их единичными векторами, и точкой относительности! кстати )

как доказать теорему Пифагора мой пример, взял кружку показал и ушел на 10 километров, обьем остался, но кружки не видно, тут наверно с нюансами, но я пока думаю так )

кстати когда-то смотрел обзор, там что-то история про дополнение вскод там тоже что-то было с лицензиями

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

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

вообще в изучении языка помогает писать компилятор кстати, я чутка больше понял, советую

как я понял там вся суть укладывается в самохостинге языка

поидее надо было бы еще проверить запуск nasm потомучто, "компайлер" же можно свой написать )

но поидее он запустится, но я не уверен, еще вообще интересно, 3 стадия языка на старой тачке, тоесть компайлер с асма собирает С, а С собирает новый во(с точки зрения гцц/кланг это конечно ад, но имеем что имеем, конечно до конца отказаться от обвязки гцц/кланг не получится наверно и С++ марс), поэтому и интересно будет ли насм работать )

это конечно крошечное преимущество, но интересно просто уже )

возможно, это имеет отношение к тому что, при схождении точек в перспективе площади сохраняются

вы правильно начали показывать примеры, представьте что наблюдатель стоит в точке 0 0 0 и смотрит в направлении половины угла между x z, тогда уходящий обьект от наблюдателя его ББ будет BBXOZ и куда бы он не ходил в пространстве он имеет одинаковый обьем, но длина его стороны по углу плоскости BBXOZ будет разная, можно начать пытаться обьяснять тоже почему так

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

это да, ничего не обычного, согласен, но первый компидятор - первая радость

ну как опция можно первый(убрать gcc/clang из зависимости для этого придётся на асемблере писать подобие С ) ) язык переписать в (от (bootstrap)ассемблер->first_lang->then->(*)lang+vm) и на первом языке написать уже вм и язык, но тогда сложность и время утраивается

там АСТ генерить на асемблере ), зато если получится, зависимость будет только с ассемблером, но пугает что world(окружение - тоесть библиотеки вот это вот всё) не будет знать о языке ничего, тоесть буквально с нуля )

(*) - сюда без зависимости и зависеть от ассемблера

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

можно даже настроить выхлоп дебаговый, тоесть при исполнении программы компилятор(исполнитель тоесть когда идём по программе, программа в вм в другом виде) пишет нотацию, ну я пока так сделал

это С с виртуальной машиной наверно, там красивая реализация получается, советую если я угадал

получается некоей зеркало С или аналог по синтаксису, но со своими правилами(там четко будут видны места для верификации кстати) и запускается на вашей байт-код машине как я понимаю

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

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

bytecode меня вдохновило это, но я реализовал свой язык на С

самый классный трюк о котором я читал, но сначала по приколу подумал так сделать, это создать язык как С, но с виртуальной машиной, соотв прям 1 в 1 врятли получится, но

Скрытый текст
int main()
{
  int a = (3 + 4) * 2;
  print(a);
  return 0;
}

Function: main
TEST a  // Отладочный вывод компилятора: 'a' имеет индекс 0

--- Сгенерированный байт-код ---
1       // PUSH 3
1       // PUSH 4
2       // ADD
1       // PUSH 2
4       // MUL
18      // STORE 0
7       // LOAD 0
6       // PRINT
1       // PUSH 0
0       // HALT/RET
//PUSH val 3
//PUSH val 4
//ADD
//PUSH val 2
//MUL
STORE 14 in index 0
LOAD 0
PRINT 14
//PUSH val 0
//HALT 

получается интересно, там его развивать можно минималку реализовать до половины Тюринг полного и дальше класс )

тоесть писать на своём байткоде ) теоретически можно в теории переносимый код )

хотел лисп, но по итогу как сам язык компилятор он мне не приглянулся по итогу понравился Форт

класс, успехов вам. а я наконец-то написал С со своим VM (парсер-лексер - ast - bytecode(highlevel asm emulator) все на С) - это невероятно

1
23 ...

Information

Rating
6,708-th
Registered
Activity

Specialization

Specialist
C++
Разработка игр
Linux
C