πΎ 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
-=-=-=-=-=-=-
Π ΡΠ΅Π΄ΠΈΠΌΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π»ΡΠΊΠ½ΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π° FOSDEM Π² 2020 Π³ΠΎΠ΄Ρ Π±ΡΠ»ΠΎ ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΎΠ²ΡΠ» Ulrich Hoffmann. Π ΡΠ²ΠΎΠ΅ΠΉ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ ΠΎΠ½ ΡΠ°ΡΡΠΊΠ°Π·Π°Π» ΠΎ ΡΠΈΠΌΠΏΠ°ΡΠΈΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π€ΠΎΡΡ-ΡΠΈΡΡΠ΅ΠΌΡ: preForth ΠΈ seedForth.
ΠΠ½Π΅ΡΠ½ΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ:
ΠΠΈΠ΄Π΅ΠΎ Π·Π°ΠΏΠΈΡΡ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ (mp4, 142.2 MiB)
ΠΠΈΠ΄Π΅ΠΎ Π·Π°ΠΏΠΈΡΡ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ (webm, 112.6 MiB)
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° github
ΠΡΠΎΠ΅ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΠ» ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π€ΠΎΡΡ-ΡΠΈΡΡΠ΅ΠΌΡ Π½Π° Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
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 Π΄Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ Π²ΠΈΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎ.