Как стать автором
Обновить

Комментарии 9

>проснуться богатым и знаменитым.
По-моему цель была другая — упороться и сделать игру на чем-то, что большинство считает для этого непригодным ;)

И это удалось!
Вот интересно, те кто поставил эти минусы — они что, реально думают, что тут высказан негатив или критика? Или что они вообще думают?

Я автору поставил два плюса сразу. А «упоротый» — это в первую очередь «увлеченный чем либо» (возможно излишне), а уже во вторую негативные значения. По крайней мере — для меня.
ну, положим, игра не на xslt, а все таки на js со смесью xslt… и действительно изврат
Да, XSLT одновременно мощный и по-хорошему ублюдский язык. Я на нём сделал темку для autoindex'ера в nginx — результат то красивый, но пришлось делать тройную (!) рекурсию, ибо в xslt 1.0 (или какой там поддерживается в nginx, точнее в libxslt) просто критически мало полезных возможностей. Если кому интересно, результат можно глянуть тут.
XSLT офигенная вещь. Особенно на серверной стороне, в качестве «шаблонизатора». А некоторые реализации процессоров (правда не 3.0 спецификации) еще и офигенски быстрые.

Xslt крут! А так как он сам тоже XML (гомоиконность, хе), то можно написать предварительные преобразования, с помощью которых добавить некоторого синтаксического сахара в язык. Прям как Лисп, только XML.


Хотя есть у него и фундаментальные ограничения. Приходится грузить весь xml документ в память, и одновременно много больших документов не потрансформируешь, оперативы не хватит. А единственная реализация XSLT 3.0 с поддержкой потоковой обработки стоит сотни нефти.

Насколько помню, есть еще ограничения у «потокового» (sax?) трансформра, он не умеет выполнять сортировку <xsl:sort select="...."/>

Понятно, что у потоковых трансформаций есть ограничения, да и чисто потоковые штуки не особо полезны. Но в XSLT 3.0 есть возможность держать в памяти только поддерево, в рамках которого выполнять уже все возможные XSLT трансформации. Сортировку top-level элементов за константную память конечно не сделаешь, но для наших задач хватило бы. Однако из-за дороговизны пришлось запилить свой ограниченный DSL.

Такой код не валиден:
<xsl:for-each select="$board/cell"/>

Код валиден, только ничего не возвращается.
К дочерним узлам получить доступ можно:
<xsl:for-each select="$board/>

более читаемо:
<xsl:for-each select="$board/self::cell"/>

по индексу:
<xsl:for-each select="$board[1]"/>
<xsl:for-each select="$board[2]/self::cell"/>

для переменных можно и тип указать:
<xsl:variable name="board" as="node()*">
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории