Но думаете что создавать глобальное состояние - это решение по-лучше?
Компилятор не магию использует для [Cache].
Ускорение достигается тем, что когда понять что результат будет таким же (потому что такие же значения на входе) - он не пересчитывается, а берётся из словаря, сгенерированного для этого метода.
Теперь вопрос - как он поймёт когда результат будет таким же, а когда другим?
Можно сделать очень сложный алгоритм, ищущий все использованные в подпрограмме переменные, но параметры уже указывают это явным образом.
Тут почти все переводится строчка в строчку, хотя я вижу пару сложных моментов.
Нужен контекст этого кода + ваши попытки - чтоб я не всё за вас делал, а подсказывал.
зависит от контекста. понято, что глобальные переменные нужны в небольшом количестве, а иногда и вообще не нужны, но такие случаи всё же есть. мне это удобно, когда использую массивы списков при хранении большого кол-ва данных например.
это понятно. но в компиляторах я не шарю, оттуда и вопросы такие. были варианты, что результат достигается каким ни будь флагом например, но видимо не тот уровень абстракции
Если вы считаете что-то важным рассказать - милости прошу, ни буковки мимо глаз не пропущу
Если же нет - ну, нет так нет. Не настолько важная информация, чтобы её искать
А вот интересно, если так нужно было делать такой компилятор, то почему именно паскаля?
Давно уже, задолго до PascalABC был разработан более прогрессивный язык Modula-2 с улучшенным по сравнению с паскалем синтаксисом и большими возможностями. Можно было бы сделать на её основе систему, а не на Паскале. Дальше ещё были Modula-3, Oberon и тд, но там уже не так много было улучшено.
Ну так Pascal уже развивал сам же товарищ Никлаус Вирт. Он сделал язык Modula, но после пары экспериментов понял, что чего-то не хватает, забросил его и сделал язык Modula-2, который имел все лучшие черты Pascal, но при этом исправлял его недостатки и добавлял недостающие возможности.
Так вот, если задачей авторов PascalABC было развитие паскаля как языка, почему они стали делать язык именно на основе исходного паскаля, а не уже улучшенной задолго до них версии, которая во всём лучше оригинального паскаля?
… И призадумался сэр Михалкович, не осчастливить ли ему мир версией Modula2.NET, но одолели его сомнения тяжкие и создал он PascalАВС.NЕТ. И увидел он, что это хорошо.
(Хроники ЮФУ. Из неопубликованного)
Я, конечно, совсем не автор, но ответить попробую, как пользователь. Первая реализация .NET-проекта, как известно, появилась в 2007 году. Загляните в школьные учебники и программы тех лет. Что изучалось? Паскаль и Бейсик, кое-где - “сумасшедшие плюсы”. Какая Модула-2, Вы вообще о чем? РАВС, появившись, начал потихоньку отвоевывать себе место у “турбопаскалей”. Ну какой учитель, находясь в здравом уме и трезвой памяти, рискнул бы, имея программу и учебники с ориентацией на Паскаль, начинать использовать эту самую Модулу? По которой, к тому же, отсутствовали учебники в принципе. А РАВС - ну что, для начала он использовался как обычный Турбо Паскаль в режиме практически полной совместимости. ТР был вытеснен прогрессивной русскоязычной IDE и все были довольны. Авторы выиграли время для того, чтобы начинать расширять язык.
А Вы сейчас попробуйте учителям предложить Модулу-2 - много желающих найдете, сами как думаете? Несмотря даже на то, что у Вас сам Никлаус Вирт в товарищах ходит…