commit - 3ed57848e51fe3bc22e8f2a6c074a5f709f6bc90
commit + f9e0659d358ead3e91dc204585d465fa23440a38
blob - 4cf1ae339dbbaa4b6f52daacf4994d01b68bee73
blob + 3879308da7584de4ee44bea4c3012c5a9efe1596
--- capsule/atom.xml
+++ capsule/atom.xml
<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
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΊΠ°ΠΏΡΡΠ»Ρ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΡΠΌΠΎ ΠΈΠ»ΠΈ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠ·ΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ 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
+# "ΠΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ΅Π·" / "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 Π΄Π°ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ Π²ΠΈΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎ.