Здравствуйте, wander, Вы писали:
W>Здравствуйте, Abyx, Вы писали:
A>> W>Здравствуйте, Abyx, Вы писали:
A>> A>> вы исходный код этого Lua видели?
A>> W>А что там плохого? Пару примеров, если можно.
A>> там плохо то, что Lua написан на С.
A>> по этому там макросы. макросы вместо inline-функций, макросы вместо шаблонных функций, макросы для наследования, макросы для кусков кода (типа vmcase*) A>> в частности там есть интуитивно понятные вещи типа getfoo(x) = y;
A>> еще там есть union'ы и switch'и, никакого полиморфизма
A>> и конечно, там есть монолитный код, где каждая функция знает про половину Lua, god-структуры и god-функции A>> слои абстракции там есть, но только там где без них вообще никак, например для доступа к полям TValue в Lua 5.2
W>Ты предвзят. Да, там есть все это, но оно используется согласно регламенту и не выглядит говнокодом. Злоупотреблений и откровенного ламерства там нет. Короче говоря, концепции согласно инструменту. Это не плохо — это нормально.
я с этим кодом работал.
чтобы в нем что-то поменять без предварительного рефакторинга переписывания на С++, надо быть "экспертом по исходникам Lua".
такой код можно объяснить только поддержкой древних embedded систем, где нет нормального оптимизирующего компилятора (в т.ч. LTCG).
тогда конечно макросы и god-функции, экономия на каждом байте памяти, выглядят оправданными.
но с точки зрения современных компиляторов, и 32/64-рязрядных систем, этот код является неподдерживаемым говнокодом. Потому что можно было написать лучше.