Size: a a a

Compiler Development

2021 January 28

AT

Alexander Tchitchigi... in Compiler Development
Я бы спокойно увязал эти деревья в связный список потому что потери скорости на (нечастом) полном проходе по списку балансируются боллее быстрыми (и частыми) поиском и вставкой в намного меньшие деревья для текущего скоупа.
источник

AT

Alexander Tchitchigi... in Compiler Development
James Tevision
Я сделал структуру связывающую бин-дерево и стек
Поэтому могу удалить последний элемент за O(1)
Т.е. у Вас всё равно там лишние указатели торчат, которые занимают кеш? 🤦‍♀️
источник

JT

James Tevision in Compiler Development
Alexander Tchitchigin
Я бы спокойно увязал эти деревья в связный список потому что потери скорости на (нечастом) полном проходе по списку балансируются боллее быстрыми (и частыми) поиском и вставкой в намного меньшие деревья для текущего скоупа.
Так мы же чаще переиспользуем переменную, чем добавляем новую
Следовательно поиск - чаще вставки
источник

AT

Alexander Tchitchigi... in Compiler Development
James Tevision
Так мы же чаще переиспользуем переменную, чем добавляем новую
Следовательно поиск - чаще вставки
И? Поиск в маленьком дереве быстрее поиска в большом. 🤷‍♀️
источник

AT

Alexander Tchitchigi... in Compiler Development
James Tevision
Так мы же чаще переиспользуем переменную, чем добавляем новую
Следовательно поиск - чаще вставки
И не факт, что чаще переиспользуем.
источник

JT

James Tevision in Compiler Development
Alexander Tchitchigin
И? Поиск в маленьком дереве быстрее поиска в большом. 🤷‍♀️
Ну тут уже надо сравнивать 2 конкретные реализации
Поиск на одном большом или на N маленьких
источник

AK

Andrei Kurosh in Compiler Development
James Tevision
Но тогда они не будут "наследоваться" ведь

{
     /* scope1 */
     {
          /* scope2 */
      }
}
Из scope2 можно обратиться к переменным scope1
И в текущем варианте такой  crossScopeSearch (выдуманый термин)
Относительно быстрый

А если у меня будет список (не обязателельно связный) таблиц
Мне прийдется проводить поиск в каждой из них
Сначала ищете в текущем скоупе, если там нет - в родительском, и так далее
источник

AK

Andrei Kurosh in Compiler Development
Как вы думаете, какова типичная вложенность в коде, который будут писать? И как часто из самого глубокого скоупа будут обращаться к самому верхнему?
источник

AT

Alexander Tchitchigi... in Compiler Development
Andrei Kurosh
Как вы думаете, какова типичная вложенность в коде, который будут писать? И как часто из самого глубокого скоупа будут обращаться к самому верхнему?
Каждый раз, как опечатаются в имени переменной/функции. 😉
Но это редко на самом-то деле.
источник

JT

James Tevision in Compiler Development
3 - 4 уровня
А вот как часто будут обращатся к верхнему - это вопрос
Ибо тот же while() создает новый скоуп, но служит для модификации предыдущего
источник

AT

Alexander Tchitchigi... in Compiler Development
James Tevision
3 - 4 уровня
А вот как часто будут обращатся к верхнему - это вопрос
Ибо тот же while() создает новый скоуп, но служит для модификации предыдущего
Вот именно, 3 - 4 уровня — это ниочём вообще. 😊
источник

AK

Andrei Kurosh in Compiler Development
James Tevision
3 - 4 уровня
А вот как часто будут обращатся к верхнему - это вопрос
Ибо тот же while() создает новый скоуп, но служит для модификации предыдущего
Вот когда появится хотя бы один человек, который реально будет писать на вашем языке огромные программы и страдать от низкой производительности - тогда и заоптимизируете :) а пока можно расслабиться
источник

JT

James Tevision in Compiler Development
Andrei Kurosh
Вот когда появится хотя бы один человек, который реально будет писать на вашем языке огромные программы и страдать от низкой производительности - тогда и заоптимизируете :) а пока можно расслабиться
Ну он же появится 👉👈
А так, я сделал так
Чтоб проверить, можно ли создать
Структуру которую можно обойти 2мя путями
(Как дерево, и как стек)
источник

D

Danya in Compiler Development
James Tevision
Ну он же появится 👉👈
А так, я сделал так
Чтоб проверить, можно ли создать
Структуру которую можно обойти 2мя путями
(Как дерево, и как стек)
Кто-то будет писать программы с 1000 уровнями вложенности? Сомневаюсь
источник

D

Danya in Compiler Development
А если и будет — это будет кармой этому человеку
источник

JT

James Tevision in Compiler Development
Кстати, как правильней поступать при повторном объявлении
Аля
{
     char a;
     {
           int a;
          /* try to access a */
      }
}
Ругаться и не компилить,
или использовать объявление с меньшей областью видимости?

Я думаю - не компилить, чтоб потом не вылез баг из-за
"Я не к той переменной обращался"
источник

D

Danya in Compiler Development
James Tevision
Кстати, как правильней поступать при повторном объявлении
Аля
{
     char a;
     {
           int a;
          /* try to access a */
      }
}
Ругаться и не компилить,
или использовать объявление с меньшей областью видимости?

Я думаю - не компилить, чтоб потом не вылез баг из-за
"Я не к той переменной обращался"
Ну так это от языка зависит
источник

AK

Andrei Kurosh in Compiler Development
James Tevision
Кстати, как правильней поступать при повторном объявлении
Аля
{
     char a;
     {
           int a;
          /* try to access a */
      }
}
Ругаться и не компилить,
или использовать объявление с меньшей областью видимости?

Я думаю - не компилить, чтоб потом не вылез баг из-за
"Я не к той переменной обращался"
Есть языки, в которых оба этих подхода реализованы
источник

D

Danya in Compiler Development
Andrei Kurosh
Есть языки, в которых оба этих подхода реализованы
А можно пример?
источник

JT

James Tevision in Compiler Development
Danya
Кто-то будет писать программы с 1000 уровнями вложенности? Сомневаюсь
Вообще эта структура не столько
Для 1000 слоев вложености
Сколько для частого
Создания и удаления слоев
Аля
{
    {}
    {}
    {}
}
источник