aboutsummaryrefslogtreecommitdiff
path: root/files/ru/rhino
diff options
context:
space:
mode:
Diffstat (limited to 'files/ru/rhino')
-rw-r--r--files/ru/rhino/documentation/index.html83
-rw-r--r--files/ru/rhino/download_rhino/index.html106
-rw-r--r--files/ru/rhino/embedding_tutorial/index.html302
-rw-r--r--files/ru/rhino/index.html22
4 files changed, 513 insertions, 0 deletions
diff --git a/files/ru/rhino/documentation/index.html b/files/ru/rhino/documentation/index.html
new file mode 100644
index 0000000000..98686fb771
--- /dev/null
+++ b/files/ru/rhino/documentation/index.html
@@ -0,0 +1,83 @@
+---
+title: Rhino documentation
+slug: Rhino/Documentation
+tags:
+ - Rhino
+translation_of: Mozilla/Projects/Rhino/Documentation
+---
+<p>Сведения о Rhino для разработчиков скриптов и приложений.</p>
+
+<h2 id="General" name="General">Главное</h2>
+
+<dl>
+ <dt><a href="/en-US/docs/Rhino/Overview" title="Rhino_Overview">Обзор</a></dt>
+ <dd>Обзор языка  JavaScript и Rhino.</dd>
+ <dt><a href="/en-US/docs/Rhino/License" title="Rhino_License">Лицензия</a></dt>
+ <dd>Информация о лицензии Rhino.</dd>
+ <dt><a href="/en-US/docs/Rhino/Requirements_and_Limitations" title="Rhino_Requirements_and_Limitations">Требования и ограничения</a></dt>
+ <dd>Что необходимо, чтобы запустить Rhino; чего не может делать Rhino.</dd>
+ <dt><a href="/en-US/docs/Rhino/Downloads_archive" title="Rhino_downloads_archive">Загрузка архива</a></dt>
+ <dd>Включает комментарии к выпуску для Rhino</dd>
+ <dt><a href="/en-US/docs/Rhino/Optimization" title="Rhino_Optimization">Оптимизация</a></dt>
+ <dd>Подробная информация о различных уровнях оптимизации.</dd>
+ <dt><a href="/en-US/docs/Rhino/FAQ" title="Rhino_FAQ">FAQ</a></dt>
+ <dd>Ответы на частые вопросы о Rhino.</dd>
+ <dt><a href="/en-US/docs/Rhino/History">История Rhino</a></dt>
+ <dd>История зверя.</dd>
+</dl>
+
+<h2 id="Writing_Scripts" name="Writing_Scripts">Написание скриптов</h2>
+
+<dl>
+ <dt><a class="internal" href="/en-US/docs/Scripting_Java" title="Scripting Java">Java в скриптах</a></dt>
+ <dd>Как использовать  Rhino, чтобы  в скриптах задействовать  классы Java.</dd>
+ <dt><a class="external" href="http://www.mozilla.org/rhino/scriptjava.html">Java в скриптах</a></dt>
+ <dd>How to use Rhino to script Java classes (an older treatment).</dd>
+ <dt><a href="/en-US/docs/Rhino/Performance">Советы по улучшению производительности</a></dt>
+ <dd>Некоторые советы по написанию быстрого кода JavaScript.</dd>
+</dl>
+
+<h2 id="JavaScript_Tools" name="JavaScript_Tools">Инструменты JavaScript</h2>
+
+<dl>
+ <dt><a href="/en-US/docs/Rhino/Shell" title="Rhino_Shell">Оболочка Rhino</a></dt>
+ <dd>Интерактивное или пакетное выполнение скриптов.</dd>
+ <dt><a href="/en-US/docs/Rhino/Debugger">Отладчик JavaScript</a></dt>
+ <dd>Отладка скриптов, запущенных в Rhino.</dd>
+ <dt><a href="/en-US/docs/Rhino/JavaScript_Compiler" title="Rhino_JavaScript_Compiler">Компилятор JavaScript</a></dt>
+ <dd>Компиляция скриптов в файлы классов Java.</dd>
+ <dt><a href="/en-US/docs/Running_the_Rhino_tests" title="Running_the_Rhino_tests">Запуск тестов Rhino</a></dt>
+ <dd>Запуск тестов JavaScript с Rhino.</dd>
+</dl>
+
+<h2 id="Embedding_Rhino" name="Embedding_Rhino">Встраивание Rhino</h2>
+
+<dl>
+ <dt><a href="/en-US/docs/Rhino/Embedding_tutorial">Руководство по теме</a></dt>
+ <dd>Краткое руководство по встраиванию Rhino в приложение.</dd>
+ <dt><a class="external" href="http://mozilla.github.io/rhino/javadoc/index.html">Справочник по API Javadoc </a> (Link broken?  <a href="http://www.jarvana.com/jarvana/view/org/mozilla/rhino/1.7R3/rhino-1.7R3-javadoc.jar!/index.html" title="http://www.jarvana.com/jarvana/view/org/mozilla/rhino/1.7R3/rhino-1.7R3-javadoc.jar!/index.html">Try this at Jarvana.</a>)</dt>
+ <dd>An annotated outline of the programming interface to Rhino (tip only).</dd>
+ <dt><a href="/en-US/docs/Rhino/Scopes_and_Contexts" title="https://developer.mozilla.org/editor/fckeditor/core/editor/en-US/docs/Rhino_documentation/Scopes_and_Contexts">Области видимости и контекстыs</a></dt>
+ <dd>Describes how to use scopes and contexts for the best performance and flexibility, with an eye toward multithreaded environments.</dd>
+ <dt><a href="/en-US/docs/Rhino/Serialization">Сериализация</a></dt>
+ <dd>Как выполнить сериализацию объектов и функций JavaScript  в Rhino.</dd>
+ <dt><a href="/en-US/docs/Rhino/Runtime">Runtime</a></dt>
+ <dd>A brief description of the JavaScript runtime.</dd>
+ <dt><a href="/en-US/docs/Rhino/Footprint">Small Footprint</a></dt>
+ <dd>Hints for those interested in small-footprint embeddings.</dd>
+ <dt><a href="/en-US/docs/Rhino/Examples">Примеры</a></dt>
+ <dd>Набор примеров того, как контролировать движок JavaScript и собирать объекты хоста JavaScript.</dd>
+ <dt><a href="/en-US/docs/Rhino/BSF">Использование Rhino вместе с h Bean Scripting Framework (BSF)</a></dt>
+ <dd>Как использовать Rhino вместе с приложениями, поддерживающими BSF (Bean Scripting Framework) из проекта Apache Jakarta.</dd>
+</dl>
+
+<h2 id="External_references" name="External_references">Внешние ссылки</h2>
+
+<dl>
+ <dt><a class="external" href="http://www.ociweb.com/jnb/archive/jnbMar2001.html">Скриптовые языки для Java</a></dt>
+ <dd>Статья сравнивает и противопоставляет Rhino и Jython.</dd>
+</dl>
+
+<h2 id="Rhino_contributors" name="Rhino_contributors">Авторы Rhino</h2>
+
+<p>Interested in contributing to Rhino? Check out the <a href="/en-US/docs/Rhino_Wish_List" title="Rhino_Wish_List">Rhino Wish List</a>.</p>
diff --git a/files/ru/rhino/download_rhino/index.html b/files/ru/rhino/download_rhino/index.html
new file mode 100644
index 0000000000..d6b61aee73
--- /dev/null
+++ b/files/ru/rhino/download_rhino/index.html
@@ -0,0 +1,106 @@
+---
+title: ска́чивание Rhino
+slug: Rhino/Download_Rhino
+translation_of: Mozilla/Projects/Rhino/Download_Rhino
+---
+<p>Rhino можно загрузить как в виде исходного кода, так и в виде скомпилированной библиотеки.</p>
+
+<h2 id="Библиотека_в_двоичном_коде">Библиотека в двоичном коде</h2>
+
+<p>Последняя версия библиотеки Rhino - 1.7R4.</p>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Release</th>
+ <th scope="col">Дата освобождения</th>
+ <th scope="col">Информация о выпуске</th>
+ <th scope="col">Ссылка на скачивание</th>
+ </tr>
+ <tr>
+ <td>Rhino 1.7R4</td>
+ <td>2012-06-18</td>
+ <td><a href="/En/New_in_Rhino_1.7R4" title="En/New_in_Rhino_1.7R4">New in Rhino 1.7R4</a></td>
+ <td><a class="link-https" href="https://github.com/downloads/mozilla/rhino/rhino1_7R4.zip" title="https://github.com/downloads/mozilla/rhino/rhino1_7R4.zip">rhino1_7R3.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7R5</td>
+ <td>2015-01-29</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7R5_RELEASE">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7R5_RELEASE/rhino1_7R5.zip">rhino1_7R5.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.6</td>
+ <td>2015-04-15</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_6_RELEASE">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_6_RELEASE/rhino1.7.6.zip">rhino1.7.6.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.7</td>
+ <td>2015-06-17</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_7_RELEASE">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_7_RELEASE/rhino1.7.7.zip">rhino1.7.7.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.7.1</td>
+ <td>2016-02-01</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_7_1_RELEASE">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_7_1_RELEASE/rhino-1.7.7.1.zip">rhino1.7.7.1.zip </a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.7.2</td>
+ <td>2017-08-24</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_7_2_Release">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_7_2_Release/rhino-1.7.7.2.zip">rhino1.7.7.2.zip </a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.8</td>
+ <td>2018-01-22</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_8_Release">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_8_Release/rhino-1.7.8.zip">rhino1.7.8.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.9</td>
+ <td>2018-03-15</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_9_Release">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_9_Release/rhino-1.7.9.zip">rhino1.7.9.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.10</td>
+ <td>2018-04-09</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_10_Release">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_10_Release/rhino-1.7.10.zip">rhino1.7.10.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.11</td>
+ <td>2019-05-30</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_11_Release">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_11_Release/rhino-1.7.11.zip">rhino1.7.11.zip</a></td>
+ </tr>
+ <tr>
+ <td>Rhino 1.7.12</td>
+ <td>2020-01-13</td>
+ <td><a href="https://github.com/mozilla/rhino/releases/tag/Rhino1_7_12_Release">Информация о выпуске</a></td>
+ <td><a href="https://github.com/mozilla/rhino/releases/download/Rhino1_7_12_Release/rhino-1.7.12.zip">rhino1.7.12.zip</a></td>
+ </tr>
+ </tbody>
+</table>
+
+<p>Если требуются более старые версии библиотеки, ищите их в <a class="external" href="/en/docs/Rhino_downloads_archive" title="en/docs/Rhino_downloads_archive">Архиве hino версий Rhino.</a></p>
+
+<h2 id="Лицензия">Лицензия</h2>
+
+<p>Rhino открыт (open source). Начиная с версии 1.7R4, Rhino распространяется с лицензией <a class="external" href="http://www.mozilla.org/MPL/">MPL</a> 2.0.</p>
+
+<p>Предыдущие версии распространяются с лицензией MPL 1.1/GPL 2.0.</p>
+
+<p>Дополнительная информация о <a href="/en/Rhino/License" title="en/Rhino license">Лицензиях Rhino</a>.</p>
+
+<h2 id="Исходный_код_библиотеки">Исходный код библиотеки</h2>
+
+<p>В дополнении к исходному коду, который находится в ранее указанном zip-файле, исходный код Rhino можно найти в github-е на странице проекта <a class="link-https" href="https://github.com/mozilla/rhino">https://github.com/mozilla/rhino</a>. Для того, чтобы загрузить код используйте команду</p>
+
+<pre class="code">git clone https://github.com/mozilla/rhino.git
+</pre>
+
+<p>Для сборки Rhino используется <a class="ex-ref external" href="http://ant.apache.org/">Ant</a>. Запуск команды <code>ant</code> в корневом каталоге дистрибутива Rhino, по идее, распечатывает список имеющихся подсистем сборки (build targets).</p>
diff --git a/files/ru/rhino/embedding_tutorial/index.html b/files/ru/rhino/embedding_tutorial/index.html
new file mode 100644
index 0000000000..eb56c3050c
--- /dev/null
+++ b/files/ru/rhino/embedding_tutorial/index.html
@@ -0,0 +1,302 @@
+---
+title: 'Руководство: Внедрение кода Rhino'
+slug: Rhino/Embedding_tutorial
+translation_of: Mozilla/Projects/Rhino/Embedding_tutorial
+---
+<p>Внедрение кода Rhino простое но тем не менее приводит к хорошему результату. <span id="result_box" lang="ru"><span>Приложив больше усилии к embedder,  исполняемые сценарии могут быть настроены дополнительно.</span></span></p>
+
+<p><span lang="ru"><span>В этом руководстве по шагово мы рассмотрим способы от простого сценария внедрения кода до сложного. Примеры кода будут соправождать нас в процессе изучения. </span></span></p>
+
+<p>Примеры можно найти в папках дистрибутива <code>rhino/examples</code>   и cvs  сервере по адресу <code>mozilla/js/rhino/examples</code>.  В этом руководстве мы будем ссылатся на эти примеры посредством <a href="http://lxr.mozilla.org/">lxr</a>.</p>
+
+<p> JavaScript код будет помечен зеленым, Java код так же будет помечен зеленым<span class="java_js_code">,</span> и shell logs будет отмечен пурпурным.</p>
+
+<h2 id="Содержание">Содержание:</h2>
+
+<ul class="toc">
+ <li><a href="#runScript">RunScript: A simple embedding</a>
+
+ <ul>
+ <li><a href="#enteringContext">Entering a Context</a></li>
+ <li><a href="#initializing">Initializing standard objects</a></li>
+ <li><a href="#collecting">Collecting the arguments</a></li>
+ <li><a href="#evaluating">Evaluating a script</a></li>
+ <li><a href="#print">Printing the result</a></li>
+ <li><a href="#exit">Exiting the Context</a></li>
+ </ul>
+ </li>
+ <li><a href="#expose">Expose Java APIs</a>
+ <ul>
+ <li><a href="#useJava">Using Java APIs</a></li>
+ <li><a href="#implementingInterfaces">Implementing interfaces</a></li>
+ <li><a href="#addJava">Adding Java objects</a></li>
+ </ul>
+ </li>
+ <li><a href="#usingJSObjs">Using JavaScript objects from Java</a>
+ <ul>
+ <li><a href="#usingJSvars">Using JavaScript variables</a></li>
+ <li><a href="#callingJSfuns">Calling JavaScript functions</a></li>
+ </ul>
+ </li>
+ <li><a href="#javaScriptHostObjects">JavaScript host objects</a>
+ <ul>
+ <li><a href="#definingHostObjects">Defining Host Objects</a></li>
+ <li><a href="#counter">Counter example</a>
+ <ul>
+ <li><a href="#counterCtors">Counter's constructors</a></li>
+ <li><a href="#classname">Class name</a></li>
+ <li><a href="#dynamic">Dynamic properties</a></li>
+ <li><a href="#definingMethods">Defining JavaScript "methods"</a></li>
+ <li><a href="#addingCounter">Adding Counter to RunScript</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+</ul>
+
+<h2 id="RunScript_Простой_пример"><a id="runScript" name="runScript">RunScript: Простой пример</a></h2>
+
+<p>Возможно самый простой пример внедрения Rhino вы найдете здесь <a href="https://dxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript.java">RunScript example</a>. Он считывает строку параметра, который должен быть фрагментом js-кода, запускает код и выводит результат.</p>
+
+<p>Ниже приведен данный пример. Используйте команду RunScript в командной строке консоли:</p>
+
+<pre class="code shell_logs_code">$ java RunScript "Math.cos(Math.PI)"
+-1
+$ java RunScript "function f(x){return x+1} f(7)"
+8
+</pre>
+
+<p>Примечание: Rhino классы и класс RunScript должны быть прописаны в classpath. Let's step through the body of <code>main</code> one line at time.</p>
+
+<h3 id="Entering_a_Context"><a id="enteringContext" name="enteringContext">Entering a Context</a></h3>
+
+<p>The code</p>
+
+<pre class="code java_js_code">Context cx = Context.enter();
+</pre>
+
+<p>Creates and enters a <code>Context</code>. A <code>Context</code> stores information about the execution environment of a script.</p>
+
+<h3 id="Initializing_standard_objects"><a name="initializing">Initializing standard objects</a></h3>
+
+<p>The code</p>
+
+<pre class="code java_js_code">Scriptable scope = cx.initStandardObjects();
+</pre>
+
+<p>Initializes the standard objects (<code>Object</code>, <code>Function</code>, etc.) This must be done before scripts can be executed. The <var>null</var> parameter tells <code>initStandardObjects</code> to create and return a scope object that we use in later calls.</p>
+
+<h3 id="Collecting_the_arguments"><a id="collecting" name="collecting">Collecting the arguments</a></h3>
+
+<p>This code is standard Java and not specific to Rhino. It just collects all the arguments and concatenates them together.</p>
+
+<pre class="code java_js_code">String s = "";
+for (int i=0; i &lt; args.length; i++) {
+ s += args[i];
+}
+</pre>
+
+<h3 id="Evaluating_a_script"><a id="evaluating" name="evaluating">Evaluating a script</a></h3>
+
+<p>The code</p>
+
+<pre class="code java_js_code">Object result = cx.evaluateString(scope, s, "&lt;cmd&gt;", 1, null);
+</pre>
+
+<p>uses the Context <code>cx</code> to evaluate a string. Evaluation of the script looks up variables in <var>scope</var>, and errors will be reported with the filename <code>&lt;cmd&gt;</code> and line number 1.</p>
+
+<h3 id="Printing_the_result"><a id="print" name="print">Printing the result</a></h3>
+
+<p>The code</p>
+
+<pre class="code java_js_code">System.out.println(cx.toString(result));
+</pre>
+
+<p>prints the result of evaluating the script (contained in the variable <var>result</var>). <var>result</var> could be a string, JavaScript object, or other values. The <code>toString</code> method converts any JavaScript value to a string.</p>
+
+<h3 id="Exiting_the_Context"><a id="exit" name="exit">Exiting the Context</a></h3>
+
+<p>The code</p>
+
+<pre class="code java_js_code">} finally {
+ Context.exit();
+}
+</pre>
+
+<p>exits the Context. This removes the association between the Context and the current thread and is an essential cleanup action. There should be a call to <code>exit</code> for every call to <code>enter</code>. To make sure that it is called even if an exception is thrown, it is put into the finally block corresponding to the try block starting after <code>Context.enter()</code>.</p>
+
+<h2 id="Expose_Java_APIs"><a id="expose" name="expose">Expose Java APIs</a></h2>
+
+<h3 id="Using_Java_APIs"><a id="useJava" name="useJava">Using Java APIs</a></h3>
+
+<p>No additional code in the embedding needed! The JavaScript feature called<em>LiveConnect</em> allows JavaScript programs to interact with Java objects:</p>
+
+<pre class="code shell_logs_code">$ java RunScript "java.lang.System.out.println(3)"
+3.0
+undefined
+</pre>
+
+<h3 id="Implementing_interfaces"><a id="implementingInterfaces" name="implementingInterfaces">Implementing interfaces</a></h3>
+
+<p>Using Rhino, JavaScript objects can implement arbitrary Java interfaces. There's no Java code to write -- it's part of Rhino's LiveConnect implementation. For example, we can see how to implement java.lang.Runnable in a Rhino shell session:</p>
+
+<pre class="code shell_logs_code">js&gt; obj = { run: function() { print("hi"); } }
+[object Object]
+js&gt; obj.run()
+hi
+js&gt; r = new java.lang.Runnable(obj);
+[object Object]
+js&gt; t = new java.lang.Thread(r)
+Thread[Thread-0,5,main]
+js&gt; t.start()
+hi
+</pre>
+
+<h3 id="Adding_Java_objects"><a id="addJava" name="addJava">Adding Java objects</a></h3>
+
+<p>The next example is <a href="https://dxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript2.java">RunScript2</a>. This is the same as RunScript, but with the addition of two extra lines of code:</p>
+
+<pre class="code java_js_code">Object wrappedOut = Context.javaToJS(System.out, scope);
+ScriptableObject.putProperty(scope, "out", wrappedOut);
+</pre>
+
+<p>These lines add a global variable <code>out</code> that is a JavaScript reflection of the <code>System.out</code> variable:</p>
+
+<pre class="code shell_logs_code">$ java RunScript2 "out.println(42)"
+42.0
+undefined
+</pre>
+
+<h2 id="Using_JavaScript_objects_from_Java"><a id="usingJSObjs" name="usingJSObjs">Using JavaScript objects from Java</a></h2>
+
+<p>After evaluating a script it's possible to query the scope for variables and functions, extracting values and calling JavaScript functions. This is illustrated in the <a href="https://dxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript3.java">RunScript3</a> example. This example adds the ability to print the value of variable <var>x</var> and the result of calling function <code>f</code>. Both <var>x</var> and <var>f</var> are expected to be defined by the evaluated script. For example,</p>
+
+<pre class="code shell_logs_code">$ java RunScript3 "x = 7"
+x = 7
+f is undefined or not a function.
+$ java RunScript3 "function f(a) { return a; }"
+x is not defined.
+f("my args") = my arg
+</pre>
+
+<h3 id="Using_JavaScript_variables"><a id="usingJSvars" name="usingJSvars">Using JavaScript variables</a></h3>
+
+<p>To print out the value of <var>x</var>, we add the following code:</p>
+
+<pre class="code java_js_code">Object x = scope.get("x", scope);
+if (x == Scriptable.NOT_FOUND) {
+ System.out.println("x is not defined.");
+} else {
+ System.out.println("x = " + Context.toString(x));
+}
+</pre>
+
+<h3 id="Calling_JavaScript_functions"><a id="callingJSfuns" name="callingJSfuns">Calling JavaScript functions</a></h3>
+
+<p>To get the function <var>f</var>, call it, and print the result, we add this code:</p>
+
+<pre class="code java_js_code">Object fObj = scope.get("f", scope);
+if (!(fObj instanceof Function)) {
+ System.out.println("f is undefined or not a function.");
+} else {
+ Object functionArgs[] = { "my arg" };
+ Function f = (Function)fObj;
+ Object result = f.call(cx, scope, scope, functionArgs);
+ String report = "f('my args') = " + Context.toString(result);
+ System.out.println(report);
+}
+</pre>
+
+<h2 id="JavaScript_host_objects"><a id="javaScriptHostObjects" name="javaScriptHostObjects">JavaScript host objects</a></h2>
+
+<h3 id="Defining_Host_Objects"><a id="definingHostObjects" name="definingHostObjects">Defining Host Objects</a></h3>
+
+<p>Custom host objects can implement special JavaScript features like dynamic properties.</p>
+
+<h3 id="Counter_example"><a id="counter" name="counter">Counter example</a></h3>
+
+<p>The <a href="https://dxr.mozilla.org/mozilla/source/js/rhino/examples/Counter.java">Counter example</a> is a simple host object. We'll go through it method by method below.</p>
+
+<p>It's easy to try out new host object classes in the shell using its built-in <code>defineClass</code> function. We'll see how to add it to RunScript later. (Note that because the <code>java -jar</code> option preempts the rest of the classpath, we can't use that and access the <code>Counter</code> class.)</p>
+
+<pre class="code shell_logs_code">$ java -cp "js.jar;examples" org.mozilla.javascript.tools.shell.Main
+js&gt; defineClass("Counter")
+js&gt; c = new Counter(7)
+[object Counter]
+js&gt; c.count
+7
+js&gt; c.count
+8
+js&gt; c.count
+9
+js&gt; c.resetCount()
+js&gt; c.count
+0
+</pre>
+
+<h3 id="Counter's_constructors"><a id="counterCtors" name="counterCtors">Counter's constructors</a></h3>
+
+<p>The zero-argument constructor is used by Rhino runtime to create instances. For the counter example, no initialization work is needed, so the implementation is empty.</p>
+
+<pre class="code java_js_code">public Counter () { }
+</pre>
+
+<p>The method <code>jsConstructor</code> defines the JavaScript constructor that was called with the expression <code>new Counter(7)</code> in the JavaScript code above.</p>
+
+<pre class="code java_js_code">public void jsConstructor(int a) { count
+= a; }
+</pre>
+
+<h3 id="Class_name"><a id="classname" name="classname">Class name</a></h3>
+
+<p>The class name is defined by the <code>getClassName</code> method. This is used to determine the name of the constructor.</p>
+
+<pre class="code java_js_code">public String getClassName() { return "Counter";
+}
+</pre>
+
+<h3 id="Dynamic_properties"><a id="dynamic" name="dynamic">Dynamic properties</a></h3>
+
+<p>Dynamic properties are defined by methods beginning with <code>jsGet_</code> or <code>jsSet_</code>. The method <code>jsGet_count</code> defines the<em>count</em> property.</p>
+
+<pre class="code java_js_code">public int jsGet_count() { return count++;
+}
+</pre>
+
+<p>The expression <code>c.count</code> in the JavaScript code above results in a call to this method.</p>
+
+<h3 id="Defining_JavaScript_methods"><a id="definingMethods" name="definingMethods">Defining JavaScript "methods"</a></h3>
+
+<p>Methods can be defined using the <code>jsFunction_ prefix</code>. Here we define <code>resetCount</code> for JavaScript.</p>
+
+<pre class="code java_js_code">public void jsFunction_resetCount() { count
+= 0; }
+</pre>
+
+<p>The call <code>c.resetCount()</code> above calls this method.</p>
+
+<h3 id="Adding_Counter_to_RunScript"><a id="addingCounter" name="addingCounter">Adding Counter to RunScript</a></h3>
+
+<p>Now take a look at the <a href="https://dxr.mozilla.org/mozilla/source/js/rhino/examples/RunScript4.java">RunScript4 example</a>. It's the same as RunScript except for two additions. The method <code>ScriptableObject.defineClass</code> uses a Java class to define the Counter "class" in the top-level scope:</p>
+
+<pre class="code java_js_code">ScriptableObject.defineClass(scope, Counter.class);
+</pre>
+
+<p>Now we can reference the <code>Counter</code> object from our script:</p>
+
+<pre class="code shell_logs_code">$ java RunScript4 "c = new Counter(3); c.count;
+c.count;"
+</pre>
+
+<p>It also creates a new instance of the <code>Counter</code> object from within our Java code, constructing it with the value 7, and assigning it to the top-level variable <code>myCounter</code>:</p>
+
+<pre class="code java_js_code">Object[] arg = { new Integer(7) };
+Scriptable myCounter = cx.newObject(scope, "Counter", arg);
+scope.put("myCounter", scope, myCounter);
+</pre>
+
+<p>Now we can reference the <code>myCounter</code> object from our script:</p>
+
+<pre class="code shell_logs_code">$ java RunScript3 'RunScript4 'myCounter.count; myCounter.count'
+8
+</pre>
diff --git a/files/ru/rhino/index.html b/files/ru/rhino/index.html
new file mode 100644
index 0000000000..eda494f561
--- /dev/null
+++ b/files/ru/rhino/index.html
@@ -0,0 +1,22 @@
+---
+title: Rhino
+slug: Rhino
+translation_of: Mozilla/Projects/Rhino
+---
+<p><img alt="Image:rhino.jpg" class="internal" src="/@api/deki/files/832/=Rhino.jpg"></p>
+
+<p>Библиотека <strong>Rhino</strong> (Носорог) - это открытая (open-source) версия языка программирования  <a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>, реализованная полностью в Java. Библиотека предназначена для встраивания в Java-приложения в качестве пользовательского <span style="line-height: inherit;">скриптового (scripting) </span><span style="line-height: inherit;">языка программирования. Она включена в J2SE 6 как один из механизмов реализации сценариев (scripting engine) для Java.</span></p>
+
+<h4 id="Rhino_downloads" name="Rhino_downloads">Загрузка Rhino</h4>
+
+<p>Инструкция по <a class="internal" href="/ru/docs/Rhino/Download_Rhino" title="en/RhinoDownload">загрузке исходного кода и библиотеки в двоичном коде</a>. </p>
+
+<h4 id="Rhino_documentation" name="Rhino_documentation">Документация по библиотеке Rhino</h4>
+
+<p><a href="/en/Rhino_documentation" title="en/Rhino_documentation">Инструкция</a> для разработчиков скриптов, включая встраивание в Java-программы.</p>
+
+<h4 id="Rhino_help" name="Rhino_help">Дополнительная информация о Rhino</h4>
+
+<p><a href="/en/Rhino/Community" title="en/Rhino/Community">Некоторые дополнительные ресурсы</a>, в случае возникновения проблем.</p>
+
+<p>{{ languages( { "ru": "ru/Rhino" } ) }}</p>