LINUX.ORG.RU

О XML-программистах

 , ,


7

7

Всем более-менее опытным программистам, работавшим с энтерпрайзом, четко известен следующий эмпирический закон:

Девятое Правило Гринспуна, о котором он сознательно предпочел умолчать

Любая более-менее крупная программа на Java или C# является программой на XML

Вобщем, в один прекрасный день, работая на C#, я написал на XML-конфиг некоторых приблуд для UI. Это смотрелось настолько элегантно и красиво, и кастомизировалось настолько проще, по сравнению с обычным хардкодом, что я долго лелеял идею о том чтобы воткнуть подобное еще куда-либо в проект.

Не так давно, такой шанс появился, и я перевел в декларативное описание на XML воркфлоу основных бизнес-процессов системы.

Получилось опять же крайне неплохо, но потом я посидел и подумал.

А что если эти два конфига объединить в один XML?

Ой, стойте, но тогда ведь получается, что туда же можно перенести и разнообразные простые валидаторы и предикаты действий по бизнес-логике? Описание геттеров/сеттеров и простой арифметики - не такое уж сложное занятие, тем более проект и так в System.Reflection по уши.

Черт! Но вообще-то ведь и сложные тоже не проблема - ведь они явлются в 99% случаев не более чем SQL/HQL-запросами, которые никто не мешает хранить в конфигах.

Ух, а ведь если подумать еще - то туда же можно перенести и сами действия по бизнес-логике, не так ли?

Но ведь можно пойти и дальше. Из XML можно вообще-то говоря даже и генерировать модель данных для всей логики системы! И ведь это не просто бредовая идея - такое отчасти давно уже делается стандартными средствами .Net-платформы, например тем же Entity Framework.

И тут я задался вопросом - а зачем нам тогда вообще большая часть кода на C#? Сторонние библиотеки мы ведь точно так же можем вызывать из интерпретатора XML.

Вон оно как все отлично то выходит.

Хм, правда что-то эта модель несколько, скажем так, раздулась.

Вот бы, конечно, написать более высокоуровневый интерпретатор XML чтобы он нам генирировал наш XML из декларативного описания другим XML?

И тут меня осенило. Где-то я это уже видел. Может быть в одной книжке, давно забытой на полке? Или в старой статье семьдесят мохнатого года?

Вспомнив окончательно, я просто расплакался.

Итак:

Вторая Теорема Лавсана

Каждый XML-программист (то есть любой продвинутый java/c#-программист) в конечном итоге доходит до лиспа, просветляется и плачет.

Дискач.

★★★

Последнее исправление: cetjs2 (всего исправлений: 1)
Ответ на: комментарий от monk

Например как?

Например, так:...

Как это запустить?

«Алгоритмы + структуры данных = программы.» Структуры данных в XML я вижу, но алгоритмы-то в парсере. Я понимаю, что любая сложная программа превращаяется в LISP, но при чём здесь XML? Любая сложная программа на C#/Java превращается в плохой LISP который выглядит не как S-выражение в привычной записи, но XML, от которого глаза вытекают. Так?

Camel ★★★★★
()
Ответ на: комментарий от AIv

Есть пачка параметров, нужно с их учетом провести какую то последовательность действий.

Ну, в бытность мою недофизиком, часто стояла такая задача:

1) Есть конфиг для генератора начальных условий числодробилки A.

2) Есть конфиг для числодробилки A

3) Есть конфиг обработчика выхлопа числодробилки A

4) Есть конфиг для генератора няшных графиков по результатом всего этого.

Make тут подходил идеально, ибо можно было жамкать одну и ту же кнопочку и для перекрашивания графиков и для полного перерасчёта всего.

fmdw
()
Ответ на: комментарий от fmdw

Обычно есть числодробилка А (сам же ее пишешь по ходу), которая п 1-2, а иногда и 3 сразу. Ну и графики нужно строить, но заранее ХЗ что именно и как строить.

Если все это разносится на несколько приложений, то обычно это что то тяжелое (расчет занимает часы) и тут как бы хочется уже запускаться в фоне/на кластере.

А для графиков да... но я обычно просто пишу shell/python-скрипт если уже четко понятно что и как рисовать.

AIv ★★★★★
()
Ответ на: Например как? от Camel

Как это запустить?

Public Sub Show() Using reader As New Xml.XmlTextReader(MacroDir & «\MyProject-xmlHelloDialog.xaml») wndMain = Windows.Markup.XamlReader.Load(reader) End Using

ShowModal() End Sub

Любая сложная программа на C#/Java превращается в плохой LISP который выглядит не как S-выражение в привычной записи, но XML, от которого глаза вытекают. Так?

Именно так. Когда в XML вытаскивают GUI (как в моём примере), то это ещё удобоваримо. Но бывает и такое:

<?xml version="1.0" encoding="utf-8" ?> 

<xr:rules xmlns:xr="http://www.xrules.org/2003/11">

	<xr:ruleset context="/PurchaseOrder">
		<xr:calculate target="SubTotal">
			<xr:value>sum(Item/ItemTotal)</xr:value>
		</xr:calculate>
		<xr:calculate target="Tax">
			<xr:value>SubTotal * 0.05</xr:value>
		</xr:calculate>
		<xr:calculate target="GrandTotal">
			<xr:value>SubTotal + Tax</xr:value>
		</xr:calculate>
	</xr:ruleset>

	<xr:ruleset context="/PurchaseOrder/Item">
		<xr:calculate target="ItemTotal">
			<xr:value>UnitPrice * Quantity</xr:value>
		</xr:calculate>
		<xr:validate test="Quantity > 0" />
		<xr:validate test="UnitPrice > 0" />
		<xr:validate test="ItemTotal &lt; 400" />
	</xr:ruleset>

</xr:rules>
monk ★★★★★
()
Ответ на: комментарий от fmdw

А с make я обычно студентам даю задачу - смоделировать осциллятор, построить график, сделать отчет в LaTeX и все это что бы из make было;-)

Если есть сторонний пакет программ средней тяжести (каждая работает 10сек - минуты), который имеет сформировавшийся интерфейс, то конечно make хорошо подходит, тут Вы правы.

AIv ★★★★★
()
Ответ на: комментарий от AIv

Обычно есть числодробилка А (сам же ее пишешь по ходу), которая п 1-2, а иногда и 3 сразу.

Не юникс-вей же! В теории так сложнее отлаживать или повторно использовать какую-то из частей пайплайна.

fmdw
()

Ну уж нет! Хорошая попытка, Lisp.

n04h
()
Ответ на: комментарий от AIv

Вашим студентам можно позавидовать, что сказать.

fmdw
()

Вторая Теорема Лавсана

а первая?

//кстати, вспомнил, как писал конвертилку из одного формата описания сэмплов в другой (обои на XML) на лишпе (причём на емаксовой). XSLT? Не, не слышал, геморрой лишний.

lazyklimm ★★★★★
()
Ответ на: комментарий от fmdw

Почему? Зачем мне вводить какие лишние обмены данными между процессами, если все прекрасно крутиться в рамках одного?

А отладка идет помодульно. С первого запуска могу отладить нач.условия, со второго ядро и т.д. Питон для верхнего уровня тем и хорош, что на нем новый скрипт для тестирования-чнго-то-там (вызова соотв методов из С++) пишется за неск. минут.

Вашим студентам можно позавидовать, что сказать.

Лучше мне посочувствуйте. Встречаются конечно очень сильные ребята, но крайне редко. В целом физтех деградирует, последний хороший набор на кафедру был 4ре года назад.

AIv ★★★★★
()
Ответ на: комментарий от yyk

И причём тут sql? Отсутствие корявого, невыразительного sql синтакса не означает невозможность построения абстракций и функций высшего порядка, создания библиотек.

Bad_ptr ★★★★★
()
Ответ на: комментарий от Bad_ptr

Отсутствие корявого, невыразительного sql синтакса не означает невозможность построения абстракций и функций высшего порядка, создания библиотек.

Закат солнца вручную, да ещё и с тормозами и без большей части фич - это ваш выбор? Ваше право...

yyk ★★★★★
()
Ответ на: комментарий от lazyklimm

а первая?

Об угребищности систем общего назначения

Знаменитая Теорема о Метациклическом Интерпретаторе

