Serguey Zefirov (thesz) wrote,
Serguey Zefirov
thesz

Categories:

Что делало Smalltalk быстрым.

Smalltalk в его инкарнации конце 90-х. выполнял одно очень правильное преобразование кода в своём JIT - специализацию.

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

Что порождало возможность развернуть вызываемый код и, далее, устранить проверки.

Это преобразование очень важно - вы пишите код в нужных абстракциях и вам его преобразуют в быстрый код, устраняя абстракции.

Это преобразование подходит для любого типа абстрактной машины, включая байт код (случай Питона). Однако в Питоне его нет, и в результате абстракции протекают - они есть, но пользоваться ими без учёта их вычислительной нагрузки невозможно.

Вон, в моём коде использовался Counter, в который я всегда добавлял положительные счётчики. Куски кода Counter, которые проверяют на ноль и/или отрицательные значения, могли бы быть выброшены вообще, поскольку никогда не сработают. Но они выброшены не были и в результате замена Counter на dict и расстановка условий и циклов там, где я использовал one_counter += other_counter, привела к ускорению выполнения более, чем в десять раз.
Tags: работа, языки программирования
Subscribe

  • Разное.

    Выясняем с коллегой причины проблем сборки некоей БД с несколько изменённым хранилищем. Оба смотрим на, вроде бы, один и тот же RPM - md5sum…

  • Всякое разное про отпуск и работу.

    Съездили в Италию, в Финале Лигуре, что на Лигурийском море, через Милан. В Милан попали на начало недели моды, поэтому в воскресенье любовались…

  • Про Tweag

    Как выяснилось, я неправильно помню историю ParSci и Tweag. Поэтому прошу не обращать внимание на мои замечания по поводу Tweag в предыдущем посте.

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 38 comments

  • Разное.

    Выясняем с коллегой причины проблем сборки некоей БД с несколько изменённым хранилищем. Оба смотрим на, вроде бы, один и тот же RPM - md5sum…

  • Всякое разное про отпуск и работу.

    Съездили в Италию, в Финале Лигуре, что на Лигурийском море, через Милан. В Милан попали на начало недели моды, поэтому в воскресенье любовались…

  • Про Tweag

    Как выяснилось, я неправильно помню историю ParSci и Tweag. Поэтому прошу не обращать внимание на мои замечания по поводу Tweag в предыдущем посте.