lsiSerg
По поводу фабрик ответил.
>2 -
>Имеется метод тип которого procedure (cl : TChildClass ) of object , т.е. метод принадлежит классу и принимает указатель на класс (НЕ НА ОБЪЕКТ, А НА КЛАСС). Имеется >набор обьектов от данного класс (который держит этот метод, например некий манагер)
>Нужно иметь следующюю возможность:
По поводу замыканий (метод+объект) -
Либо Winnie.Closure, либо boost::function + boost::bind
lsiSerg
я вижу, что ты абсолютно не знаком с Дельфийским отладчиком. Отладка в Дельфях - это отдельная тема.
>Недостатки отладки в делфях:
>1 - Задрачивает делфийский оптимизатор, который частенько убивает переменные , когда они больше не юзаются. Нужно всякие извраты писать, что >бы их значение видить после последнего вызова.
Для такой задачи не нужно писать какой-то код внутри программы. Это делается тремя щелчками и вставкой простейшего условия во встроенном отладчиаке. Всё это занимает 10 секунд.
>2 - После асерта, вобще улет, - локальные переменные не видны, продолжить выполнение кода без вылета невозможно
можно обратиться к памяти и видеть любые данные от символов до сложных структур. Есть ещё Турбо дебаггер, который идёт отдельно.
>3- Отладка потоков и т.д. подобное, я вобще молчу двано в подвал ушло в подвал, в то время когда ся на 101 этаже.
Турбо дебаггер, инспектор отладки, просмотр потоков, протоколирование событий - это не сегодня сделано.
Lakmus
>ещё почему такой код работает:
>
>var
> value1,
> value2 : ^Integer;
>begin
> value1 := value2;
>end.
>
>а такой нет?
>
>var
> value1 : ^Integer;
> value2 : ^Integer;
>begin
> value1 := value2;
>end.
>
>ошибка на стадии компиляции.
Потому что value1 и value2 РАЗНЫЕ типы данных !!!
_Winnie
>Ты полностью напиши парсер, а не просто перечисление букв, тогда поговорим.
я привел ЧАСТЬ парсера, работающего...
Если не писать его исходный код, а исходный код буста тебе не интересен, тебе интересен результат вида:
>bool is_id1 = parse("identifictor7666", (alpha_p >> *alnum_p)).full;
то для того парсера подойдут следующие команды (оговорюсь, что интерпретатор, с парсером естественно, написан не мной, и расчитан на работу с классами)
ExecuteStatement("создать кнопка 10, 20");
ExecuteStatement("переместить кнопка1 100, 150");
ExecuteStatement("изменить текст кнопка1");
ExecuteStatement("создать текстовое поле");
ExecuteStatement("изменить текст текстовое поле1 Привет мир");размер исходника интерпретатора 22 кб
расширение набора команд идет за счет указания ссылки на процедуру обработки этой команды, входное значение процедуры - классовый указатель на базовый класс компанентов (TBase = class...; TBaseClass = class of TBase;) и все...
>CommandProcTable: array[tkMove..tkDelete] of pointer = (@MoveObjectProc, @CreateObjectProc, @DeleteObjectProc);
Расширение набора обрабатываемых классов идет за счет расширения массива:
>ClassTable: packed array[0..(ClassCount - 1)] of TBaseClass = (TBase, TMyBase, TVasia);
З.Ы. что бы опять не втягиваться в спор скажу свое имхо. Делфи заставляет мыслить, а Си - применять стд и бусты...и отбивает процес мышления...
Careless Angel
> Потому что value1 и value2 РАЗНЫЕ типы данных !!!
Ну это понятно что они разные, но такая строгая типизация мне лично очень сильно мешает т.к. приходится юзать Pointer'ы.
Епта.. Снова...
ну нафиг.
C# на порядок круче.
=A=L=X=
не, функциональные заруливают :)
Конишуа
ну конечно же пролог крут, но C# императивнее будет! ;)
Careless Angel
>я привел ЧАСТЬ парсера, работающего...
>Если не писать его исходный код, а исходный код буста тебе не интересен, тебе интересен результат вида:
>bool is_id1 = parse("identifictor7666", (alpha_p >> *alnum_p)).full;
Э, нет. Мне не интересен код библиотеки генератора парсеров.
Но мне интересен код, который его использует.
Давай сюда исходники парсера. Они уместятся в 5000 символов? ;)
На boost::spirit это будет что-то вроде
command_name >> object_name >> *arguments;
>размер исходника интерпретатора 22 кб
Ого! Шото много ;) Delphi - язык для индусов? Уместится как раз в пять постов.
Моя Winnie::Vodka умещается в 15 килобайт целиком. А это не один парсер, это миллионы парсеров!
>Если не писать его исходный код, а исходный код буста тебе не интересен, тебе интересен результат вида:
>bool is_id1 = parse("identifictor7666", (alpha_p >> *alnum_p)).full;
Заметь, я не здесь не просто написал использование готового парсера. Я здесь ещё и определил сам парсер. Настолько коротко и изящно, что ты даже не заметил - alpha_p >> *alnum_p
Не путай библиотеку генераторов парсеров, парсеры, и код который использует парсеры. Это три разные вещи.
>З.Ы. что бы опять не втягиваться в спор скажу свое имхо. Делфи заставляет мыслить, а Си - применять стд и бусты...и отбивает процес мышления...
Смешно... дельфи заставляет быстро НАБИВАТЬ код.
типичный индусский код на дельфи [ code=delphi] Тюк-тюк-тюк, тюк-тюк, пробел, тюк-тюк-тюк-тюк-тюк-тюк-тюк-тюк, enter Тюк-тюк-тюк-тюк, тюк, тюк-тюк-тюк-тюк-тюк-тюк-тюк, пробел, тюк-тюк-тюк-тюк enter PageUP, i : integer, PageDown Тюк-тюк-тюк-тюк, тюк, тюк-тюк-тюк-тюк-тюк-тюк-тюк, пробел, тюк-тюк-тюк-тюк enter PageUP, j : integer, PageDown Тюк-тюк-тюк-тюк, тюк, пробел, тюк-тюк-тюк-тюк-тюк-тюк, тюк-тюк-тюк enter PageUP, k : integer, PageDown PageDown finally Тюк-тюк-тюк-тюк, InFileStream.Free тюк, тюк-тюк-тюк-тюк, pagedown PageDown, OutFileStream.Free PageUP PageUP, k : integer, PageDown PageDown Тюк-тюк-тюк, тюк-тюк, пробел, тюк-тюк-тюк-тюк-тюк-тюк-тюк-тюк, enter Тюк-тюк-тюк-тюк, тюк, тюк-тюк-тюк-тюк-тюк-тюк-тюк, пробел, тюк-тюк-тюк-тюк enter Тюк-тюк-тюк-тюк, тюк, пробел, тюк-тюк-тюк-тюк-тюк-тюк, тюк-тюк-тюк enter Тюк-тюк-тюк, тюк-тюк, пробел, тюк-тюк-тюк-тюк-тюк-тюк-тюк-тюк, enter .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... .... [ /code]
Оправдаем невозможность создания хороших библиотек на Дельфи тем, что от хороших библиотек тупеешь? ;) Хороший аргумент. Но, наоборот, тупеешь от мотонно повторяющихся задач. От того, что накопастишь кучу кода или напишешь 10 раз .Free ты станешь умнее?
Давай сажать баги в программы под предлогом, что их поиск развивает сообразительность.
Хочется brainfuckа - пиши эти бусты и стд сам. Как я ;) А потом получай кайф от удобства и краткости записи. Что понадобилось сменить работу программы - меняешь одну строчку и она уже отвечает новым требованиям.
А потенциал brainfuckа в С++ заложен гораздо больше, чем в дельфи.
Между прочим, эти STD и бусты написаны живыми людьми на самом C++.
С++ хорош тем, что поставленные сложные задачи можно решать. Так, что бы другому программисту было удобно использовать это решение. И не писать в документации "НЕ ЗАБУДЬТЕ ВЫЗВАТЬ FREE! - обнулить переменную, поставить try, создать объект, еще объект, finally, два Free." "Для того, что бы использовать этот мегаконтейнер, сделайте еще один файл, там переопределите три функции и два типа, и включите другой файл при помощи {$I}. " "Запоминайте сами, что вы положили в этот контейнер, кастуйте обратно правильно, когда вытаскиваете объекты". "Для того, что бы сложить два числа, вызовите функцию Vector3DCalculateSum", "осторожно, этот метод аллоцирует внутри себя память", "у нас есть сортировка для целых чисел и для строк, для остальных типов набивайте(тюк-тюк-тюк) сами либо используйте наш IComparator через виртуальные функции", "обязательно унаследуйте ваш класс от этого интерфейса" и тд. и тп.
Конишуа
>не, функциональные заруливают :)
Не, лучше реализовать лисп через жопу на C++.
=A=L=X=
>C# на порядок круче.
Круче даже чем С++/CLI ?
сори, немного пошловато в начале, но без мата.
- Что лучше, мужчина или женьщина?
- Мужчина, потому, что у него писька есть. А ещё он может штангу поднимать.
- Ну, женьщина тоже может, если сильно постараться. Зато женьщина в рот умеет брать.
- Дык мужчина то... тоесть сам я не знаю, конечно, но мне рассказывали...
- Ну-ну...
- А чё, зато мужчина может одновременно пить пиво и смотреть футбол.
- И это всё? А женьщина умеет стирать, гладить, готовить ужин и балтать с подружкой - и всё это одновременно.
- Не ну это, зато женьщина программировать не умеет. И машину водить.
- Да? А мужчина готовить и стирать.
- Умеет мужчина готовить и стирать, не гони.
- Ага, готовить яишницу и стирать свои носки?
- Дык ну и чё, умеет же!
- Ну тогда женьщина умеет программировать и водить машину.
- Не может.
- Может.
- Не может!
- Может!
- Ага, вот так: тюк-тюк-тюк.
- А ты и так не можешь, ламо, иди учись.
- Сам дурак!
- И ваще мужчины все мохнатые, как обезьяны.
- Им это идёт, в отличае от некоторых женьщин. Гыгы.
- Значит ты сам обезьяна!
- Да, я обезьяна и этим горжусь!
- Вот и гордись, а конечный пользователь всё равно будет использовать женьщин.
- Угу, Потому что им будет мужчина! Муахахаха!
И так далее в том же духе. Не надоело ещё?
как там дела с написанием CompileTimeAssert?
_Winnie
> Круче даже чем С++/CLI ?
С# - "нативный" для .NET язык. Сам язык подогнан под структуру .NET, поэтому он вне конкуренции.
_Winnie
вы пьёте? (очём говорит частое упоминание Winnie::Vodka =) )
смотрите - акуратней...
а то завтра припрётесь сюда и начнёте доказыать что в строке
command_name >> object_name >> *arguments;
милион парсеров)))
а так и до беды не далеко)
Тема в архиве.