Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-2147
tria
2004-01-21 14:29
2004.02.02
Создать переменную текущего класса.


14-2322
ZDima
2004-01-11 18:21
2004.02.02
Помогите


1-2073
Vik_Mix
2004-01-19 22:44
2004.02.02
Буфер обмена


3-1968
BorisUK
2004-01-09 12:10
2004.02.02
Вопрос принудительного разрыва соединения с RemoteDataModule


7-2393
Kremen
2003-11-14 15:37
2004.02.02
Переключение индикаторов Caps, Num и Scroll





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский