ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Redbean 2.0, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ΅Π± ΡΡΡΠ²ΡΡ, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π΄ΠΎΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π½Π° Linux, Windows, MacOS, FreeBSD, NetBSD ΠΈ OpenBSD. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΡΡΡΠ²ΡΡΠ°, ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ ZIP Π°ΡΡ ΠΈΠ²Π½ΠΈΡ ΡΠΎΡΠΌΠ°Ρ ΠΈ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° zip Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΡΠΎΠΉ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Ρ ΠΊΠ°ΡΠΎ ZIP Π°ΡΡ ΠΈΠ² ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π°ΡΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π° C Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Cosmopolitan. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· ISC.
ΠΠ΄Π΅ΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» βredbean.comβ Ρ Π²Π³ΡΠ°Π΄Π΅Π½ ΡΠ΅Π± ΡΡΡΠ²ΡΡ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° zip, Π·Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ HTML ΠΈ Lua ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΡΠΌ ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ°Π±ΠΎΡΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ΅Π± ΡΡΡΠ²ΡΡ, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
Π‘Π»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π²ΡΠ² ΡΠ°ΠΉΠ»Π°. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡΡΡ Π΅ ΠΏΡΠΈΠΊΠ°ΡΠ΅Π½ ΠΊΡΠΌ localhost, Π½ΠΎ ΡΡΡΠ²ΡΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΡΠ΅Π± ΡΡΡΠ²ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·ΠΈ ΡΡΡΠ²ΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°). ΠΠ³ΡΠ°Π΄Π΅Π½ΠΈΡΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° HTTPS Π΄ΠΎΡΡΡΠΏ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ Π½Π° ΠΏΡΡΡΡΠ½Π° ΡΡΠ΅Π΄Π°, ΠΊΠΎΡΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠ΅ Π΄ΠΎ ΠΊΠΎΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π΄ΠΎΡΡΡΠΏ. ΠΠ° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π΅ ΠΎΡΠΈΠ³ΡΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π΅Π½ REPL ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° Lua REPL ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° bestline, Π°Π½Π°Π»ΠΎΠ³ Π½Π° GNU Readline), ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°.
Π’Π²ΡΡΠ΄ΠΈ ΡΠ΅, ΡΠ΅ ΡΠ΅Π± ΡΡΡΠ²ΡΡΡΡ Π΅ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΠΌΠΈΠ»ΠΈΠΎΠ½ Π·Π°ΡΠ²ΠΊΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠΌΠΏΡΡΡΡ, ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°ΠΉΠΊΠΈ gzip ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΎ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°, Π΅, ΡΠ΅ zip ΠΈ gzip ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΠ±Ρ ΡΠΎΡΠΌΠ°Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Ρ, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Ρ ΠΎΡ Π²Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π² zip ΡΠ°ΠΉΠ»Π°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡΡ ΡΠ°ΠΉΠ» Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΈ Π΅ ΠΌΠ°Π»ΡΠΊ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅Ρ, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° fork Π²ΡΡΡ Ρ Π½Π΅Π³ΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π° ΠΌΠ°Π»ΠΊΠΎ ΠΈΠ»ΠΈ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
Π Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅Π± ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° JavaScript Π² Π±ΡΠ°ΡΠ·ΡΡΠ°, Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π² Lua, ΡΠ΅Π± ΡΠ°ΠΌΠΊΠ°ΡΠ° Fullmoon ΠΈ Π‘Π£ΠΠ SQLite. ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΡΡ Π΅ΠΌΠ°ΡΠ° Π·Π° Ρ Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΡΠΎΠ»ΠΈ argon2, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° IP ΡΠ΅Π³ΠΈΠΎΠ½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ MaxMind ΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Unix API Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Cosmopolitan. Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΡΠ΅ΠΊ, ΠΊΠΎΠΉΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅Π± ΡΡΡΠ²ΡΡ, MbedTLS, Cosmopolitan, Lua ΠΈ SQLite, Π΅ ΡΠ°ΠΌΠΎ 1.9 MB.
Π£Π½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ° ΡΡΠ΅Π· ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈ ΠΈ Π·Π°Π³Π»Π°Π²ΠΊΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ (PE, ELF, MACHO, OPENBSD, ZIP) Π² Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ». ΠΠ° Π΄Π° ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» ΡΠ°Π±ΠΎΡΠΈ Π½Π° Windows ΠΈ Unix ΡΠΈΡΡΠ΅ΠΌΠΈ, Π΅Π΄ΠΈΠ½ ΡΡΠΈΠΊ Π΅ Π΄Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Windows PE ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΊΠ°ΡΠΎ ΡΠΊΡΠΈΠΏΡ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠ°ΡΠ°, ΠΊΠ°ΡΠΎ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΡ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Thompson Shell Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠ°ΡΠΊΠ΅ΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠ° "#!". Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ΅ΡΠ°Π²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² Linux, BSD, Windows ΠΈ macOS. $ curl https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com hello.html $ zip redbean.com hello.lua $ ./redbean .com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) ΡΠ»ΡΡΠ°Π½Π΅ http://127.0.0.1:8080 >: ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°β¦ $ curl https://127.0.0.1:8080/hello .html Π·Π΄ΡΠ°Π²Π΅ΠΉ $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 Π·Π΄ΡΠ°Π²Π΅ΠΉ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru