The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Утечка исходных текстов браузера Opera 12.15"
Отправлено arisu, 22-Янв-17 03:47 
кажется, я мало‐мало идиот. всё‐таки стек «запомненых» переменных должен быть решением. зачем try/finally, если при исключении всё равно без разницы, какие там значения у переменных были, а дальше их восстановит outer code block? ну ладно, придётся хачить break/continue — не самое страшное в жизни.

реализовал, кстати, «псевдоскопы» с with — так, чисто проверить концепт. то есть, примерно такую трансформацию:
  {
    print(v);
    let v = 69;
    print(v);
  }

в:
  var __tmp__ = {};
  with (__tmp__) {
    print(v);
    __tmp__.v = 69;
    print(v);
  }

почти работает (падает со вложеными функциями, потому что где‐то я пропустил момент установки флага «внутри with» — он из парзера устанавливается, зараза, а я трансформации уже в компиляторе делаю. но это так, крайний случай — медленно же до ужаса. попробую всё‐таки сделать вот это:
  {
    print(v);
    {
      var __old_v__ = v;
      v = 69;
      print(v);
      v = __old_v__;
    }
  }
это будет значительно быстрее, можно будет потом оптимизировать для случая «let никого не перекрывает» (вообще, если нет замыканий, то можно смело делать «let lifting», повышая все let-ы до var-ов), да вдобавок — в отличие от with — это не убивает value tracking (aka оптимизатор). придётся только захачивать в break/continue вместо простого jmp восстановление.

кто удивился, откуда выше взялся вложеный кодовый блок — неявно добавился анализатором. чтобы границы запоминания‐восстановления были чётко по границам блоков, так проще. а кодогенератору без разницы, есть там блок или нет, он на переходы смотрит.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру