Freenet Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π΄Π»Ρ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ. ΠΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Freenet ΡΠ°ΡΡΠΈΡΠ°ΠΆΠΈΡΠΎΠ²Π°Π½Ρ ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Ρ Π² ΡΠ΅ΡΠΈ ΡΠ°ΠΊ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π΅ Π·Π½Π°ΡΡ, Π³Π΄Π΅ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π²ΡΠ΅ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠΏΠΈΠΈ. ΠΠΎΠ½ΡΠΈΠ΄Π΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Freenet Π·Π°ΡΠΈΡΠ΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΡΠΎΠ³ΠΎΠΉ ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΠΈ.
Π―Π·ΡΠΊ Java Π±ΡΠ» Ρ ΠΎΡΠΎΡΠΈΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΠΏΠΎ Π΄Π²ΡΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ : ΡΠ΅Π»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΡΠΎΠΊΠ°Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ Java ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»Π°Π²Π½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ. ΠΠΎ-Π²ΡΠΎΡΡΡ : ΠΏΡΠΈΡΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ°ΠΊΠΎΠ²Π°, ΡΡΠΎ Π²Π°ΠΆΠ½ΡΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ API-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, a Java ΠΈΠΌΠ΅Π΅Ρ ΠΌΠΎΡΠ½ΡΠΉ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ API.
Π―Π·ΡΠΊ Π‘ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ Π΄Π»Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π²ΡΡΠΎΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ API Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΡΡΡΠ΄Π½ΠΈΠ» Π±Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΆΠ΅ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ Π±Ρ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π‘++. Π―Π·ΡΠΊΠΈ TΡl, Perl ΠΈΠ»ΠΈ Python ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, Π½ΠΎ ΡΠ΅Π½ΠΎΠΉ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΠΎΡΠ΅ΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Emacs Lisp Π±ΡΠ» Π±Ρ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ.
14.4.8. Emacs Lisp
Emacs Lisp ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π², ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΆΠΈΠΌΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° Emacs. ΠΠ΅ΡΠ²Π°Ρ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² 1984 Π³ΠΎΠ΄Ρ.
Emacs Lisp Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΡΠ·ΡΠΊΠΈ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠΉ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΠΎΠ½ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° Emacs. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Emacs Lisp Π½Π΅ ΡΠΎΠΎΠ±ΡΠ°Π΅ΡΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΠΊ ΠΆΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π².
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Emacs Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½, ΡΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ·ΡΠΊ. ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π‘-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΈ Π»ΠΈΠ½ΠΊΠ΅Ρ, ΡΡΠΈΠ»ΠΈΡΠ° make(1), ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π²Π΅ΡΡΠΈΠΉ ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΈ; ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Emacs Lisp ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 15.
Π Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅ΠΌ ΡΠΌΡΡΠ»Π΅, Emacs Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ ΠΆΠ΅, ΡΠ΅ΠΌ ΡΠ·ΡΠΊ Perl Π΄Π»Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ±ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠ° ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΠΎΠΉΠ½ΡΠΌ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠΌ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΏΡΠΎΡΠΎΡΠΈΠΏ (Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ) Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ ΠΊΠ°ΠΊ Emacs-ΡΠ΅ΠΆΠΈΠΌ (ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° Emacs Lisp, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°).
Emacs Lisp ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π½Π½ΡΠΌ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΡΡ, Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°Π³Π΅Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Usenet-Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π²ΠΈΠ΄Ρ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ .
Emacs Lisp β ΠΏΠΎ ΡΡΡΠΈ Lisp. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ·ΡΡΠ΅Π½, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ², ΠΈΠ»ΠΈ, Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π΅ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ². Emacs Lisp Π½Π° ΡΡΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΡΠΎΠΏΠ΅ΡΠ½ΠΈΡΠ°ΡΡ Ρ Java ΠΈΠ»ΠΈ Python ΠΈ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ ΡΠ·ΡΠΊΠΈ Π‘ ΠΈΠ»ΠΈ Π‘++, Perl, shell ΠΈΠ»ΠΈ TΡl. ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Lisp, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΠ‘-ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΄ΡΠΎΠΌ Emacs, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΠ‘-ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΎΠΉ.
ΠΡΡΠ³Π°Ρ Π½Π΅ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»ΠΈΠΌΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° β ΡΡΠ΅Π·ΠΌΠ΅ΡΠ½ΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ², Π½Π° ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π Π°Π½Π΅Π΅ Π±ΡΠ»ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Ρ Π½Π°ΡΠΌΠ΅ΡΠ»ΠΈΠ²ΡΠ΅ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ "Emacs Makes A Computer Slow" (Emacs ΡΠΎΡΠΌΠΎΠ·ΠΈΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ) ΠΈ "Eventually Munches All Computer Storage" (Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π²ΡΡ ΠΏΠ°ΠΌΡΡΡ) (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Emacs Π²ΠΊΠ»ΡΡΠ΅Π½ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΊΠΈΡ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΎΠΊ). ΠΠΎ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Web-Π±ΡΠ°ΡΠ·Π΅ΡΡ) ΠΏΡΠ΅Π²ΡΡΠ°ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ, ΡΠ΅ΠΌ Emacs, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ Π½ΠΈΠΌΠΈ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡΠΌ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΠΏΠΎ Emacs Lisp ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ "The GNU Emacs Lisp Reference Manual", ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ "info-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²", Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ Π² Emacs. ΠΠ°Π½Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Ρ FTP-ΡΠ·Π»Π° FSF <ftp://ftp.gnu.org/pub/gnu>. ΠΡΠ»ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΌΠ°Π»ΠΎΠΏΠΎΠ½ΡΡΠ½ΡΠΌ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΠΊΠ½ΠΈΠ³Π° "Writing GNU Emacs Extensions" [30].
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Emacs Lisp ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌΠΈ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Emacs Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ Unix-ΡΠΈΡΡΠ΅ΠΌ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ Microsoft ΠΈ MacOS.
ΠΡΠ²ΠΎΠ΄Ρ: Π½Π°ΠΈΠ»ΡΡΡΠΈΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΠΌ Emacs Lisp ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠ·ΡΠΊ Lisp Ρ ΠΌΠΎΡΠ½ΡΠΌΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌΠΈ Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ; Ρ ΡΠ΄ΡΠΈΠΌ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΡΠ»Π°Π±Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠ°ΡΠ°ΡΡΠ°ΡΡΡ Emacs, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ "ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Emacs" ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Ρ.
14.5. Π’Π΅Π½Π΄Π΅Π½ΡΠΈΠΈ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ
Π ΡΠ°Π±Π»ΠΈΡΠ΅ 14.1 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠΎΠ². ΠΠ°Π½Π½ΡΠ΅ Π²Π·ΡΡΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² SourceForge[123] ΠΈ Freshmeat[124], Π΄Π²ΡΡ Π²Π°ΠΆΠ½Π΅ΠΉΡΠΈΡ ΡΠ°ΠΉΡΠΎΠ² Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΏΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½Π° ΠΌΠ°ΡΡ 2003 Π³ΠΎΠ΄Π°.
Π’Π°Π±Π»ΠΈΡΠ° 14.1. ΠΡΠ±ΠΎΡ ΡΠ·ΡΠΊΠΎΠ²
Π―Π·ΡΠΊ SourceForge Freshmeat 01.03.03 01.03.04 01.03.03 01.03.04 Π‘ 10296 13479 4845 6191 Π‘++ 9880 13570 2098 2922 Shell 1058 1473 487 620 Perl 4394 5560 2508 3031 Tcl 649 811 328 377 Python 2222 3267 948 1459 Java 8032 12126 1900 2977 Emacs Lisp ? ? 31 37ΠΠ°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° SourceForge Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³Π»Π°ΠΆΠ΅Π½Ρ ΠΏΠΎ ΡΡΠ΄Ρ ΠΏΡΠΈΡΠΈΠ½: ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π°ΠΏΡΠΎΡΠ° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌ ΠΈ ΡΠ·ΡΠΊΠ°ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΠΈΡΠ΅Π» ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ MacOS- ΠΈ Windows-ΠΏΡΠΎΠ΅ΠΊΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π‘++ ΠΈ Java. ΠΠ΄Π½Π°ΠΊΠΎ Unix-ΠΏΡΠΎΠ΅ΠΊΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°ΡΡ (Π² ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ 3:1), ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ², Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΈΡΠΊΠ°ΠΆΠ΅Π½Ρ.
ΠΠ°Π½Π½ΡΠ΅ Freshmeat ΠΌΠ΅Π½ΡΡΠ΅, Π½ΠΎ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Unix-Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, Π° Π½Π΅ Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ½ΠΎΠ΅ Π½Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΡΠ΅Π·Π½ΡΠ²ΡΠΈΡ ΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² SourceForge. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΡΡΠ°ΡΡ ΠΎΡ Π΄Π°Π½Π½ΡΡ SourceForge ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ 1:2, ΠΊΡΠΎΠΌΠ΅ ΡΠ»ΡΡΠ°Π΅Π² (Π‘++ ΠΈ Java), Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΡ ΠΎΡ ΠΏΡΠΎΠΏΠΎΡΡΠΈΠΈ Π²Π²ΠΈΠ΄Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Windows-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ½ΠΎΠ²ΠΈΠΊ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π² 1997 Π³ΠΎΠ΄Ρ; Π² ΡΠ²Π΅Ρ ΠΊΠ½ΠΈΠ³Π° Π²ΡΡΠ»Π° Π² 2003 Π³ΠΎΠ΄Ρ. Π’ΠΎ Π΅ΡΡΡ ΠΏΡΠΎΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠΎΠ±Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ Π²ΡΡΠ΅ ΡΠ·ΡΠΊΠΎΠ² ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈΡΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈ ΠΎΡΡΠ°Π·ΠΈΠ»ΠΈΡΡ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΠΈ Π²ΡΠ±ΠΎΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΡΠΈ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π±ΡΠ΄ΡΡΠ΅Π΅ ΡΠ·ΡΠΊΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ.
Π ΡΠ΅Π»ΠΎΠΌ, ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π‘, Π‘++ ΠΈ Emacs Lisp ΠΎΡΡΠ°Π²Π°Π»ΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌΠΈ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ 1997-2003 Π³ΠΎΠ΄ΠΎΠ². ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΠ·ΡΠΊΠ° Π‘ ΡΠΎΡΠ»ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π° ΡΡΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ FORTRAN. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π‘++ ΡΡΡΠ°ΡΠΈΠ» Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»ΠΈ ΡΠ·ΡΠΊ Java.
ΠΡΠΈΠ»ΠΈΡΠ½ΠΎ Π²ΠΎΠ·ΡΠΎΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Perl, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ. ΠΠ½ΡΡΡΠ΅Π½Π½Π΅Π΅ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ Perl ΠΏΠ΅ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΠ²ΠΎΠ΅ΠΉ Π½Π΅ΡΡΡΠ»ΠΈΠ²ΠΎΡΡΡΡ. ΠΠ΅ΡΠΎΠΌΠ½Π΅Π½Π½ΠΎ, ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΏΠΎΡΠ° ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°. ΠΡΠ°Π²Π΄Π°, ΠΎΠ΄Π½Π° ΡΠ°ΠΊΠ°Ρ ΠΏΠΎΠΏΡΡΠΊΠ°, ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΠ°Ρ Π² 1999 Π³ΠΎΠ΄Ρ, ΠΏΡΠΎΠ²Π°Π»ΠΈΠ»Π°ΡΡ, Π° Π΄ΡΡΠ³Π°Ρ ΠΏΠΎΠΊΠ°, Π²ΠΈΠ΄ΠΈΠΌΠΎ, ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Perl ΠΎΡΡΠ°Π΅ΡΡΡ Π²Π΅Π΄ΡΡΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΈ ΠΏΡΠ΅ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π² Web-ΡΡΠ΅Π½Π°ΡΠΈΡΡ ΠΈ CGI.