Re[3]: Метапрограммисты надоели
От: kurchatov  
Дата: 10.10.14 12:04
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, kurchatov, Вы писали:


K>>Какие средства предоставляет буст для отладки метапрограмм?

X>как же ты любишь винить в своей некомпетентности что-то кроме себя =)

? Я вообще-то серьезно спросил, про средства отладки.
Re[21]: Метапрограммисты надоели
От: kurchatov  
Дата: 10.10.14 12:08
Оценка:
Здравствуйте, niXman, Вы писали:

X>дока моцг не заменит, да.


— это идеология всяких говностартапов.
Re[26]: Метапрограммисты надоели
От: alex_public  
Дата: 10.10.14 12:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

_>>Вариант Евгения я уже указал как подправить в точности под ваши требования, хотя на мой взгляд это всего лишь придирка (вообще не принципиально функция-член или отдельная шаблонная функция). Про вариант с record тоже всё работает в соответствие с примерами из описания. То, что при этом внутри реализуется чуть другая логика — это опять же придирка. )

WH>Конструкторы предка не создаёт.
WH>С приватными членами класса не работает.
WH>Фильтрации нет.
WH>...

Конструкторы не создаёт, а в описание к Record такого и нет. ) С приватными членами класса никаких проблем нет. С фильтрацией тоже — я чётко описал как её реализовать. )

А к варианту Евгения уже вопросов нет вроде? )

_>>Ну так реализуется то через макросы, а не пересборкой компилятора. )

WH>В случае немерле это одно и то же. А в случае rust существенно разные механизмы.
WH>Кстати я тут ещё раз на него глянул. До немерлового варианта ему как до пешком луны.

А что там не так? )

Если что, я сам не смотрел и вообще про Rust почти не в курсе. Хотя подумываю попробовать поиграться и с ним... Так сказать сравнить с D, который я уже более менее ощущаю как инструмент.
Re[25]: Метапрограммисты надоели
От: Хон Гиль Дон Россия  
Дата: 10.10.14 12:40
Оценка:
Здравствуйте, niXman, Вы писали:


ХГД>>Как раз это и называется "высокий порог вхождения"

X>думается мне, тут последовательность другая.
X>тот кто только "входит в с++" — вряд ли станет юзать спирит. а тот кто сознательно и объективно выбирает спирит — уже имеет весь необходимый "багаж знаний", чтоб понять о чем простыня размером в *надцать страниц. но это ИМХО, конечно.

Ну это несколько противоречит сказанному в соседних сообщениях — "да какой порог вхождения, достаточно EBNF знать, остальное интуитивно" и "лучше все равно ничего нет".
Если же говорить про конкретную ошибку, то тут не в размере простыни дело. Это, увы, своего рода "задачка на сообразительность". О причине ошибки даже проще догадаться было бы не по той простыне, а по следующему за тем, что я привел, однострочному сообщению об ошибке —

boost/fusion/container/vector/convert.hpp(25): error C2027: use of undefined type 'boost::fusion::detail::as_vector<12>'

Вот только для этого, IMHO, надо хоть как-то представлять общие принципы написания подобных fusion либ. Что автоматически исключает не только новичков, но и просто широкие массы не склонных к метапрограммированию и ковырятельству в потрохах библиотек разработчиков. И я, собственно, не вижу в спирите ничего такого, ради чего стоило бы со всем этим возиться. Разве что задача стать мастером ци-гун является самоцелью.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 10.10.14 13:07
Оценка:
Здравствуйте, kurchatov, Вы писали:

K>Отладка компиляции — это прекрасно. Какие средства предоставляет буст для отладки метапрограмм?


(я тут надеюсь, ты это серьезно спрашиваешь, а не просто троллишь)

boost::mpl::print, BOOST_MPL_ASSERT_MSG вкупе с правильно организованной диагностикой.
(пример использования можно увидеть в конце http://rsdn.ru/forum/cpp/3722136.1
Автор: jazzer
Дата: 02.03.10
)
Рулез последнего в том, что его очень хорошо видно благодаря куче звездочек, и все полотенце можно смело не читать.

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

Писать метапрограммы надо, вынося обработку ошибок в отдельное место, чтоб компилятор не пытался компилировать заведомо неправильный код и не выносил пользователю мозг тоннами сообщений об ошибках в нем:
http://rsdn.ru/forum/cpp/4530248.1
Автор: jazzer
Дата: 07.12.11
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[17]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 10.10.14 13:07
Оценка:
Здравствуйте, jazzer, Вы писали:

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

J>На этот счет у меня есть специальный одноклеточный "парсер" throw_p, который прекращает парсинг и бросает исключение со всем необходимым (строка, колонка, объяснение).
J>Типа:
double_p | uint_p | int_p | throw_p("number expected")

J>И синтаксические ошибки сразу перестают быть проблемой.

Причём если не хочется, можно даже свой throw_p не писать (хоть он и удобен) — есть готовые qi::eps, operator> и т.п.
Re[27]: Метапрограммисты надоели
От: WolfHound  
Дата: 10.10.14 14:07
Оценка:
Здравствуйте, alex_public, Вы писали:

_>А к варианту Евгения уже вопросов нет вроде? )

Надоело повторять. Всё равно очевидное не признаешь.

_>А что там не так? )

Rust только проверяет синтаксис. А немерле ещё много чего делает.
Прочитай описание. Там полторы страницы на двоих.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[28]: Метапрограммисты надоели
От: alex_public  
Дата: 10.10.14 15:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

_>>А к варианту Евгения уже вопросов нет вроде? )

WH>Надоело повторять. Всё равно очевидное не признаешь.

Имелось в виду с моей поправкой (что реализуем функцию-член через наследование) — тогда даже с вашей дурацкой придиркой всё в точности выходит.

WH>Rust только проверяет синтаксис. А немерле ещё много чего делает.


А что ещё может быть нужно? ) Ну т.е. конечно ещё типобезопасность передаваемых в запрос параметров, но это уже надо схему базы данных и т.п. )
Re[29]: Метапрограммисты надоели
От: WolfHound  
Дата: 10.10.14 15:18
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Имелось в виду с моей поправкой (что реализуем функцию-член через наследование) — тогда даже с вашей дурацкой придиркой всё в точности выходит.

Наследование не работает. Я тебе это показал.

_>А что ещё может быть нужно? ) Ну т.е. конечно ещё типобезопасность передаваемых в запрос параметров, но это уже надо схему базы данных и т.п. )

https://github.com/rsdn/nemerle/wiki/SQL-macros
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: Метапрограммисты надоели
От: Dair Россия https://dair.spb.ru
Дата: 10.10.14 15:36
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>абсолютно каждая компания в_которой/с_которой мне приходилось работать — использовали boost. так что я хз, о чем ты...

У меня ровно обратное — ни в одной компании boost не использовали.
Re[6]: Метапрограммисты надоели
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 10.10.14 16:00
Оценка:
Здравствуйте, Dair, Вы писали:

X>>абсолютно каждая компания в_которой/с_которой мне приходилось работать — использовали boost. так что я хз, о чем ты...

D>У меня ровно обратное — ни в одной компании boost не использовали.

Более того — есть конторы где явный запрет использовать в продакшне либы навроде буста.
Re[18]: Метапрограммисты надоели
От: jazzer Россия Skype: enerjazzer
Дата: 10.10.14 17:47
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

J>>Типа:
double_p | uint_p | int_p | throw_p("number expected")

J>>И синтаксические ошибки сразу перестают быть проблемой.

EP>Причём если не хочется, можно даже свой throw_p не писать (хоть он и удобен) — есть готовые qi::eps, operator> и т.п.


Если честно, я не знаю, как из eps достать позицию. Поэтому и написал свой парсер.
Т.е. примерно понятно, как это сделать в классическом спирите, там в действие приходит пара итераторов, а как с qi — не знаю, там же атрибут приходит.
Я просто основную массу своих парсеров написал на классическом, второй вышел слишком поздно, у меня на нем пара парсеров всего.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[19]: Метапрограммисты надоели
От: Evgeny.Panasyuk Россия  
Дата: 10.10.14 18:42
Оценка: 2 (1)
Здравствуйте, jazzer, Вы писали:

J>Если честно, я не знаю, как из eps достать позицию. Поэтому и написал свой парсер.

J>Т.е. примерно понятно, как это сделать в классическом спирите, там в действие приходит пара итераторов, а как с qi — не знаю, там же атрибут приходит.

И не нужно доставать (насколько я представляю, они и не передаются в семантическое действие) — expectation parser сам кинет исключение expectation_failure, в котором есть пара итераторов и what_ (которое зависит от .name правил). Можно исключение самому ловить, а можно просить Spirit через on_error. Причём там даже можно восстановится после ошибки и продолжить разбор.

Для примера выше, будет что-то типа:
double_p | uint_p | int_p | (eps > eps(false))
// или
eps > (double_p | uint_p | int_p)
// или
previous_parser > (double_p | uint_p | int_p)

Полный пример тут — Mini XML Error Handling.

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


Кстати, а мне задачи парсинга вообще редко попадаются, но Spirit использую без проблем.
Re[30]: Метапрограммисты надоели
От: alex_public  
Дата: 10.10.14 21:39
Оценка: +2 -1
Здравствуйте, WolfHound, Вы писали:

WH>Наследование не работает. Я тебе это показал.


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

1. Вообще то изначально говорилось просто про функцию-член, а не члена некого абстрактного интерфейса, так что классический вариант примеси (mixin) на C++ отлично работал.

2. Но если захотим и абстрактный интерфейс использовать, то тоже абсолютно никаких проблем. Я не понял откуда ты взял тот бредовый код с наследованием структурки (а не примеси) от интерфейса. Вот нормальный пример:
Значит имеем некий интерфейс:
struct IHash{ virtual int GetHash()=0; };

и некий класс, которому мы хотим добавить автоматическую реализацию этого интерфейса:
struct Person{
    string name;
    int age;
    bool sex;
};

Ну так это будет банально выглядеть так:
struct Person: public HashImpl<Person>{
    string name;
    int age;
    bool sex;
};
void PrintHash(IHash* h) {cout<<h->GetHash()<<endl;}

Person p;
PrintHash(&p);

где реализация является тривиальным
template<typename T> struct HashImpl: public IHash{
    int GetHash() override {/* здесь код Евгения */}
};


3. Самое забавное, что это далеко не единственный способ. Можно ещё и по другому добавлять. Например самый банальный способ будет таким:
struct Person{
    string name;
    int age;
    bool sex;
    declare_hash;
};

с реализацией вида
#define declare_hash int GetHash() {/* здесь код Евгения */}


Опять же ровно одна дополнительная строка в классе (как и в D или Nemerle). Так что не вижу вообще никаких проблем в данной области. Собственно я вообще считаю глупым придирку по поводу функции вместо функции-члена, т.к. в целом речь была о другом. Но даже эта придирика у вас не вышла.

А особенно это всё забавно на фоне того факта, что на C++ действительно недоступно множество возможностей МП, которые есть в D/Rust/Nemerle. Но вы в них почему-то не попадаете никак — похоже привыкли демонстрировать превосходство Nemerle над совсем унылым C#, а не над C++.)))

_>>А что ещё может быть нужно? ) Ну т.е. конечно ещё типобезопасность передаваемых в запрос параметров, но это уже надо схему базы данных и т.п. )

WH>https://github.com/rsdn/nemerle/wiki/SQL-macros

О, а вот передача параметров в запрос по имени локальной переменной — это действительно выглядит классно. В C++ библиотечке для работы с БД аналогичное делается только по порядку, что значительно менее наглядно. Про проверку синтаксиса я вообще не говорю. )))

Да, а вот на D думаю без проблем делается нечто похожее, хотя готовых реализаций не видел.
Re[8]: Метапрограммисты надоели
От: Ночной Смотрящий Россия  
Дата: 10.10.14 22:09
Оценка: :)
Здравствуйте, Patalog, Вы писали:

P>Дык keep comments же? Ставищ коммент. типа //blah-blah и потом find ...


21 век, фигли ...
Re[7]: Метапрограммисты надоели
От: niXman Ниоткуда https://github.com/niXman
Дата: 10.10.14 22:27
Оценка: :)
Здравствуйте, Ikemefula, Вы писали:

I>Более того — есть конторы где явный запрет использовать в продакшне либы навроде буста.

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

спасибо, очень жду ваш список конторок.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: Метапрограммисты надоели
От: Mna 404 and heavy formation
Дата: 10.10.14 23:15
Оценка: :)
Здравствуйте, niXman, Вы писали:

K>>Какие средства предоставляет буст для отладки метапрограмм?

Браво, хороший вопрос! )

X>как же ты любишь винить в своей некомпетентности что-то кроме себя =)


<психоанализ мод он>Парень спросил про буст, а ты подумал что раз очевидно что это должен делать язык и рантайм,
но рантайм не может по определению, то значит в языке С++ такое невозможно —
следовательно упоминание конкретно про буст была нападка.
А ведь это серьезный вопрос.
<психоанализ мод офф>

Действительно: С++ такого не может. Жаль, и мне нравится С++ тоже, но это так.

---
Я всегда говорю: хотите узнать насколько готова среда для реальной настоящей работы, а не исследовательской
или поиграться — посмотрите для этого какие есть средства для отладки в этой среде.
Потому что в реальной жизни всегда есть реальные проблемы, т.е. трудные. Если есть отладчик,
значит тут кто-то был до нас и сделал как надо для работы для решения проблем. а не выпендрежа.
Особенно хорошо если это кто-то был из разработчиков ядра системы, и встроил концепции глубоко и правильно,
а не для собственного прикола, как в данном случае со Страуструпом случилось.

Вот например в Common Lisp-e макрос отладить можно с помощью функций macroexpand и macroexpand-1.
Видно, что лисп сделан как "программируемый язык программирования" (это его мотто).

Те, кто хотят работать с С++ом на этом уровне берут OpenC++ и т.п. вещи, допиливают для себя, делают из
него инструменты, пытаются коммерциализировать (сипровер весь хабр заспамил), и все равно не дотягивает,
и в итоге то что в "лиспах" есть из коробки и в его ядре, в других языках чаще всего недоступно вообще никак.
Re[5]: Метапрограммисты надоели
От: Mna 404 and heavy formation
Дата: 10.10.14 23:27
Оценка: -1 :)
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Mna, Вы писали:


C>>>Ну так в LISP уродливо всё остальное.

Mna>>Есть претензии к Common Lisp кроме скобок?
C>Отсутствие типов, отсутствие нормального синтаксиса и т.п.

Скобки для лиспа и синтаксис это одно и то же.
Это преодолевается таким образом:
на самом деле я думаю Питон взял отступы из Лиспа, ведь там дописывают закрывающие скобки
автоматом в среде, а открывают перед каждым нужным новым keyword-ом, и учитывая отступы по вложенности,
то есть получается как в Питоне, но без обязаловки с отступами.
ну то есть это в принципе нормально. среда рулит.

Остаются динамические типы против статических.
Тут сказать нечего: программисты бывают двух типов.
1 выбирающие мощь и свободу, или
2 выбирающие ограничения и призрачную надежду.
Ограничения в виде барьеров лишних объявлений, и инквизиции статических проверок компилятора,
с надеждой что такой язык/компилятор себя окупит в среде масс корпоративных программистов, которые согласно обычаю
не проверяют ни типов и не пишут никогда тестов, согласно тому же обычаю.
Их девиз "компилируется значит работает"
Re[6]: Метапрограммисты надоели
От: alex_public  
Дата: 10.10.14 23:40
Оценка:
Здравствуйте, Mna, Вы писали:

Mna>Остаются динамические типы против статических.

Mna>Тут сказать нечего: программисты бывают двух типов.
Mna>1 выбирающие мощь и свободу, или
Mna>2 выбирающие ограничения и призрачную надежду.
Mna>Ограничения в виде барьеров лишних объявлений, и инквизиции статических проверок компилятора,
Mna> с надеждой что такой язык/компилятор себя окупит в среде масс корпоративных программистов, которые согласно обычаю
Mna> не проверяют ни типов и не пишут никогда тестов, согласно тому же обычаю.
Mna> Их девиз "компилируется значит работает"

А можно озвучить мощный и свободный язык программирования, который позволит мне осуществлять сложную фильтрацию в реальном времени FHD/4K видео? )
Re[7]: Метапрограммисты надоели
От: Mna 404 and heavy formation
Дата: 10.10.14 23:51
Оценка: :)
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Mna, Вы писали:


Mna>>Остаются динамические типы против статических.

Mna>>Тут сказать нечего: программисты бывают двух типов.
Mna>>1 выбирающие мощь и свободу, или
Mna>>2 выбирающие ограничения и призрачную надежду.
Mna>>Ограничения в виде барьеров лишних объявлений, и инквизиции статических проверок компилятора,
Mna>> с надеждой что такой язык/компилятор себя окупит в среде масс корпоративных программистов, которые согласно обычаю
Mna>> не проверяют ни типов и не пишут никогда тестов, согласно тому же обычаю.
Mna>> Их девиз "компилируется значит работает"

_>А можно озвучить мощный и свободный язык программирования, который позволит мне осуществлять сложную фильтрацию в реальном времени FHD/4K видео? )


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

А ежели ты про то, что статические ограничения особенно увеличивают производительность, я считаю что пример Haskell-а, самого органичивающего показывает, что ограничения не спасают, и все равно получается медленно.
Или например С++, его "метапрограммы" жутко медленно компилируются.

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