ИзмСнСниС ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: ИзмСнСниС ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ врСмя Π΅Π΅ выполнСния Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Common Lisp / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ИзмСнСниС ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π²ΠΎ врСмя Π΅Π΅ выполнСния Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Common Lisp / Π₯Π°Π±Ρ€

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅


По ΠΌΠΎΠ΅ΠΌΡƒ скромному мнСнию, Lisp β€” ΠΆΠ΅ΠΌΡ‡ΡƒΠΆΠΈΠ½Π° срСди языков Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π² истории (1958 Π³ΠΎΠ΄) высокоуровнСвых языков, ΠΎΠ½ ΠΏΠΎ сСй дСнь Π½Π΅ пСрСстаСт ΡƒΠ΄ΠΈΠ²Π»ΡΡ‚ΡŒ. МнС каТСтся, ΠΎΠ½ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΠΎΠ³Π½Π°Π» своС врСмя, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ час Π΅Ρ‰Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ готовится ΠΏΡ€ΠΈΠΉΡ‚ΠΈ.

Π’Π°ΠΊ Π΄Π°Π²Π°ΠΉΡ‚Π΅ попытаСмся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках. Как слСдуСт ΠΈΠ· названия ΡΡ‚Π°Ρ‚ΡŒΠΈ, эта ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ собствСнный ΠΊΠΎΠ΄ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ своСго выполнСния. Для Π΅Π΅ создания я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Common Lisp, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π΅Π³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ SBCL.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Ссли Π²Ρ‹ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚Π΅ чистый SBCL, Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ свойство Π½Π΅ Ρ„Π»Π°ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ stdio послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π°, я сам ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ SBCL Ρ‡Π΅Ρ€Π΅Π· Emacs ΠΈ Slime, Ρ‚Π°ΠΌ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π΅Ρ‚. АдСкватного Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠΊΠ° Π½Π΅ нашСл.

Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ?


Lisp ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ свойствами, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хочСтся ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ простой синтаксис ΠΈ ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. Π‘Π°ΠΌΠΎΠ΅ классноС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ любой ΠΊΠΎΠ΄ Π½Π° Lisp являСтся Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для Π½Π΅Π³ΠΎ ΠΆΠ΅, ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ΄ΠΎΠΌ. Π’ частности, это Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΠ°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ (ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹Π΅ сами ΠΊ сСбС) ΠΈ Π°Π²Ρ‚ΠΎΡ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ (воспроизводящиС сСбя) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π§ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ ΠΎ Π½ΠΈΡ… написано здСсь; информация Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ взята ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ Β«ΠœΠΈΡ€ Лиспа» (Π­. Π₯ΡŽΠ²Ρ‘Π½Π΅Π½, И. БСппянСн) Ρ‚ΠΎΠΌ 1, страница 280. НапримСр, ΠΊΠ²Π°ΠΉΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π°Π²Ρ‚ΠΎΠ°ΠΏΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ, ΠΈ Π°Π²Ρ‚ΠΎΡ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, записываСтся Ρ‚Π°ΠΊ:

((lambda (x) (list x (list 'quote x))) 
	'(lambda (x) (list x (list 'quote x))))


ΠŸΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ, СстСствСнно, Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ сСбя ΠΆΠ΅.

А ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Π½Π΅ Ρ‚ΠΎΡ‡Π½ΡƒΡŽ копию сСбя, Π° ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ, которая Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ снова исполнСна, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Π²ΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚? Π’Π°ΠΊ ΠΈ поступим.

ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор


Π§Ρ‚ΠΎΠ±Ρ‹ бСссмыслСнно Π½Π΅ ΡΠΎΡ‚Ρ€ΡΡΠ°Ρ‚ΡŒ Π²ΠΎΠ·Π΄ΡƒΡ… ΠΈ Π½Π΅ ΠΏΠ»ΠΎΠ΄ΠΈΡ‚ΡŒ сфСричСских ΠΊΠΎΠ½Π΅ΠΉ Π² Π²Π°ΠΊΡƒΡƒΠΌΠ΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ построим ΠΏΡΠ΅Π²Π΄ΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π‘Π°ΠΌΡ‹ΠΉ простой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡƒΠΌ, это ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²ΠΎΠ΄ΠΈΡ‚, скаТСм, с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ нашСго творчСства Π΅Π΅ исполняСт.

