ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π΅ ΠΏΡΠΎΠ΅ΠΊΡΡΡ Redbean 2.0, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΡΠ΅Π±-ΡΡΡΠ²ΡΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄ΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ Π² Linux, Windows, MacOS, FreeBSD, NetBSD ΠΈ OpenBSD. ΠΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΡΡΡΠ²ΡΡΠ°, ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Ρ Π² Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», ΠΊΠΎΠΉΡΠΎ Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ ZIP Π°ΡΡ ΠΈΠ²ΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° zip utility Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ΡΠΎ ΠΌΡ ΠΊΠ°ΡΠΎ ZIP Π°ΡΡ ΠΈΠ² ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π° ΡΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΠΈ Ρ Ρ Π΅Π΄Π΅ΡΠΈΡΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ C Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Cosmopolitan. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΠΈ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·Π° ISC.
ΠΠ΄Π΅ΡΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π΄Π° Π΄ΠΎΡΡΠ°Π²ΠΈ Π΅Π΄ΠΈΠ½ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» Β«redbean.comΒ» Ρ Π²Π³ΡΠ°Π΄Π΅Π½ ΡΠ΅Π± ΡΠ΅ΡΠ²Π΅Ρ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π½Π° ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° zip utility Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ HTML ΠΈ Lua ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ΅Π± ΡΡΡΠ²ΡΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
Π‘Π»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ», Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π·Π°ΠΏΠ°Π·Π΅Π½ΠΎΡΠΎ Π² Π½Π΅Π³ΠΎ ΡΠ΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΡΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡ. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ localhost, Π½ΠΎ ΡΡΡΠ²ΡΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΡΠ΅Π± ΡΡΡΠ²ΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ·ΠΈ ΡΡΡΠ²ΡΡ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π° ΡΠ΅Π±ΡΠ°ΠΉΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°). ΠΠ³ΡΠ°Π΄Π΅Π½ΠΈΡΡ ΡΠ΅Π± ΡΡΡΠ²ΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ HTTPS ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° sandbox-ΠΈΠ·ΠΎΠ»Π°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ. ΠΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π΅Π½ 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 ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° shell ΡΠΊΡΠΈΠΏΡ, ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠΎΠ²Π°, ΡΠ΅ 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 hello $ printf 'GET /hello.lua\n\n' | nc 127.0.0.1 8080 hello
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
