<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.luasandbox.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'reference.luasandbox.differences.php',
    1 => 'Отличия от стандартного Lua',
    2 => 'Отличия от стандартного Lua',
  ),
  'up' => 
  array (
    0 => 'book.luasandbox.php',
    1 => 'LuaSandbox',
  ),
  'prev' => 
  array (
    0 => 'luasandbox.installation.php',
    1 => 'Установка',
  ),
  'next' => 
  array (
    0 => 'luasandbox.examples.php',
    1 => 'Примеры',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/luasandbox/differences.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="reference.luasandbox.differences" class="chapter">
 <h1 class="title">Отличия от стандартного Lua</h1>


 <p class="simpara">
  LuaSandbox предоставляет изолированную среду, которая в некоторых отношениях отличается от стандартной Lua 5.1.
 </p>

 <div class="simplesect" id="reference.luasandbox.differences.unavailable">
  <h3 class="title">Функции, которые недоступны</h3>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="literal">dofile()</code>, <code class="literal">loadfile()</code> и пакет <code class="literal">io</code>, поскольку они разрешают прямой доступ к файловой системе.
     При необходимости доступ к файловой системе должен осуществляться через callback-функции PHP.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Пакет <code class="literal">package</code>, включая <code class="literal">require()</code> и <code class="literal">module()</code>, так как он сильно зависит от прямого доступа к файловой системе.
     Вместо него можно использовать перезапись на чистом Lua, такую как та, что используется в модуле MediaWiki Scribunto.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">load()</code> и <code class="literal">loadstring()</code>, для статического анализа кода Lua.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">print()</code>, поскольку функция выводит в стандартный вывод. При необходимости вывод должен выполняться через callback-функции PHP.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Большая часть пакета <code class="literal">os</code>, поскольку он позволяет управлять процессом и выполнять другие процессы.
    </span>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       <code class="literal">os.clock()</code>, <code class="literal">os.date()</code>, <code class="literal">os.difftime()</code> и <code class="literal">os.time()</code> остаются доступными.
      </span>
     </li>
    </ul>
   </li>
   <li class="listitem">
    <span class="simpara">
     Большая часть пакета <code class="literal">debug</code>, поскольку он позволяет манипулировать состоянием Lua и метаданными способами, которые могут нарушить песочницу.
    </span>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       <code class="literal">debug.traceback()</code> остаётся доступным.
       </span>
     </li>
    </ul>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">string.dump()</code>, так как это может раскрыть внутренние данные.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">collectgarbage()</code>, <code class="literal">gcinfo()</code> и пакет <code class="literal">coroutine</code> не были проверены на безопасность.
    </span>
   </li>
  </ul>
 </div>

 <div class="simplesect" id="reference.luasandbox.differences.modified">
  <h3 class="title">Изменённые функции</h3>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="literal">pcall()</code> и <code class="literal">xpcall()</code> не может отловить определённые ошибки, особенно ошибки времени ожидания.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">tostring()</code> не включает адреса указателей.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">string.match()</code> была исправлена для ограничения глубины рекурсии и периодической проверки времени ожидания.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">math.random()</code> и <code class="literal">math.randomseed()</code> заменяются версиями, которые не разделяют состояние с функцией PHP <code class="literal">rand()</code>.
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     Метаметоды <code class="literal">__pairs</code> и <code class="literal">__ipairs</code> Lua 5.2 поддерживаются с помощью <code class="literal">pairs()</code> и <code class="literal">ipairs()</code>.
    </span>
   </li>
  </ul>
 </div>

</div>
<?php manual_footer($setup); ?>