Здравствуйте, VladD2, Вы писали:
VD>Нет, я утверждаю (точнее предпологаю, оставляя поле для сомнения), что на С++ и Ди невозомжно сгенерировать методы нужной сигнатуры по описанию заданному ссылкой на тип.
На D похоже можно, надо будет покопать.
VD>Приведенный макрос делает следующее: VD>1. Разбирает выражения переданные ему в качестве парамтров. VD>2. Находит типы которым соотвествют эти вражения. VD>3. Анализирует эти типы находя публичные конструкторы. VD>4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).
Ну тут невыполнимо только четвертое. Имя функции изменить не получится, но можно использовать одно имя и перегрузку. Генерировать же классы можно и в C++, это у Александреску хорошо описано.
VD>Причем в процессе анализа алгоритм может прийти к выводу, что переданная информация не верна, и выдать осмысленные сообщения об ошибках.
Что меня приятно удивило сейчас в D очень осмысленные сообщения об ошибках, притом для шаблонов тоже.
VD>Теперь почему я считаю, что на Ди и С++ это невозможно в принципе. VD>Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.
У C++ да проблема, D в этом отношении гораздо лучше.
VD>Еще одной проблемой яывляется то, что они не могут добавлять истинно новые желементы в код. Они могут толь гибко растраивать обобщенные методы и типы. А этого не всегда достаточно.
Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".
Re[24]: Как скрестить ужа и ежа или статическую и утиные тип
Ну и? Куда смотреть? Я там вижу только ссылки на high-end звуковые карты начала века которые заявляют что реализуют "аппаратное декодирование MP3". На самом деле практически уверен что "аппаратным" оно является только с точки зрения центрального процессора. На карточке оно всё равно реализовано программно (правда, программка крутится на процессоре, который специально заточен на декодирование аудиоформатов — и может запросто вместо mp3 декодировать wma, ogg и т.п.). Ну а в исходном твоём сообщении вообще говорилось о полностью аппаратном декодировании mp3 в плейере. Вот и стало мне интересно — откуда такая железная уверенность?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, konsoletyper, Вы писали:
K>PS: по поводу математики. Что сложнее написать: yacc или MP3-енкодер? Вот насчёт MP3-енкодера точно сказать не могу, а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#. Зачем же писать современный yacc на asm'е, раз это не такая критичная штуковина.
Ну если есть немерле то yacc не нужен. Вобще. Только под ногами будет путаться.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, eao197, Вы писали:
K>>а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#. E>У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?
Ну если на немерле писать компилятор то там один pattern-matching даст больше... а в немерле есть еще и макросы которыми можно потроха AST'а сгенерить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[11]: Как скрестить ужа и ежа или статическую и утиные тип
Да, в хаскеле работа с типами сделана нииболее грамотно из того что я видел. Если бы при этом сам язык не был бы маньякально функциональным и догматичным...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, FR, Вы писали:
FR>На D похоже можно, надо будет покопать.
Пока что я не вижу как это можно сделать. Ты и те кто пытается извернуться на С++ пытаетесь обойтись обощениями, а это не совсем тоже самое что генерация кода.
VD>>Приведенный макрос делает следующее: VD>>1. Разбирает выражения переданные ему в качестве парамтров. VD>>2. Находит типы которым соотвествют эти вражения. VD>>3. Анализирует эти типы находя публичные конструкторы. VD>>4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).
FR>Ну тут невыполнимо только четвертое.
А треье ты как сделаешь?
FR> Имя функции изменить не получится, но можно использовать одно имя и перегрузку. Генерировать же классы можно и в C++, это у Александреску хорошо описано.
И как ты перегрузкой сделаешь для разных классов фмбрики? Они же могут пересечья. Опять прийдется обобщение адавать не при создании фабрики, а при вызове метода, что как бы уже убивают саму суть фабрики.
FR>Что меня приятно удивило сейчас в D очень осмысленные сообщения об ошибках, притом для шаблонов тоже.
Поглядел я на них (кстати, минут двадцать не мог заставить нормально работать компилятор, в итоге слил все библиотеки и инклюды в тот же тактало, что не есть гуд). Да, это лучше чем С++, но все равно до заданных вручную им далеко:
test.d(14): Error: index -1 overflow for static array
test.d(15): Error: no constructor for SillyMonster
test.d(15): Error: cannot implicitly convert expression (new TR((_param_0),(_param_1))) of type test.SillyMonster
to test.XXX
test.d(72): template instance test.absract!(Soldier,Monster).concrete!(XXX,SillyMonster).create!(XXX).args!(int,i
nt) error instantiating
--- errorlevel 1
VD>>Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.
FR>У C++ да проблема, D в этом отношении гораздо лучше.
Тогда объясни и покажи как это сделать. Лично я вижу улучшенный С++. Да некоторые его технические проблемы решены. Если бы я видел только шаблонное метапрограммирование я бы сказал, что это лучше чем на С++. Но принципиальной проблемы не решено. Полноценного метапрограммирования нет. Причем нет концптуально. Оно снова эмулируется побочными эффектами. Результат получается соотвествующий. Плюс еще голову раком нужно поставить, чтобы понять как сделать хоть что-то. А это уже болезнь аналогичная С++-ной.
FR>Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".
А не проще ли его добавить напрямую, а не через зад?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[42]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, VladD2, Вы писали:
VD>А сколько народа ты еще при этом отвлекаешь от работы...
FR>>В общем держи фабрику, конечно все в статике, но просто. FR>>Теперь убежден что программировать шаблоны в D на порядок проще чем в C++.
VD>Под "все в статике" я правильно понимаю, что реално использовать ее как именно фабрику не удастся?
Почему не удастся удастся, в C++ статическая фабрика вполне нормальная идеома, я например пользуюсь, конечно нужно перекомпиляция, но для некторых вещей вполне удобно. (Ну или некрасиво сделать функцию с switch)
VD>Ну, то есть, можн ли создать перменную которая сначала будет содержать ссылку на одну фабрику, а потом на другую. Так чтобы при ее изменении один и тот же вызов приводил к созданию другого типа объектов?
VD>То есть, как повторить вот этот код:
Нет то что у меня только в статике.
Но такое вполне реально сделать, в C++ есть реализации, от того же Александреску например. Там реально собирается базовый класс:
Здравствуйте, Left2, Вы писали:
L>Ну и? Куда смотреть? Я там вижу только ссылки на high-end звуковые карты начала века которые заявляют что реализуют "аппаратное декодирование MP3".
VladD2 wrote: > C>О тебе, о ком же еще. Кто-то тут же хвалился портабельностью Nemerle. > Портабилность портабильностью, а про Моно я ничего такоего не говорил. > Не надо мне приписывать то что я не говорил.
Понимаешь, портабельность .NET приложений сейчас примерно равна
портабельности Mono (DotGNU не считаем, OK?). Так что, делаем выводы.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[45]: Как скрестить ужа и ежа или статическую и утиные тип
VladD2 wrote: > C>Рекомендую посмотреть XRefactory. Автокомплит оно делает почти 100% > Ага. "Почти" это замечательное русское слово которое можно применять > всегда когда что-то не сделано, но хочется считать, что сделано. > В общем, прмер я привел. Повторяешь его на С++ и показываешь мне > скриншот с чем-то похожим на то что привел я в этом письме > <http://rsdn.ru/Forum/Message.aspx?mid=2312500&only=1>
Сейчас мне абсолютно не хочется ставить обратно Emacs и самому повторять
это все.
> C>надежный, даже с Бустом справляется. Простые рефакторинги там тоже есть. > Ну, да Солтоковцы тоже хвастаются рефакторингом. Только там гарантии > близкие к замене по контексту. > А потом в рефакторинге важна скорость. Если переименование переменной > идет пол минуты, то это уже для работ не принодно.
Переименование там работает секунды. Ну может секунд 10 максимум на
больших проектах.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
VladD2 wrote: > Да, в хаскеле работа с типами сделана нииболее грамотно из того что я > видел. Если бы при этом сам язык не был бы маньякально функциональным и > догматичным...
Знаешь, у меня примерно такие же мысли о Немерле.
"Вот если бы он не был так гвоздями пришит к CLR..."
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
L>>Ну и? Куда смотреть? Я там вижу только ссылки на high-end звуковые карты начала века которые заявляют что реализуют "аппаратное декодирование MP3".
VD>Так hardware MP3 decoder лучше?
Abstract—In recent years, several commercial system-on-chip
solutions for MP3 decoding have been developed. They are
usually built around a specialised RISC processor with an
instruction set suitable for MPEG audio decoding. The purpose
of this project is to evaluate and implement the different parts
of the MP3 decoding without using a processor core.
Проект насколько я понял экспериментальный, выполнен на FPGA.
Изготовлять промышленно чисто аппаратный mp3-декодер — вряд ли разумно. Экономия по сравнению с "specialised RISC processor with an instruction set suitable for MPEG audio decoding" вряд ли будет cущественной, а вот возможности "проапгрейтить" такое устройство (пофиксить баги, добавить поддержку новых форматов) не будет никакой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, eao197, Вы писали:
K>>а вот yacc гораздо проще писать на C#, чем на C. А на Nemerle раз в 10 проще, чем на C#.
E>У вас есть реальный опыт, подтверждающий выделенное утверждение (на счет 10-ти кратного упрощения в Nemerle по сравнению с C#)?
Кстати, да. Правда, с 10 раз — это гипербола, а вот в 3-4 раза — вполне реально, но это только относительно объёма. Относительно удобства могу выразить субъективную оценку "в 10 раз", несмотря на то, что C#-версия насписана в VS, со всеми её достоинствами, а вот Nemerle-версия пока пишется в SciTE. Интересно, во сколько раз возрасло бы удобство, будь интеграция дописанной?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, WolfHound, Вы писали:
WH>Ну если есть немерле то yacc не нужен. Вобще. Только под ногами будет путаться.
ИМХО, это гипербола. Всё-таки лучше для Nemerle написать макрос (встроенный yacc) и юзать его, чем вручную на Nemerle писать лексический и синтаксический анализаторы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[43]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, FR, Вы писали:
FR>>На D похоже можно, надо будет покопать.
VD>Пока что я не вижу как это можно сделать. Ты и те кто пытается извернуться на С++ пытаетесь обойтись обощениями, а это не совсем тоже самое что генерация кода.
В общем это:
Нет, я утверждаю (точнее предпологаю, оставляя поле для сомнения), что на С++ и Ди невозомжно сгенерировать методы нужной сигнатуры по описанию заданному ссылкой на тип.
вроде получается:
import std.stdio;
import std.traits;
import std.typetuple;
void func(A...)(A args)
{
writefln(A.length);
foreach(v; A)
{
writefln(typeid(v));
}
}
template gen(F)
{
alias ParameterTypeTuple!(F) par;
alias func!(par) fn;
}
void tst(int x, int y, float z)
{
}
void main()
{
alias gen!(typeof(tst)).fn f;
f(1, 2, 3);
}
f это фукция сгенерированная по ссылке на тип функции tst
VD>>>Приведенный макрос делает следующее: VD>>>1. Разбирает выражения переданные ему в качестве парамтров. VD>>>2. Находит типы которым соотвествют эти вражения. VD>>>3. Анализирует эти типы находя публичные конструкторы. VD>>>4. Анализирует конструкторы и для каждого и низ создает виртуальный метод CreateИмяТипа(...).
FR>>Ну тут невыполнимо только четвертое.
VD>А треье ты как сделаешь?
Пока вроде никак, но если развить тотже tupleof вполне реально, он сейчас только поля выдает, а надо чтобы и методы. Хотя надо еще ковырять.
Ну а в частных случаях вроде фабрики это разрешимо по другому.
FR>> Имя функции изменить не получится, но можно использовать одно имя и перегрузку. Генерировать же классы можно и в C++, это у Александреску хорошо описано.
VD>И как ты перегрузкой сделаешь для разных классов фмбрики? Они же могут пересечья. Опять прийдется обобщение адавать не при создании фабрики, а при вызове метода, что как бы уже убивают саму суть фабрики.
Надо ковырять.
FR>>Что меня приятно удивило сейчас в D очень осмысленные сообщения об ошибках, притом для шаблонов тоже.
VD>Поглядел я на них (кстати, минут двадцать не мог заставить нормально работать компилятор, в итоге слил все библиотеки и инклюды в тот же тактало, что не есть гуд).
Просто надо еще C++ ихний ставить чтобы линкер и т. п. были доступны.
VD>Да, это лучше чем С++, но все равно до заданных вручную им далеко:
Гораздо лучше. И самый прикол что в D тоже можно вручную задавать. В том моем примере это легко добавить, плюс нужно добавить проверки на то что соответствующий класс является наследником соответствующего интерфейса, и выдачу сообщения об ошибке.
VD>>>Основная проблема тут в том, что эти языки не могут обращаться к компилятору для получения информации о типах. Это резко ограничивает возможности метапрограммировать.
FR>>У C++ да проблема, D в этом отношении гораздо лучше.
VD>Тогда объясни и покажи как это сделать. Лично я вижу улучшенный С++. Да некоторые его технические проблемы решены. Если бы я видел только шаблонное метапрограммирование я бы сказал, что это лучше чем на С++. Но принципиальной проблемы не решено. Полноценного метапрограммирования нет. Причем нет концптуально. Оно снова эмулируется побочными эффектами. Результат получается соотвествующий. Плюс еще голову раком нужно поставить, чтобы понять как сделать хоть что-то. А это уже болезнь аналогичная С++-ной.
В D многие вещи которые в C++ делаются через ж... встроенны в язык, в общем D идет вполне нормальном направлении.
FR>>Это да. Но смотря на некорые вещи в D (tupleof и вообще туплы) кажется что вполне возможно добавить в язык статический "генератор классов".
VD>А не проще ли его добавить напрямую, а не через зад?
Так оно и добавлено напрямую это ключевое слово языка.
Re[28]: Как скрестить ужа и ежа или статическую и утиные тип
Здравствуйте, konsoletyper, Вы писали:
WH>>Ну если есть немерле то yacc не нужен. Вобще. Только под ногами будет путаться. K>ИМХО, это гипербола. Всё-таки лучше для Nemerle написать макрос (встроенный yacc) и юзать его, чем вручную на Nemerle писать лексический и синтаксический анализаторы.
Ручками проще. Я пробовал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[22]: Как скрестить ужа и ежа или статическую и утиные тип
Left2 wrote: > C>Вроде бы в восьмерке это поменяли — стали использовать настоящий EH. С > C>глобальными переменными, вроде бы, все осталось как и было. > Восьмёрка вроде бы толком и не жила — насколько я понял, на 8-ке был > всего один телефон. Совеременный Симбиан это вроде как 9-ка. Они там > вроде бы много чего поменяли в плане бинарной совместимости, секьюрити и > т.п. — но я не нашёл ничего насчёт кардинального изменения API.
Я после одного проекта на семерке теперь при упоминании слов Symbian OS
стараюсь убежать как можно дальше Так что как там теперь — не знаю.
Товарищи по несчастью говорили, что механизм leave'ов теперь у них
дублируется исключениями.
> Ну и опять же — не нашёл никаких упоминаний о том что "STL (Boost, ACE) is > now available on new Symbian platform". http://www.newlc.com/article.php3?id_article=742
A real good news is the move to the new ARM ABI. This may sound like a
joke without a little bit more explanation as this is one of the two
reasons (with the security framework) that are responsible for the
binary compatibility break.
Here are the good news:
— standard C++ RTTI support
— standard C++ exception support
— static data will be allowed in DLLs (not recommended however)
This will definitely ease the porting of existing C++ application on
Symbian OS (take care that you won’t be able to mix exception and the
current Leaves/Trap).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[46]: Как скрестить ужа и ежа или статическую и утиные тип
Зачем мне скриншоты "вообще"?
C>Сейчас мне абсолютно не хочется ставить обратно Emacs и самому повторять C>это все.
Особенно если учесть, что резульат можно предсказать заранее.
C>Переименование там работает секунды. Ну может секунд 10 максимум на C>больших проектах.
10 это уже никода не годно. Да и не верю, я что на больших проектах это будет 10 сек. 5 минут более реальная цифра. Или это будет не точный поиск. Правда сморя конечно что называть большим проектом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.