πŸ’Ύ Archived View for any-key.press β€Ί forth β€Ί preForth.gmi captured on 2024-12-17 at 09:28:46. Gemini links have been rewritten to link to archived content

View Raw

More Information

-=-=-=-=-=-=-

"Новый синтСз" / "New synthesis": preForth, seedForth

Π’ Ρ„Π΅Π΄ΠΈΠΌΠΈΡ€Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π»ΡŒΠΊΠ½ΡƒΠ»ΠΎ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° FOSDEM Π² 2020 Π³ΠΎΠ΄Ρƒ Π±Ρ‹Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ выступлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠ²Ρ‘Π» Ulrich Hoffmann. Π’ своСй нСбольшой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ½ рассказал ΠΎ симпатичной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π€ΠΎΡ€Ρ‚-систСмы: preForth ΠΈ seedForth.

Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ссылки:

Π—Π°ΠΏΠΈΡΡŒ выступлСния Π½Π° youtube, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ тСкстовоС описаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Π’ΠΈΠ΄Π΅ΠΎ запись выступлСния (mp4, 142.2 MiB)

Π’ΠΈΠ΄Π΅ΠΎ запись выступлСния (webm, 112.6 MiB)

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° github

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π€ΠΎΡ€Ρ‚-систСмы Π½Π° Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°:

preForth

preForth это ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ нСбольшого минимально ядра Forth. БобираСтся ΠΎΠ½ ΠΈΠ· preForth.asm, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π° гСнСрируСтся с использованиСм gforth. ΠŸΠΎΡ‚ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ preForth.asm ассСмблируСтся fasm'ΠΎΠΌ, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ ld прСвращаСтся Π² исполняСмый ELF. На Linux это выглядит ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

cat preForth-i386-rts.pre preForth-rts.pre preForth-i386-backend.pre preForth.pre \
    | gforth load-i386-preForth.fs > preForth.asm

fasm preForth.asm preForth.Linux.o

LDEMULATION=elf_i386 ld -arch i386 -o preForth.Linux \
   -dynamic-linker /lib32/ld-linux.so.2 \
   /usr/lib/i386-linux-gnu/crt1.o /usr/lib/i386-linux-gnu/crti.o \
   preForth.Linux.o \
   -lc /usr/lib/i386-linux-gnu/crtn.o

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎ ΠΌΠ½Π΅, ΠΆΠΈΡ€Π½ΠΎΠ²Π°Ρ‚ΠΎ для минималистичного бустрапСра (gforth + fasm + ld). ΠŸΡ€ΠΎ использованиС Π΄ΠΎΠΊΠ΅Ρ€Π° я ΠΏΡ€ΠΎΠΌΠΎΠ»Ρ‡Ρƒ, вСдь Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ сборку ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Ρ‘ΠΌ. Но заявлСниС Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² ΠΎ "can bootstrap itself" Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ preForth с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ трСбования fasm ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ° ΠΈΠ· gcc выглядит Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€Π΅ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ.

Π”Π°, стоит ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ собираСтся это всС Π² 32-Ρ… разрядном Ρ€Π΅ΠΆΠΈΠΌΠ΅. ΠœΠΎΠ³Ρƒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ идСя Π±Ρ‹Π»Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π±Ρ‹ ΠΎΠ΄Π½ΠΈΠΌ asm Ρ„Π°ΠΉΠ»ΠΎΠΌ ΠΎΡ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ i386 ΠΈ amd64 Linux-систСмы. Но, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° OpenBSD Ρ‚Π°ΠΊΠΎΠΉ фокус Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘Ρ‚. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны arm, arm64, Π΄Π° ΠΈ riscv систСмы ΡƒΠΆΠ΅ Π½Π΅ Ρ€Π΅Π΄ΠΊΠΎΡΡ‚ΡŒ (я, ΠΎΡ‚ΠΊΡ€ΠΎΠ²Π΅Π½Π½ΠΎ говоря, Π½Π΅ Π² курсС совмСстимости elf Ρ„Π°ΠΉΠ»ΠΎΠ² для i386 с этими Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ Π² Linux).

ЧСстно говоря Ρƒ мСня Π² Π³ΠΎΠ»ΠΎΠ²Π΅ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ маринуСтся идСя Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅, Π½ΠΎ Π±Π΅Π· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ трСбования ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Forth Π½Π° систСмС. Плюс ΠΌΠ½Π΅ Π½Π΅ нравится Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ внСшнСго ассСмблСра. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, хотя ΠΈΠΌΠ΅Π½Π½ΠΎ эта конкрСтная рСализация мСня Π½Π΅ устроила, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ preForth Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎ.