LINUX.ORG.RU

JetBrains MPS 1.0 - финальный релиз системы метапрограммирования


0

0

Компания JetBrains выпустила MPS (Meta Programming System), чья бета-версия горячо обсуждалась на ЛОРе в конце прошлого года. MPS - инновационный подход к разработке ПО, реализующий Language Oriented Programming, парадигму, ориентирующуюся на специализированные языки (DSL). MPS - инструмент, обеспечивающий полный цикл создания и использования проблемно-ориентированных языков на платформе JVM.

Авторы MPS поясняют свою мотивацию:

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

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

Разработка MPS началась в 2003 году как исследовательский проект. С тех пор MPS удостоилась упоминания во многих публикациях, в частности, в статье корифея методологии разработки ПО Мартина Фаулера.

Принципы работы MPS.

Скачать MPS.

>>> Сайт MPS

★★

Проверено: boombick ()

Цкресткрестокапец?

l5k
()

Можно ли разработанные собственноручно DSL встраивать в приложения на других языках (хотя бы те же С/С++) как скриптовый движок к примеру?

skald
()

Перефразируя классиков: "Если у вас есть язык программирования, у вас есть проблема - написать программу. Если у вас есть метаязык, у вас теперь есть две проблемы - написать язык и написать программу" :)

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

Бегло и не читая поглядев скриншоты в туториале почему-то показалось, что это есть не что иное, как литературное программирование Кнута... Это так?

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

> не что иное, как литературное программирование Кнута... Это так?

Впринципе, ничего общего.

satanic-mechanic
()

они всё таки его выпустили...

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

> а чем это лучше ANTLR?

Это совсем-совсем другое. Хотя, для той же сверх задачи.

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

> Можно ли разработанные собственноручно DSL встраивать в приложения на других языках (хотя бы те же С/С++) как скриптовый движок к примеру?

Видимо, после того как напишешь рантайм на С/С++... в общем, не на Яве.

sv75 ★★★★★
()

Саму разработку не качал (качал аналоги других леммингов, объединенных в аналогичные секты, причем в отдельных случаях, в других - речь идет про академические умы), но посмотрел несколько видео-подкастов, вскользь просмотрел 2 статьи М. Фаулера на счет MPS и аналогичного, прочел комментарии, ответы на вопросе здесь, в RuFlash и на хабре. В познаниях мира дошел даже до видеоподкаста F# (в контексте новых технологий и языков) от российских популяризаторов (подкаст, показанный на какой-то там конференции 2009 г. - ложь на лжи, за редким исключением, вроде "Да, это write once - написал один раз, потом фиг разберешь что написал").

И вот что хочу сказать.

1) Автор пытается сделать универсальную GUI-среду-и-систему для создания новых DSL.

2) Пока известны удачные примеры только конкретно заточенных под предметную область DSL - например это язык SQL. Фанатов хаскелей, лиспов, F# и прочего - просьба любоваться и юзать свою мифологию и дальше, не желают зря терять время на религиозные споры).

3) Автор, очевидно, не знает, что в mainstream-программировании, в профессиональной среде, воспитанной на заветах "банды четырех" и других (Фаулер, Эванс и т.д.), существует такая область как объектно-ориентированный анализ. И только не понимая чем отличается объектная модель из объектно-ориентированного анализа от модели из объектно-оиентированного программирования, а так же роли аналитика требований (стандартая вакансия), без понимания что:

- UML-диаграмму можно за минуты нарисовать на доске - сфоткать с доски на сотовый, и выложит в репозиторий - разработка ведется итеративно, от объектно-ориентированного анализа к объектно-ориентированному проектированию и далее к объектно-ориентированному программированию, и опять - уточнили бизнес- и другие требования, сделали доработку по анализу, внесли изменения в проектирования, закодировали новые фичи и возможности.

4) Да, на деле не всегда все так гладко применяется, и особенно это видно, когда Java-архитектор вообще не читал про анализ (нонсенс, но факт), когда аналитики не отвечают требованиям - т.е. в жизни по разному бывает, но это не повод перенимать плохие подходы и не смотреть на мастеров жанра.

5) В современных UML-программах есть возможность вести прямой/обратный инженеринг кода. А при желании помещать диаграммы и в корпоративную Википедию, чтобы документировать процесс разработки (для будущих разработчиков).

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

Закончу мысль.

> И только не понимая ... без понимания что:

- можно было все это придумать. Мало того - вести разработку 6 лет.

Указанные мною методики - ПРИМЕНЯЛИСЬ лично мною на НЕСКОЛЬКИХ фирмах. Универсальный ДАВНО ИМЕЮЩИЙСЯ подход от лучших мировых умов - дает:

1) Универсальность.

2) Гибкость.

3) Довольно высокую быстроту (один из методов оптимизации привел - рисовать вначале, при проработке, диаграммы на доске, потом фотографируешь, это ОЧЕНЬ быстро, дело нескольких минут, подходит для любой летучки и т.п.).

4) Отличную адаптируемость к большинству проектов.

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

Опечатка в:

>И только не понимая чем отличается объектная модель из объектно-ориентированного анализа от модели из объектно-ориентированного программирования

Правильно: что есть модель в объектно-ориентированном анализе, а есть модель в объектно-ориентированном проектировании. Непонимание этого - приводит вот к таким потерям нескольких лет своей жизни, в стремлении заменить апробированное - попыткой изобрести свой велосипед.

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

> Указанные мною методики - ПРИМЕНЯЛИСЬ лично мною на НЕСКОЛЬКИХ фирмах. Универсальный ДАВНО ИМЕЮЩИЙСЯ подход от лучших мировых умов - дает:

> 1) Универсальность.

> 2) Гибкость.

> 3) Довольно высокую быстроту (один из методов оптимизации привел - рисовать вначале, при проработке, диаграммы на доске, потом фотографируешь, это ОЧЕНЬ быстро, дело нескольких минут, подходит для любой летучки и т.п.).

> 4) Отличную адаптируемость к большинству проектов.

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

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

Признаю, что подача материала не совсем подходит для статьи, можно было бы и более постараться.

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

> Автор, очевидно, не знает, что в mainstream-программировании, в профессиональной среде, воспитанной на заветах "банды четырех" и других (Фаулер, Эванс и т.д.), существует такая область как объектно-ориентированный анализ. И только не понимая чем отличается объектная модель из объектно-ориентированного анализа от модели из объектно-оиентированного программирования, а так же роли аналитика требований (стандартая вакансия)

Нубы в треде! Попей-ка лучше пивка, может поймёшь, что ООА -- не более чем странный фетиш, неясно как связанный с большинством предметных областей. И кстати, появился он ещё в 80-ые, культовая книжка по ООА (ООА: моделирование мира в состояниях) является самым завулированным описанием конечных автоматом в мире. А GoF и паттерны -- это, возможно, даже попытка забить на ООА в ом виде, в каком он свормировался классиками к середине 90-ых.

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

> Нубы в треде! Попей-ка лучше пивка, может поймёшь, что ООА...

Абсолютно неверное представление о предмете. Понтованность с пивком применяйте к родным и близким.

EugenyN
()

MPS -- это *полностью* *структурный* редактор. Не все понимают проистекающие отсюда следствия.

Именно:

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

- МПС не умеет (и не шибко-то собирается) парсить вводимые конструкции (исключение -- left & right transoforms)

- я пока что не выяснил, можно ли (и легко ли) для него генерить деревья хотя бы в виде ХМЛ (в котором МПС их хранит)

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

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

Я выясню, можно ли (легко ли) читать/писать MPS-деревья сторонними скриптами, и отпишусь здесь.

И забыл еще сказать, что отладка (хотя бы в рамках перехода на заданную точку МПС-дерева) полгода назад не поддерживалась, и видимо и щас так же.

Еще -- сейчас нет всплывающих подсказок над элементами синтаксиса, хотя я думаю их допилят.

И языки там отнюдь не ограничены явой.

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

> культовая книжка по ООА (ООА: моделирование мира в состояниях) является самым завулированным описанием конечных автоматом в мире

+inf

Вообще, всё ООП кажется беспомощной и затянувшейся попыткой изобрести специальную отрасль математики.

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

>> Нубы в треде! Попей-ка лучше пивка, может поймёшь, что ООА...

> Абсолютно неверное представление о предмете. Понтованность с пивком применяйте к родным и близким.

Господи, нуб ещё и самоуверенный. Извини, что обываюсь нубом, но если бы ты читал про ООА в начале 90-ых, за 15-лет ты бы начал подзревать, а точно ли король в одежде?

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

> Я выясню, можно ли (легко ли) читать/писать MPS-деревья сторонними скриптами, и отпишусь здесь.

Ждёмс с нетерпением.

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

> В познаниях мира дошел даже до видеоподкаста F#

Откуда такие овощи берутся? Знаний по предмету - 0, зато ЧСВ > 9000.

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

> Господи, нуб ещё и самоуверенный. Извини, что обываюсь нубом, но если бы ты читал про ООА в начале 90-ых, за 15-лет ты бы начал подзревать, а точно ли король в одежде?

Хорошо, давайте убедимся, что Вы хотя бы понимаете о чем идет речь.

Вот я написал, а Вы абсолютно не понимаете.

Может сказать, чем отличается объектная модель в объектно-ориентированном анализе от объектно-ориентированном проектировании?

Если не можете, то это все равно что не зная математику утверждать "да не нужны нам знания сколько будет 2 + 2, это давно придумано и абсолютно не нужно лично мне. Я когда-то читал об этой всей математике, мне больше стихи нравятся".

Может ответить на вопрос - в чем отличие, или не можете?

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

Вы математику выучите, тогда и скажите свое мнение.

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

>Можно ли разработанные собственноручно DSL встраивать в приложения на других языках (хотя бы те же С/С++) как скриптовый движок к примеру?

Сейчас это вряд ли возможно. Возможен другой вариант, на основе MPS пишется приложение, в которое встроен кастомный код. В таком случае MPS выступает в качестве платформы.

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

>а чем это лучше ANTLR? Во первых, ANTLR определяет языки при помощи текстовых грамматик, а они могут быть неоднозначными, поэтому, прежде, чем смешивать языки, нужно проверить результирующую грамматику на однозначность. Это невозможно, в случае когда мы хотим смешивать расширения от разных вендоров. (Ну или возможно в системе типа LISP, где синтаксис ограничен S-выражениями).

Во вторых, ANTLR предоставляет только средства определения синтаксиса. MPS, в добавок к синтаксису позволяет определить редактор, систему типов, области видимости, компиляцию и много чего еще.

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

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

>И забыл еще сказать, что отладка (хотя бы в рамках перехода на заданную точку МПС-дерева) полгода назад не поддерживалась, и видимо и щас так же. Сейчас не поддерживается, но отладчик это одна из основных фич, которые мы запланировали в следующей major версии, которая выйдет в начале 2010 года.

solomatov
()

Вообще, по поводу MPS можно посмотреть на мою презентацию: vimeo.com/4844789 Там достаточно подробно объясняется что, как, зачем и почему именно так.

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

>Перефразируя классиков: "Если у вас есть язык программирования, у вас есть проблема - написать программу. Если у вас есть метаязык, у вас теперь есть две проблемы - написать язык и написать программу" :)

Если у тебя есть тонна хлеба, то у тебя есть тонна хлеба. Если у тебя есть тонна зерна, то можно его посадить, вырастить, убрать, частью смолоть, замесить и испечь. Получишь много тонн хлеба и ещё тонну зерна на будущий год :)

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

>Перефразируя классиков: "Если у вас есть язык программирования, у вас есть проблема - написать программу. Если у вас есть метаязык, у вас теперь есть две проблемы - написать язык и написать программу" :)

Не совсем так. Вполне возможен такой юз кейс: вы используете один из базовых языков, например Java и C++, и покупаете/скачиваете опенсорсные расширения, которые добавляют поддержку специфичных областей.

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

Ну вот, пожаловал господин Соломатов :-)

>Читать их несложно, можно просто выдрать из MPS соответствующий код. Делать с этим что-то нетривиально сложно, тк, например, чтобы вызвать систему типов нужно иметь MPS поднятым.

1. Можно ли не выдирая код, а тупым скриптом генерить ХМЛ например (я там видел какие-то жуткие uuid="ff93aee1-bb6b-4865-aa2a-90aab3a00d13" -- их можно для готовых компонентов переписать, а новые генерить "от балды")? Хотя вопрос, строго говоря, должен звучать так "предназначалось ли МПС для этого".

2. Возможны ли параметризованные редакторы? Допустим, я создал на базовом языке class С { Something _if; Something _then; Something _else; }; и хочу, чтобы редактор для *этого* класса выглядел так

_if <<...>> _then <<...>> _else <<...>> _end

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

>1. Можно ли не выдирая код, а тупым скриптом генерить ХМЛ например (я там видел какие-то жуткие uuid="ff93aee1-bb6b-4865-aa2a-90aab3a00d13" -- их можно для готовых компонентов переписать, а новые генерить "от балды")? Хотя вопрос, строго говоря, должен звучать так "предназначалось ли МПС для этого".

Можно. От uuid нам не нужно ничего кроме уникальности. То, что мы используем uuid позволяет нам получить бесплатный ринейм. Все ссылки идут по uuid, а имя это лишь часть представления.

>2. Возможны ли параметризованные редакторы? Допустим, я создал на базовом языке class С { Something _if; Something _then; Something _else; }; и хочу, чтобы редактор для *этого* класса выглядел так

Нет нельзя. Но можно сделать так: вы создаете концепт (конструкцию языка), который расширяет концепт из baseLanguage, и переопределяете его редактор.

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

Я имел в виду конструктор C(Something _if, Something _then, Something _else) и для него хочется сделать редактор вида _if <<...>> _then <<...>> _else <<...>> _end

Или, что почти то же самое, сделать именованные параметры для функций, т.е. для f(int x, int y) *автоматически* получать редактор f( x=<<..>> y=<<..>>)

Все это примеры параметрических редакторов.

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

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

> Нет нельзя. Но можно сделать так: вы создаете концепт (конструкцию языка), который расширяет концепт из baseLanguage, и переопределяете его редактор.

Я почему завел речь про скрипты -- я собирался скриптами создавать эти самые новые концепты (а точнее, редакторы концептов) по своим классам/функциям/... из солюшена.

Но может я не так подхожу к делу, и можно сразу определить *параметрический* концепт, (а точнее, концепт с параметрическим редактором) в котором то, что в обычном концпте есть константы и вбивается ручками, создавалось бы по инфе из солюшена?

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

> Перефразируя классиков: "Если у вас есть язык программирования, у вас есть проблема - написать программу. Если у вас есть метаязык, у вас теперь есть две проблемы - написать язык и написать программу" :)

2-я проблема -- написать язык -- на самом деле гораздо серьезнее. В нее входит еще и "читать язык", и "обучать языку", и "обеспечить однозначность языку".

Лично я собираюсь, чтобы 2-я проблема практически не возникала за счет параметризации, а предварительные свои решения попробовать потестить на МПС.

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

> Может сказать, чем отличается объектная модель в объектно-ориентированном анализе от объектно-ориентированном проектировании?

Модель ООА отражает предметную область и / или требования к системе (наблюдал оба мнения). Модель ООП третий этап после ООД, и представляет собой проекцию ООД на реалии технологии (вдруг решили кодить на Си). Это воззрения до UML. В UML всё смешалось: например, диаграмма прецелентов на этапе от отличном от анализа слабо применима, если я не ошибаюсь. А диаграмма псоледовательнойтей многогранна и может использоваться на любых (для разных сущностей).

> Вы математику выучите, тогда и скажите свое мнение.

Вы часом не считаете, что баззворды и треды в программировании имеют такую же незыблемость, как формальная математика? Если так, то я хотел лы воздержаться от дискуссии, поскольку таких людей видел и спорить с ними бесполезно -- они уверены, что прочитанное ими в книжке очередных мессий от ООП/UML/DSL/whatever незыблемо и вечно, а всё остальное есть ересь, и своей головой думать не хотят категорически. Пока вы сильно смахиваете на одного из них

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

> Вы часом не считаете, что баззворды и треды в программировании имеют такую же незыблемость, как формальная математика?

Хотя ответ на сам вопрос ясен, тем не менее вопрос имеет смысл. Я считаю, что выбор технологии программирования может базироваться на минимизации некоторых объективно определенных метрик, полезность которых, конечно, несколько субъективна, но принимается многими.

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

>Я почему завел речь про скрипты -- я собирался скриптами создавать эти самые новые концепты (а точнее, редакторы концептов) по своим классам/функциям/... из солюшена. Я бы это делал не сторонним скриптом, а просто запустил бы код изнутри MPS.

>Но может я не так подхожу к делу, и можно сразу определить *параметрический* концепт, (а точнее, концепт с параметрическим редактором) в котором то, что в обычном концпте есть константы и вбивается ручками, создавалось бы по инфе из солюшена? Теоретически это возможно, можно создать дерево ячеек руками, просто возвращая соответствующий объект, но это API не документировано.

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

Оставив в стороне субъективные предположения о роли собеседника в этом мире, :) и раз Вы все прекрасно знаете тогда скажите - не является ли MPS - GUI-системой построения классов в коде?

Поясню свою мысль. Создадим в проекте объекты Дом, Река, Дерево. Можно ли сказать, что мы только что описали некоторую предметную область - в нашем основном проекте?

Теперь: можно ли сказать, что таких предметных областей - мы достаточно легко можем включать в проект - десятками?

Можем ли мы параметризовывать, запросто, конструкторы таких классов, перегружать конструкторы?

Выносить такие классы - в подсистемы или в отдельные фреймворки?

Запросто делать рефакторинги (возьмем "Поднятие метода") силами IDE - буквально за секунду?

И не является ли MPS - попыткой строить эти классы "силами" GUI?

MPS позиционируется в роли как раз "универсального" способа построения DSL, для проекта. Не проще ли, и гораздо эффективнее - классами?

Теперь возьмем DSL SQL. Вот нужно было людям создать язык для хранения в реляционных системах данных - хорошо. Создали стандарт (потом стали выпускать новые версии стандарта). Создали сначала неудобное маппирование в виде EJB 2, потом - более удобное маппирование в виде EJB 3.0 и Hibernate. "Оснастили" в базах данных все это дело - хранимыми функциями и процедурами. - Т.е. полную инфраструктуру создали, для этого DSL.

И каким боком, как тут "всунуть" MPS - ?

Ну вот каким?

И что я не правильного написал, в своем тексте? Ну вот что? :)

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

>MPS позиционируется в роли как раз "универсального" способа построения DSL, для проекта. Не проще ли, и гораздо эффективнее - классами? А как вы определите на ваших классах этот SQL ну или регулярные выражения? Классы это своего рода очень общий язык, только из-за его общности, для некоторых вещей им тяжело пользоваться.

>Теперь возьмем DSL SQL. Вот нужно было людям создать язык для хранения в реляционных системах данных - хорошо. Создали стандарт (потом стали выпускать новые версии стандарта). Создали сначала неудобное маппирование в виде EJB 2, потом - более удобное маппирование в виде EJB 3.0 и Hibernate. "Оснастили" в базах данных все это дело - хранимыми функциями и процедурами. - Т.е. полную инфраструктуру создали, для этого DSL. А что если вам захотелось сделать что-то кастомное для EJB QL, например добавить новую функцию, или в запросах лезть не только в базу, но и в текстовый индекс. И как вы расширете это QL? Без MPS-а никак. С MPS-ом запросто, расширяемость языков это фича MPS-а.

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

> А как вы определите на ваших классах этот SQL ну или регулярные выражения?

Присущие только одной СУБД - SQL-операторы - реализовываем через хранимые функции/процедуры. И так и делается, нет проблем. И с Hibernate это связывается - сам применял, этой зимой. Нет каких-либо принципиальных неудобств. Неудобно маппировать было в EJB 2, сейчас таких проблем нет.

Регулярные выражения по моему активно используются... Если они кому-то для каких-то вещей требуются.

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

Можно конкретный пример? Чем неудобны классы?

> А что если вам захотелось сделать что-то кастомное для EJB QL, например добавить новую функцию, или в запросах лезть не только в базу, но и в текстовый индекс. И как вы расширете это QL? Без MPS-а никак. С MPS-ом запросто, расширяемость языков это фича MPS-а.

Не знаю, использовал EJB QL, можно вызвать хранимую функцию, при чем сейчас все очень удобно - добавляешь несколько аннотаций перед объявлением класса (раньше нужно было в xml-файле описывать). Аннотации, кажется, из JPA использовал, не из Hibernate. Там они дублируются, как бы, но на самом деле - Hibernate это конкретная реализация JPA.

В общем делал, могу Вам пример кода прислать, контекстный, если не верите. :)

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

> Я считаю, что выбор технологии программирования может базироваться на минимизации некоторых объективно определенных метрик,

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

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

> Не проще ли, и гораздо эффективнее - классами?

Класс, видимо, самое крутое, что ты знаешь. Однако непараметризованными классами невозможно решить expression problem, и даже параметризованными она решается так, что лучше и не смотреть на решение :-)

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

>> Не проще ли, и гораздо эффективнее - классами?

> Класс, видимо, самое крутое, что ты знаешь. Однако непараметризованными классами невозможно решить expression problem, и даже параметризованными она решается так, что лучше и не смотреть на решение :-)

Можно постановку конкретной задачи? На примере опишите, что имеете в виду.

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

> Можно постановку конкретной задачи?

Мне однажды прислали тестовое задание, домой, я за минут 7 накатал ответ и отправил обратно.

Описал решение паттернами проектирования и пояснил - какие могут быть еще решения, что лучше и почему.

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

Пробовал доказать, что я согласен на кодера (ну т.е. разработчика).

Не поверили. Сказали что меня это не устроит.

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

:D

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

> Можно постановку конкретной задачи?

Судя по всему, все пошли спать.

Завтра вечером появлюсь, завтра вечером и приводите (а то подумаете что сутки раздумывал, когда там можно дело на 3 минуты обдумывания и 5 минут на описание ответа).

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

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

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