Форум: "Потрепаться";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
ВнизОдна знакомая девушка... Найти похожие ветки
← →
Kerk (2004-01-08 12:01) [0]...пишет так:
var
a: PDWORD;
begin
GetMem(a,4);
a^ := 123;
MyProc(a); //procedure MyProc(abc: PDWORD);
FreeMem(a,4);
end;
Как ей объяснить, что это криво???
П.С. Ее основной аргумент: "Главное работает!"
← →
Ломброзо (2004-01-08 12:02) [1]Все бы так мыслили, как эта девушка...
← →
Kerk (2004-01-08 12:03) [2]
> Ломброзо © (08.01.04 12:02) [1]
> Все бы так мыслили, как эта девушка...
???
← →
NeyroSpace (2004-01-08 12:04) [3]А зачем делать работу компилятора?
← →
SPeller (2004-01-08 12:05) [4]А ты ей покажи что можно записать всё это как
var A: DWORD;
A := 123;
MyProc( @A );
И пусть она попробует написать программу, скажем, тестирующую какую-нибудь своим методом и этим. И потом она сама поймёт как надо писать.
← →
Kerk (2004-01-08 12:10) [5]
> SPeller © (08.01.04 12:05) [4]
> А ты ей покажи что можно записать всё это как
>
> var A: DWORD;
> A := 123;
> MyProc( @A );
>
Так показывал я уже! Не помогает! Говорит: "Главное работает!"
Просто она уже привыкла так писать... :(
> И пусть она попробует написать программу, скажем, тестирующую
> какую-нибудь своим методом и этим. И потом она сама поймёт
> как надо писать.
У меня была такая идея, но я так и не придумал, какую программу нужно написать, чтобы разница заметна стала. :(
← →
Nikolay M. (2004-01-08 12:15) [6]
> GetMem(a, 4);
Имхо, можно налететь на грабли, поэтому лучше, наверное, делать как
GetMem(a,sizeof(PDWORD));
А вообще - если человек (тем более девушка!) понимает, что делает, то мой респект. Хотя возня с указателями на C больше смахивает, так что если эта привычка у нее именно из сей взялась, то у меня нет слов :)
← →
Kerk (2004-01-08 12:17) [7]
> Nikolay M. © (08.01.04 12:15) [6]
> Имхо, можно налететь на грабли, поэтому лучше, наверное,
> делать как
> GetMem(a,sizeof( PDWORD));
GetMem(a,SizeOf( DWORD));
:)
← →
LaidBack (2004-01-08 12:17) [8]Точнее так:
GetMem(a, sizeof(DWORD));
← →
SPeller (2004-01-08 12:17) [9]А довод что никто так не делает помогает?
← →
Kerk (2004-01-08 12:20) [10]
> SPeller © (08.01.04 12:17) [9]
> А довод что никто так не делает помогает?
Этот довод и меня бы врядли повлиял... :))
← →
SPeller (2004-01-08 12:21) [11]Покажи ей VCL, скажи что её писали спецы из Borland, и ничего похожего на её стиль нет. Расскажи что выделением памяти занимается компилятор и высвобождением тоже, и ему лучше извествно когда лучше всего выделить и освободить её, и что он не ошибится с количеством выделяемой памяти. На довод "работает ведь" скажи что 7-колёсный велосипед тоже поедет, но нафига столько колёс?
← →
Kerk (2004-01-08 12:30) [12]
> SPeller © (08.01.04 12:21) [11]
Попробую...
> И пусть она попробует написать программу, скажем, тестирующую
> какую-нибудь своим методом и этим. И потом она сама поймёт
> как надо писать.
А насчет этого мысли есть?
← →
Nikolay M. (2004-01-08 12:45) [13]
> Kerk © (08.01.04 12:17) [7]
> LaidBack (08.01.04 12:17) [8]
Да, конечно. Торопился почем зря.
Привет девушке :)
← →
Vuk (2004-01-08 12:56) [14]>GetMem(a,SizeOf(DWORD));
New(a);
...
Dispose(A);
← →
LaidBack (2004-01-08 13:09) [15]А не один фиг? Ну хочется ей писать длиннее - пусть пишет! Должны радоваться, что такое может писать, работать все-равно будет одинаково! Может у нее такой устоявшийся стиль программирования, да и вообще, все у них там устроено не так :)
← →
nikkie (2004-01-08 13:32) [16]скажи ей - привыкнет так писать, ее на работу не возьмут.
← →
vidiv (2004-01-08 13:44) [17]А вообще молодец девушка! Нечего сказать! Умеет настоять на своем:))
← →
nikkie (2004-01-08 13:47) [18]>Умеет настоять на своем:)
учитывая, что настаивает-таки на глупости...
1. если Вы потенциальный работодатель - нужен ли вам такой работник?
1. если Вы потенциальный муж - нужна ли вам такая жена?
:)
← →
Игорь Шевченко (2004-01-08 13:53) [19]nikkie © (08.01.04 13:47)
> учитывая, что настаивает-таки на глупости...
Не на такой уж и глупости...
← →
nikkie (2004-01-08 13:59) [20]почему же? в приведенном коде - нет никакого смысла писать 4 строчки вместо 2-х. к тому же с потенциальной утечкой памяти, если в MyProc возникает исключение. а при усложнении кода - большая вероятность еще какой-нибудь программистской ошибки, связанной с выделением-освобождением памяти.
тебе хотелось бы, чтобы в твоей команде появился человек, пишущий подобный код? кто за ним это разгребать будет?
← →
icWasya (2004-01-08 14:02) [21]а правильнее так
var
a: PDWORD;
begin
GetMem(a,4);
try
a^ := 123;
MyProc(a); //procedure MyProc(abc: PDWORD);
finally
FreeMem(a,4);
end;
end;
← →
vidiv (2004-01-08 14:03) [22]Слава богу мой код почти никто не видел, а то засудили бы насмерть наврена:))
← →
y-soft (2004-01-08 14:04) [23]IMHO может это и не так хорошо, что современные языки не любят указатели :(
При правильном и разумном использовании дает невероятную мощь и гибкость. Не отказываться же, например, от ассемблера только потому, что компилятор и сам все сделает. И со встроенным в Delphi менеджером памяти не все так уж и гладко... :)
← →
Игорь Шевченко (2004-01-08 14:06) [24]nikkie © (08.01.04 13:59)
Я бы не стал ориентироваться на конкретный этот кусок при приеме на работу к себе. Бывают куски гораздо хуже. А это мелочи - пару раз премии лишить, все будет, как надо :)))
← →
int64 (2004-01-08 14:16) [25]Премии надо лишать за аргументы типа: "Главное работает!".
← →
vidiv (2004-01-08 14:18) [26]И вообще "Главное работает" - это лозунг не програмера, а админа больше!:)
← →
Игорь Шевченко (2004-01-08 14:24) [27]vidiv © (08.01.04 14:03)
Вот именно, что почти :)
← →
y-soft (2004-01-08 14:26) [28]Премии надо лишать за упорное стремление работать по шаблону - "потому что так все делают". Впрочем - за бездумное экспериментаторство тоже :))
← →
SPeller (2004-01-08 15:22) [29]
> Kerk © (08.01.04 12:30) [12]
Пусть написшет тестирующую программу которая тестирует пользователя на тему, допустим, "Монитор". Ну чтобы пользователь выбирал варианты ответов и всё такое. Желательно с картинками. И замерить объём выделенной программе памяти в начале запуска и в конце.
← →
Игорь Шевченко (2004-01-08 15:23) [30]y-soft © (08.01.04 14:26)
И где золотая середина ? :)))
← →
mrcat (2004-01-08 15:28) [31]>Kerk © (08.01.04 12:01)
>Как ей объяснить, что это криво???
Думаю, наоборот - надо дать премию :) Т.к. некоторые, и не только девушки, понятия не имеют что происходит при, например, Str := "Hi" :)
← →
SPeller (2004-01-08 15:32) [32]
> mrcat © (08.01.04 15:28) [31]
Одно дело иметь представление что и как, а совсем другое - писать компактно, оптимально и надёжно. А описанный автором метод далеко не надёжен, не компактен и не оптимален.
← →
Daemys (2004-01-08 15:34) [33]>y-soft © (08.01.04 14:04) [23]
А особенно шероховатости дельфийского менеджера памяти проявляются при многопоточности. Когда очень много потоков, никакая синхронизация не помогает.
← →
y-soft (2004-01-08 16:21) [34]>Игорь Шевченко © (08.01.04 15:23) [30]
И где золотая середина ? :)))
IMHO от задачи смотреть надо... Впрочем лучшее лекарство - время и рынок, естественный отбор отсеивает вредные мутации, как программ, так и программистов. А еще говорят, что Дарвин был не прав!.. :))
>Daemys © (08.01.04 15:34) [33]
Менеджер памяти Delphi оптимизирован для быстрого выделения небольших блоков памяти. Если вызывать GetMem и FreeMem много и часто, то может возникнуть фрагментация со всеми гадкими последствиями...
← →
Игорь Шевченко (2004-01-08 17:06) [35]y-soft © (08.01.04 16:21)
> естественный отбор отсеивает вредные мутации, как программ,
> так и программистов
Да пока его дождешься, этого естественного отбора :))
Я могу повторить - это не самый страшный кусок кода. Если в процедуре не проиходит штатных исключений, то получение и освобождение памяти необязательно обрамлять в try finally, ну а если в ней access violation случится, то какая разница для неотлаженной программы - останется там память неубитая или нет...
← →
марсианин (2004-01-08 19:04) [36]ИХМО память здесь лучше из стека брать, а не из кучи вызовом кучи вложенных процедур..
подскажи ей что еще можно выделять память при помощи VirtualAlloc :)
← →
PaRL (2004-01-08 19:31) [37]
> Слава богу мой код почти никто не видел, а то засудили бы
> насмерть наврена:))
И без этого засудят ))
← →
SPeller (2004-01-08 19:37) [38]
> подскажи ей что еще можно выделять память при помощи VirtualAlloc
А можно сразу выделить большой кусок и в нём отсчитывать каждый раз смещение.
← →
Юрий Федоров (2004-01-08 20:25) [39]"Главное работает" - это еще не самый плохой аргумент, было и хуже
"а почему так написано?"
"а я пробовала по другому - еще хуже получается"
← →
nikkie (2004-01-08 22:44) [40]>Я могу повторить - это не самый страшный кусок кода.
охотно верю. тем не менее, такой код права на жизнь не имеет.
>Если в процедуре не проиходит штатных исключений, то получение и освобождение памяти необязательно обрамлять в try finally, ну а если в ней access violation случится, то какая разница для неотлаженной программы - останется там память неубитая или нет...
не понимаю, Игорь, почему ты так говоришь. ты всегда строишь дерево вызовов, чтобы убедиться, что в этой процедуре не может возникнуть дерево вызовов? а если ты (или кто-то другой) изменил процедуру так, что она теперь возбуждает исключение - то на надо делать поиск по всему проекту, где эта функция вызывается, чтобы поставить все-таки try-finally? а если компилируется с новой версией сторонней библиотеки или VCL - тут что делать?
"Просто она уже привыкла так писать..." - лучше бы привыкла на автомате try ставить, чем такую чушь писать.
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.02.02;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.011 c