Вся соль Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ исходный (Π²ΠΎ всСх смыслах) ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ минималистичСн. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΡ‹ Π΅Π³ΠΎ скормим ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, ΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ вСрнСмся ΠΊ нСпосрСдствСнной Ρ€Π°Π±ΠΎΡ‚Π΅ с REPL-ΠΎΠΌ. Наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ (ΠΈΠ»ΠΈ Π΄Π΅Π³Ρ€Π°Π΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ благодаря нашим ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌ.

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ s-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ лямда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая прСдставляСт собой Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π­Ρ‚Π° лямда-функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, свой ΠΆΠ΅ исходный ΠΊΠΎΠ΄ ΠΈ ΠΎΡ‚Π΄Π°Π΅Ρ‚ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΡ€Π΅Π΄Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ΠΎ Π±Ρ‹Ρ‚ΡŒ исполнСнным Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

(defun start-program ()
	'(lambda (program) 
		(princ "$> ") 
		(let ((input (read)))
			(when (listp input)
				(let ((command (car input)))
					(cond
						((eq command 'code)  ; Ссли команда = code,
							(setf program 	 ; Ρ‚ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ
								(funcall     ; Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Ρ‚Π°Π΅Π»ΡŒ
									(eval (list 'lambda '(program input) (cadr input))) 
								program input) 
							)
						)
						(t (format t "Unknown command ~A ~%" command))
					)
				)
			)
			program
		)
	)
)


Наш Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠ°Π»ΠΎ Ρ‡Π΅Π³ΠΎ ΡƒΠΌΠ΅Π΅Ρ‚. Он Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, считываСт с ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ s-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ список, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт β€” имя ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ β€” Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. ΠšΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор Β«ΠΈΠ· ΠΊΠΎΡ€ΠΎΠ±ΠΊΠΈΒ» ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«codeΒ». Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±Π΅Ρ€Π΅Ρ‚ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ создаСт ΠΈΠ· Π½Π΅Π³ΠΎ лямда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡƒΡŽ ΠΊ program ΠΈ input. Π—Π°Ρ‡Π΅ΠΌ Ρ‚Π°ΠΊ слоТно? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ eval Π΄Π΅Π»Π°Π΅Ρ‚ свои грязныС дСлишки Π² Π½ΡƒΠ»Π΅Π²ΠΎΠΌ лСксичСском ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ program ΠΈ input Π½Π°ΠΌ Π½Π΅ доступны, хотя ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ. НуТно Π½Π°ΠΉΡ‚ΠΈ способ ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΡŒ eval; Π½ΠΈΡ‡Π΅Π³ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ лямды с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΌΠ½Π΅ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎ. НС ΠΈΡΠΊΠ»ΡŽΡ‡Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ изящныС способы. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ eval присваиваСтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ program. Π’ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π± просто ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ program остаток ΠΎΡ‚ input, Π½ΠΎ Π² этом случаС ΠΌΡ‹ Π½Π΅ смоТСм ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ code. О Π½ΠΈΡ… Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция main ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ†ΠΈΠΊΠ» Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Вся магия таится ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΠΉ.

(defun main ()
	(let ((program (start-program))) ; Π·Π°Π΄Π°Π΅ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ
		; Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ пустая, Ρ‚.Π΅. Π½Π΅ nil
		(loop while program do 
			; своСобразный try - catch, ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, 
			; Ссли итСрация Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄
			(handler-case 
				; присвоим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ program Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ„ΡƒΠΊΡ†ΠΈΠΈ, 
			        ; содСрТащСйся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ program с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ program
				(setf program (funcall (eval program) program))
				; Π² случаС ошибки, сообщим ΠΎ Π½Π΅ΠΉ
				(error (c1) (format t "Error! ~A~%" c1) )
			)
		)
	)
)


Π˜Ρ‚Π°ΠΊ, Ρ†ΠΈΠΊΠ» ΠΈΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (пСрСмСнная program) Π½Π΅ пуста. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΆΠ΅ Π½Π° Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ β€” Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ start-program, Π° Π½Π° Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΡ‹ присваиваСм Π΅ΠΉ (ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ program) Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, содСрТащСйся Π² Π½Π΅ΠΉ (пСрСмСнная program), с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ program (ΠΎΠΏΡΡ‚ΡŒ ΠΎΠ½Π° ΠΆΠ΅). Π­Ρ‚ΠΎ Π½Π΅ тавтология, ΠΈ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС. Π Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ? Π’Π΅ΠΏΠ΅Ρ€ΡŒ запускаСм Π²

REPL

-Π΅ main ΠΈ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅:

CL-USER> (main)
$> 


МоТно Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ. Если надоСст ΠΈ захочСтся Π½Π°Π·Π°Π΄ Π²

REPL

, достаточно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΏΠΎΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ code Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ nil. Она Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ исходный тСкст Π½Π° nil, ΠΈ Ρ†ΠΈΠΊΠ» воспримСт это ΠΊΠ°ΠΊ условиС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ. Но ΠΌΡ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΠΊΠ° этого Π΄Π΅Π»Π°Ρ‚ΡŒ. ΠžΡ‚Π½Ρ‹Π½Π΅ всС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ вводятся ΡƒΠΆΠ΅ Π² Π½Π°ΡˆΡƒ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π― Π±ΡƒΠ΄Ρƒ часто ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ «$> » для удобства копирования.

На Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ этапС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ наш ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ процСссор слоТно ΠΈ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Нам Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ code ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΉ Π½ΠΎΠ²Ρ‹ΠΉ исходный ΠΊΠΎΠ΄ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Но Π²Ρ‹Ρ…ΠΎΠ΄Π° Π½Π΅Ρ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ eval, которая Π½Π°Ρ‡Π½Π΅Ρ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Она ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ любой ΠΊΠΎΠ΄, Π² частности Π·Π°Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

(code
	'(lambda (program)
		(princ "$> ") 
		(let ((input (read)))
			(when (listp input)
				(let ((command (car input)))
					(cond
						((eq command 'code) 
						    (setf program 
						        (funcall 
						            (eval (list 'lambda '(program input) (cadr input))) 
						         program input)))
						((eq command 'eval) (eval (cadr input))) ; ΠΠžΠ’ΠžΠ•
						(t (format t "Unknown command ~A ~%" command))
					)
				)
			)
			program
		)
	)
)


Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ΠΎ выдаст STYLE-WARNING, это Π½Π΅ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎ. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ:

$> (eval (print (+ 3 2)))
5 $>


Вуаля, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!

ΠŸΡ€ΠΈΠΏΡ€Π°Π²ΠΈΠΌ систСму с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Ρ€Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (rsubs, rrem, rins). rsubs (Recursive substitution) замСняСт рСкурсивно ΡΡ‚Π°Ρ€ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ old) Π½Π° Π½ΠΎΠ²ΡƒΡŽ (Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ new) Π² Ρ„ΠΎΡ€ΠΌΠ΅ (Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ form). rrem (Recursive remove) удаляСт Ρ„ΠΎΡ€ΠΌΡƒ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ what) ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹ (Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ form) Ρ‚ΠΎΠΆΠ΅ рСкурсивно. НаконСц, rins (Recursive insert) вставляСт рядом Π² Ρ„ΠΎΡ€ΠΌΠΎΠΉ (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ where) Ρ„ΠΎΡ€ΠΌΡƒ (Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ what) Π² Ρ„ΠΎΡ€ΠΌΠ΅ (Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ form), ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ссли ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ»ΡŽΡ‡ :before t, Ρ‚ΠΎ вставка выполняСтся ΠΏΠ΅Ρ€Π΅Π΄ Ρ„ΠΎΡ€ΠΌΠΎΠΉ where, ΠΈΠ½Π°Ρ‡Π΅ β€” послС Π½Π΅Π΅. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

(eval 
	(defun rsubs (old new form)
		(cond
			((atom form) (if (equal form old) new form))
			((equal form old) new)
			(t (loop for el in form collect (rsubs old new el)))
		)
	)
)
(eval 
	(defun rrem (what form)
		(cond
			((atom form) (if (equal what form) nil form))
			(t (loop for el in form 
				if (not (equal what el))
				collect (if (listp el) (rrem what el) el)
			))
		)
	)
)
(eval
	(defun rins (where what form &key before)
		(cond 
			((atom form) form)
			(t (loop for el in form append 
				(if (equal el where) 
					(if before (list what el) (list el what))
					(if (listp el) 
						(list (rins where what el :before before))
						(list el)
					)
				)
			))
		)
	)
)


Π£ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² наш процСссор Π±ΠΎΠ»Π΅Π΅ красивым способом, ΠΊΠ°ΠΊ Ρ€Π°Π· благодаря Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ code Π½Π΅ просто Π·Π°ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄ Π½Π° свой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ исполняСт Π΅Π³ΠΎ. Π”ΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ view, которая Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π½Π°ΠΌ содСрТаниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ program. Π’Π΅ΡΡŒΠΌΠ° полСзная ΠΊΠΎΠΌΠ°Π½Π΄Π° для отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠΎΠ΄Π°. Как Π²ΠΈΠ΄Π½ΠΎ, здСсь происходит вставка Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° послС Π°Ρ‚ΠΎΠΌΠ° cond.

(code (rins 'cond '((eq command 'view) (progn (format t "---code---") (print program) (terpri))) program))


ВСстируСм, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (view)

$> (view)
---code---
(LAMBDA (PROGRAM)
  (PRINC "$> ")
  (LET ((INPUT (READ)))
    (WHEN (LISTP INPUT)
      (LET ((COMMAND (CAR INPUT)))
        (COND
         ((EQ COMMAND 'VIEW)
          (PROGN (FORMAT T "---code---") (PRINT PROGRAM) (TERPRI)))
         ((EQ COMMAND 'CODE)
          (SETF PROGRAM
                  (FUNCALL
                   (EVAL (LIST 'LAMBDA '(PROGRAM INPUT) (CADR INPUT)))
                   PROGRAM INPUT)))
         ((EQ COMMAND 'EVAL) (EVAL (CADR INPUT)))
         (T (FORMAT T "Unknown command ~A ~%" COMMAND)))))
    PROGRAM)) 
$> 


ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ нСслоТно Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Ну, ΠΊΠ°ΠΊ ΠΈΠ½Π°Ρ‡Π΅ это Π½Π°Π·Π²Π°Ρ‚ΡŒ? Бинтаксис ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ²: (add-cmd имя-Π½ΠΎΠ²ΠΎΠΉ-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‡Ρ‚ΠΎ-ΠΎΠ½Π°-Π±ΡƒΠ΄Π΅Ρ‚-Π΄Π΅Π»Π°Ρ‚ΡŒ). Но Ρ‚ΡƒΡ‚ нас ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ пикантная ситуация. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π°Π· ΠΌΡ‹ вставляли ΠΊΠΎΠ΄ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ послС Π°Ρ‚ΠΎΠΌΠ° cond, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ всСго. Имя это распространСнноС, ΠΈ Ссли Π² тСкстС появится Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π΅Π³ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅, Ρ‚ΠΎ вставка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΈ Ρ‚Π°ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ€ΡƒΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ‚Π΅Ρ… частСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ ΡΠΎΠ±ΠΈΡ€Π°Π»ΠΈΡΡŒ Ρ‚Ρ€ΠΎΠ³Π°Ρ‚ΡŒ. Π Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ способами, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ввСсти ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ послС Π½Π΅Π³ΠΎ. ΠœΠ°Ρ€ΠΊΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой Π½Π΅Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌΠΎΠ΅ условиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ послС cond:

(code (rins 'cond '((eq t nil) 'secret-marker) program))


Π“ΠΎΡ‚ΠΎΠ²ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² rins мСстополоТСниС вставки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°. Π“Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΡΡ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚, вСдь ΠΌΡ‹ создадим ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‚ΡŒ, ΠΈ Π½Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΆΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ. ΠšΡΡ‚Π°Ρ‚ΠΈ, нСльзя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ add-cmd использовал ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°, ΠΈΠ½Π°Ρ‡Π΅ rins Π½Π°ΠΉΠ΄Π΅Ρ‚ ΠΈ ΠΏΠΎΠ»ΠΎΠΌΠ°Π΅Ρ‚ Π΅Π³ΠΎ. МоТно ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΎΠ±ΠΌΠ°Π½ΡƒΡ‚ΡŒ rins, исказив ΠΌΠ°Ρ€ΠΊΠ΅Ρ€, Π½ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ просто вынСсти Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ внСшнюю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (rins ΠΏΠΎ Π½ΠΈΠΌ Π½Π΅ ΠΈΡ‰Π΅Ρ‚). Ѐункция add-command-to-program ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ program ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π΅ Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ command, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅ΠΉ дСйствиС action:

(eval
	(defun add-command-to-program (program command action)
		(rins '((eq t nil) 'secret-marker) ; послС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°   
			`((eq command ',command) ,action) ; ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ²Π°Π·ΠΈΡ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
			program
		)
	)
)


БобствСнно создаСм ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ add-cmd.

(code 
	(rins '((eq t nil) 'secret-marker) 		; вставляСм послС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅
		`((eq command 'add-cmd)     	; имя Π½ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ add-cmd
			(setf program (add-command-to-program program (cadr input) (caddr input)))
		 ) 
		program
	)
) 


Π—Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Π΄Π²Π΅ послСдниС ΠΈΠ· Π½ΠΈΡ… Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ):

(add-cmd hi (princ "Hi, "))
(add-cmd quit (setf program nil))
(add-cmd reset (setf program (start-program)))


Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ окаТутся возмоТности ΠΏΠΎ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΅Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ save ΠΈ load:

(add-cmd save (with-open-file (stream (cadr input) :direction :output :if-exists :overwrite :if-does-not-exist :create) (print program stream)))
(add-cmd load (setf program (with-open-file (stream (cadr input)) (read stream))))


Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ наши Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² любой тСкстовый Ρ„Π°ΠΉΠ» ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΈΡ… ΠΎΡ‚Ρ‚ΡƒΠ΄Π°. Но слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ сохраняСм ΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ содСрТимоС program; всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ eval + defun, Π² этих Ρ„Π°ΠΉΠ»Π°Ρ… Π½Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ, ΠΎΠ½ΠΈ хранятся Π² памяти ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Π˜ΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это досадноС Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ сСйчас этого ΠΊΠ°ΡΠ°Ρ‚ΡŒΡΡ.

$> (save "1.txt")
$> (load "1.txt")
ΠšΠ°ΡΡ‚ΠΎΠΌΠΈΠ·Π°Ρ†ΠΈΡ


Для разнообразия займСмся кастомизациСй нашСго Π΄ΠΈΠ°Π»ΠΎΠ³Π°. НапримСр, Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π·Π°Π±Π°Π²Π½Ρ‹Π΅ привСтствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

(eval
	(defun greeting ()
		(let 
			((sentences (vector
				"My life for Ner'zhul.  "
				"I wish only to serve. "
				"Thy bidding, master? "
				"Where shall my blood be spilled? "
				"I bow to your will. "
			)))
			(elt sentences (random (length sentences)))
		)
	)
)


Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΈΡ… Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΌ процСссорС:

(code (rsubs '"$> " '(greeting) program))


ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡΡ Π½Π΅Ρ‡Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

I bow to your will. (hi)
Hi, I wish only to serve. 


НаконСц, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… скобок, Π·Π°ΠΌΠ΅Π½ΠΈΠ² (read) Π½Π° Π½Π΅Ρ‡Ρ‚ΠΎ послоТнСС: ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ строку ΠΈ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡ‚ΡŒ Π΅Π΅ скобками.

(code (rsubs '(read) '(read-from-string (concatenate 'string "(" (read-line) ")")) program))


Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Thy bidding, master? hi
Hi, Where shall my blood be spilled?


Π”Π°Π²Π°ΠΉΡ‚Π΅ напослСдок Π΅Ρ‰Π΅ Ρ€Π°Π· взглянСм Π½Π° ΠΊΠΎΠ΄:

ΠžΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

Thy bidding, master? view
---code---
(LAMBDA (PROGRAM)
  (PRINC (GREETING))
  (LET ((INPUT
         (READ-FROM-STRING (CONCATENATE 'STRING "(" (READ-LINE) ")"))))
    (WHEN (LISTP INPUT)
      (LET ((COMMAND (CAR INPUT)))
        (COND ((EQ T NIL) 'SECRET-MARKER)
              ((EQ COMMAND 'LOAD)
               (SETF PROGRAM
                       (WITH-OPEN-FILE (STREAM (CADR INPUT))
                         (READ STREAM))))
              ((EQ COMMAND 'SAVE)
               (WITH-OPEN-FILE
                   (STREAM (CADR INPUT) :DIRECTION :OUTPUT :IF-EXISTS
                    :OVERWRITE :IF-DOES-NOT-EXIST :CREATE)
                 (PRINT PROGRAM STREAM)))
              ((EQ COMMAND 'RESET) (SETF PROGRAM (START-PROGRAM)))
              ((EQ COMMAND 'QUIT) (SETF PROGRAM NIL))
              ((EQ COMMAND 'HI) (PRINC "Hi, "))
              ((EQ COMMAND 'ADD-CMD)
               (SETF PROGRAM
                       (ADD-COMMAND-TO-PROGRAM PROGRAM (CADR INPUT)
                                               (CADDR INPUT))))
              ((EQ COMMAND 'VIEW)
               (PROGN (FORMAT T "---code---") (PRINT PROGRAM) (TERPRI)))
              ((EQ COMMAND 'CODE)
               (SETF PROGRAM
                       (FUNCALL
                        (EVAL
                         (LIST 'LAMBDA '(PROGRAM INPUT) (CADR INPUT)))
                        PROGRAM INPUT)))
              ((EQ COMMAND 'EVAL) (EVAL (CADR INPUT)))
              (T (FORMAT T "Unknown command ~A ~%" COMMAND)))))
    PROGRAM)) 
My life for Ner'zhul.  


Π‘ этой ΡˆΡ‚ΡƒΠΊΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒΡΡ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ! Но Π½Π° сСгодня Ρ…Π²Π°Ρ‚ΠΈΡ‚.

Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· исходника? НСсколько способов

Иногда ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ ситуации, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ внСсти измСнСния Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½ΠΎ исходный ΠΊΠΎΠ΄ отсутствуСт. Как Ρ‚ΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

РСшСниС Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² отсутствиС Π΅Π΅ исходного ΠΊΠΎΠ΄Π° случаСтся довольно часто ΠΈ Π² основном этому ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‚ 2 основныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹:

  • Π²Ρ‹ потСряли исходный ΠΊΠΎΠ΄;
  • Π΅Π³ΠΎ Ρƒ вас Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ, Π½ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

Π˜Ρ‚Π°ΠΊ, Π΅ΡΡ‚ΡŒ скомпилированный Ρ„Π°ΠΉΠ», Π½ΠΎ Π½Π΅Ρ‚ исходного ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹? На ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ процСсс дСкомпиляции. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Β«ΠΌΠΎΠΆΠ΅Ρ‚Β»? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΈ этот процСсс бСссилСн. Плюс, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-дСкомпиляторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±Π΅ΡΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ. Помимо этого, ΠΌΠ½ΠΎΠ³ΠΎΠ΅ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ дСкомпилятора ΠΈ языка программирования, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написана ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях дСкомпилятор Π²Ρ‹Π΄Π°Π΅Ρ‚ исходный ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π½Π΅ смоТСтС Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ участок ΠΊΠΎΠ΄Π° для Π΅Π³ΠΎ измСнСния.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, Β«Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈΒ» β€” Π±Π΅Π· отсутствия исходного ΠΊΠΎΠ΄Π° β€” Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ получится, нСвысокая, Π½ΠΎ ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ. А Ρ€Π°Π· Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ.

Β 

Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· исходников?

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Π² этом случаС Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ процСсс дСкомпиляции. ДСкомпиляция β€” это способ создания исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π° Ρ‚ΠΎΠΌ языкС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ. Π’ΠΎ Π΅ΡΡ‚ΡŒ компиляция β€” это ΠΊΠΎΠ³Π΄Π° исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния прСобразуСтся Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π° дСкомпиляция β€” это ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ процСсс.

ДСкомпиляция Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях позволяСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· исходников, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ. ДСкомпилятор Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π²Ρ‹Π΄Π°Ρ‚ΡŒ нСпонятный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΈ Π²Ρ‹ просто Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ с этим Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ получаСтся, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ «мСньшС» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‚Π΅ΠΌ качСствСннСй ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ процСсс дСкомпиляции, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ β€” высоконагруТСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ тяТСло Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

Π”Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ спСциализированных ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

  1. VB Decompiler;
  2. ReFox;
  3. DeDe;
  4. EMS Source Rescuer;
  5. PEID;
  6. ΠΈ Π΄Ρ€.

Если Π²Π°ΠΌ извСстно, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ дСкомпилятор ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ этот язык программирования. Если ΠΆΠ΅ Π²Π°ΠΌ нСизвСстно, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ потрСбуСтся ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ нСсколько дСкомпиляторов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Π½ΡƒΠΆΠ½Ρ‹ΠΉ.

Π‘ΡƒΡ‚ΡŒ дСкомпиляции сводится ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ: Π²Ρ‹ ΠΈΠ· машинного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π΅ исходный ΠΊΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ измСнСния. Π­Ρ‚ΠΎ самый простой ΠΌΠ΅Ρ‚ΠΎΠ΄, Π½ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ всСгда. Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· исходника, Π½ΠΎ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ.

Β 

Как ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· дСкомпиляции?

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· исходника, выступаСт ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ассСмблСра, Π² частности Ρ€Π°Π·Π΄Π΅Π»Π° «рСвСрс-инТСнСрия», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π”Π°, это слоТно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠ»Π³ΠΎΠ³ΠΎ ΠΈ ΡƒΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ изучСния, Π½ΠΎ это Π±ΡƒΠ΄Π΅Ρ‚ самым Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ. Π’Π΅Π΄ΡŒ Π² этом случаС Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Π±Π°ΠΉΡ‚ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ произвСсти измСнСния Π² машинном ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. На сайтС SpyLife Π²Ρ‹ смоТСтС Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎΠΏ-3 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… обСспСчСний, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ со стороннСго устройства.

Π’ качСствС Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ инструмСнта Π² этом случаС Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ OllyDbg ΠΈ Ida PRO.

Β 

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Π΅Π· исходника Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· описанных Π²Ρ‹ΡˆΠ΅ способов:

  • ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ дСкомпилятор;
  • изучая ассСмблСр.

ΠšΡΡ‚Π°Ρ‚ΠΈ, дСкомпилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС написан исходный ΠΊΠΎΠ΄. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ распознавания прост: ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ языку программирования относится дСкомпилятор, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смоТСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄, ΠΊ Ρ‚ΠΎΠΌΡƒ языку ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Как Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — БообщСство — Π€ΠΎΡ€ΡƒΠΌΡ‹ SitePoint

realfreetv

#1

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, рСбята, я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Какая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½ΡƒΠΆΠ½Π° для рСдактирования исходного ΠΊΠΎΠ΄Π°?

Ρ„Π΅Π»Π³Π°Π»Π»

#2

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, это исходный ΠΊΠΎΠ΄.

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС написан исходный ΠΊΠΎΠ΄, Π²Π°ΠΌ потрСбуСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ компилятор, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим языком.

Π‘ΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ Π±Π°Π½Π°Π½

#3

Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходники ПО Π±Π΅Π· исходников? ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ .exe ΠΈΠ»ΠΈ установлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС? ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния?

Ρ€Π΅Π°Π»Ρ„Ρ€ΠΈΡ‚Π²

#4

Π‘ΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ Π±Π°Π½Π°Π½:

Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходник sw Π±Π΅Π· исходника? ΠΊΠ°ΠΊ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ . exe ΠΈΠ»ΠΈ установлСнноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС? ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ создании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния?

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с доступным исходным ΠΊΠΎΠ΄ΠΎΠΌ. На самом Π΄Π΅Π»Π΅ я ΠΊΡƒΠΏΠΈΠ» искомоС с ΠΏΡ€Π°Π²Π°ΠΌΠΈ собствСнности, ΠΈ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈ ссылки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° сайт ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ; Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» .exe

Ρ€Π΅Π°Π»Ρ„Ρ€ΠΈΡ‚Π²

#5

Ρ„Π΅Π»Π³Π°Π»Π»:

ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ, это исходный ΠΊΠΎΠ΄.

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС написан исходный ΠΊΠΎΠ΄, Π²Π°ΠΌ потрСбуСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ компилятор, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с этим языком.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ язык, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ совСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ языка

Ρ„Π΅Π»Π³Π°Π»Π»

#6

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исполняСмый Ρ„Π°ΠΉΠ» — Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ исходному источнику, Ρ‡Ρ‚ΠΎΠ±Ρ‹ внСсти измСнСния.

Если Π²Π°ΠΌ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΈΠ»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС Π±Ρ‹Π»Π° написана данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, посмотритС Π½Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для исходных Ρ„Π°ΠΉΠ»ΠΎΠ² — ΠΎΠ½ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ язык. Если Π½Π΅Ρ‚, Ρ‚ΠΎ Π²Ρ‹ смотритС Π½Π° сам источник, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, смоТСтС Π»ΠΈ Π²Ρ‹ это Ρ€Π΅ΡˆΠΈΡ‚ΡŒ.

Если всС, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ, это исполняСмый Ρ„Π°ΠΉΠ», Π° исходный ΠΊΠΎΠ΄ Π²Π°ΠΌ нСдоступСн, Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° запуск ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π°Π² Π½Π° Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

Π‘ΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ Π±Π°Π½Π°Π½

#7

ну… Π²Ρ‹ ΠœΠžΠ–Π•Π’Π• ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ .EXE, Π½ΠΎ для этого ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с HEX ΠΈ языком ассСмблСра (ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях с распаковкой ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ). Π’Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΡƒΡŽ сумму послС рСдактирования, Ссли Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² Π½Π΅Π΅ большС, Ρ‡Π΅ΠΌ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π»ΠΎΡΡŒ Π² исходном .EXE.

Если Ρƒ вас Π΅ΡΡ‚ΡŒ врСмя ΠΈ Π½Π°Π²Ρ‹ΠΊΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ всС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Но Ссли Ρƒ вас Π½Π΅Ρ‚ этого знания, ΠΊΠ°ΠΊ сказал Π€Π΅Π»Π³Π°Π»Π»; — Π½Π΅ рСдактируСтся.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ исходники, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π·Π½Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка для рСдактирования. ВсС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒβ€¦

AlexDawson

#8

RealFreeTV:

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, рСбята, я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Какая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½ΡƒΠΆΠ½Π° для рСдактирования исходного ΠΊΠΎΠ΄Π°?

Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ языкС Π±Ρ‹Π» написан ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ (язык), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° (ΠΈΠ»ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ исходный ΠΊΠΎΠ΄). Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ сотни языков программирования, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ Π±Ρ‹ языкС ΠΎΠ½ Π½ΠΈ Π±Ρ‹Π» написан, Π²Π°ΠΌ придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π²Π°ΠΌ понадобится IDE + компилятор для этого языка, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹.

RealFreeTV:

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния с доступным исходным ΠΊΠΎΠ΄ΠΎΠΌ. На самом Π΄Π΅Π»Π΅ я ΠΊΡƒΠΏΠΈΠ» искомоС с ΠΏΡ€Π°Π²Π°ΠΌΠΈ собствСнности, ΠΈ я Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ ΠΈ ссылки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π° сайт ΠΏΡ€ΠΎΠ΄Π°Π²Ρ†Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ; Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» .exe

МнС каТСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΠ»ΠΈ Π·Π° Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ Π½Π΅ ΠΈΠΌΠ΅Π» Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ссылок Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°, Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ исходный ΠΊΠΎΠ΄ доступСн, Π½ΠΎ Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ .exe, это ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²ΠΎ, исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ исходным ΠΊΠΎΠ΄ΠΎΠΌ, ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исполняСмого Ρ„Π°ΠΉΠ»Π°, Ссли Ρƒ вас Π½Π΅Ρ‚ исходного ΠΊΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ΠΌ Π²Π°ΡˆΠΈΡ… Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€Π°Π² Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ (я Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, ΠΈ я знаю, Ρ‡Ρ‚ΠΎ Ρƒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π΅ΡΡ‚ΡŒ ΠΏΡƒΠ½ΠΊΡ‚ Π² ΠΈΡ… Π»ΠΈΡ†Π΅Π½Π·ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ говорится, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΏΡ€Π°Π²Π° Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ€Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚), Ссли Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ исходный код… Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Π΅Π³ΠΎ, просмотритС Π² рСдакторС… Π½ΠΎ Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ exe Ρ„Π°ΠΉΠ», Ρƒ вас Π½Π΅Ρ‚ ΠΏΡ€Π°Π² Π½Π° исходный ΠΊΠΎΠ΄.

Ρ€Π΅Π°Π»Ρ„Ρ€ΠΈΡ‚Π²:

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ язык, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΏΡ€ΠΈ написании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ совСт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ языка

?

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Π°ΠΉΠ»ΠΎΠ², Π·Π°Ρ‚Π΅ΠΌ Π·Π°Π³ΡƒΠ³Π»ΠΈΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, ΠΈ ΠΎΠ½ скаТСт Π²Π°ΠΌ, с ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠΌ ΠΎΠ½ связан… Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли это vbp / vb, это Π±ΡƒΠ΄Π΅Ρ‚ Visual Basic, Ссли это cpp / c, это Π±ΡƒΠ΄Π΅Ρ‚ C++… ΠΈΠ»ΠΈ Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π½ΠΈΠ²Ρ‹ΠΌ, Ρ‚ΠΎ спроситС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π΅Π±-сайт, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ исходный ΠΊΠΎΠ΄, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ

Π‘ΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ Π±Π°Π½Π°Π½:

ну… Π²Ρ‹ ΠœΠžΠ–Π•Π’Π• ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ .EXE, Π½ΠΎ для этого ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с HEX ΠΈ языком ассСмблСра (ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях с распаковкой ΠΈ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠΎΠΉ).

НС совсСм Ρ‚Π°ΠΊ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ рСсурсов ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ измСнСния структуры Π±Π΅Π· знания ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ассСмблСра, Π½ΠΎ эти измСнСния ΠžΠ§Π•ΠΠ¬ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹.

Π‘ΡƒΠΌΠ°ΡΡˆΠ΅Π΄ΡˆΠΈΠΉ Π±Π°Π½Π°Π½

#9

АлСкс Доусон:

НС совсСм Ρ‚Π°ΠΊ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ рСсурсов ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ измСнСния структуры Π±Π΅Π· знания ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈΠ»ΠΈ ассСмблСра, Π½ΠΎ эти измСнСния ΠžΠ§Π•ΠΠ¬ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹.

Π»ΠΎΠ», Π΄Π°, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚Ρ‹ ΠΏΡ€Π°Π². Π― Π·Π°Π±Ρ‹Π» ΠΏΡ€ΠΎ рСсурс Ρ…Π°ΠΊΠ΅Ρ€ΠΎΠ²/Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ². Π½ΠΎ ΠΎΠ½ΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΊΠ°ΠΊ Π²Ρ‹ сказали «ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹» ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚

Π’ любом случаС, Ссли ΠΎΠ½ сидит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с .exe, ΠΈ ΠΊΡƒΠΏΠΈΠ» Π΅Π³ΠΎ Π±Π΅Π· исходников, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎΠ± этом .
Π§Ρ‚ΠΎ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ это Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΅Π³ΠΎ источник, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½ Π΅Π³ΠΎ ΠΊΡƒΠΏΠΈΠ», ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ оттуда…

систСма

Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΎ

#10

Π’ Ρ†Π΅Π½Ρ‚Ρ€Π΅ внимания студСнчСской Π³Ρ€ΡƒΠΏΠΏΡ‹: Code the Change, созданиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ воздСйствия β€” USC Viterbi

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° участники Code the Change Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со своими ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π½Π°Π΄ созданиСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²Π΅Π±-сайтов β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… мСстных нСкоммСрчСских ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ Π½Π° сСбя. Π€ΠΎΡ‚ΠΎ/iStock.

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚Ρ‹-программисты ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹ студСнчСской ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Code the Change (CTC) USC ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ свои Π½Π°Π²Ρ‹ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΄ΠΎΠ±Ρ€ΠΎ ΠΈ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Основанная Π² 2014 Π³ΠΎΠ΄Ρƒ, организация стрСмится ΠΏΠΎΠΌΠΎΠ³Π°Ρ‚ΡŒ нСкоммСрчСским организациям Π² Лос-АндТСлСсС Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π’ студСнчСском ΠΊΠ»ΡƒΠ±Π΅ сСйчас ΠΎΠΊΠΎΠ»ΠΎ 30 Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ², состоящих ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠ² ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ.

Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚Ρ‹ ΠΈΠ· Code the Change, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Π½Ρ‹Π΅ Π² 2020 Π³ΠΎΠ΄Ρƒ Π΄ΠΎ принятия ΠΌΠ΅Ρ€ ΠΏΠΎ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π΄ΠΈΡΡ‚Π°Π½Ρ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ для нСкоммСрчСских ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ. Π€ΠΎΡ‚ΠΎ/ΠΊΠΎΠ΄ измСнСния.

Π—Π° послСдниС нСсколько Π»Π΅Ρ‚ ΠΊΠ»ΡƒΠ± Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ» число нСкоммСрчСских ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Vision to Learn, Π±Π΅ΡΠΏΠ»Π°Ρ‚Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ зрСния ΠΈ поставщика ΠΎΡ‡ΠΊΠΎΠ² для учащихся ΠΈΠ· Π±Π΅Π΄Π½Ρ‹Ρ… слоСв насСлСния; Climate Cents, ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° ΠΊΡ€Π°ΡƒΠ΄Ρ„Π°Π½Π΄ΠΈΠ½Π³Π°, ориСнтированная Π½Π° Π±ΠΎΡ€ΡŒΠ±Ρƒ с ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΠΈΠΌΠ°Ρ‚Π°; ΠΈ Green Dot Public Schools, нСкоммСрчСская ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ организация Π² Ρ†Π΅Π½Ρ‚Ρ€Π΅ Лос-АндТСлСса.

«МСня ΠΎΡ‡Π΅Π½ΡŒ вдохновляСт миссия ΠΏΠΎΠΌΠΎΡ‰ΠΈ нСкоммСрчСским организациям Π² финансовом ростС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ прСдоставлСниС ΠΈΠΌ доступа ΠΊ рСсурсам, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ, ΠΊ соТалСнию, ΠΈΠΌΠ΅ΡŽΡ‚ доступ Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ нСкоммСрчСскиС ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈΒ», β€” сказала ДТСссика Ау, которая слуТила Π² качСствС ΠΏΡ€Π΅Π·ΠΈΠ΄Π΅Π½Ρ‚Π° Π΄ΠΎ апрСля, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π»Π° эстафСту однокурснику ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Π”ΠΆΠ΅ΠΉΠΌΠΈ ЀлорСс.

ΠŸΠΎΠΌΠΎΡ‰ΡŒ нСкоммСрчСским организациям Π² финансовом ростС

Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ всСго ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° участники Code the Change Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ со своими ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ Π½Π°Π΄ созданиСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ Π²Π΅Π±-сайтов β€” ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π½Π° осущСствлСниС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… мСстных нСкоммСрчСских ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π±ΡŽΠ΄ΠΆΠ΅Ρ‚Π° Π² ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΡƒ.

«МСня ΠΎΡ‡Π΅Π½ΡŒ вдохновляСт миссия ΠΏΠΎ оказанию ΠΏΠΎΠΌΠΎΡ‰ΠΈ нСкоммСрчСским организациям Π² финансовом ростС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния». ДТСссика Ау.

Β«Π― Π² восторгС ΠΎΡ‚ Code the Change, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… нСкоммСрчСских ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΉ Π½Π΅Ρ‚ Π΄Π΅Π½Π΅Π³, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ дорогостоящих ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… спСциалистов для создания Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²Β», β€” сказала Алия ΠŸΠ΅Ρ‚Ρ€Π°Π½ΠΈΠΊ, ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ спСциалист ΠΏΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹ΠΌ Π½Π°ΡƒΠΊΠ°ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π² Facebook послС окончания ΡƒΡ‡Π΅Π±Ρ‹.

Β«Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌ услуги ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΠΌΠ½Π΅, Ρ‡Ρ‚ΠΎ простыС Π²Π΅Ρ‰ΠΈ с ΠΌΠΎΠΈΠΌΠΈ Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β».

На Π½Π΅Π΄Π°Π²Π½Π΅ΠΌ ΠΎΠ½Π»Π°ΠΉΠ½-сСминарС ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° Β«Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ воздСйствия» Ρ‡Π»Π΅Π½Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ подСлились своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ студСнтами, ΠΈΠ·ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΡƒ. Они объяснили, Ρ‡Ρ‚ΠΎ Π² ΠΈΡ… процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΅ΡΡ‚ΡŒ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ этапа: ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ потрСбностСй нСкоммСрчСского ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°; ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ; прСдставлСниС ΠΎ характСристиках ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°; ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅.

Code the Change сотрудничаСт с Vision to Learn, поставщиком бСсплатных Π³Π»Π°Π·Π½Ρ‹Ρ… экзамСнов ΠΈ ΠΎΡ‡ΠΊΠΎΠ².

Π’ этом Π³ΠΎΠ΄Ρƒ CTC Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ»Π° партнСрскоС соглашСниС с Gladeo, Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΌΠ΅Π΄ΠΈΠ°-студиСй ΠΈ тСхнологичСской нСкоммСрчСской ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, которая прСдоставляСт рСсурсы для ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ роста малообСспСчСнным слоям насСлСния. Π˜Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ: созданиС ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связываСт Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… профСссионалов со своими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

ПослС встрСчи с заинтСрСсованными сторонами, провСдСния ΠΌΠΎΠ·Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡˆΡ‚ΡƒΡ€ΠΌΠ° ΠΈ провСдСния ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ исслСдования ΠΊΠΎΠΌΠ°Π½Π΄Π° CTC Ρ€Π΅ΡˆΠΈΠ»Π° ΠΏΠΎΠΌΠΎΡ‡ΡŒ Gladeo ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для видСозаписи, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ профСссионалы ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… областСй ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΈ с вопросами ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ ΠΈΠΌΠΈ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ сайта. .

Β«Π‘Π°ΠΌΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Π² ΠΎΠΏΡ‹Ρ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° CTC β€” это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ настоящая нСкоммСрчСская компания», β€” сказал Π‘Ρ€Π°ΠΉΠ°Π½ Π₯ΡƒΠ°Π½Π³, Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Gladeo.

Β«ΠœΡ‹ примСняСм Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ потрСбности нашСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°Β».

Code the Change Вопросы ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹

Β  Π‘ ΠΊΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Code the Change?

Code the Change Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с нСкоммСрчСскими организациями 501(c)(3) Π½Π°Π΄ созданиСм тСхнологичСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ для ΠΈΡ… Π½ΡƒΠΆΠ΄. Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с организациями Π² Ρ€Π°ΠΉΠΎΠ½Π΅ Лос-АндТСлСса, Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния Π² связи с COVID-19. .

Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я Π±Ρ‹Ρ‚ΡŒ спСциалистом ΠΏΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ΅?

ВовсС Π½Π΅Ρ‚. CTC привСтствуСт студСнтов ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ ΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ, ΠΈ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… условий, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΡ‚Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ΠΎΠΌ ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρƒ.

Π”ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ я ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠ΅ ΠΏΠΎΡ€Ρ‚Ρ„ΠΎΠ»ΠΈΠΎ ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ заявку?

Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС, CTC ΠΈΡ‰Π΅Ρ‚ людСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стрСмятся ΠΊ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ влиянию. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, соискатСли ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ свои тСхничСскиС способности ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ β€” всС, Ρ‡Ρ‚ΠΎ дСмонстрируСт Π²Π°ΡˆΡƒ ΡΡ‚Ρ€Π°ΡΡ‚ΡŒ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» Π² ΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΡŒΡΡ‚Π²Π΅.

Π•ΡΡ‚ΡŒ Π»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ способ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ участиС?

Code the Change Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ мСроприятия, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ для всСх студСнтов USC Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π³ΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ сСминары ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΏΠ΅Ρ€Π΅Π³ΠΎΠ²ΠΎΡ€Ρ‹ с компаниями ΠΎ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ воздСйствии ΠΈ Ρ‚. Π΄. Π‘Ρ‚ΡƒΠ΄Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΉΡ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π½Π° своСм Π²Π΅Π±-сайтС.

Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ участиС? Code the Change Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ прилоТСния для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€ΠΎΠ² 8 сСнтября.

This entry was posted in БСмантичСскоС ядро