Commit Diff


commit - 3ed57848e51fe3bc22e8f2a6c074a5f709f6bc90
commit + f9e0659d358ead3e91dc204585d465fa23440a38
blob - 4cf1ae339dbbaa4b6f52daacf4994d01b68bee73
blob + 3879308da7584de4ee44bea4c3012c5a9efe1596
--- capsule/atom.xml
+++ capsule/atom.xml
@@ -8,7 +8,13 @@
         <name>continue</name>
         <email>continue@to.any-key.press</email>
     </author>
-    <updated>2024-10-16T11:48:56.083067+00:00</updated>
+    <updated>2024-10-28T16:01:43.965865+00:00</updated>
+    <entry>
+        <id>gemini://any-key.press/forth/preForth.gmi</id>
+        <link href="gemini://any-key.press/forth/preForth.gmi" rel="alternate"/>
+        <title>Forth 🏰 "Новый синтСз" / "New synthesis": preForth, seedForth</title>
+        <updated>2024-10-28T16:01:43.965865+00:00</updated>
+    </entry>
     <entry>
         <id>gemini://any-key.press/vostok/lonk.gmi</id>
         <link href="gemini://any-key.press/vostok/lonk.gmi" rel="alternate"/>
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 Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это Π² ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎ.