Здравствуйте, Mamut, Вы писали:
M>Вот вопрос. Чем их ASN.1 не устроил?
a) ASN.1 совершенно не приспособлен к чтению людьми. Бинарная передача данных -- это задача ASN.1, но вот ручками там поправить что-нибудь, или хотя бы без какого-либо инструмента проверить значения в потоке данных, тут текстовые форматы удобнее. Не случайно Эрик Реймонд в своей книги "Искусство программирования под Unix" заостряет внимание на том, что текстовые форматы часто удобнее бинарных.
b) ASN.1, вообще-то говоря, не столь расширяем, как это может показаться. AFAIK, при проектировании протокола нужно специальным образом помечать места, в которых возможны дальнейшие расширения протокола. Что не просто. В XML-е (да и другом формате текстовой разметки), если не фиксировать жестко DTD, то можно при необходимости расширить любой тег (например, добавить в него атрибутов или дочерних элементов).
c) ASN.1 сразу ставит тебя перед высоким порогом вхождения. Во-первых, язык спецификаций. Во-вторых, ASN.1 компиляторы (писать вручную можно разве что ASN.1 BER, да и то не просто, а уж ASN.1 PER...). Их нужно искать, их нужно изучать, за хорошие нужно платить и не мало. В случае же с XML можно вооружиться инструментом, максимально подходящим для твоих нужд. Например, один раз мне потребовалось получить по HTTPS с сервера коротенькую XML-ку из которой мне нужно было значение только одного элемента. Воспользовался просто regex-ом. Генерить, опять же, XML вручную очень просто (если не сложный). Хотя низкий порог входжения в XML, как показал Голуб, как раз затем и приводит к необдуманному применению XML.
d) Насколько мне известно, ASN.1 не специфицирует отображение своей спецификации в язык программирования. Из-за этого каждый ASN.1 предоставляет собственный маппинг спецификации в классы/функции целевого языка. А из-за этого пользователи ASN.1 привязываются к производителю ASN.1 компилятора.
Так что, имхо, далеко не всегда ASN.1 является более выгодной альтернативой, чем XML. И наоборот. Хотя в некоторых случаях действительно задаешься вопросом: какого черта XML использован? Например, есть такая, имхо, маразматическая штука, как подписанный XML. Вот вместо него ASN.1 вполне мог применяться. Тем более, что области, в которых подписанный XML применяется (электронная коммерция), отнюдь не дешевые. И при разработке в них прикладных решений затраты на ASN.1 компиляторы вовсе не такие чувствительные.
Плохо то, что XML раскручен, а ASN.1 нет. Я, например, про него совершено случайно узнал. Поэтому при выборе решений многие разработчики такой альтернативы XML, как ASN.1 или, скажем, скриптовые языки, даже не видят. Из-за элементарного незнания.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, kan, Вы писали:
kan>Cyberax wrote: >>> вот в jsf надо ";", но отделить пробелом. >> Это не jsf, а jam. И я это пофиксил kan>ты лучше xml прикрути туда
Уже поздно. Я уже Питоновый backend туда прикручиваю.
Здравствуйте, kan, Вы писали:
>> Представляю себе цепочку причинно-следственных связей: kan>Это нужно делать только если ты эстет и проблемы со зрением "из-за обилия тегов и неудобной для восприятия глазом kan>структуры разметки". Лично мне при нормальном xml-редакторе (да если ещё и специально обученном данной xsd-шкой) kan>воспринимать структуру никто не мешает.
Прошу перечитать первый абзац из высказываний Голуба (хоть на русском в моем переводе, хоть на английском в оригинале) -- проблемы с XML начинаются тогда, когда на нем начинают писать программы вместо декларативных описаний. Может быть кто-то и может воспринимать что-то подобное за нормальный if:
C# Application Markup Language (CSAML): An Evolutionary Leap
...
In fact, CSAML is able to rid itself of every symbol used in old-syntax C#. For example, consider the following old-syntax C# assignment statement:
A = 5 * (B + 27 * C);
This statement translates without much fuss into the following chunk of CSAML:
The advantages of this notation are obvious. Because no parentheses are required (or allowed), the programmer has composed the CSAML by carefully considering the problem. Errors are much less likely. The compiler can become more efficient as well because the statement has, in effect, been pre-parsed by the programmer.
...
eao197 wrote: > Прошу перечитать первый абзац из высказываний Голуба (хоть на русском в > моем переводе, хоть на английском в оригинале) -- проблемы с XML > начинаются тогда, когда на нем начинают писать программы вместо > декларативных описаний. Может быть кто-то и может воспринимать что-то > подобное за нормальный if
Понимаешь, в некоторых случаях на 10Кб декларативного кода приходится
несколько сотен байт подобного императивного. Стоит ли ради небольшого
неудобства лепить отдельный компилятор?
В принципе, для меня нет большой разницы использовать ли Ant (который
XML) или Jam (в котором свой язык) с точки зрения удобства языка. В
Ant'е я получаю подсветку ошибок и автокомплит по XSD, в Jam'е — удобное
квотирование и лаконичность.
Здравствуйте, Cyberax, Вы писали:
C>Понимаешь, в некоторых случаях на 10Кб декларативного кода приходится C>несколько сотен байт подобного императивного. Стоит ли ради небольшого C>неудобства лепить отдельный компилятор?
Ради небольшого, естественно, нет.
А вот если на 400 байт декларативного описания приходится еще 4K императивщины, тогда...
C>В принципе, для меня нет большой разницы использовать ли Ant (который C>XML) или Jam (в котором свой язык) с точки зрения удобства языка. В C>Ant'е я получаю подсветку ошибок и автокомплит по XSD, в Jam'е — удобное C>квотирование и лаконичность.
А я недавно от другого примера слегка ошалел. Для одной из утилит требовалось делать набор описаний в конфигах. Описания довольно однообразные и вручную делать их было ну очень муторно, да и черевато глупыми ошибками. Чтобы упростить их создание был сделан Ruby генератор, который на своем DSL позволял задать только часть описаний, а все остальное делал сам. Более того, чуть-чуть с ним поработав, прямо в DSL была определена вспомогательная функция, которая еще больше сокращала количество описаний. В результате DSL из десяти строчек приводил к генерации десятка конфигурационных файлов с сотнями строк в каждом. Да и сам код генератора оказался гораздо меньше по объему, чем генерируемые им файлы.
Вот теперь следующая идея ждет своего воплощения: встраивать Ruby-интерпритатор прямо в приложение, чтобы DSL им парсился и информация из DSL непосредственно в приложение поступала.
НО! Все это хорошо, пока настройки из приложения обратно в DSL сохранять не нужно.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Cyberax wrote:
>> >> вот в jsf надо ";", но отделить пробелом. >> > Это не jsf, а jam. И я это пофиксил > kan>ты лучше xml прикрути туда > Уже поздно. Я уже Питоновый backend туда прикручиваю.
Хотя бы. Но не то убожество, ещё один язык... брр...
А на каком этапе находится? Я ведь до сих пор не решился какую билд-систему заюзать... что-то идея cmake меня тоже не
вдохновила.
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
FR wrote:
>> >> Напиши xsl-ку переводящую неудобный тебе формат в любой по вкусу. >> > Это не выход > kan>А что выход? Изучать ещё один синтаксис? > > Зачем новый хватит или S-выражений или например чего-то forth образного.
А как быть с DOM/SAX/XSD/XPath/XSLT? Что из этого можно прикрутить? Особенно интересуют схемы XSD/RelaxNG.
Да и мне честно говоря пофиг что писать "(" или "<", в чём выигрыш?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
eao197 wrote:
> Прошу перечитать первый абзац из высказываний Голуба (хоть на русском в > моем переводе, хоть на английском в оригинале) -- проблемы с XML > начинаются тогда, когда на нем начинают писать программы вместо > декларативных описаний. Может быть кто-то и может воспринимать что-то > подобное за нормальный if:
Ну так рассуждать, в когда вообще декларативное описание будет выгодее?
Здравствуйте, kan, Вы писали:
>> Прошу перечитать первый абзац из высказываний Голуба (хоть на русском в >> моем переводе, хоть на английском в оригинале) -- проблемы с XML >> начинаются тогда, когда на нем начинают писать программы вместо >> декларативных описаний. Может быть кто-то и может воспринимать что-то >> подобное за нормальный if: kan>Ну так рассуждать, в когда вообще декларативное описание будет выгодее? kan>
Вполне нормальный вариант. В LaTeX-овой разметке, или в Wiki, или в ReST, конечно, компактнее, но вполне себе хорошо. Это как раз идеальная задача для XML подобной разметки. Для того и создавался.
kan>и что-то вроде kan>
Здравствуйте, kan, Вы писали:
kan>FR wrote:
>>> >> Напиши xsl-ку переводящую неудобный тебе формат в любой по вкусу. >>> > Это не выход >> kan>А что выход? Изучать ещё один синтаксис? >> >> Зачем новый хватит или S-выражений или например чего-то forth образного. kan>А как быть с DOM/SAX/XSD/XPath/XSLT? Что из этого можно прикрутить? Особенно интересуют схемы XSD/RelaxNG. kan>Да и мне честно говоря пофиг что писать "(" или "<", в чём выигрыш?
Уже ни в чем
Просто похоже те кто разрабатывал XML не думали что его будут использовать как скриптовый язык, по моему это дурость.
eao197 wrote:
> А это лучше заменить на <http://markaby.rubyforge.org/>: > > html { > head { > title 'Hi' > } > body { > p { > 'Hello, world!' > } > } > }
Output defaults to XHTML 1.0 Transitional
А как это проверить? И что мне сделать, чтобы оно было, скажем, WML 1.2.1?
Posted via RSDN NNTP Server 2.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Вот хороший пример того, как делать не надо (VoiceXML) :
<?xml version="1.0"encoding="UTF-8"?>
<vxml version = 2.1 >
<meta name="maintainer" content="YOUR_EMAIL@SOMEWHERE.COM"/>
<form id="CallTransfer">
<block>
<prompt>Preparing to dial the number</prompt>
</block>
<!--
Make sure you have outbound dialing priveleges,
else any call attempts will result in a 'busy' event.
Contact support@voxeo.com for details
-->
<transfer name="MyCall" dest="tel:+1234567890"
bridge="true" connecttimeout="20s" maxtime="60s">
<filled>
<if cond="MyCall == 'busy'">
<prompt>
Sorry, our lines are busy. Please try again later.
</prompt>
<exit/>
<elseif cond="MyCall == 'noanswer'"/>
<prompt>
Hey, nobody is answering the phone.
</prompt>
<elseif cond="MyCall == 'far_end_disconnect'"/>
<prompt>
Your party must have hung up. how rude.
</prompt>
<elseif cond="MyCall == 'near_end_disconnect'"/>
<submit next ="MyCoolCleanupPage.jsp"/>
<elseif cond="MyCall == 'maxtime.disconnect'"/>
<prompt>
Your call ran over the maxtime of sixty seconds,
and your called party has been disconnected.
</prompt>
</if>
</filled>
</transfer>
</form>
</vxml>
Самое интересное, что даже в этой схеме им не удалось избавиться от скриптового языка — в ветках elseif используется атрибут cond, содержимое которого — JavaScript. Здесь это еще не так заметно, но я видел и более "ветвистые" условия, записанные на JS. Т.е. в результате получили ни то ни се — из XML взяли исключительно недостатки, выбросив достоинства. Результат — налицо.
eao197 wrote: > Ради небольшого, естественно, нет. > А вот если на 400 байт декларативного описания приходится еще 4K > императивщины, тогда...
Тогда действительно дело нечисто
Build-системы как раз стоят посередине между императивщиной и
декларативным описанием.
> Вот теперь следующая идея ждет своего воплощения: встраивать > Ruby-интерпритатор прямо в приложение, чтобы DSL им парсился и > информация из DSL непосредственно в приложение поступала.
А зачем?