Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.02;
Скачать: CL | DM;

Вниз

Одна знакомая девушка...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.041 c
14-2270
uw
2004-01-13 23:44
2004.02.02
Нужно спихнуть монитор


4-2435
Aleksandr
2003-11-04 11:33
2004.02.02
Объясните мне, как работать с WaitForMultipleObjects?


3-1987
Юля П
2004-01-08 16:00
2004.02.02
Запрос с группировкой записей


4-2410
Doomin
2003-11-25 15:55
2004.02.02
Запус процесса от имени другого пользователя


1-2122
Evgeniy_K
2004-01-18 11:18
2004.02.02
алгоритм масштабирования одного отрезка в другой