ТС вообще неплохо держится. Программировать на C#, XML и лисп одновременно это не так уж безвредно

Хорошо бы на теоремах своего имени и остановился, а то может объявит себя Царем XML и все

anonymous
()
Ответ на: комментарий от anonymous

Я все ждут третью/нулевую. Что то вроде «все IT делится на лисп и быдлокодинг».

AIv ★★★★★
()
Ответ на: комментарий от hateyoufeel

XML - это пример удачного языка описания форматов данных.

Пфф.. Рядом с ASN.1

У ASN.1 несколько другая предметная область.

он выглядит как какашка.

Да, расскажи нам о красоте ASN.1.

tailgunner ★★★★★
()
Ответ на: комментарий от lazyklimm

И как обои на XML, нескучненькие получились?

anonymous
()
Ответ на: комментарий от anonymous

бро, я тебе точек и запятых принёс. Вот, возьми: .................................................................. ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

ugoday ★★★★★
()

На самом деле lisp тоже разметка, а xml - его диалект.

Код и данные суть одно.

Хотя лично я предпочитаю нечто наподобие тега <script/> в разметках. Не всё удобно делать на xml и lisp.

SV0L0CH
()
Ответ на: комментарий от loz

Разметки

Почему разметки?

Потому что extensible markup language. С таким же успехом можно было употребить слово «форматирование» или «сериализация».

В том числе информацию о том что и как должна делать программа, то есть код.

То о чём я и говорил, херово написанные S-выражения.

Camel ★★★★★
()
Ответ на: комментарий от SV0L0CH

Твоя неудобность она лишь в синтаксисе. Представь если был бы язык, который легко позволял тебе создавать правила парсинга и внедрять их в программу, выполняя нужные действия при парсинге. Было бы это удобно?

loz ★★★★★
()
Ответ на: комментарий от ugoday

Благодарствую. На планшете писал - неудобно вводить пунктуацию, тысячу извинений...

anonymous
()
Ответ на: комментарий от ugoday

бро, я тебе точек и запятых принёс.

У тебя «Б» кончились? У меня пара запасных есть, выбирай: Б, Б.

anonymous
()
Ответ на: комментарий от Bad_ptr

До! И говнокодер под каждое изменение распределения данных правит порядок джойнов.

anonymous
()

А потом в этой эксмл параше разбирайся ага.

ritsufag ★★★★★
()

Угадал автора с третьего абзаца )

nanoolinux ★★★★
()

и кастомизировалось настолько проще, по сравнению с обычным хардкодом

а зачем нам тогда вообще большая часть кода на C#?

«В теории между теорией и практикой нет разницы. На практике она есть». Обычно почему-то везде где MS зоигрывало с маркапом/декларативным чем-то в бэкэнде (linq для баз сложнее плоской таблицы с бесшовным экспортом в коллекции и обратно, XML-ные конфиги эндпойнтов WCF, описание бизнеслогики «воркфлоу» в WWF), шаг вправо-влево от красивых элементарных примеров оборачивался саппорто-масштабным геморроем. Поэтому в WCF, по советам ажно Джувала Лёве, маркап (и особенно соап) оч. быстро послали нахрен (в пользу REST). (Аффтар «Programming WCF services» в своей книжке почему-то ненавязчиво для сервисов хардкод рекомендует, a где XML - «простой и плоский» :))

slackwarrior ★★★★★
()
Ответ на: комментарий от loz

Я имел дело с lex+yacc и подобными средствами. В итоге решил что для этого целесообразней разрабатывать не язык, а библиотеку.

Ну наподобие этой https://github.com/Svoloch/js-text-tools (документация в процессе написания, выложу потом)

Однако код почти всегда является деревом. Только дерево можно отображать поразному. Можно в виде кода на Haskell а можно в виде данных TemplateHaskell. Понятно какой код наглядней. Такая же ситуеция с xml и s-exp из lisp. Регулярки мне приятней писать в виде выражений из perl а не в виде кода на lisp или подобном.

Я про то что скорость разработки приоритетней универсальности.

SV0L0CH
()
Ответ на: комментарий от AIv

Хорошо что я не программист...

Прокурору расскажешь.

