ΠΡΠ΅Π· ΡΠ½ΠΈ ΡΠ°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Π² ΠΌΠ°Π»ΠΊΠΈΡ ΡΠ²Π΅ΠΉΡΠ°ΡΡΠΊΠΈ Π³ΡΠ°Π΄ Π Π°ΠΏΠΏΠ΅ΡΡΠ²ΠΈΠ»Π΅ Π²Π΅ΡΠ΅ Π·Π° Π΄Π΅ΡΠ΅ΡΠΈ ΠΏΡΡ ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ ΡΡΠ±ΠΈΡΠΈΠ΅, Π½Π°ΡΠ΅ΡΠ΅Π½ΠΎ . Π’ΠΎΠ·ΠΈ ΠΏΡΡ ΡΠ΅ ΡΡΠ±ΡΠ°Ρ Π° Π½Π°Π΄ ΠΏΠ΅ΡΡΡΠΎΡΠΈΠ½ Π»ΡΠ±ΠΈΡΠ΅Π»ΠΈ Π½Π° Π₯Π°ΡΠΊΠ΅Π», ΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΠΈ Π΄ΠΎ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅ Π½Π°ΡΠΈΡΠ°Ρ ΡΠΎΠ²Π° ΡΡΠ±ΠΈΡΠΈΠ΅ Ρ Π°ΠΊΠ°ΡΠΎΠ½, ΡΠΎ Π½Π΅ Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡ ΠΈΠ»ΠΈ Ρ Π°ΠΊΠ°ΡΠΎΠ½ Π² ΠΊΠ»Π°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΌΠΈΡΡΠ». Π€ΠΎΡΠΌΠ°ΡΡΡ ΠΌΡ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΎΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΊΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅. Π Π°Π·Π±ΡΠ°Ρ ΠΌΠ΅ Π·Π° ZuriHac ΠΏΠΎ ΡΠ°ΡΡΠ»ΠΈΠ²Π° ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΡΡ, ΡΡΠ°ΡΡΠ²Π°Ρ ΠΌΠ΅ Π² Π½Π΅Π³ΠΎ ΠΈ ΡΠ΅Π³Π° ΡΠΌΡΡΠ°ΠΌΠ΅ Π·Π° ΡΠ²ΠΎΠΉ Π΄ΡΠ»Π³ Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° Π½Π΅ΠΎΠ±ΠΈΡΠ°ΠΉΠ½Π°ΡΠ° Π½Π°Ρ ΠΎΠ΄ΠΊΠ°!

ΠΠ° Π½Π°Ρ
Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΎΡ Π΄Π²Π°ΠΌΠ° ΡΡΡΠ΄Π΅Π½ΡΠΈ ΠΎΡ ΡΡΠ΅ΡΠΈ ΠΊΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° βΠΡΠΈΠ»ΠΎΠΆΠ½Π° ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°β Π½Π° ΠΠΠ£ ΠΠ¨Π β Π‘Π°Π½ΠΊΡ-ΠΠ΅ΡΠ΅ΡΠ±ΡΡΠ³: ΠΠ°ΡΠΈΠ»ΠΈΠΉ ΠΠ»ΡΠ΅ΡΠΎΠ² ΠΈ ΠΠ»ΠΈΠ·Π°Π²Π΅ΡΠ° ΠΠ°ΡΠΈΠ»Π΅Π½ΠΊΠΎ. Π£Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½ΠΈ ΠΊΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π·Π°ΠΏΠΎΡΠ½Π° Ρ ΡΠΈΠΊΡΠ» ΠΎΡ Π»Π΅ΠΊΡΠΈΠΈ Π½Π° Π. Π. ΠΠΎΡΠΊΠ²ΠΈΠ½ ΠΏΡΠ΅Π· Π²ΡΠΎΡΠΈ ΠΊΡΡΡ Π½Π° ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ°. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΠ°ΡΠΈΠ»ΠΈΠΉ ΡΡΠ°ΡΡΠ²Π° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Google Summer of Code, Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΊΠΎΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π°Π»Π³Π΅Π±ΡΠΈΡΠ½ΠΈ Π³ΡΠ°ΡΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° Π₯Π°ΡΠΊΠ΅Π» ΠΏΠΎΠ΄ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ Π½Π° Π΅ΠΊΠΈΠΏΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° . ΠΠ»ΠΈΠ·Π°Π²Π΅ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈ ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΡΠΈΡΠ΅ ΡΠΌΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π² ΠΊΡΡΡΠΎΠ²Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ°, ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° Π°Π½ΡΠΈ-ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ΅ΠΎΡΠΈΡΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅.
Π€ΠΎΡΠΌΠ°Ρ Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ
Π¦Π΅Π»Π΅Π²Π°ΡΠ° Π°ΡΠ΄ΠΈΡΠΎΡΠΈΡ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ, ΠΆΠ΅Π»Π°Π΅ΡΠΈ Π΄Π° ΡΡΠ°ΡΡΠ²Π°Ρ Π² ΡΡΡ Π½ΠΎΡΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅, ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠΎΡΡΠΎ Π΅Π½ΡΡΡΠΈΠ°ΡΡΠΈ Π½Π° Π₯Π°ΡΠΊΠ΅Π». Π’Π°Π·ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΠΌΡΡΡΠΎΡΠΎ Π½Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ β ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° HSR Hochschule fΓΌr Technik Rapperswil β ΡΠ΅ ΡΡΠ±ΡΠ°Ρ Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ ΠΎΡ Π½Π°Π΄ ΠΏΠ΅ΡΠ΄Π΅ΡΠ΅Ρ ΠΎΡΠΊΡΠΈΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° Π΅Π·ΠΈΠΊΠ° Haskell ΠΎΡ ΡΡΠ» ΡΠ²ΡΡ, Π·Π° Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ°Ρ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΠ΅ ΡΠΈ ΠΈ Π΄Π° ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°Ρ Π½ΠΎΠ²ΠΈ Ρ ΠΎΡΠ° Π·Π° ΡΡΡ Π½ΠΎΡΠΎ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅.

Π‘Π½ΠΈΠΌΠΊΠΈ ΠΎΡ Twitter
Π‘Ρ Π΅ΠΌΠ°ΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ°: Π½ΡΠΆΠ½ΠΎ Π΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ·ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΈ ΠΈ Π΄Π° Π³ΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΎΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° Π½Π° ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π² ΠΏΡΡΠ²ΠΈΡ Π΄Π΅Π½ Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅ ΠΈΠΌΠ°Ρ ΠΏΠΎ ΡΡΠΈΠ΄Π΅ΡΠ΅Ρ ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, Π·Π° Π΄Π° ΡΠ°Π·ΠΊΠ°ΠΆΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΎΡ ΡΡΠ΅Π½Π°ΡΠ° Π·Π° ΡΠΎΠ²Π°, Ρ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½ΠΈΡΠ΅ Ρ ΠΎΡΠ° ΡΡΡΡΡΡ Π°Π²ΡΠΎΡΠΈΡΠ΅ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°Π·ΠΏΠΈΡΠ²Π°Ρ Π·Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅.
Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½ΡΠΌΠ°ΠΌΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π΄ΠΎΠΏΡΠΈΠ½Π΅ΡΠ΅ΠΌ Π·Π° Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Ρ ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΡΡΠ°ΡΡΠ½ΠΈΡΠΈ. ΠΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠΈ Π΄Π½ΠΈ ΡΠ°Π±ΠΎΡΠΈΡ ΠΌΠ΅ Ρ Π΄Π²Π΅ Π³ΡΡΠΏΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. ΠΠΊΠ°Π·Π° ΡΠ΅, ΡΠ΅ ΡΡΠ²ΠΌΠ΅ΡΡΠ½ΠΎΡΠΎ ΠΈΠ·ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° ΠΈ ΠΆΠΈΠ²Π°ΡΠ° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠ°Π²ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΈΠ±ΡΡΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ β Π½Π° ZuriHac ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°ΠΌΠ΅ Π² Π½ΠΎΠ²ΠΈ Π·Π° Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈ Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π½Π΅ΠΌ Π½Π° Π΄Π²Π° Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π΅ΠΊΠΈΠΏΠ°, Π·Π°ΡΠ²Π°ΡΡΠΉΠΊΠΈ ΠΏΠΎ Π΅Π΄Π½Π° Π·Π°Π΄Π°ΡΠ° Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅.
ΠΡΠ²Π΅Π½ ΡΠ΅Π½Π΅Π½ ΠΎΠΏΠΈΡ, Π½Π° ZuriHac Π±ΡΡ Π° ΠΈΠ·Π½Π΅ΡΠ΅Π½ΠΈ ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π»Π΅ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ°ΠΉΡΡΠΎΡΡΠΊΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅. ΠΡΠΎΠ±Π΅Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΠΌ Π΄Π²Π΅ Π»Π΅ΠΊΡΠΈΠΈ. ΠΠ° ΠΏΡΡΠ²Π°ΡΠ° ΠΎΡ ΡΡΡ ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠΎΡ ΠΎΠ² ΠΎΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° Π² ΠΡΠΊΠ°ΡΡΠ» ΡΠ°Π·ΠΊΠ°Π·Π° Π·Π° ΡΠ΅Π»Π΅ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΎΡΠΈ β ΠΊΠ»Π°Ρ ΡΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΌΠ΅ΠΆΠ΄Ρ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΎΡΠΈ ΠΈ ΠΌΠΎΠ½Π°Π΄ΠΈ. ΠΠ° Π΄ΡΡΠ³Π°ΡΠ° Π»Π΅ΠΊΡΠΈΡ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π₯Π°ΡΠΊΠ΅Π», Π‘Π°ΠΉΠΌΡΠ½ ΠΠ΅ΠΉΡΠΎΠ½ ΠΠΆΠΎΡΠ½Ρ, Π³ΠΎΠ²ΠΎΡΠΈ Π·Π° Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ Π΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° GHC.

ΠΠ΅ΠΊΡΠΈΡ Π½Π° Π‘Π°ΠΉΠΌΡΠ½ ΠΠ΅ΠΉΡΠΎΠ½ ΠΠΆΠΎΡΠ½Ρ. Π‘Π½ΠΈΠΌΠΊΠ° ΠΎΡ Twitter
ΠΠ°ΠΉΡΡΠΎΡΡΠΊΠΈΡΠ΅ ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Ρ Π°ΠΊΠ°ΡΠΎΠ½Π°, Π±ΡΡ Π° ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈ Π½Π° ΡΡΠΈ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅. ΠΠ°Π΄Π°ΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π½ΠΈ Π½Π° ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅, ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½ΠΈΠ»ΠΈ ΡΠ΅ ΠΊΡΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΡΡΡΠΎ ΠΈΠΌΠ°Ρ Π° Π±Π΅Π»Π΅ΠΆΠΊΠΈ Π·Π° Π½ΠΈΠ²ΠΎ Π½Π° ΡΡΡΠ΄Π½ΠΎΡΡ. ΠΠ΅Π±ΡΠΎΠΉΠ½ΠΎ, Π½ΠΎ ΡΠΏΠ»ΠΎΡΠ΅Π½ΠΎ ΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΡΠΈ Ρ ΡΠ°Π΄ΠΎΡΡ ΠΏΡΠΈΠ΅ΠΌΠ° Π½ΠΎΠ²Π°ΡΠΈΡΠ΅ Π² ΡΠ΅Π΄ΠΈΡΠΈΡΠ΅ ΡΠΈ. ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π»Π΅ΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΠΠ½Π΄ΡΠ΅ΠΉ ΠΠΎΡ ΠΎΠ² ΠΈ Π‘Π°ΠΉΠΌΡΠ½ ΠΠ΅ΠΉΡΠΎΠ½ ΠΠΆΠΎΡΠ½Ρ, ΠΎΠ±Π°ΡΠ΅, Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»ΠΈΡΡ Π² ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠ° ΠΊΡΡΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅.
Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΌΠ΅ΡΠΎΠΏΡΠΈΡΡΠΈΠ΅ΡΠΎ Π΅ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π° ΠΊΠ°ΠΊΡΠΎ Π·Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΡΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π·Π° Π°Π²ΡΠΎΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅. ΠΠΎΠ΄Π°Π΄ΠΎΡ ΠΌΠ΅ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΡ Π·Π° ΡΡΠ°ΡΡΠΈΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ½ΠΈ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΡΡΠ° Π±ΡΡΠ·ΠΎ Π±ΡΡ ΠΌΠ΅ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Π΅Π½ΠΈ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° Π½Π° ΡΠ°ΠΊΠ°ΡΠΈΡΠ΅ Π² ΡΠΏΠΈΡΡΠΊΠ° Π½Π° ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½ΠΈΡΠ΅ ΡΡΠ°ΡΡΠ½ΠΈΡΠΈ.
Π‘Π΅Π³Π° ΡΠ΅ ΡΠ°Π·ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ΅, Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΡΠ°ΡΡΠ²Π°Ρ ΠΌΠ΅.
Pandoc
Π΅ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»Π΅Π½ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠ΅Π» Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ, Π²ΡΡΡΠ½ΠΎΡΡ β ΠΎΡ Π²ΡΠ΅ΠΊΠΈ ΡΠΎΡΠΌΠ°Ρ Π² Π²ΡΠ΅ΠΊΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ docx Π² pdf ΠΈΠ»ΠΈ ΠΎΡ Markdown Π² MediaWiki. ΠΠ΅Π³ΠΎΠ²ΠΈΡΡ Π°Π²ΡΠΎΡ ΠΠΆΠΎΠ½ ΠΠ°ΠΊΡΠ°ΡΠ»Π΅ΠΉΠ½ Π΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΏΠΎ ΡΠΈΠ»ΠΎΡΠΎΡΠΈΡ Π² ΠΠ°Π»ΠΈΡΠΎΡΠ½ΠΈΠΉΡΠΊΠΈΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅Ρ Π² ΠΡΡΠΊΠ»ΠΈ. ΠΡΡΡΠ½ΠΎΡΡ, Pandoc Π΅ Π΄ΠΎΡΡΠ° ΠΈΠ·Π²Π΅ΡΡΠ΅Π½, ΠΈ Π½ΡΠΊΠΎΠΈ ΠΎΡ Π½Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈ Π±ΡΡ Π° ΠΈΠ·Π½Π΅Π½Π°Π΄Π°Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΡΠΈΡ Π°, ΡΠ΅ Pandoc Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π₯Π°ΡΠΊΠ΅Π».

