metaclass: (Default)
[personal profile] metaclass
На тему "зачем нужен reflection и метаданные, если все можно писать вручную в коде".
Это пиздец, граждане. Я подозревал, что есть люди абстрагированные от мира реальной разработки и его проблем, но не подозревал, что настолько.

ссылко 1
ссылко 2

[livejournal.com profile] zabivator и второй персонаж оттуда усиленно убеждают, что ничего этого не нужно, а потом комментом ниже предлагают решения, которые являются ничем иным, как закатом солнца реализацией рефлекшена и метаданных вручную.

Я тут сижу, думаю, как бы это вообще всю эту метаданную жопу вынести на уровень модели и генерить из нее код, затем мержить с написанной вручную нетривиальностью и таким образом избавится от 1000-кратного писания одного и того же кода "база данных->sqlreader->поле объекта->веб-сервис->поле объекта на клиенте->элемент гуя->поле объекта->веб-сервис->поле объекта->sqlparameter->база данных". Потому что у меня за пару дней может база на 3-5 таблиц увеличится, в каждой по 10-20 полей, и это все надо выставить юзеру на редактирование, да еще красиво, с подписями на трех разных языках и чтобы работать можно было и с мыши и с клавиатуры и чтобы не тормозило, и чтобы неправильных данных при всем желании запилить нельзя было.

А народу пофег, как я посмотрю. Нужно конфиг руками читать - читают. Понадобится изменения сделать - будут дописывать case в switch или там if/else и молиться, что остальные команды разработчиков код сохранения не поломают, и что имена будут одинаковые.

Видимо, я что-то в современной софторазработке и принятой в ней эффективности работы отдельных разработчиков не понимаю.

Date: 2009-07-21 01:07 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
> Можно подумать рефлекшн каким-то образом исключает ошибки.

Сравнительно с генерацией исходного кода и его компиляцией -- да, устранение промежуточного звена уменьгшает возможность ошибок.

> с одной стороны, я пропустил слово "возможно", отвлекшись

Принято. Часто с рефлекшеном бывает и довольно корявый код.

> инструментированием байткода, что как бы кодогенерация и есть.

Ну так рефлекшен в Яве как раз кодогенерацией и реализован. Во ирония судьбы.

Date: 2009-08-08 06:49 am (UTC)
From: [identity profile] zamotivator.livejournal.com
Ну так рефлекшен в Яве как раз кодогенерацией и реализован. Во ирония судьбы.
По иронии судьбы, в Алкателе огромный пласт кода на Яве генерируется из DSL'ей.
И там этому подходу лет уже под десяток будет.
Reflection подразумевает обработку структур языка средствами языка.
Т.е. reflection - eDSL.
Плюсовые шаблоны - тоже eDSL
Кодогенерация - это DSL. Это означает, что на входные данные и реализацию генератора не накладывается ограничений, что есть в reflection. Накладываются другие - меппинг семантики и типов не даётся бесплатно, его приходится продумывать. Но с другой стороны, на него можно положить болт, и оставить верификацию сгенерированного кода на совесть компилятора и/или интерпретатора целевого языка.

Date: 2009-08-10 02:42 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
> Reflection подразумевает обработку структур языка средствами языка.

И это очень хорошо. Нет "импеданс мисматч".

> Это означает, что на входные данные и реализацию генератора не накладывается ограничений, что есть в reflection.

А вот это мрак и ужас. Когда программа на одном языке начинает обрабатываться другим... Вспоминается, как запускали написанную под ДОС MS-фортран-программу через компиляцию в Си на солярисе. Конечно не завелась, и пришлось vi делать тупые переделки пару часов.

В конце концов баги будут в кодогенераторах, и вот тут-то я злорадно посмеюсь над попытками найти и исправить баги. То ли в оригинальной программе бага, то ли в генераторе, то ли в целевом компиляторе. Шайтан!!!

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 3rd, 2025 11:01 pm
Powered by Dreamwidth Studios