singlepost

Ищу умного человека для брейнсторминга на тему оптимизации языка Ио << На главную или назад  

Если вы разбираетесь в компиляторах, машинных кодах, ООП и динамических языках типа смолтока, селфа, руби, ио (//vkontakte.ru/club3618361), я бы с удовольствием обсудил пути реализации адаптивной оптимизации Ио.

Ио — это чистый объектно-ориентированный язык с кучей очень интересных фишек и стандартных библиотек. См. //vkontakte.ru/club3618361

Исходные данные: в Ио есть объекты, наследование через прототипы, посылка сообщений с ленивым выполнением аргументов в произвольном контексте, динамическое переопределение любых методов в любых объектах и сопрограммы (coroutines), реализующие кооперативную многозадачность. Любое телодвижение в рантайме – это поиск слотов в иерархии прототипов и их активация (если это методы). Некоторые методы — нативные CFunctions, прилинкованные в сишном коде.

Требуется:
1) Проанализировать статистику вызовов в типичных программах: корректно построить графы вызовов с тем, чтобы воочию увидеть, что следует оптимизировать. Пока что могу предположить, что это поиск слотов глубоко в иерархии (следует понять, насколько глубоко и насколько эффективным будет их кеширование), а также повторяемые действия (создание locals и наполнение его слотами-локальными переменными на каждый вызов метода) и избыточные действия.

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

3) Если будет возможно избавиться от избыточных действий, то имеет смысл ввести байткод, в терминах которого находить излишние команды и подсчитывать количество машинных циклов. В настоящий момент виртуальная машина оперирует передачей структурированных сообщений, по сути, интерпретируя AST (abstract syntax tree).

Если вы — тот человек, который примерно понимает суть проблемы и может подсказать какую-нибудь полезную информацию, свяжитесь со мной: Олег Андреев, oleganza@gmail.com, skype://olegandreev1986. Еще я обитаю на каналах #io и #io-ru на сервере freenode.

Спасибо.

12 ответов в теме “Ищу умного человека для брейнсторминга на тему оптимизации языка Ио”

  1. 12
    Олег Андреев ответил:

    Не, к байткоду Си# претензий нет. Просто сам по себе байткод ничего не даст. Нужно начать с продумывания кода специально для Ио, который потом можно транслировать в байткод LLVM, JVM, CLR (.NET) и т.п. А иошный байткод использовать для анализа.

  2. 11
    Константин Смотритель ответил:

    Мда, если не знать С++, то ИМХО лучше Си и не выпендриваться =) Уважаю.

    А почему такое отношение к байт-кодуу С#? По каким критериям он не подходит? О_о Свою машину написать не так просто.

  3. 10
    Артём Шалхаков ответил:

    а как насчет LLVM, C– или Parrot?

  4. 9
    Олег Андреев ответил:

    Граф еще не построил. Интерпретатор на аккуратном Си уже есть (Си++ там ничего особо полезного не сделает).

    Байткод для сишарпа быстрее выполнение не сделает, скорее, наоборот. Для Ио имеет смысл разработать свой компактный байткод, на котором описать способы оптимизации.

  5. 8
    Константин Смотритель ответил:

    Ну чего, построил анализ графа вызовов, как обсуждали? Ккие результаты? Выкладывай, интересно.

    А по поводу байт-кода – есть два пути:
    1) реализовать собственный интерпретатр (или транслятор, не суть) на С++ (учитывая простоту io)
    2) использовать байт-код и машину C# (Mono в *nix) – C# машина поддерживает рефексию, в отличие от других

    Чо скажешь?

  6. 7
    Олег Андреев ответил:

    0) //vkontakte.ru/club3618361
    1) iolanguage.com
    2) три статьи у semka: //habrahabr.ru/blog/crazydev/45584.html (это третья)
    3) #io, #io-ru на irc.freenode.net

  7. 6
    Александр Летов ответил:

    А можно про очень интересные фишки немного поподробнее? ;)

  8. 5
    Олег Андреев ответил:

    Интерпретатор собственный. Для того, чтобы рассматривать LLVM нужно разработать опкоды. Сходу это сделать не получится из-за особенности вычисления аргументов сообщений (они не вычисляются перед посылкой). Вполне возможно, что я упускаю какие-то простые вещи из внимания…

    Выносить медленные методы в Си — другая история, не всегда интересная. Но вариант RubyInline для Ио все же будет полезен (сейчас вообще экстеншины можно класть только в папку с дистрибутивом).

  9. 4
    Артём Шалхаков ответил:

    В Io свой собственный интерпретатор?

    Есть ведь проекты, реализующие эффективные интерпретаторы: LLVM, Parrot (на счет последнего — не знаю, как там со статусом, может, вообще ничего не готово).

    Есть еще другие штуковины — SquirrelFish и Tamarin (хорошие интерпретаторы JS). Думаю, можно их приспособить и к Io. SquirrelFish, к примеру, использует прямой jmp по таблице опкодов, почти как в настоящей нативной программе. :)

    Если, конечно, невозможно реализовать Io как front-end к одному из существующих интерпретаторов… Тогда, может, вынести особо медленные функции в Си? (Почему-то такой подход мне кажется самым простым)

  10. 3
    Артём Шалхаков ответил:

    И да, еще такой "ценный совет" — может, спросить на RSDN или gamedev.ru? Там водятся очень хорошие программисты, которые могут помочь.

  11. 2
    Олег Андреев ответил:

    В рамках бизнес-задачи.

  12. 1
    Ахмет Огонь ответил:

    Интересная тема. Вы в рамках дипломного проекта делаете?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.