Pull to refresh

Comments 22

Класс, несколько раз возвращался наверх и искал значок перевода. Очень здорово, хотелось бы такой курс в университете пару лет назад, а то насчет этого:
Обычно к шестому курсу студенты АУ успевают написать по шестнадцать различных парсеров

совсем завидно было бы, я написал только один парсер, и тот в рамках курса Compilers от Alex Aiken'a. В университете был унылый и грустный курс.
Абсолютно аналогичная зависть. Максимально что было у нас — конечный автомат для заданного паттерна и польская нотация.
Всегда можно наверстать упущенное :)

На правах рекламы могу напомнить о нашем с humbug проекте llst.org, который по прежнему живет и здравствует. Надеюсь в ближайшее время написать статью с обновлениями и показать красивые картиночки с графами. Только в отличие от Asmjit мы используем вполне себе промышленный LLVM.

Тем кто забыл о чем речь, советую обратить внимание на мои статьи на Хабре.
Добавлю еще пару копеек — на подходе версия 0.4, которая не будет иметь видимых отличий от выпущенной 0.3, но построена на механизме анализа графов управления. Предыдущая версия работала «в лоб», транслируя потоки инструкций. Графы позволяют открыть машине глаза на зависимости по данным и в будущем производить серьезные оптимизации.

Но настоящая цель будет достигнута в версии 0.5, которая вовлекает алгоритмы вывода типов и оптимизацию полиморфных вызовов путем доказательства корректности наблюдаемого поведения. Она должна дать существенный прирост скорости и уменьшение размера генерируемого кода. Плюс появится возможность создания отдельных исполняемых файлов (deploy то есть).

Теоретическая основа вывода типов применительно к Smalltalk проработана практически полностью, осталось только закодировать.
А никто не попробовал оттранслировать этот байт-код (или даже исходное AST) в LLVM IR и запустить полученный модуль, чисто из интереса сравнить производительность?
Насколько я знаю, никто.
Однокурсник интереса ради сделал трансляцию в C++, но там не поддержаны нативные функции.
Надо будет предложить следующему поколению.
Коллега доделал в своей реализации (трансляция в C++) поддержку нативных функций!
На бенчмарке из статьи результат получился 98 fps (почти в два раза быстрее, чем у меня) – есть куда стремиться.
Во сколько раз получилось медленнее скомпилированного аналогичного c++ кода?
Как уже было сказано выше, к сожалению замеры по большому тесту с графикой пока никем не проводились.
Тест с разложением на простые работает примерно также, но это не особо показательно.
Сейчас почти все интерпретируемые платформы, такие как CLR, Python, Ruby, Perl


CLR никогда не был интерпретируемым. JIT был всегда.
Более того, MSIL всегда переводится в машинные инструкции. Никакой интерпретации (!!!)
так мы про контроллеры и TinyCLR говорим, или про CLR в .NET Framework?

реализаций CLI есть множество (CLR, TinyCLR, Mono)
и что?

этот интерпретатор — есть не что иное как видоизменный интерпретатор из TinyCLR для контроллеров
кстати, CoreCLR — не является прямым открытием исходников классического CLR.

отсутствуют AppDomains, например, вместо них — AssemblyLoadContext и т.д.
Как промежуточный вариант, многие языки (Java, C#, Python) транслируются в машинно-независимый байт-код,
который все еще не может быть исполнен напрямую на ЦПУ, и чтобы его исполнить все еще необходим интерпретатор


Ну в Java еще может, CLR см. выше.
байт-код,
который все еще не может быть исполнен напрямую на ЦПУ

Ну в Java еще может

Были во времена Sun (да и сейчас, во времена Oracle) процессоры, которые java байт-код вполне успешно выполняли.
Один из самых полезных и прокачивающих курсов из всего, что у нас было. На первой лабе глаза вылезли на лоб, от того, что я ничего не понимаю. Но к концу курса я все же сделал jit (хотя на тот момент он не был обязательным). Правда отлично так и не получил, т.к. не успел реализовать нативные вызовы.
«и писать еще один рекурсивный спуск совсем неинтересно.»

А может научить их
lexx yacc parsec pex (или на чем там NEMERLE)
У нас было два задания с парсер-комбинаторами, а кроме того кто-то в качестве НИРов работал с генерируемыми парсерами.
Не то, чтобы я всё понял (поскольку в совершенно другой области специалищируюсь), но от подобных постов сразу улучшается отношение к российскому высшему образованию.
Передавайте вашему преподавателю поздравления.
>> Для обеспечания работы с замыканиями в прологе и эпилоге каждой функции я сохранял в специально выделенную область памяти вне стека адрес, где расположены переменные последнего вызова.

Не думали попробовать сделать оптимизацию хвостовой рекурсии?
Sign up to leave a comment.