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)

Если из текста вброса убрать все упоминания LISP, то покатит.

А сам XML — это просто неудачный опыт декларативного языка, который кто-то вовремя забросил на вентилятор.

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

Собственно тезис в том, что Java/C#-программисты пишут на недолиспе, сами того не осознавая. Вместо того чтобы взять нормальный лисп.

lovesan ★★★
() автор топика

А потом приходится эту XML-сранину вычищать за вами, потому что оно с IDE нифига не работает, ошибки пишет как попало, и хрен ты продебажишь всё это.

vurdalak ★★★★★
()

что-то не вижу такого применения XML в своих задачах, можно конечно извратиться, но зачем. У меня с помощью XML часто бывают представлены данные, потом я делаю ООП-обёртку над этими данными, а алгоритмы работы с ними выглядят как некий eDSL. Мб это подходит для бизнес-логики, у меня больше направленность на обработку данных.

pseudo-cat ★★★
()
Ответ на: комментарий от KennyMinigun

А сам XML — это просто неудачный опыт декларативного языка, который кто-то вовремя забросил на вентилятор.

+1

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от KennyMinigun

который кто-то вовремя забросил на вентилятор.

Да так удачно, что до сих пор нет альтернатив. Схема тащит.

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

Да и с IDE работают, если схему предварительно нарисовать.

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

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

убрать все упоминания LISP

Да одного «Любая более-менее крупная программа на ...» уже достаточно, прямо можно было и не упоминать.

i-rinat ★★★★★
()

Да, это все здоро и классно, но зачем? Заяес выносить логику программы в конфиг? Зачем интерпитировать это каждый раз? Ты программу пишешь чтобы конкретную задачу решить или просто чтобы продолжать писать?

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

Когда вас на проекте максимум несколько человек, сроки под завязку, а объем кода, данных и задачи - огромные, волей-неволей начинаешь что-то обобщать.

Когда 100 индусов и времени 10 лет - пиши что угодно, конечно.

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

Где-то платят. А если в закрытом коллективе, то достаточно для одной написать.

turtle_bazon ★★★★★
()

с таким же успехом и yaml

с чего ты взял что бл можно описать в xml?

lisp ясности не вносит сложность не понижает упрощение не вносит

xml это удобное представление структурных данных иногда но это иллюзия полагать что все описано это всего лишь форма представления вложенных данных

что там насчет ссылок и рекурсии?

если бы это было так то экзешник представлял бы xml

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

SQL

а по-моему это говно полное. Придумали это всё в лохматых годах наркоманы.
Лучше б там было как в обычном императивном языке, циклы там явные по данным по таблицам.

Bad_ptr ★★★★★
()

Линукс тут при чём, вендузоид,

anonymous
()

Лучше бы ты дальше на своей ЖЖ-параше сидел.

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

Это чаще фигурирует в пастах про DSL на ХАЧКИЛЕ.

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

XML — это просто неудачный опыт декларативного языка

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

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

А сам XML — это просто неудачный опыт декларативного языка, который кто-то вовремя забросил на вентилятор.

А какой удачный то? XAML?

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

Лучше б там было как в обычном императивном языке, циклы там явные по данным по таблицам.

DBase/Clipper? Ну уж нет...

GAMer ★★★★★
()

Что-то мне кажется, что anonimous — это выкидыш лавсана.

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

Вспомнил, как в Crystalspace 3D можно было игоры целиком на XML писать

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

Ужос... пару раз сталкивался с ХМЛ, и первое что делал при рефакторинге - выпиливал его нахрен. Я не знаю как там во всяких бизнес-приложениях, но за идею задавать параметры числодробилки в ХМЛ-формате надо отправлять на принудительные 6-ти месячные курсы по философии как минимум.

Это же лютый ппц, мало того что от самого ХМл-файла глаза на клаву вытекают, так еще его парсер с биндингами параметров имеет такой же размер как сам файл, если не больше. Для введения нового параметра надо дописать строчку в хидер, 3 строчки в парсер и три строчки в ХМЛ.

Вот за такое я и не люблю Настоящих Программистов;-)

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

DBase/Clipper? Ну уж нет...

Ну почему нет? Если он так хочет, пусть сам трахается с индексами, кэшами, связями, промахами, процедурами и триггерами, оптимизацией, ролями и кучей прочей муйни. Или с пеной у рта доказывает, что всё это не надо...

yyk ★★★★★
()

Что за бред я только что прочитал.

Опытные-Java/C#-программисты(ц)(тм) заворачивают на xml ТОЛЬКО сейвы программы. Весь остальной xml, если он нужен, генерируется и поддерживается дотнетом. Ручками в него лезть нельзя. Да и то те сейвы делает сам дотнет. Программист только функции вызывает.

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

Поделия MS на XML (aka XAML) - на порядки удобнее и юзабельнее.

xaml - самое убогое говно в мире.

Мне кажется, ТС просто толсто троллит и набрасывает.

unt1tled ★★★★
()

Но ведь можно пойти и дальше. Из XML можно вообще-то говоря даже и генерировать модель данных для всей логики системы!

Какое смелое, удивительное открытие! Лисперы как всегда на острие прогресса! смотрит в xml описание модели данных для эрланговской программы, первый коммит в которую был сделан в 2004м.

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

AST можно представить как XML? Как до этого ещё никто не додумался?

А вчера в кубикле, мне преснился чудный сон, как будто я нырнул в код, и он превратился в XML, данные, модели, логика, все из XML, даже небо, даже Аллах!

Бывает.

fmdw
()

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

Начинаешь писать программу, а в итоге получается компилятор.

Жаль не помню эту поговорку дословно.

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

Рядом с ASN1 он выглядит как какашка.

О, биороботы в треде.

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

Для введения нового параметра надо дописать строчку в хидер, 3 строчки в парсер и три строчки в ХМЛ.

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

И потом простым мэйкфайлом дёргать все рассчёты, обработку данных и визуализацию.

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

Для числодробилок просто верхний управляющий слой пишется на питоне. Он же и конфиг, он же и пускач.

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

Пускач, учитывающий изменение/не изменение исходных данных и промежуточных файлов нужно писать ручками, а make уже есть.

fmdw
()

Программировать на разметке

Погодите, погодите. Когда я был моложе XML был языком разметки, то есть способом структурного представления данных, но не программирования. Что такое «интерпретатор XML»? Как на XML написать Hello World? Я отстал от жизни?

Camel ★★★★★
()
Ответ на: Программировать на разметке от Camel

Что такое «интерпретатор XML»?

Почти любая крупная программа на .Net/Java

Как на XML написать Hello World?

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

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF XAML Dialog" Height="350" Width="525">
    <Grid Name="grid1" ShowGridLines="False">
        <Grid.RowDefinitions>
            <RowDefinition Height="23" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Menu Grid.Row="0" HorizontalAlignment="Stretch">
            <MenuItem Header="_File">
                <MenuItem x:Name="mnuExit" Header="Exit" />
            </MenuItem>
        </Menu>
        <TextBox Name="txtBox1" Grid.Row="1" Text="Hello World" Height="23" HorizontalAlignment="Left"
            Margin="135,80,0,0" VerticalAlignment="Top" Width="120" />
    </Grid>
</Window>
monk ★★★★★
()
Ответ на: комментарий от fmdw

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

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

Ну а make нужен для сборки ес-но.

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