Comments 22
Класс, несколько раз возвращался наверх и искал значок перевода. Очень здорово, хотелось бы такой курс в университете пару лет назад, а то насчет этого:
совсем завидно было бы, я написал только один парсер, и тот в рамках курса Compilers от Alex Aiken'a. В университете был унылый и грустный курс.
Обычно к шестому курсу студенты АУ успевают написать по шестнадцать различных парсеров
совсем завидно было бы, я написал только один парсер, и тот в рамках курса Compilers от Alex Aiken'a. В университете был унылый и грустный курс.
+4
Абсолютно аналогичная зависть. Максимально что было у нас — конечный автомат для заданного паттерна и польская нотация.
+2
Всегда можно наверстать упущенное :)
На правах рекламы могу напомнить о нашем с humbug проекте llst.org, который по прежнему живет и здравствует. Надеюсь в ближайшее время написать статью с обновлениями и показать красивые картиночки с графами. Только в отличие от Asmjit мы используем вполне себе промышленный LLVM.
Тем кто забыл о чем речь, советую обратить внимание на мои статьи на Хабре.
На правах рекламы могу напомнить о нашем с humbug проекте llst.org, который по прежнему живет и здравствует. Надеюсь в ближайшее время написать статью с обновлениями и показать красивые картиночки с графами. Только в отличие от Asmjit мы используем вполне себе промышленный LLVM.
Тем кто забыл о чем речь, советую обратить внимание на мои статьи на Хабре.
+1
Добавлю еще пару копеек — на подходе версия 0.4, которая не будет иметь видимых отличий от выпущенной 0.3, но построена на механизме анализа графов управления. Предыдущая версия работала «в лоб», транслируя потоки инструкций. Графы позволяют открыть машине глаза на зависимости по данным и в будущем производить серьезные оптимизации.
Но настоящая цель будет достигнута в версии 0.5, которая вовлекает алгоритмы вывода типов и оптимизацию полиморфных вызовов путем доказательства корректности наблюдаемого поведения. Она должна дать существенный прирост скорости и уменьшение размера генерируемого кода. Плюс появится возможность создания отдельных исполняемых файлов (deploy то есть).
Теоретическая основа вывода типов применительно к Smalltalk проработана практически полностью, осталось только закодировать.
Но настоящая цель будет достигнута в версии 0.5, которая вовлекает алгоритмы вывода типов и оптимизацию полиморфных вызовов путем доказательства корректности наблюдаемого поведения. Она должна дать существенный прирост скорости и уменьшение размера генерируемого кода. Плюс появится возможность создания отдельных исполняемых файлов (deploy то есть).
Теоретическая основа вывода типов применительно к Smalltalk проработана практически полностью, осталось только закодировать.
+1
А никто не попробовал оттранслировать этот байт-код (или даже исходное AST) в LLVM IR и запустить полученный модуль, чисто из интереса сравнить производительность?
+2
Насколько я знаю, никто.
Однокурсник интереса ради сделал трансляцию в C++, но там не поддержаны нативные функции.
Надо будет предложить следующему поколению.
Однокурсник интереса ради сделал трансляцию в C++, но там не поддержаны нативные функции.
Надо будет предложить следующему поколению.
+1
Коллега доделал в своей реализации (трансляция в C++) поддержку нативных функций!
На бенчмарке из статьи результат получился 98 fps (почти в два раза быстрее, чем у меня) – есть куда стремиться.
На бенчмарке из статьи результат получился 98 fps (почти в два раза быстрее, чем у меня) – есть куда стремиться.
0
Во сколько раз получилось медленнее скомпилированного аналогичного c++ кода?
0
Сейчас почти все интерпретируемые платформы, такие как CLR, Python, Ruby, Perl
CLR никогда не был интерпретируемым. JIT был всегда.
Более того, MSIL всегда переводится в машинные инструкции. Никакой интерпретации (!!!)
+2
CLRы разные бывают, .NET Micro Framework, например, всегда был интерпретируемым.
+3
Однако в исходниках coreclr интепретатор все-таки присутствует.
+1
Один из самых полезных и прокачивающих курсов из всего, что у нас было. На первой лабе глаза вылезли на лоб, от того, что я ничего не понимаю. Но к концу курса я все же сделал jit (хотя на тот момент он не был обязательным). Правда отлично так и не получил, т.к. не успел реализовать нативные вызовы.
+1
«и писать еще один рекурсивный спуск совсем неинтересно.»
А может научить их
lexx yacc parsec pex (или на чем там NEMERLE)
А может научить их
lexx yacc parsec pex (или на чем там NEMERLE)
+2
Не то, чтобы я всё понял (поскольку в совершенно другой области специалищируюсь), но от подобных постов сразу улучшается отношение к российскому высшему образованию.
Передавайте вашему преподавателю поздравления.
Передавайте вашему преподавателю поздравления.
+1
>> Для обеспечания работы с замыканиями в прологе и эпилоге каждой функции я сохранял в специально выделенную область памяти вне стека адрес, где расположены переменные последнего вызова.
Не думали попробовать сделать оптимизацию хвостовой рекурсии?
Не думали попробовать сделать оптимизацию хвостовой рекурсии?
0
Sign up to leave a comment.
JIT-компилятор как учебный проект в Академическом Университете