в коде sudoku я тоже не копался, но для mono, чувствую, надо провести оптимизации. и еще, это случайно не mono ниже версии 2.8, т.к. в последних версиях используется новый GC.
И код (особенно у LuaJIT2, который bounds checkи не вставляет для ffi массивов и не обязан поддерживать прерывание циклов в отличие от V8) получается ну ровно такой как вы руками напишите на ассемблере. Временные floating point значения на xmm регистрах, инварианты циклов вынесены и т.д.
ну ffi в LuaJIT2 делается руками — это ничуть не заслуга компилятора, а делать при этом bounds check — было бы совсем неправильно — ведь уже будет известен размер массива, и не придется динамически расширять сам массив.
однако, type feedback JIT-компилятор способен на это лишь либо после нескольких вызовов участка кода, либо после исполнения кода (при профайлинге, например).
и как Вы уже написали
способны для горячих мест порождать достаточно чистый код, сравнимый с тем, что дают компиляторы для более строго типизированных языков типа C++ или Java.
Dash спроектирован таким образом, чтобы было легче использовать дополнительные инструменты для больших серьёзных проектов, которые требуют поддержки, в том числе таких функций как рефакторинг и поиск мест вызова функций.
скорее всего этот «фатальный недостаток» — отсутствие строгой типизации, из-за чего скорость работы любой программы, скомпиленной JIT или AOT компилятором, будет всегда медленнее.
все правильно, однако это уже выходит за рамки статьи и касается реализации конкретного приложения.
Цель этого поста – возможность показать, как получить из URL-адреса вида /{culture}/{Controller}/{Action}… в Вашем приложении, URL-адрес вида /ru/Home/About.
в коде sudoku я тоже не копался, но для mono, чувствую, надо провести оптимизации. и еще, это случайно не mono ниже версии 2.8, т.к. в последних версиях используется новый GC.
и как Вы уже написали
т.е. почти, но не лучше и быстрее.
значит будет строгая типизация
так что routing и ничего более