Π‘ΠΏΠΈΡΡΠΊ Ρ ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ΠΈ ΠΎΡ Pandoc. Π ΡΠ°ΠΉΡΠ° ΠΈΠΌΠ° ΠΈ ΡΡΠ»Π° Π³ΡΠ°ΡΠΈΠΊΠ°, Π½ΠΎ ΡΠ°Π·ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ±Π΅ΡΠ΅ Π² ΡΡΠ°ΡΠΈΡΡΠ°.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π² Pandoc Π½Π΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½Π° ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡ Π·Π° Π²ΡΡΠΊΠ° Π΄Π²ΠΎΠΉΠΊΠ° ΡΠΎΡΠΌΠ°ΡΠΈ. ΠΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΎΠ±ΡΠΈΡΠ½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈΡ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅: ΠΏΡΡΠ²ΠΎ ΡΠ΅Π»ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΡΠ΅ ΠΏΡΠ΅Π²Π΅ΠΆΠ΄Π° Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎ ΡΠΎΠ²Π° ΠΌΠ΅ΠΆΠ΄ΡΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π² Π΄ΡΡΠ³ ΡΠΎΡΠΌΠ°Ρ. ΠΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π°ΡΠΈΡΠ°Ρ βASTβ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·ΡΠΈΡΡΠΎΠ²Π° ΠΊΠ°ΡΠΎ Abstract Syntax Tree, ΠΈΠ»ΠΈ . ΠΠΎΠΆΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅: Π·Π° ΡΠ΅Π»ΡΠ° ΠΏΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠΎΡΠΌΠ°Ρ ΠΊΠ°ΡΠΎ βnativeβ
$ cat example.html
<h1>ΠΠ΄ΡΠ°Π²Π΅ΠΉ, ΡΠ²ΡΡ!</h1>
$ pandoc -f html -t native example.html
[Header 1 ("hello-world",[],[]) [Str "ΠΠ΄ΡΠ°Π²Π΅ΠΉ,",Space,Str "ΡΠ²ΡΡ!"]]
Π§ΠΈΡΠ°ΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ° ΡΠ°Π±ΠΎΡΠΈΠ»ΠΈ ΠΏΠΎΠ½Π΅ ΠΌΠ°Π»ΠΊΠΎ Ρ Haskell, Π²Π΅ΡΠ΅ ΠΌΠΎΠ³Π°Ρ ΠΎΡ ΡΠΎΠ·ΠΈ ΠΌΠ°Π»ΡΠΊ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ°Ρ, ΡΠ΅ Pandoc Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Haskell: ΠΈΠ·Ρ ΠΎΠ΄ΡΡ ΠΎΡ ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΠΈ Π½Π° Pandoc ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π½ΠΈΠ·, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π½Π° Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈ Π² Haskell, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
Π’Π°ΠΊΠ° ΡΠ΅, ΡΡΠΊ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π° ΡΡΡΡΠΊΡΡΡΠ°, Π² ΠΊΠΎΡΡΠΎ Π²ΡΠ΅ΠΊΠΈ Π²ΡΡΡΠ΅ΡΠ΅Π½ Π²ΡΠ·Π΅Π» ΡΡΠ΄ΡΡΠΆΠ° ΡΠΏΠΈΡΡΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Π½Π°ΠΉ-Π²ΠΈΡΠΎΠΊΠΎΡΠΎ Π½ΠΈΠ²ΠΎ ΠΈΠΌΠ° ΡΠΏΠΈΡΡΠΊ ΠΎΡ Π΅Π΄ΠΈΠ½ Π΅Π»Π΅ΠΌΠ΅Π½Ρ β Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° ΠΏΡΡΠ²ΠΎ Π½ΠΈΠ²ΠΎ Ρ Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ βhello-worldβ,[],[]. ΠΡΡΡΠ΅ Π² ΡΠΎΠ²Π° Π·Π°Π³Π»Π°Π²ΠΈΠ΅ Π΅ ΡΠΊΡΠΈΡ ΡΠΏΠΈΡΡΠΊ ΠΎΡ Π½ΠΈΠ· βHello,β , ΠΏΡΠΎΠ±Π΅Π» ΠΈ Π½ΠΈΠ· βWorld!β.
ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ HTML. Π’ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π΄ΡΡΠ²ΠΎ, Π² ΠΊΠΎΠ΅ΡΠΎ Π²ΡΠ΅ΠΊΠΈ Π²ΡΡΡΠ΅ΡΠ΅Π½ Π²ΡΠ·Π΅Π» ΡΡΠΎΠ±ΡΠ°Π²Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ ΠΏΠΎΡΠΎΠΌΡΠΈ, Π° Π² Π»ΠΈΡΡΠ°ΡΠ° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
ΠΠΊΠΎ ΡΠ»Π΅Π·Π΅ΠΌ Π½Π° Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠΈΠΏΡΡ Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ΅Π»ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
data Pandoc = Pandoc Meta [Block]Π’ΡΠΊ Block β ΡΠΎΠ²Π° ΡΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ Π²ΡΡΡ ΠΎΠ²Π΅, Π·Π° ΠΊΠΎΠΈΡΠΎ ΡΡΠ°Π²Π° Π΄ΡΠΌΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅, Π° Meta β ΡΠΎΠ²Π° Π΅ ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΊΠ°ΡΠΎ Π·Π°Π³Π»Π°Π²ΠΈΠ΅, Π΄Π°ΡΠ° Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅, Π°Π²ΡΠΎΡΠΈ β Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ ΡΠΎΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎ ΠΈ Pandoc ΡΠ΅ ΡΡΡΠ΅ΠΌΠΈ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈ ΡΠ°Π·ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΡΠΈ ΠΏΡΠ΅Π²ΠΎΠ΄ ΠΎΡ ΡΠΎΡΠΌΠ°Ρ Π² ΡΠΎΡΠΌΠ°Ρ.
ΠΠΎΡΡΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ ΡΠΈΠΏ Block β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Header ΠΈΠ»ΠΈ Para (ΠΏΠ°ΡΠ°Π³ΡΠ°Ρ) β ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΈ ΡΠΏΠΈΡΡΠΊ ΠΎΡ ΠΏΠΎ-Π½ΠΈΡΠΊΠΈ Π½ΠΈΠ²Π° β ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Inline. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Space ΠΈΠ»ΠΈ Str β ΡΠΎΠ²Π° ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ ΡΠΈΠΏ Inline, Π° HTML-ΡΠ΅Π³ΡΡ
ΡΡΡΠΎ ΡΡΠ°Π²Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ Inline. ΠΠ΅ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΠΌΠΈΡΡΠ» Π΄Π° Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ»Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠΈΠΏΠΎΠ²Π΅, Π½ΠΎ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°ΠΌΠ΅, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ°ΠΊΠΎΠ²Π° ΡΡΠΊ. .
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ Π΅, ΡΠ΅ ΡΠΈΠΏΡΡ Pandoc Π΅ ΠΌΠΎΠ½ΠΎΠΈΠ΄. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΈΠΌΠ° Π½ΡΠΊΠ°ΠΊΡΠ² ΠΏΡΠ°Π·Π΅Π½ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ ΠΈ ΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ±ΠΈΡΠ°Ρ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ. Π’ΠΎΠ²Π° Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ReaderβΠΈ β ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π½Π° ΡΠ°ΡΡΠΈ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°, Π΄Π° ΠΏΠ°ΡΡΠΈΡΠ΅ Π²ΡΡΠΊΠ° ΠΎΡΠ΄Π΅Π»Π½ΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄Π° ΡΡΠ±Π΅ΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΎ Π·Π°Π΅Π΄Π½ΠΎ Π² Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ. ΠΡΠΈ ΡΠΎΠ²Π° ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΡΠ°ΡΡΠΈ Π½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π½Π°Π²Π΅Π΄Π½ΡΠΆ.
ΠΡΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΎΡ LaTeX Π² HTML, ΠΏΡΡΠ²ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π΅Π½ ΠΌΠΎΠ΄ΡΠ», Π½Π°ΡΠ΅ΡΠ΅Π½ LaTeXReader, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π²Ρ ΠΎΠ΄Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π² AST, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄ΡΡΠ³ ΠΌΠΎΠ΄ΡΠ», Π½Π°ΡΠ΅ΡΠ΅Π½ HTMLWriter, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° AST Π² HTML. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΊΠ°Π²Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎ ΡΠΈΡΠ»ΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ β Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΅ Π·Π° Π²ΡΠ΅ΠΊΠΈ Π½ΠΎΠ² ΡΠΎΡΠΌΠ°Ρ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Reader ΠΈ Writer, ΠΈ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π΄Π²ΠΎΠΉΠΊΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΠΈ ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ.
Π―ΡΠ½ΠΎ Π΅, ΡΠ΅ ΡΠ°ΠΊΠ°Π²Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΈΠΌΠ° ΠΈ ΡΠ²ΠΎΠΈΡΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΎΡΠ΄Π°Π²Π½Π° ΡΠ° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π½ΠΈ ΠΎΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ Π² ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ. ΠΠ°ΠΉ-ΡΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎΡΠΎ Π΅ ΡΠ΅Π½Π°ΡΠ° Π½Π° Π²Π½Π΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½ΠΎΡΠΎ Π΄ΡΡΠ²ΠΎ. ΠΠΊΠΎ ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΠ΅ΡΠΈΠΎΠ·Π½Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ΄Π° Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ReaderβΠΈ ΠΈ WriterβΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅Π΄Π½Π° ΠΎΡ Π·Π°Π΄Π°ΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° Pandoc Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈ. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Pandoc ΡΠΌΠ΅Π΅ ΡΠ°ΠΌΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ, Ρ Π·Π°Π³Π»Π°Π²ΠΈΠ΅, ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ Π² Π²ΡΡΠΊΠ° ΠΊΠ»Π΅ΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΡΠΈΠ±ΡΡΡΡ colspan Π² HTML ΠΏΡΠΎΡΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½. ΠΠ΄Π½Π° ΠΎΡ ΠΏΡΠΈΡΠΈΠ½ΠΈΡΠ΅ Π·Π° ΡΠ°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° Π΅Π΄ΠΈΠ½Π½Π° ΡΡ Π΅ΠΌΠ° Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈ β ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π½Π΅ Π΅ ΡΡΠ½ΠΎ Π² ΠΊΠ°ΠΊΡΠ² Π²ΠΈΠ΄ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π² Π²ΡΡΡΠ΅ΡΠ½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅. ΠΠΎ Π΄ΠΎΡΠΈ ΡΠ»Π΅Π΄ ΠΈΠ·Π±ΠΎΡΠ° Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠΈΡΠΊΠΈ ReaderβΠΈ ΠΈ WriterβΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ°Π±Π»ΠΈΡΠΈ.
ΠΠ·ΠΈΠΊΡΡ Haskell Π½Π΅ Π±Π΅ΡΠ΅ ΠΈΠ·Π±ΡΠ°Π½ ΡΠ°ΠΌΠΎ Π·Π°ΡΠ°Π΄ΠΈ Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° Π»ΡΠ±ΠΎΠ² Π½Π° Π°Π²ΡΠΎΡΠΈΡΠ΅ ΠΊΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. Haskell Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ Ρ ΡΠΈΡΠΎΠΊΠΈΡΠ΅ ΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²Π΅. ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ β ΠΌΠΎΠ½ΠΎΠΈΠ΄ΠΈ, ΠΌΠΎΠ½Π°Π΄ΠΈ, Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΈ ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΎΡΠΈ β Π·Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΏΠ°ΡΡΠ΅ΡΠΈ. Π¦ΡΠ»Π°ΡΠ° ΠΌΠΎΡ Π½Π° Parsec ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΠΈ Π² ΠΎΡ HaskellWiki, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΏΡΠ»Π½ΠΈΡ ΠΏΠ°ΡΡΠ΅Ρ Π½Π° ΠΏΡΠΎΡΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Parsec Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π² Pandoc.
ΠΠΊΠΎ Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΠΎΠΏΠΈΡΠ΅ΠΌ, ΠΌΠΎΠ½Π°Π΄ΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΏΠ°ΡΡΠ²Π°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΡΠ²ΠΎ ΠΈΠ΄Π²Π° Π΅Π΄Π½ΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π΄ΡΡΠ³ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ°ΠΊΡΠ² ΠΏΡΠΈΠΌΠ΅Ρ:
whileParser :: Parser Stmt
whileParser = whiteSpace > > statementΠΡΡΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΠΌ ΠΏΡΡΡΠΎΡΠΎ ΠΌΡΡΡΠΎ, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° statement β ΠΊΠΎΠΉΡΠΎ ΡΡΡΠΎ ΠΈΠΌΠ° ΡΠΈΠΏ Parser Stmt.
ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΎΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π·Π° ΠΎΡΠΊΠ°Ρ Π² ΡΠ»ΡΡΠ°ΠΉ, ΡΠ΅ ΠΏΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π΅ Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
statement :: Parser Stmt
statement = parens statement sequenceOfStmtΠ’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΡΡΠ±Π²Π° ΠΈΠ»ΠΈ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΠΌ statement Π² ΡΠΊΠΎΠ±ΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ statementβΠ°.
ΠΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΎΡΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΊΠ°ΡΠΎ ΠΊΡΠ°ΡΠΊΠΈ ΠΏΡΡΠΈΡΠ° Π·Π° ΠΌΠΎΠ½Π°Π΄ΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡΡΠ° tok ΠΏΡΠΎΡΠΈΡΠ° Π½ΡΠΊΠ°ΠΊΡΠ² ΡΠΎΠΊΠ΅Π½ (ΡΠΎΠ²Π° Π΅ ΡΠ΅Π°Π»Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡ LaTeXReader). ΠΠ΅ΠΊΠ° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΠΌ Ρ ΡΠ°ΠΊΠ°Π²Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ
const tok tokΠ’Ρ ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ΅ Π΄Π²Π° ΡΠΎΠΊΠ΅Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΠΈ ΡΠ΅ Π²ΡΡΠ½Π΅ ΠΏΡΡΠ²ΠΈΡ.
ΠΠ° Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΡΠ΅Π·ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ Π² Π₯Π°ΡΠΊΠ΅Π» ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΠΊΡΠ°ΡΠΈΠ²ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Reader-ΠΈΡΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ASCII-Π°ΡΡ. Π‘Π°ΠΌΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΡΠΎΠ·ΠΈ Π²Π΅Π»ΠΈΠΊΠΎΠ»Π΅ΠΏΠ΅Π½ ΠΊΠΎΠ΄.
ΠΠ°ΡΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π±ΡΡ Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ LaTeXReader. ΠΠ°Π΄Π°ΡΠ°ΡΠ° Π½Π° ΠΠ°ΡΠΈΠ»ΠΈΠΉ Π±Π΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ mbox ΠΈ hbox, ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² LaTeX. ΠΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΠ»ΠΈΠ·Π°Π±Π΅ΡΠ° Π±Π΅ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° epigraph, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΎΡΠΎΡΠΌΡΠ½Π΅ΡΠΎ Π½Π° Π΅ΠΏΠΈΠ³ΡΠ°ΡΠΈ Π² LaTeX Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈ.
Hatrace
Π UNIX-ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ΅ΡΡΠΎ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ ptrace. Π’ΠΎΠΉ Π΅ ΠΏΠΎΠ»Π΅Π·Π΅Π½ ΠΏΡΠΈ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΡΠΈΠΌΡΠ»Π°ΡΠΈΡ Π½Π° ΡΡΠ΅Π΄ΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° strace ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ptrace.
Hatrace β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ptrace Π² Haskell. Π€Π°ΠΊΡ Π΅, ΡΠ΅ ΡΠ°ΠΌΠΈΡΡ ptrace Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΅ Π΄ΠΎΡΡΠ° ΡΡΡΠ΄Π½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΈ Π΅Π·ΠΈΡΠΈ.
Hatrace ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΡΠΎ strace ΠΈ ΠΏΡΠΈΠ΅ΠΌΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ. Π Π°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΡ ΠΎΡ strace Π΅, ΡΠ΅ ΡΠΎΠΉ Π΅ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡΠ° ΠΏΠΎ-ΠΏΡΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΡ ΠΏΡΠΎΡΡΠΎ ptrace.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° hatrace Π²Π΅ΡΠ΅ Π±ΡΡ Π° ΠΎΡΠΊΡΠΈΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π½Π° Haskell GHC β Π°ΠΊΠΎ Π±ΡΠ΄Π΅ ΡΠ±ΠΈΡ Π² Π½Π΅ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΌΠΎΠΌΠ΅Π½Ρ, ΡΠΎΠΉ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ Π½Π΅ Π³ΠΈ ΠΏΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅. Π‘ΠΊΡΠΈΠΏΡΠΎΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Ρ Π΅Π΄Π½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈΡΠ΅ ΡΠ±ΠΈΠ²Π°Π½ΠΈΡ Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ Π·Π° Π΄Π²Π° ΡΠ°ΡΠ°.
ΠΠΎΠ±Π°Π²ΠΈΡ
ΠΌΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° β ΠΠ»ΠΈΠ·Π°Π²Π΅ΡΠ° Π΄ΠΎΠ±Π°Π²ΠΈ brk, Π° ΠΠ°ΡΠΈΠ»ΠΈΠΉ Π΄ΠΎΠ±Π°Π²ΠΈ mmap. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π½Π°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ ΠΈ ΡΠΎΡΠ½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
