{"id":257354,"date":"2015-05-17T20:13:02","date_gmt":"2015-05-17T16:13:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=257354"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=257354","title":{"rendered":"\u041f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0439 \u0440\u0435\u0432\u0435\u0440\u0441 \u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 IronPython"},"content":{"rendered":"<p>     \t\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440!<\/p>\n<p>  \u0421\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0443\u0436\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e, Python \u0432\u0435\u0434\u044c, \u0431\u0435\u0440\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0439 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0435\u0437\u0435\u0442. \u041d\u043e \u043d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e. \u0414\u0435\u043b\u043e \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u043e\u0441\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Python, \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"http:\/\/ironpython.net\/\">IronPython<\/a> \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435 \u0438\u043c\u0435\u043b\u043e\u0441\u044c. \u0414\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e, \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e CPython \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Over 9000 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u0435\u043a\u043e\u043c\u043f\u0430\u0439\u043b\u0435\u0440\u043e\u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 .pyc \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 .py, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [\u043c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439] <a href=\"https:\/\/github.com\/Mysterie\/uncompyle2\">uncompyle2<\/a> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435, \u0430 \u0434\u043b\u044f IronPython \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b. \u0422\u043e \u043b\u0438 \u043f\u043b\u043e\u0445\u043e \u0438\u0441\u043a\u0430\u043b, \u0442\u043e \u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u043c\u0443. \u0413\u043e\u0432\u043e\u0440\u044e \u0441\u0440\u0430\u0437\u0443, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044f \u043d\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b, \u0432\u0441\u0451 \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c hand made.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 IronPython \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 native executable \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 .Net (\u044f \u0433\u043e\u0432\u043e\u0440\u044e \u00ab\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u00bb \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f .Net, \u0430 \u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430). \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u0437 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0434\u0435\u043a\u043e\u043c\u043f\u0430\u0439\u043b\u0435\u0440\u043e\u0432 .Net.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b .Net \u0438 \u0438\u0445 Addin&#39;\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430, \u044f \u043d\u0430\u0448\u0451\u043b, \u043d\u0430\u0433\u0443\u0433\u043b\u0438\u043b <a href=\"http:\/\/ipreflector.codeplex.com\/\">IronPython Reflector Addin<\/a> \u0434\u043b\u044f <a href=\"http:\/\/www.red-gate.com\/products\/dotnet-development\/reflector\/\">.NET Reflector<\/a>, \u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u043b, \u043c\u0435\u043d\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u043b\u043e \u0438 \u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u043b\u043e. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c \u0438 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0441\u0430\u043c .NET Reflector \u043d\u0435 \u043c\u043e\u0433 \u0442\u043e\u043b\u043a\u043e\u043c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434-\u0447\u0435\u0440\u0435\u0437 \u0434\u0432\u0430 \u0438 \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f<\/p>\n<p>  <img decoding=\"async\" src=\"\/\/habrastorage.org\/files\/ef8\/930\/23c\/ef893023c10a4d4a85f04b2cbf215d30.png\"\/><\/p>\n<p>  <a href=\"https:\/\/www.jetbrains.com\/decompiler\/\">dotPeek<\/a> \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043c\u043e\u0433 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0438 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, <a href=\"http:\/\/www.telerik.com\/products\/decompiler.aspx\">Telerik JustDecompile<\/a> \u043a\u0430\u043a \u0438 .NET Reflector \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u043b\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437, \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0438\u043c \u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f <a href=\"http:\/\/ilspy.net\/\">ILSpy<\/a>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u043e \u0447\u0442\u043e \u0436\u0435 IronPython \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u0444\u0430\u0439\u043b \u044f \u043d\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u043d\u0438\u0447\u0435\u0433\u043e \u043b\u0443\u0447\u0448\u0435\u0433\u043e, \u043a\u0430\u043a \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0443\u044e (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e, \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0435\u0441\u044f\u0442\u0438 \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438:<\/p>\n<pre><code class=\"python\">&quot;&quot;&quot;This proggy calculates first 10 Fibonacci numbers&quot;&quot;&quot;  def fib(n):     &quot;&quot;&quot;This function does the main work to calculate Fibonacci numbers&quot;&quot;&quot;     if n == 0 or n == 1 or n == 2:         return 1      fib1 = 1     fib2 = 1      i = 2      while i &lt; n:         fib_sum = fib2 + fib1         fib1 = fib2         fib2 = fib_sum         i += 1     return fib_sum   for i in xrange(10):     print(&quot;n is {0} for step {1}&quot;.format(fib(i), i)) <\/code><\/pre>\n<p>  IronPython \u0441\u043e\u0437\u0434\u0430\u043b \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430: .exe \u0441 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043d\u044b\u043c \u0441\u0442\u0430\u0431\u043e\u043c \u0438 .dll \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439. .exe \u0431\u044b\u043b \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0442.\u043a. \u043a\u0440\u043e\u043c\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 .dll \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a .dll<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 IronPython<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0430\u0447\u0438\u043d\u0430\u043b \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u044f \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043d\u0430 \u0441\u0435\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"http:\/\/ironpython.codeplex.com\/downloads\/get\/970325\">IronPython 2.7.5<\/a>. \u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043c fibonacci.dll \u0432 C# \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ILSpy \u0438 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0448\u0438\u043b \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 \u043a\u043e\u0434\u043e\u043c \u0442\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435 \u00ab\u0431\u0430\u0439\u0442 \u0432 \u0431\u0430\u0439\u0442\u00bb, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0434\u044c \u0440\u0430\u0437\u043d\u0430\u044f, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u043e\u0431\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, etc. \u0418 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435, \u043d\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u044f\u0432\u043d\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f. \u0420\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 IronPython, \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0435. \u0412\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u043b \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e (\u0432\u0435\u0440\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e) \u0432\u0435\u0440\u0441\u0438\u044e IronPython, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b, \u0441\u043a\u0430\u0440\u043c\u043b\u0438\u0432\u0430\u043b \u0435\u043c\u0443 \u0441\u0432\u043e\u0439 fibonacci.py, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 fibonacci.dll \u0432 ILSpy, \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b, \u043e\u043f\u044f\u0442\u044c \u0432\u0438\u0434\u0435\u043b \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0438 \u043b\u0435\u0437 \u0432\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e. \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0442\u0430\u043a\u0438\u0445 \u0432\u043e\u0442 \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430\u0448\u0451\u043b \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0430\u044f \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"https:\/\/ironpython.codeplex.com\/downloads\/get\/96606\">IronPython 2.6<\/a>, \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u0449\u0438\u043c C# \u043a\u043e\u0434\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c fibonacci.dll \u0431\u044b\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b. \u041d\u0430 IronPython 2.6 \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f.  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b IronPython \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043b\u0430\u0441\u0441<\/p>\n<pre><code>public class DLRCachedCode<\/code><\/pre>\n<p>  \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434 \u0442\u0438\u043f\u0430<\/p>\n<pre><code>public static<\/code><\/pre>\n<p>  \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 __main__. \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u043b\u0430\u0441\u0441\u0430 DLRCachedCode \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f<\/p>\n<pre><code>private static<\/code><\/pre>\n<p>  \u0412 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043b\u0430\u0441\u0441\u044b, \u043b\u044f\u043c\u0431\u0434\u044b, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438 \u043f\u0440. \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c __main__, \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 CachedOptimizedCode \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0438\u043c\u0451\u043d \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre><code>     [CachedOptimizedCode(new string[]     {         &quot;__name__&quot;,         &quot;__file__&quot;,         &quot;__doc__&quot;,         &quot;__path__&quot;,         &quot;__builtins__&quot;,         &quot;__package__&quot;,         &quot;fib&quot;,         &quot;i&quot;,         &quot;xrange&quot;     })] <\/code><\/pre>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 __main__ \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439: \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432\u0441\u0435\u0445 compiler generated \u043b\u044f\u043c\u0431\u0434 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 IronPython, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 runtime \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 IronPython \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438, \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c\u0438, \u0441\u043b\u0430\u0439\u0441\u0430\u043c\u0438. \u0418 \u0434\u0430\u0436\u0435 \u0432\u0441\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435\/\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 IronPython runtime:<\/p>\n<pre><code>     public static object __main__$1(CodeContext $globalContext, FunctionCode functionCode)     {         object[] expr_06 = new object[1];         StrongBox&lt;object[]&gt; strongBox = expr_06[0] = new StrongBox&lt;object[]&gt;();         object[] array = expr_06;         object[] value = new object[]         {             PythonOps.MakeFunctionCode($globalContext, &quot;fib&quot;, &quot;This function does the main work to calculate Fibonacci numbers&quot;, new string[]             {                 &quot;n&quot;             }, 0, new SourceSpan(new SourceLocation(59, 3, 1), new SourceLocation(373, 17, 19)), &quot;fibonacci.py&quot;, new Func&lt;PythonFunction, object, object&gt;(new Closure(null, array).fib$2), null, null, null, new string[]             {                 &quot;n&quot;,                 &quot;fib1&quot;,                 &quot;fib2&quot;,                 &quot;i&quot;,                 &quot;fib_sum&quot;             }, 5),             CallSite&lt;Func&lt;CallSite, object, KeyValuePair&lt;IEnumerator, IDisposable&gt;&gt;&gt;.Create(PythonOps.MakeOperationAction($globalContext, 18)),             CallSite&lt;Func&lt;CallSite, CodeContext, object, int, object&gt;&gt;.Create(PythonOps.MakeInvokeAction($globalContext, new CallSignature(1))),             CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object, object&gt;&gt;.Create(PythonOps.MakeInvokeAction($globalContext, new CallSignature(2))),             CallSite&lt;Func&lt;CallSite, string, CodeContext, object&gt;&gt;.Create(PythonOps.MakeGetAction($globalContext, &quot;format&quot;, false)),             CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object&gt;&gt;.Create(PythonOps.MakeInvokeAction($globalContext, new CallSignature(1))),             CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;.Create(PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)),             CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;.Create(PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)),             CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;.Create(PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)),             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;.Create(PythonOps.MakeBinaryOperationAction($globalContext, 13)),             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;.Create(PythonOps.MakeBinaryOperationAction($globalContext, 13)),             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;.Create(PythonOps.MakeBinaryOperationAction($globalContext, 13)),             CallSite&lt;Func&lt;CallSite, object, object, bool&gt;&gt;.Create(PythonOps.MakeComboAction($globalContext, PythonOps.MakeBinaryOperationAction($globalContext, 20), PythonOps.MakeConversionAction($globalContext, typeof(bool), 1))),             CallSite&lt;Func&lt;CallSite, object, object, object&gt;&gt;.Create(PythonOps.MakeBinaryOperationAction($globalContext, 0)),             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;.Create(PythonOps.MakeBinaryOperationAction($globalContext, 63))         }; <\/code><\/pre>\n<p>  \u0412\u0438\u0434\u043d\u043e \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 MakeFunctionCode \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d PythonOps IronPython (\u0434\u0430, \u0437\u0430\u0431\u044b\u043b \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e IronPython \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 C#, \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043b\u044e\u0431\u043e\u0439 \u0435\u0433\u043e \u0432\u0435\u0440\u0441\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 <a href=\"https:\/\/ironpython.codeplex.com\/SourceControl\/latest\">\u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>), \u0438\u043c\u0435\u044e\u0449\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443:<\/p>\n<pre><code> public static FunctionCode MakeFunctionCode(CodeContext context, string name, string documentation, string[] argNames, FunctionAttributes flags, SourceSpan span, string path, Delegate code, string[] freeVars, string[] names, string[] cellVars, string[] varNames, int localCount) <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0447\u0442\u043e \u043d\u0430\u0448\u0430<\/p>\n<pre><code class=\"python\">def fib(n):     &quot;&quot;&quot;This function does the main work to calculate Fibonacci numbers&quot;&quot;&quot;     .... <\/code><\/pre>\n<p>  \u0442\u0443\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a<\/p>\n<pre><code>             PythonOps.MakeFunctionCode($globalContext, &quot;fib&quot;, &quot;This function does the main work to calculate Fibonacci numbers&quot;, new string[]             {                 &quot;n&quot;             }, 0, new SourceSpan(new SourceLocation(59, 3, 1), new SourceLocation(373, 17, 19)), &quot;fibonacci.py&quot;, new Func&lt;PythonFunction, object, object&gt;(new Closure(null, array).fib$2), null, null, null, new string[]             {                 &quot;n&quot;,                 &quot;fib1&quot;,                 &quot;fib2&quot;,                 &quot;i&quot;,                 &quot;fib_sum&quot;             }, 5), <\/code><\/pre>\n<p>  \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u00abfib\u00bb, \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u00abThis function does the main work to calculate Fibonacci numbers\u00bb,, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00abn\u00bb, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u00abfibonacci.py\u00bb \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 3 \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 1, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 17 \u043d\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 19, \u0432 \u0441\u0433\u0435\u043d\u0435\u0440\u0451\u043d\u043d\u043e\u043c IronPython \u043a\u043e\u0434\u0435 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u00abfib$2\u00bb, \u0443 \u043d\u0435\u0451 \u043f\u0443\u0441\u0442\u044b\u0435 freeVars, names \u0438 cellVars (\u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u0445\u0430\u0431\u0430 Python \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f\u043c\u0438), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435) \u00abn\u00bb, \u00abfib1\u00bb, \u00abfib2\u00bb, \u00abi\u00bb \u0438 \u00abfib_sum\u00bb \u0438 \u0432\u0441\u0435\u0433\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 5 \u0448\u0442\u0443\u043a.<\/p>\n<p>  \u0412\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 IronPython runtime \u0437\u0430\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u0430\u043a \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b CallSite (\u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u0432\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0437\u0430\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a \u00ab\u041f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0439 \u0440\u0435\u0432\u0435\u0440\u0441 \u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 IronPython\u00bb, \u0430 \u043d\u0435 \u00ab\u0414\u043e\u0441\u043a\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440\u00bb).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f <i>\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445<\/i> \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e:<\/p>\n<pre><code> globalArrayFromContext[1].set_CurrentValue((object)&quot;fibonacci.py&quot;); globalArrayFromContext[0].set_CurrentValue((object)&quot;__main__&quot;); <\/code><\/pre>\n<p>  (\u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 &quot;__file__&quot; \u0438 &quot;__name__&quot;, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u0447\u0435\u0440\u0435\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 CachedOptimizedCode)<\/p>\n<p>  \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre><code>                 globalArrayFromContext[2].set_CurrentValue((object)&quot;This proggy calculates first 10 Fibonacci numbers&quot;);                 int num = 1;                 globalArrayFromContext[6].set_CurrentValue(PythonOps.MakeFunction($globalContext, (FunctionCode)strongBox.Value[0], globalArrayFromContext[0].get_RawValue(), null));                 num = 19;                 CallSite&lt;Func&lt;CallSite, object, KeyValuePair&lt;IEnumerator, IDisposable&gt;&gt;&gt; callSite;                 CallSite&lt;Func&lt;CallSite, CodeContext, object, int, object&gt;&gt; callSite2;                 KeyValuePair&lt;IEnumerator, IDisposable&gt; keyValuePair = (callSite = (CallSite&lt;Func&lt;CallSite, object, KeyValuePair&lt;IEnumerator, IDisposable&gt;&gt;&gt;)strongBox.Value[1]).Target.Invoke(callSite, (callSite2 = (CallSite&lt;Func&lt;CallSite, CodeContext, object, int, object&gt;&gt;)strongBox.Value[2]).Target.Invoke(callSite2, $globalContext, globalArrayFromContext[8].get_CurrentValue(), 10));                 try                 {                     while (true)                     {                         bool flag = keyValuePair.Key.MoveNext();                         if (!flag)                         {                             break;                         }                         globalArrayFromContext[7].set_CurrentValue(keyValuePair.Key.Current);                         num = 20;                         CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object, object&gt;&gt; callSite3;                         CallSite&lt;Func&lt;CallSite, string, CodeContext, object&gt;&gt; callSite4;                         CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object&gt;&gt; callSite5;                         PythonOps.Print($globalContext, (callSite3 = (CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object, object&gt;&gt;)strongBox.Value[3]).Target.Invoke(callSite3, $globalContext, (callSite4 = (CallSite&lt;Func&lt;CallSite, string, CodeContext, object&gt;&gt;)strongBox.Value[4]).Target.Invoke(callSite4, &quot;n is {0} for step {1}&quot;, $globalContext), (callSite5 = (CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object&gt;&gt;)strongBox.Value[5]).Target.Invoke(callSite5, $globalContext, globalArrayFromContext[6].get_CurrentValue(), globalArrayFromContext[7].get_CurrentValue()), globalArrayFromContext[7].get_CurrentValue()));                         num = 19;                     }                 }                 finally                 {                     PythonOps.ForLoopDispose(keyValuePair);                 } <\/code><\/pre>\n<p>  \u0412\u0435\u0441\u044c \u00ab\u0431\u0440\u0435\u0434\u00bb \u0432\u044b\u0448\u0435 \u044d\u0442\u043e \u0442\u043e, \u0432\u043e \u0447\u0442\u043e IronPython \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0430 \u043b\u0438\u0448\u044c<\/p>\n<pre><code class=\"python\">for i in xrange(10):     print(&quot;n is {0} for step {1}&quot;.format(fib(i), i)) <\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441\u043a\u0440\u0438\u043f\u0442 (\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443, \u043e\u043d \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0439), \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439 \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0430 globalArrayFromContext[7], strongBox.Value[3].Target.Invoke \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043d\u0430 \u0438\u0445 \u00ab\u043e\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u043d\u043d\u044b\u0435\u00bb \u0438\u043c\u0435\u043d\u0430 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 IronPython \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043d\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439, \u0442\u043e \u0435\u0441\u0442\u044c csc.exe \u0435\u0433\u043e \u00ab\u043d\u0435 \u0432\u043e\u0437\u044c\u043c\u0451\u0442\u00bb, \u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c \u043a\u043e\u0434:<\/p>\n<pre><code>                 try                 {                     while (true)                     {                         bool flag = keyValuePair.Key.MoveNext();                         if (!flag)                         {                             break;                         }                         G[i].set_CurrentValue(keyValuePair.Key.Current);                         num = 20;                         CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object, object&gt;&gt; callSite3;                         CallSite&lt;Func&lt;CallSite, string, CodeContext, object&gt;&gt; callSite4;                         CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object&gt;&gt; callSite5;                         PythonOps.Print($globalContext, (callSite3 = (CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object, object&gt;&gt;)L[PythonOps.MakeInvokeAction($globalContext, new CallSignature(2))])(callSite3, $globalContext, (callSite4 = (CallSite&lt;Func&lt;CallSite, string, CodeContext, object&gt;&gt;)L[PythonOps.MakeGetAction($globalContext, &quot;format&quot;, false)])(callSite4, &quot;n is {0} for step {1}&quot;, $globalContext), (callSite5 = (CallSite&lt;Func&lt;CallSite, CodeContext, object, object, object&gt;&gt;)L[PythonOps.MakeInvokeAction($globalContext, new CallSignature(1))])(callSite5, $globalContext, G[fib].get_CurrentValue(), G[i].get_CurrentValue()), G[i].get_CurrentValue()));                         num = 19;                     }                 }                 finally                 {                     PythonOps.ForLoopDispose(keyValuePair);                 } <\/code><\/pre>\n<p>  IMHO \u0432\u0438\u0434\u0435\u0442\u044c L[PythonOps.MakeGetAction($globalContext, \u00abformat\u00bb, false)]), G[i].get_CurrentValue() \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0432\u043c\u0435\u0441\u0442\u043e strongBox.Value[4]).Target.Invoke \u0438 globalArrayFromContext[7].get_CurrentValue() \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435 \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435.<\/p>\n<p>  \u0422.\u043a. \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, <i>\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044f <b>\u043d\u0435<\/b> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b<\/i> (\u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u044b\u043b\u0430 \u0448\u0442\u0443\u0447\u043d\u0430\u044f \u0438 \u0438\u0437\u0433\u043e\u0442\u043e\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u043e-\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438), \u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u043e\u0440 \u0440\u0443\u043a\u0430\u043c\u0438, \u043f\u043e\u043b\u043d\u044b\u0439 hand made. \u0411\u0435\u0440\u0451\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0444\u0443\u043d\u043a\u0446\u0438\u044e fib:<\/p>\n<pre><code>     private static object fib$2(Closure closure, PythonFunction $function, object n)     {         object[] locals = closure.Locals;         StrongBox&lt;object[]&gt; strongBox = (StrongBox&lt;object[]&gt;)locals[0];         CodeContext globalContext = PythonOps.GetGlobalContext(PythonOps.GetParentContextFromFunction($function));         PythonGlobal[] globalArrayFromContext = PythonOps.GetGlobalArrayFromContext(globalContext);         object result;         try         {             int num = 5;             CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt; callSite;             CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt; callSite2;             CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt; callSite3;             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt; callSite4;             object obj2;             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt; callSite5;             object obj;             CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt; callSite6;             if ((callSite = (CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;)L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite, (!(callSite2 = (CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;)L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite2, obj = ((!(callSite3 = (CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;)L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite3, obj2 = (callSite4 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite4, n, 0))) ? (callSite5 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite5, n, 1) : obj2))) ? (callSite6 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite6, n, 2) : obj))             {                 result = ScriptingRuntimeHelpers.Int32ToObject(1);             }             else             {                 num = 8;                 object obj3 = ScriptingRuntimeHelpers.Int32ToObject(1);                 num = 9;                 object obj4 = ScriptingRuntimeHelpers.Int32ToObject(1);                 num = 11;                 object obj5 = ScriptingRuntimeHelpers.Int32ToObject(2);                 num = 12;                 object obj6;                 while (true)                 {                     CallSite&lt;Func&lt;CallSite, object, object, bool&gt;&gt; callSite7;                     bool flag = (callSite7 = (CallSite&lt;Func&lt;CallSite, object, object, bool&gt;&gt;)L[PythonOps.MakeComboAction($globalContext, PythonOps.MakeBinaryOperationAction($globalContext, \/* LessThan *\/ 20), PythonOps.MakeConversionAction($globalContext, typeof(bool), 1))])(callSite7, obj5, n);                     if (!flag)                     {                         break;                     }                     num = 13;                     CallSite&lt;Func&lt;CallSite, object, object, object&gt;&gt; callSite8;                     obj6 = (callSite8 = (CallSite&lt;Func&lt;CallSite, object, object, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Add *\/ 0)])(callSite8, obj4, obj3);                     num = 14;                     obj3 = obj4;                     num = 15;                     obj4 = obj6;                     num = 16;                     CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt; callSite9;                     obj5 = (callSite9 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* AddAssign *\/ 63)])(callSite9, obj5, 1);                 }                 result = obj6;             }         }         catch (Exception)         {             int num;             PythonOps.UpdateStackTrace(globalContext, (FunctionCode)L[fib$2], MethodBase.GetCurrentMethod(), &quot;fib&quot;, &quot;fibonacci.py&quot;, num);             throw;         }         return result;     } <\/code><\/pre>\n<p>  \u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c. \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: result (\u0438\u043c\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0441\u0430\u043c\u043e \u0437\u0430 \u0441\u0435\u0431\u044f, \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0442\u043e, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442), obj2 \u0438 obj.<\/p>\n<hr\/>\n<p>  <\/p>\n<h1>\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e \u044d\u0442\u0438 obj\u041d\u041e\u041c\u0415\u0420. \u0412 \u0441\u043f\u043e\u0439\u043b\u0435\u0440 \u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f obj\u041d\u041e\u041c\u0415\u0420 \u043a\u0430\u043a \u0432\u044b\u0448\u0435:<\/p>\n<pre><code> object obj2; object obj; <\/code><\/pre>\n<p>  \u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e <i>\u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435<\/i> \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 <i>if<\/i>, <i>enumerable<\/i> \u0438 \u0442.\u0434. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442 <i>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/i> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f:<\/p>\n<pre><code> object obj3 = ScriptingRuntimeHelpers.Int32ToObject(1); object obj4 = ScriptingRuntimeHelpers.Int32ToObject(1); object obj5 = ScriptingRuntimeHelpers.Int32ToObject(2); <\/code><\/pre>\n<p>  \u0442\u043e \u044d\u0442\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f. \u0418\u043c\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0443\u0437\u043d\u0430\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e (\u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b, \u043d\u043e \u043e\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u0438 \u0438 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u043d\u0430 \u043d\u0438\u0445 \u0437\u0430\u043e\u0441\u0442\u0440\u044f\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435). \u041c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u00abfib\u00bb \u0431\u044b\u043b\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a:<\/p>\n<pre><code>             PythonOps.MakeFunctionCode($globalContext, &quot;fib&quot;, &quot;This function does the main work to calculate Fibonacci numbers&quot;, new string[]             {                 &quot;n&quot;             }, 0, new SourceSpan(new SourceLocation(59, 3, 1), new SourceLocation(373, 17, 19)), &quot;fibonacci.py&quot;, new Func&lt;PythonFunction, object, object&gt;(new Closure(null, array).fib$2), null, null, null, new string[]             {                 &quot;n&quot;,                 &quot;fib1&quot;,                 &quot;fib2&quot;,                 &quot;i&quot;,                 &quot;fib_sum&quot;             }, 5), <\/code><\/pre>\n<p>  \u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u00abn\u00bb \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 <b>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438<\/b> \u043e\u0431\u044a\u0435\u043a\u0442, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 obj3, \u0438\u043c\u0435\u0435\u0442 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0438\u043c\u044f \u00abfib1\u00bb. \u0412\u0442\u043e\u0440\u043e\u0439 <b>\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438<\/b> \u043e\u0431\u044a\u0435\u043a\u0442, obj4, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00abfib2\u00bb. \u0422\u0440\u0435\u0442\u0438\u0439, obj5, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u00ab\u0432 \u0434\u0435\u0432\u0438\u0447\u0435\u0441\u0442\u0432\u0435\u00bb \u0438\u043c\u0435\u043b \u0438\u043c\u044f \u00abi\u00bb.  <\/p>\n<hr\/>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u0434\u0451\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0443\u0436\u0430\u0441:<\/p>\n<pre><code>             if ((callSite = (CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;)L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite, (!(callSite2 = (CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;)L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite2, obj = ((!(callSite3 = (CallSite&lt;Func&lt;CallSite, object, bool&gt;&gt;)L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite3, obj2 = (callSite4 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite4, n, 0))) ? (callSite5 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite5, n, 1) : obj2))) ? (callSite6 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite6, n, 2) : obj))             {                 result = ScriptingRuntimeHelpers.Int32ToObject(1);             } <\/code><\/pre>\n<p>  \u0423\u0431\u0438\u0440\u0430\u0435\u043c \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u00ab\u0448\u0443\u043c\u00bb, \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u00ab\u043b\u0435\u0441\u0435\u043d\u043a\u043e\u0439\u00bb \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:<\/p>\n<pre><code> if ((callSite = L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite, (!(callSite2 =     L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite2, obj = ((!(callSite3 =         L[PythonOps.MakeConversionAction($globalContext, typeof(bool), 1)])(callSite3, obj2 = (callSite4 =             L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite4, n, 0)))                 ? (callSite5 = L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite5, n, 1)                 : obj2)))             ? (callSite6 = L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Equal *\/ 13)])(callSite6, n, 2)             : obj)) <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u0442\u043e \u043d\u0435 \u0432\u0438\u0434\u0438\u0442 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u044f\u0432\u043d\u043e\u0433\u043e<\/p>\n<pre><code>if ((n == 0) || (n == 1) || (n == 2)) {     result = ScriptingRuntimeHelpers.Int32ToObject(1); } <\/code><\/pre>\n<p>  \u0442\u043e\u043c\u0443 \u043e\u0441\u0435\u043d\u044c\u044e \u043d\u0430 \u043f\u0435\u0440\u0435\u044d\u043a\u0437\u0430\u043c\u0435\u043d\u043e\u0432\u043a\u0443 \ud83d\ude09 \u0418\u043b\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u044e.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448<\/p>\n<pre><code class=\"python\">    if n == 0 or n == 1 or n == 2:         return 1 <\/code><\/pre>\n<p>  \u043c\u044b \u0431\u043b\u0430\u0433\u043e\u043f\u043e\u043b\u0443\u0447\u043d\u043e \u043d\u0430\u0448\u043b\u0438. \u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<pre><code>                 num = 8;                 object obj3 = ScriptingRuntimeHelpers.Int32ToObject(1);                 num = 9;                 object obj4 = ScriptingRuntimeHelpers.Int32ToObject(1);                 num = 11;                 object obj5 = ScriptingRuntimeHelpers.Int32ToObject(2); <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439<\/p>\n<pre><code class=\"python\">    fib1 = 1     fib2 = 1      i = 2  <\/code><\/pre>\n<p>  (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u00abnum\u00bb \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, IronPython \u0442\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u0435\u0442, \u043d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043e\u0441\u0442\u0440\u044f\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0435 \u043d\u0430\u0434\u043e)<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435<\/p>\n<pre><code>                 num = 12;                 object obj6; <\/code><\/pre>\n<p>  \u0412\u043e\u0442 obj6 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <b>\u043d\u0435<\/b> \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0445\u043e\u0442\u044f \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f (\u044f \u0432\u044b\u0448\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043f\u0440\u043e \u00ab\u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b\u00bb, \u0432\u043e\u0442 \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u00abfib_sum\u00bb \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430. \u0422.\u043a. \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0435\u0439 (\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f) \u0438\u0434\u0451\u0442 <i>\u0432\u043d\u0443\u0442\u0440\u0438<\/i> \u0446\u0438\u043a\u043b\u0430, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <i>\u0432\u043d\u0435<\/i> \u0446\u0438\u043a\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 IronPython \u0431\u044b\u043b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0435\u0451 \u0442\u0443\u0442.<\/p>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435:<\/p>\n<pre><code>                 while (true)                 {                     CallSite&lt;Func&lt;CallSite, object, object, bool&gt;&gt; callSite7;                     bool flag = (callSite7 = (CallSite&lt;Func&lt;CallSite, object, object, bool&gt;&gt;)L[PythonOps.MakeComboAction($globalContext, PythonOps.MakeBinaryOperationAction($globalContext, \/* LessThan *\/ 20), PythonOps.MakeConversionAction($globalContext, typeof(bool), 1))])(callSite7, obj5, n);                     if (!flag)                     {                         break;                     }                     num = 13;                     CallSite&lt;Func&lt;CallSite, object, object, object&gt;&gt; callSite8;                     obj6 = (callSite8 = (CallSite&lt;Func&lt;CallSite, object, object, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* Add *\/ 0)])(callSite8, obj4, obj3);                     num = 14;                     obj3 = obj4;                     num = 15;                     obj4 = obj6;                     num = 16;                     CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt; callSite9;                     obj5 = (callSite9 = (CallSite&lt;Func&lt;CallSite, object, int, object&gt;&gt;)L[PythonOps.MakeBinaryOperationAction($globalContext, \/* AddAssign *\/ 63)])(callSite9, obj5, 1);                 } <\/code><\/pre>\n<p>  \u041c\u044b\u0441\u043b\u0435\u043d\u043d\u043e \u00ab\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u00bb \u044d\u0442\u043e \u043a\u0430\u043a<\/p>\n<pre><code>                 while (true)                 {                     bool flag = (obj5 &lt; n);                     if (!flag)                     {                         break;                     }                     obj6 = obj4 + obj3;                     obj3 = obj4;                     obj4 = obj6;                     obj5 = obj5 + 1;                 } <\/code><\/pre>\n<p>  (\u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043b\u0438\u0447\u043d\u043e \u044f \u0442\u0435\u0440\u044f\u043b\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u043c\u0438\u043d\u0443\u0442 40-50 [\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0438 \u0446\u0438\u043a\u043b\u044b\/\u0431\u043b\u043e\u043a\u0438 \u0442\u0430\u043c \u0431\u044b\u043b\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u044f \u0435\u0451 \u0434\u043d\u0435\u0439 \u043f\u044f\u0442\u044c \u0442\u0430\u043a \u0432\u043e\u0442 \u0441\u0438\u0434\u0435\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043b], \u043f\u043e\u0441\u043b\u0435 \u0443\u0436\u0435 \u0442\u044c\u0444\u0443, \u0440\u0430\u0437 \u043f\u043b\u044e\u043d\u0443\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u043e\u0441\u044c)<\/p>\n<p>  \u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e (\u0441\u043c. \u0432\u044b\u0448\u0435) \u043c\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u043c \u043a\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 (\u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0442\u043e \u0435\u0441\u0442\u044c) ob3, obj4, obj5 \u0438 obj6 \u043f\u0438\u0448\u0435\u043c:<\/p>\n<pre><code>                 while (true)                 {                     bool flag = (i &lt; n);                     if (!flag)                     {                         break;                     }                     fib_sum = fib2 + fib1;                     fib1 = fib2;                     fib2 = fib_sum;                     i = i + 1;                 } <\/code><\/pre>\n<p>  \u041e\u0433\u043e! \u041f\u043e\u0445\u043e\u0436\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435<\/p>\n<pre><code class=\"python\">    while i &lt; n:         fib_sum = fib2 + fib1         fib1 = fib2         fib2 = fib_sum         i += 1 <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0442\u0440\u0438\u0445:<\/p>\n<pre><code>                 result = obj6;             }         }         catch (Exception)         {             int num;             PythonOps.UpdateStackTrace(globalContext, (FunctionCode)L[fib$2], MethodBase.GetCurrentMethod(), &quot;fib&quot;, &quot;fibonacci.py&quot;, num);             throw;         }         return result;     } <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u00abresult\u00bb \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u00abfib_sum\u00bb \u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f. We did it! We <b>HAVE DONE<\/b> it!!!<\/p>\n<p>  \u041d\u0430 try \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 catch \u0432 \u043a\u043e\u043d\u0446\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0442\u043e\u0436\u0435 \u043d\u0435 \u043d\u0430\u0434\u043e, \u044d\u0442\u043e \u0447\u0438\u0441\u0442\u043e IronPyton\u043e\u0432\u0441\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u0438 \u043a \u043d\u0430\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u044e\u0442. \u0425\u043e\u0442\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f IronPython \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a \u0436\u0435, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 pure Python exceptions \u043d\u0435\u0442, \u044d\u0442\u043e \u043b\u043e\u0432\u044f\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e IronPython.<\/p>\n<p>  \u041d\u0443 \u0432\u043e\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a.     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/258123\/\"> http:\/\/habrahabr.ru\/post\/258123\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u041f\u0440\u0438\u0432\u0435\u0442, \u0445\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440!<\/p>\n<p>  \u0421\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u044f \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0447\u0443\u0436\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0447\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e, Python \u0432\u0435\u0434\u044c, \u0431\u0435\u0440\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u0434\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0439 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043b\u0435\u0437\u0435\u0442. \u041d\u043e \u043d\u0435 \u0442\u0443\u0442-\u0442\u043e \u0431\u044b\u043b\u043e. \u0414\u0435\u043b\u043e \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u043b\u043e\u0441\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0430 Python, \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u0438 \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <a href=\"http:\/\/ironpython.net\/\">IronPython<\/a> \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043d\u0435 \u0438\u043c\u0435\u043b\u043e\u0441\u044c. \u0414\u043b\u044f \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e, \u0442\u0430\u043a \u0441\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043d\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e CPython \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 Over 9000 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u0435\u043a\u043e\u043c\u043f\u0430\u0439\u043b\u0435\u0440\u043e\u0432 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 .pyc \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 .py, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 [\u043c\u043e\u0439 \u043b\u044e\u0431\u0438\u043c\u044b\u0439] <a href=\"https:\/\/github.com\/Mysterie\/uncompyle2\">uncompyle2<\/a> \u0438 \u0434\u0440\u0443\u0433\u0438\u0435, \u0430 \u0434\u043b\u044f IronPython \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u044f \u043d\u0435 \u043d\u0430\u0448\u0451\u043b. \u0422\u043e \u043b\u0438 \u043f\u043b\u043e\u0445\u043e \u0438\u0441\u043a\u0430\u043b, \u0442\u043e \u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u043c\u0443. \u0413\u043e\u0432\u043e\u0440\u044e \u0441\u0440\u0430\u0437\u0443, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u044f \u043d\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b, \u0432\u0441\u0451 \u0442\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u0442\u044c hand made.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-257354","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/257354","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=257354"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/257354\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=257354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=257354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=257354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}