commit f9e0659d358ead3e91dc204585d465fa23440a38 from: Aleksey Ryndin date: Mon Oct 28 16:11:07 2024 UTC Add /capsule/forth/preForth.gmi commit - 3ed57848e51fe3bc22e8f2a6c074a5f709f6bc90 commit + f9e0659d358ead3e91dc204585d465fa23440a38 blob - 4cf1ae339dbbaa4b6f52daacf4994d01b68bee73 blob + 3879308da7584de4ee44bea4c3012c5a9efe1596 --- capsule/atom.xml +++ capsule/atom.xml @@ -8,7 +8,13 @@ continue continue@to.any-key.press - 2024-10-16T11:48:56.083067+00:00 + 2024-10-28T16:01:43.965865+00:00 + + gemini://any-key.press/forth/preForth.gmi + + Forth 🏰 "Новый синтСз" / "New synthesis": preForth, seedForth + 2024-10-28T16:01:43.965865+00:00 + gemini://any-key.press/vostok/lonk.gmi blob - da503ec4fcca9a77389c70a0dcb74e73a46494e9 blob + 262608c28a1b7559a7657356d1332c40a9a5a996 --- capsule/forth/index.gmi +++ capsule/forth/index.gmi @@ -8,6 +8,7 @@ Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ капсулы собраны ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прямо ΠΈΠ»ΠΈ косвСнно относятся ΠΊ языку программирования ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Forth. +=> preForth.gmi "Новый синтСз" / "New synthesis": preForth, seedForth => cf2023.gmi colorForth: Ρ€Π°Π΄ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΠ·ΠΌ Π§Π°ΠΊΠ° ΠœΡƒΡ€Π° => retro.gmi Retro: соврСмСнный Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚ Forth => introduction.gmi ΠœΠΎΡ‘ знакомство с Forth blob - /dev/null blob + 6635951e71f357136f2ca0c0f0e4770cd0591d5d (mode 644) --- /dev/null +++ capsule/forth/preForth.gmi @@ -0,0 +1,36 @@ +# "Новый синтСз" / "New synthesis": preForth, seedForth + +Π’ Ρ„Π΅Π΄ΠΈΠΌΠΈΡ€Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π»ΡŒΠΊΠ½ΡƒΠ»ΠΎ сообщСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΎ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° FOSDEM Π² 2020 Π³ΠΎΠ΄Ρƒ Π±Ρ‹Π»ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ выступлСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠ²Ρ‘Π» Ulrich Hoffmann. Π’ своСй нСбольшой Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΎΠ½ рассказал ΠΎ симпатичной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π€ΠΎΡ€Ρ‚-систСмы: preForth ΠΈ seedForth. + +Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ ссылки: +=> https://www.youtube.com/watch?v=5vYUTQAfzr4 Π—Π°ΠΏΠΈΡΡŒ выступлСния Π½Π° youtube, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ тСкстовоС описаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. +=> https://mirrors.dotsrc.org/fosdem/2020/AW1.125/forth_new_synthesis.mp4 Π’ΠΈΠ΄Π΅ΠΎ запись выступлСния (mp4, 142.2 MiB) +=> https://mirrors.dotsrc.org/fosdem/2020/AW1.125/forth_new_synthesis.webm Π’ΠΈΠ΄Π΅ΠΎ запись выступлСния (webm, 112.6 MiB) +=> https://github.com/uho/preForth Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с исходным ΠΊΠΎΠ΄ΠΎΠΌ Π½Π° github + +ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Ρ€Π°Π·Π΄Π΅Π»ΠΈΠ» Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π€ΠΎΡ€Ρ‚-систСмы Π½Π° Π΄Π²Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°: +* preForth: минималистичноС Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ядро Forth, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ достаточно для сборки самого сСбя ("can bootstrap itself"). По заявлСниям Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² preForth ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ портируСмая основа для ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Forth ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков программирования. Π‘ ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния эти трСбования Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ (смотри ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»). +* seedForth: ΡƒΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ комплСксная рСализация Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Forth. + +## 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 Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎ.