Войти
ФлеймФорумПрограммирование

Почему некоторые программисты выбирают Delphi? (184 стр)

Страницы: 1180 181 182 183 184 185 Следующая »
#2745
18:39, 1 июня 2011

кстати про стабильность делфи, предлагаю желающим попробовать определить в уме что выдаст сей код, а потом проверить

{$APPTYPE CONSOLE}
program p;
var
  vA: String;
  vB: String;
function SE: String;
begin
  vA := 'LOVE';
  vB := Copy('KILL', 1, 4);
  Result := 'ALL HUMANS';
end;
begin
  vA := Copy('LOVE', 1, 4);
  Writeln(vA + ' ' + SE);
  Readln;
end.


#2746
18:39, 1 июня 2011

kipar
> В с++ нету свойств.
Синтаксический сахар.
kipar
> Нет нормального RTTI (с созданием объектов по имени класса и прочими радостями)
> Нету GC.
> Нету инициализации строк символами.
> Нету нормальной модульности
> Невероятно долгое время компиляции
На C# пожалуйста. Там всё это есть, в типа-ООП-ассемблере такое не нужно.

#2747
18:41, 1 июня 2011

kipar
> for(std::list<Shape*>::const_iterator p=shapes.begin(), e=shapes.end(); p!=e;
> ++p) {
> (*p)->draw(window);
> }

for( Shape*& p : shapes ) p->draw();
#2748
18:42, 1 июня 2011
foreach (Shape shape in shapes)
    shape.Draw(windows)
Ня.
#2749
18:43, 1 июня 2011

kipar
> В С++ -
> for(std::list<Shape*>::const_iterator p=shapes.begin(), e=shapes.end(); p!=e;
> ++p) {
>   (*p)->draw(window);
> }
for_each (shapes.begin(), shapes.end(), draw);

> А если потом потребовалось добавить какую-то логику, а не неуправляемый доступ к переменным?
Ну так добавь. Что мешает?

> std::string str = "abcde";
Так можно делать. Что не так?

#2750
18:49, 1 июня 2011

CD
KILL ALL HUMANS

Только, я не понимаю почему - расскажите плиз.

#2751
19:21, 1 июня 2011

DevilDevil

Я ещё раз говорю, - наплевать сколько жуёт студия, если проект настолько жирный, что изменения одной строчки ведет к перекомпиляции 100500 файлов, - очевидно требуется рефакторинг, поскольку с проектированием похоже в этом случае бида.  В любом случае, - классы контейнеров и алгоритмов в STL позволяют экономить на порядок больше времени, чем теряется при компиляции по сравнению с дельфи. Пока ты в очередной раз пишешь и отлаживаешь под каждую новую структуру данных - стеки, очереди, хэш таблицы, - я это всё получаю из коробки и уже максимально оптимизированным. А небольшие лайфхаки с объектными функторами и шаблонами - позволяют еще и инлайнить вызовы пользовательского кода из алгоритмов STL же, что очень положительно сказывается на производительности вдобавок.

#2752
19:47, 1 июня 2011

SNVampyre
> Однако, посмотри на другие языки, и поймёшь, что С++ единственный нормальный по синтаксису.
  XDDDDDDDDD
  Не позорься. Если бы в С++ не было шаблонов, то даже тогда он был бы монструозным языком. Но всё меняется, когда приходят они - шаблоны. Либо не используй вообще, либо спотыкайся по сто раз на граблях, которые возникают, когда код немного отличается от того, который ты писал раньше. Тем более, если было это больше месяца назад и ты забыл, как это делал. Сообщения об ошибках заставляют подумать, что произошло что-то, из-за чего компьюте сейчас взорвётся, но на самом деле ты просто забыл постивить const. Как там происходит частичная специализация - где ставить <>, а где нет - постоянно надо смотреть в стравочник, если только не пишешь это каждый день на протяжении полугода. Тогда, согласен, поневоле воткнётся в бошку мёртвым грузом. Такой поциент начинает пытаться заразить своей святой правотой остальных, потому что ему обидно, как же так, я шишки набивал, а кто-то там на джаве кодит и в ус не дует - непорядок!
  Кстати, вот тебе тут же и пример - в посте #2749 неправильный код - третий аргумент должен быть обёрнут либо в mem_fun, либо во что-то подобное (может mem_fun_ref), я уже сам не совсем помню; это ведь функция класса. А слабо, раз уж так зашли в дебри STL, без подглядывания в его исходники написать что-нибудь подобное std::bind2nd?

CD
> кстати про стабильность делфи, предлагаю желающим попробовать определить в уме
> что выдаст сей код, а потом проверить
  Предлагаю желающим... http://www.gamedev.ru/flame/forum/?id=138534&page=5#m67

#2753
19:50, 1 июня 2011

Zefick
> третий аргумент должен быть ебёрнут либо в mem_fun, либо во что-то такое, я уже
> сам не помню; это ведь функция класса.

Третий аргумент может быть объектом класса с переопределенным operator(), т.е., как я сказал выше, - объектным функтором.

#2754
19:55, 1 июня 2011

CD
крута
прям вообще не ожидал
а стало известно почему ошибка получается ?
в новых версиях компилятора повторяется ?

#2755
20:00, 1 июня 2011

Zefick
Ошибки нет. draw - глобальная функция. Раз чел пишет через жопу архитектурно, то ему и разгребать, но в С++ даже для таких есть инструменты.

> без подглядывания в его исходники написать что-нибудь подобное std::bind2nd?
Я даже не знаю что это. И в этом огромный плюс C++, в нём столько библиотек и инструментов, что есть решения даже на те случаи, с которыми ты никогда даже не столкнёшься.
А на счёт справочников, согласен, тоже хорошее преимущество. Вбил в любой поисковик слово, и сразу спек вылез.
Как и у OpenGL тоже.

Вот тоже, кстати, адская вещь bind2nd. Каждый день что-то новое можно узнавать по C++ и каждый раз поражаться безграничности возможностей. Век живи, век учись.

#2756
20:08, 1 июня 2011

CD
> кстати про стабильность делфи, предлагаю желающим попробовать определить в уме
> что выдаст сей код, а потом проверить

Клёво.
Типичное УБ, основанное на отстутвии в стандарте жёстко заданного порядка вычисления аргументов. Даёт приколы на грязных функциях.

#2757
20:11, 1 июня 2011

SNVampyre
> Вот тоже, кстати, адская вещь bind2nd. Каждый день что-то новое можно узнавать
> по C++ и каждый раз поражаться безграничности возможностей. Век живи, век
> учись.

"Уникальные" возможности С++ нужны для того, чтобы решать проблемы, о существовании которых мы даже не подозревали до того, как узнали про эти возможности.

#2758
20:12, 1 июня 2011

>почему ошибка получается?

vA := Copy('LOVE', 1, 4); //выделяет на куче память под строку, и записывает туда 'LOVE'
vA + ' ' + SE             //кладет на стек vA не увеличивая счетчик ссылок и вызывает SE
vA := 'LOVE';             //возвращает память в кучу, записывает в vA указатель на константу
vB := Copy('KILL', 1, 4); //выделяет в куче память под строку, и записывает туда 'KILL'.
                          //при этом выделяется таже самая память, на которую все еще лежит ссылка на стеке
небольшой баг в кодогенераторе конкатенации, в реальности проявляется либо как мусор в строке, либо как AV
>в новых версиях компилятора повторяется ?
текущий статус в трекере Embarcadero - пофиксим в след. релизе

>Типичное УБ, основанное на отстутвии в стандарте жёстко заданного порядка вычисления аргументов
смотри внимательнее

#2759
20:14, 1 июня 2011

SNVampyre
> Ошибки нет. draw - глобальная функция.
(*p)->draw(window);  // O RLY???
  А придрался я это к тому, что случай, когда третий аргумент является функцией класса уже не так легко обработать. Думаю, если бы ты столкнулся с ним на практике (а мне что-то кажется, что ты не сталкивался), то ты бы и не подумал искать нормальное решение, а сделал бы таки свой глобальный функтор. В старом С++ функторы, которые передаются в алгоритмы нельзя было объявлять внутри функции - они должны были входить в гловальное пространство имён.

SNVampyre
> Я даже не знаю что это.
  Ну тогда можешь даже не смотреть - теперь из буста в STL перекочевал boost::bind в полном составе. Только кто мешал сразу его туда вписать, вместо двух костылей (bind1st и bind2nd) остаётся зададкой. Хотя, учитывая, что в STL встроенные функторы в основном либо с двумя аргументами, либо с одним, причина более очевидна. А на функторы, которые может определить пользователь создателям наплевать.
  Я только что уточнил - есть функтор mem_fn(). Исходники его лучше на ночь не читать. Вот что надо приводить в качестве примеров "умного" шаблонокода. А то накалякают каких-то векторов с автоопределением длины и рады. А потом сами же и говорят, что пример, дескать, условный и на универсальность не претендует.

Страницы: 1180 181 182 183 184 185 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.