tailgunner ★★★★★
()

Идея разворачивания данных из шаблонов, известная нам еще из чеканки монет трафаретом, обозвана «лиспом» и выдана за достоинство лиспа, расходимся

vertexua ★★★★★
()
Ответ на: комментарий от SV0L0CH

Я говорю про штуку которая встроена в язык и является в нем заменой регуляркам, позволяя вычислять произвольные вещи в контексте этих правил.

loz ★★★★★
()
Ответ на: комментарий от loz

Ну как бы lex и yacc - отдельные языки программирования и они именно эти правила и описывают. Или я чего не понял?

SV0L0CH
()
Ответ на: комментарий от vertexua

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

Это прискорбно, потому что не будь джавы, из тебя получился бы отличный дворник. У меня вот под окнами например грязно, а почему? Потому что все перспективные дворники пошли в джава-программисты. Джава, как и джава-программисты - вещь совершенно излишняя в современном мире.

lovesan ★★★
() автор топика
Ответ на: комментарий от SV0L0CH

Ну вот в некотором языке синтаксис неудобный в каких-то местах. По твоему мнению, по крайней мере. Но в языке есть средство изменять кусочки синтаксиса как ты хочешь. И ты просто берешь и меняешь, и работаешь дальше.

Без всяких там громоздких lex и yacc или какой компиляторной магии.

lovesan ★★★
() автор топика
Ответ на: комментарий от lovesan

Лол, почему настолько сильно порван пукан? А чего добился ты?

vertexua ★★★★★
()
Ответ на: комментарий от i-rinat

Имхо, если в теме есть Lisp или Haskel, то тема неминуема будет укатана в говнище. Именно теми программистами, которые люто бешенно фапают на сабжи, при этом кривя моси от java/swift/go/python/php, которые по сути самые востребованные языки для разработки. Ну, нужно ребятам почувствовать себя востребованными (элиткой).

menangen ★★★★★
()
Ответ на: комментарий от menangen

Это ж лавсанчик, его забанили прошлый раз в диалоге со мной, где он показывал во всю свою сущность макаки, вот он и нервничает и бугуртит по поводу лишпика

vertexua ★★★★★
()
Ответ на: комментарий от menangen

Я имел в виду отсылку к цитате: «Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.» Она широко известна, и достаточно части её перевода, чтобы понять, на что намекал автор. Но по его мнению мы тут все необразованные, и такого намёка будет недостаточно.

Вот он и сказал явно, чтобы радиус разлёта от вентилятора был побольше.

i-rinat ★★★★★
()
Ответ на: комментарий от lovesan

Но в языке есть средство изменять кусочки синтаксиса как ты хочешь.

И только лиспанутые согласны писать не на языке, а на почти что AST-нодах для этой «киллер-фичи».

Deleted
()
Ответ на: комментарий от Deleted

А всё просто.

Дело в том, что тебе не нужен язык. Тебе нужно задачу решать, в кратчайшие сроки, с наименьшими бюджетами.

А если нет, то тут одно из двух. Либо у вас госконтора и попил, и результат никого не волнует, либо же ты просто наркоман, и вместо решения задачи занимаешься онанизмом на красоту коду, и тебя следует привести на обследование в психиатрическую клинику.

lovesan ★★★
() автор топика
Ответ на: комментарий от lovesan

Тебе нужно задачу решать, в кратчайшие сроки, с наименьшими бюджетами.

Поэтому берем жабку/похапе и писяем на лисперов.

Deleted
()
Ответ на: комментарий от Deleted

И просираете сроки на год, менеджер вешается, второй менеджер спивается, половина разработчиков увольняется не выдержал нагрузки работы полгода без выходных по 12 часов, еще четверть увольняется от того что закончили деньги и нет зарплаты, еще четверть сумасшедших допиливает проект еще год, потому что есть мамапапа которые спонсируют, после года увольняются впрочем тоже, СиТиО СЛУЧАЙНО ломает руку, компанию поливают грязью даже заезжие белорусы из минска, а ты сидишь и думаешь у кого бы еще занять денег.

Тру стори, бл*дь, между прочим. Начавшееся с «наймем кучу дебилов на жабкупохапедотнет».

lovesan ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.