Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
ВнизУ кого есть Delphi > XE4, проверьте багу Найти похожие ветки
← →
jack128 © (2014-11-17 15:51) [0]У вас при закрытии программы вылазит, что нить типа такого:
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:
21 - 28 bytes: RunTest$1602398$ActRec x 1
---------------------------
ОК
---------------------------procedure ExecuteAction(Action: TProc);
begin
Action();
end;
procedure DoWork(ACallback: TProc);
begin
end;
procedure RunTest();
var
Callback: TProc;
begin
Callback := procedure begin end;
ExecuteAction(procedure begin DoWork(Callback); end);
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
ReportMemoryLeaksOnShutdown := True;
RunTest();
end;
← →
MBo © (2014-11-17 17:16) [1]XE5 - да
← →
Внук © (2014-11-18 18:17) [2]XE6 - да
← →
Юрий Зотов © (2014-11-19 10:58) [3]Жень, а эти навороты действительно необходимы, или можно обойтись без них?
← →
jack128 © (2014-11-19 11:07) [4]
> Жень, а эти навороты действительно необходимы, или можно
> обойтись без них?
Нет, конечно. Асма достаточно для решения любой задачи.
← →
Юрий Зотов © (2014-11-19 11:13) [5]> jack128 © (19.11.14 11:07) [4]
Жень, я серьезно. Писали же без всех этих фокусов и нужды в них не испытывали. Тут вдруг ты их используешь - то ли это дань моде, то ли действительно необходимость. Вот и спрашиваю - почему?
← →
jack128 © (2014-11-19 11:34) [6]
> Тут вдруг ты их используешь - то ли это дань моде, то ли
> действительно необходимость.
В дельфи я лямбды практически не использую из-за их убогоо синтаксиса.
А конкретный пример, когда я на багу эту наткнулся схематично выглядит так:procedure ProccessItems(ASource: TArray<TItem>; ADest: TItem);
var
SkipException: TFunc<Exception, boolean>;
SkipAllExceptions: boolean;
begin
SkipAllExceptions := False;
// // SkipException определяет продолжать ли копирование элементов, если где то по середине процесса возникло исключение.
SkipException := function (E: Exception): boolean
begin
if SkipAllExceptions then Exit(True);
case MessageDlg("Скипнуть исключение?", [mbYes, mbNo, mbYesForAll]) of
mrYes: Exit(True);
mrNo: Exit(False);
else
SkipAllExceptions := True;
Exit(True);
end;
end;
ProgressForm := TProgressForm.Create(nil);
try
// ExecuteInThreadWithProgress выполняет функцию в доп. потоке и показывает модально окно на время работы этого потока
ExecuteInThreadWithProgress(procedure
begin
CopyItemsRecurse(ASource, ADest, SkipException);
end, ProgressForm)
finally
ProgressForm.Free;
end;
end;
← →
DVM © (2014-11-19 16:45) [7]
> jack128 © (19.11.14 11:34) [6]
> В дельфи я лямбды практически не использую из-за их убогоо
> синтаксиса.
А в делфи есть лямбда выражения? В ветке я вижу только анонимные функции.
← →
han_malign © (2014-11-19 17:25) [8]
> В ветке я вижу только анонимные функции.
- если анонимная функция поддерживает замыкание(то есть является анонимным функтором), то её модно называть лямбдой...
> Callback := procedure begin end;
> ExecuteAction(procedure begin DoWork(Callback); end);
- т.к. в Delphi не очень жалуют статическое размещение - скорее всего старая добрая проблема с зацикливанием перекрёстного счетчика ссылок ...
Неземная страсть у них - ссылку на владельца хранить...
← →
Rouse_ © (2014-11-19 17:33) [9]Jack128 говорит:
> скорее всего старая добрая проблема с зацикливанием перекрёстного
> счетчика ссылок ...
непонятно, с чего бы эта проблема возникла. Callback никаких ссылок никуда не должен хранить.
> А в делфи есть лямбда выражения? В ветке я вижу только анонимные
> функции.
А в чем различия?
← →
Юрий Зотов © (2014-11-19 18:20) [10]А кто-нибудь может привести пример, в котором без всех этих лямбд и/или анонимных функций было бы действительно не обойтись?
← →
Rouse_ © (2014-11-19 18:27) [11]Юрч, это будет практически такойже код, только раздутый раза в четыре
← →
Rouse_ © (2014-11-19 18:28) [12]Зы: и да - токого кода, где не обойтись, никто не приведет
← →
Rouse_ © (2014-11-19 18:43) [13]Jack128 говорит:
> А кто-нибудь может привести пример, в котором без всех этих
> лямбд и/или анонимных функций было бы действительно не обойтись?
Я вроде написал, что > Асма достаточно для решения любой задачи.
Юр, ты какого ответа то хочешь? Любой тьюринг полный язык может решить любую алгоритмическую задачу.
Давай, предложи свое решение procedure ProccessItems(ASource: TArray<TItem>; ADest: TItem); без лямбд, с сохранением читабельности?
← →
Юрий Зотов © (2014-11-19 19:35) [14]> Любой тьюринг полный язык может решить
> любую алгоритмическую задачу
А тогда зачем усложнять язык? Ведь чем он проще - тем читабельнее, это же очевидно.
> это будет практически такойже код, только раздутый раза в четыре
> предложи свое решение
Делаем SkipException обычной функцией, за пределами ProccessItems. Кода столько же и делает он то же самое, а читабельность лучше.
=========================
Вообще, вызов функции с передачей ей коллбэка - задача настолько избитая, что и говорить-то о ней как-то даже неудобно. Разве что упомянуть, что до сих пор она спокойненько кодировалась без всяких лямбд. Причем вполне читабельно и без раздувания кода.
← →
Юрий Зотов © (2014-11-19 19:45) [15]Нет, возможно, у этих лямбд действительно есть какие-то примущества. Может быть они, например, удобнее в отладке, или дают более шустрый/компактный машинный код, или еще что-то. Но что именно?
← →
Rouse_ © (2014-11-19 19:56) [16]
> Юрий Зотов © (19.11.14 19:45) [15]
Юрч, еще раз повторяю. Все что раньше Жека расписал сделать можно и без лямбд, анонимок и шут с ними - замыканий. Просто код раздуется в четыре раза.
В его случае получается достаточно компактная и при этом читаемая функция, выполняющая (если брать оригинальную идею) достаточно размазанный по сути и по логике код.
← →
Юрий Зотов © (2014-11-19 20:06) [17]> Rouse_ © (19.11.14 19:56) [16]
> код раздуется в четыре раза.
С чего? Тот же самый код выносим наружу - чего б ему раздуваться?
← →
Rouse_ © (2014-11-19 20:12) [18]
> Юрий Зотов © (19.11.14 20:06) [17]
> С чего? Тот же самый код выносим наружу - чего б ему раздуваться?
Ну хорошо, меряться - так вай бы и нот?
Напиши аналог этой процедуры (заметь - это всего лишь одна процедура), а там и посмотрим размеры и читабельность :)
Для упрощения будем считать что ExecuteInThreadWithProgress не зупускает отдельную нить.
← →
Ellisium © (2014-11-19 21:35) [19]
> А кто-нибудь может привести пример, в котором без всех этих
> лямбд и/или анонимных функций было бы действительно не обойтись?
>
>
дядь Юр, а приведите код, где невозможно обойтись без классов.
← →
Rouse_ © (2014-11-19 21:39) [20]
> Ellisium © (19.11.14 21:35) [19]
Ох ты и забросил :))))
← →
DVM © (2014-11-19 21:42) [21]
> Rouse_ © (19.11.14 17:33) [9]
> А в чем различия?
В записи.
В лямбда выражении должен присутствовать лямбда оператор (=>, -> и прочее). Вот лямбда выражение: y => y * 2
Синтаксис же анонимных функций в делфи можно лямбда выражениями назвать лишь с натяжкой. Удобства записи никакого, читабельность кода только ухудшает.
← →
Юрий Зотов © (2014-11-19 21:49) [22]Ну, набросал на скорую руку. За абсолютную правильность не ручаюсь, но в данном случае важно показать принцип, а не отсутствие ошибок.
И где тут 4-х кратное разбухание кода?var
ASource: TArray<TItem>;
ADest: TItem);
SkipAllExceptions: boolean;
function SkipException(E: Exception): boolean;
begin
if SkipAllExceptions then Exit(True);
case MessageDlg("Скипнуть исключение?", [mbYes, mbNo, mbYesForAll]) of
mrYes: Exit(True);
mrNo: Exit(False);
else
begin
SkipAllExceptions := True;
Exit(True);
end;
end;
end;
procedure Work;
begin
CopyItemsRecurse(ASource, ADest, @SkipException);
end;
procedure ProccessItems(ASource: TArray<TItem>; ADest: TItem);
begin
SkipAllExceptions := False;
ProgressForm := TProgressForm.Create(nil);
try
ExecuteInThreadWithProgress(@Work, ProgressForm);
finally
ProgressForm.Free;
end;
end;
← →
Юрий Зотов © (2014-11-19 21:57) [23]> Ellisium © (19.11.14 21:35) [19]
> а приведите код, где невозможно обойтись без классов.
Дружище, не надо меня ловить на мякине. Естественно, я прекрасно понимаю, что можно обойтись и без ООП, из без лямбд там всяких. Но ООП дает программисту серьезные удобства (перечислять их, думаю, не стоит, они и без того всем известны). А вот какие удобства дают лямбды - мне непонятно. Зато понятно, что читабельность они ухудшают.
← →
DVM © (2014-11-19 22:02) [24]
> Юрий Зотов © (19.11.14 21:57) [23]
> А вот какие удобства дают лямбды - мне непонятно. Зато понятно,
> что читабельность они ухудшают.
ну некоторые удобства они дают во всякого рода итераторах и компараторах удобно передавать в поток и т.д.
← →
Rouse_ © (2014-11-19 22:02) [25]
> Синтаксис же анонимных функций в делфи можно лямбда выражениями
> назвать лишь с натяжкой. Удобства записи никакого, читабельность
> кода только ухудшает.
Там вообще-то на входе лямбда-делегат, ты об чем? :)
Давай щас еще о разнице в анонимках, лябдах и замыканиях поспорим :)
← →
jack128 © (2014-11-19 22:03) [26]
> Ну, набросал на скорую руку
Юр, отличный код. 3 глобальных переменных для такой простой задачи - это супер, я б так не смог. А если учесть что исходно задача многопоточная - ну так вообще прекрасно.
← →
Rouse_ © (2014-11-19 22:05) [27]
> Юрий Зотов © (19.11.14 21:49) [22]
> И где тут 4-х кратное разбухание кода?
На пьяную голову буянить не буду - просто скажу - этот код не верный. Завтра покажу правильный, в обоих вариантах, с анонимками и без оных :)
← →
Rouse_ © (2014-11-19 22:09) [28]Кстати Жек, а я ж тебе говорил - что эти вещи нужно ввиде статьи выкатывать, ибо столько нюансов, которые с наскоку не понять. А ты все отказывашся...
← →
Ellisium © (2014-11-19 22:11) [29]
> Естественно, я прекрасно понимаю, что можно обойтись и без
> ООП
> А вот какие удобства дают лямбды - мне непонятно
ну дык зачем тогда подменять понятия.
Не стоит ставить вопрос как "приведите пример, когда без лямбд нельзя обойтись". Потому что и без ООП можно обойтись в 100% случаев.
Надо ставить вопрос "Приведите пример, когда лямбды упрощают код", тогда все встает на свои места. Если привыкнуть и свыкнуться - лямбды упрощают в некоторых случаях код, не так масштабно и понятно как ООП и зачастую не в Delphi. И большинство литературы по этой теме на понятно каком языке. Но тем не менее.
Хотя могут и усложнять код и запутывать. Точно также как ООП.
← →
Юрий Зотов © (2014-11-19 22:13) [30]> jack128 © (19.11.14 22:03) [26]
Глобальные переменные пришлось вводить потому, что мне недоступны декларации функций. Тебе они доступны, так что все легко передается через параметры.
Касательно многопоточности - Розыч ее отменил. Хотя и это не проблема.
> Rouse_ © (19.11.14 22:05) [27]
Только не старайся специально раздуть код в 4 раза? OK ?
:o)
← →
Ellisium © (2014-11-19 22:15) [31]Кстати, посмотрите на эволюцию Розыча.
Два года назад Розыч - это "нафига эти лямбды и анонимные функции, ересь".
Розыч сейчас - ну да, штука специфичная, но иногда полезная.
Влияние Жэки налицо )))
← →
Юрий Зотов © (2014-11-19 22:16) [32]> Ellisium © (19.11.14 22:11) [29]
См. [15].
← →
jack128 © (2014-11-19 22:17) [33]
> Глобальные переменные пришлось вводить потому, что мне недоступны
> декларации функций.
дык меняй их как хочешь, как те удобно. Это "твой" код.
← →
Rouse_ © (2014-11-19 22:23) [34]
> Касательно многопоточности - Розыч ее отменил. Хотя и это
> не проблема.
??? Че эта? :)
> Только не старайся специально раздуть код в 4 раза? OK ?
Ок
> Ellisium © (19.11.14 22:15) [31]
> Кстати, посмотрите на эволюцию Розыча.
>
> Два года назад Розыч - это "нафига эти лямбды и анонимные
> функции, ересь".
> Розыч сейчас - ну да, штука специфичная, но иногда полезная.
> Влияние Жэки налицо )))
Ну... Жека это такая специфическая болячка, он весь на IT отдел перетряхнул, причем таким образом, что даже Макс Черных (наш техдиректор), прежде чем говорить что все плохо, сначала уточняет в большинстве случаев у Жеки (а действительно ли оно так) :)
Да что там - я сам практически повседневно консультируюсь у Жеки.
Жека наше все - и здесь я даже не шучу :)
← →
jack128 © (2014-11-19 22:27) [35]
> Это "твой" код.
естественно реюзабельность ExecuteInThreadWithProgress и CopyItemsRecurse - нужно сохранить. То есть сигнатуру ты их можешь менять, но тогда уж ты должен иметь в виду, что они используются в туче мест, и ты должен будешь переписать все эти места типа такого:procedure DoWork2(Arg: TMyArg);
begin
ExecuteInThreadWithProgress(procedure begin DoSamething(Arg); end, OtherForm);
end;
procedure DoWork3(ASource: TArray<TItem>; ADest: TItem; Arg: TMyOtherArg)
begin
CopyItemsRecurse(ASource, Dest, fucntion begin Exit(OtherSkipExсeptionLogic(Arg)) end );
end;
и тд и тп.
ЗЫ. Подумай на фразой:
> Объекты - это замыкания/лямбды для бедных.
← →
DVM © (2014-11-19 22:31) [36]
> Rouse_ © (19.11.14 22:02) [25]
> Там вообще-то на входе лямбда-делегат, ты об чем? :)
Какая разница делегат или нет. Разница в форме записи анонимных функций в языках поддерживающих лямбда выражения и в не поддерживающих (Delphi).
← →
Rouse_ © (2014-11-19 22:35) [37]
> DVM © (19.11.14 22:31) [36]
> Какая разница делегат или нет. Разница в форме записи анонимных
> функций в языках поддерживающих лямбда выражения и в не
> поддерживающих (Delphi).
Я ждал этого :)
Теперь приведи вариянты кода для анонимки, для ламбды и для замыкаминя :)
← →
DVM © (2014-11-19 22:45) [38]
> Rouse_ © (19.11.14 22:35) [37]
> Я ждал этого :)
> Теперь приведи вариянты кода для анонимки, для ламбды и
> для замыкаминя :)
ты ждешь от меня три одинаковых фрагмента кода что ли? :)
второе в делфи не существует как таковое и его запись равна первому и оба они обладают свойством третьего :)
лямбда выражения - это средство записи анонимных функций, специального синтаксиса в делфи не имеют
← →
Kerk © (2014-11-19 22:51) [39]Замыкания более-менее адекватно без натяжек и недомолвок заменить можно только классами. Но код тогда действительно распухнет.
← →
DVM © (2014-11-19 22:56) [40]
> Kerk © (19.11.14 22:51) [39]
> Замыкания более-менее адекватно без натяжек и недомолвок
> заменить можно только классами.
а вот здесь есть замыкание?
function A()
var
x: integer;
function B()
begin
end;
begin
B()
end;
← →
Kerk © (2014-11-20 01:07) [41]Нет, простое обращение к переменным из более общей области видимости - это не замыкание. Это стало бы замыканием, если бы функция A смогла бы вернуть ссылку на функцию B. Но она не сможет.
← →
Eraser © (2014-11-20 02:26) [42]
> Юрий Зотов © (19.11.14 21:57) [23]
оно удобно скорее в FMX, чем в VCL, у андроид-приложений своя специфика работы с модальными и диалоговыми окнами, к примеру. там такой подход сильно упрощает код. ну заодно привинтили к классическому компилятору, почему бы и нет.
← →
han_malign © (2014-11-20 09:02) [43]
> Разница в форме записи анонимных функций в языках поддерживающих
> лямбда выражения и в не поддерживающих (Delphi).
- ествественно в Delphi - не пахнет лямбда-исчислением...
Как и в С++...
Тем не менее даже MS, называет синтаксический сахар для неявного создания функтора - Lambda Expression...
http://msdn.microsoft.com/ru-ru/library/dd293608.aspx
...
Many programming languages support the concept of an anonymous function, which is a function that has a body, but doesn"t have a name. A lambda is a programming technique that"s related to anonymous functions. A lambda implicitly defines a function object class and constructs a function object of that class type. For more information about function objects, see Function Objects.
> Callback никаких ссылок никуда не должен хранить.
- ключевые слова - "не должен"...
Просто - ровно такой же косяк в IE + ActiveX, после цепляния к ActiveX "функции обратного вызова" JScript(IDispatch)...
Все калбяки приходится вручную чистить, чтобы объект прибился(в нужное время).
(проблема с утечкой DOM Node известна с IE6 и продожает жить в IE11)
Для чего уж оно там - может для построения графа зависимостей в целях отладки, или просто чтоб было - это уже отдельный вопрос...
З.Ы.: Возможно если убрать "связывание" через переменную Callback, сделав "прямое вложение" анонимок - то однопроходный Delphi поймет степень локальности функтора...
(я бы поковырялся, да ХЕ у меня под рукой нет)
← →
Ellisium © (2014-11-20 09:50) [44]
> См. [15].
так я то комментировал пост [10]
> Жека это такая специфическая болячка, он весь на IT отдел
> перетряхнул, причем таким образом, что даже
дык я тебе давно говорил, что ты вы даже не понимаете, как вам повезло, что Жэка у вас работает ))
Такой профи и такой скромный :)
← →
jack128 © (2014-11-20 10:33) [45]
> сделав "прямое вложение" анонимок
не, это работает, конечно.
begin
// Callback := procedure begin end;
ExecuteAction(procedure begin DoWork(procedure begin end); end);
end;
так мемлика нет. Но как тут влияет однопроходность компилятора - неясно. Даже однопроходный компилятор в состоянии понять, что Callback не должен держать никаких ссылок.
← →
han_malign © (2014-11-20 11:22) [46]
> Даже однопроходный компилятор в состоянии понять
- единственная, известная мне, оптимизирующая редукция кода в Delphi - это выкидывание методов begin inherited; end;
Всё остальное компилируется как есть - независимо от области видимости и связности объектов...
Издержки толстой унификации...
← →
Rouse_ © (2014-11-20 19:47) [47]
> han_malign © (20.11.14 11:22) [46]
>
> > Даже однопроходный компилятор в состоянии понять
>
> - единственная, известная мне, оптимизирующая редукция кода
> в Delphi - это выкидывание методов begin inherited; end;
>
Это ты за какой компилер говорил? В ХЕ, особливо в старших версиях с компирером вообще беда...
← →
Ellisium © (2014-11-20 19:51) [48]
> В ХЕ, особливо в старших версиях с компирером вообще беда.
> ..
а чем там компилер хуже, чем например в Delphi 7?
← →
Ellisium © (2014-11-20 19:53) [49]а вот то, что какой-нибудь node.js на v8 обгоняет delphi на арифметических операциях - это забавно, конечно.
← →
Rouse_ © (2014-11-20 21:21) [50]
> а чем там компилер хуже, чем например в Delphi 7?
Да тут все просто - компилер уныл по сути и скатывается в яму:
http://kazav.blogspot.ru/2013/05/delphi.html
http://kazav.blogspot.ru/2014/01/delphi-2.html
Непонятно к чему это приведет, с учетом что проект компилера покинул даже последний вменяемый разработчик (который и вводил дженерики, анонимки и прочее).
← →
han_malign © (2014-11-21 09:01) [51]
> Это ты за какой компилер говорил?
- D4-D7 - forever
← →
Ellisium © (2014-11-21 09:39) [52]
> Непонятно к чему это приведет
это уже привело. Сказать эти два магических слова? :)))
← →
DVM © (2014-11-21 10:14) [53]
> Сказать эти два магических слова? :)))
в ветку призывается Пит :)
← →
jack128 © (2014-11-21 10:31) [54]
> в ветку призывается Пит :)
Хм, а Ellisium - это разве не Пит??
← →
Ellisium © (2014-11-21 13:26) [55]jack128, ты кстати node.js не ковырял глубоко? Тебя можно мучать?
← →
jack128 © (2014-11-21 13:28) [56]
> jack128, ты кстати node.js не ковырял глубоко?
Нет. Динамические языки - в топку.
← →
Ellisium © (2014-11-21 13:33) [57]
> Динамические языки - в топку.
а на чем же под веб писать? Не рассказывай только, что под веб не пишешь, вопрос в том, на чем под веб писать ))
← →
junglecat © (2014-11-21 13:44) [58]> а на чем же под веб писать?
на шарпе например
← →
DVM © (2014-11-21 14:20) [59]
> Ellisium © (21.11.14 13:33) [57]
> а на чем же под веб писать?
C# в лице ASP.NET MVC + Web Services - сервер
JavaScript в лице jQuery - клиент
Учитывая последние новости с портированием NET в целом и ASP.NET MVC в частности под линукс эта связка будет только набирать популярность.
← →
DVM © (2014-11-21 14:26) [60]
> jack128 © (21.11.14 13:28) [56]
> Динамические языки - в топку.
TypeScript с легкостью превращает динамический JavaScript в язык со статической типизацией и синтаксисом с привычным человеческим лицом. Разработчик тот же что у C# и Delphi
https://ru.wikipedia.org/wiki/TypeScript
← →
DVM © (2014-11-21 14:35) [61]
> Ellisium © (21.11.14 13:26) [55]
> node.js
я, честно говоря не понимаю. чего все носятся с этим node.js в то время как он даже со всеми оптимизациями является очень медленным по сравнению с IIS а тем более ngnix.
Да что там IIS, вот исходники сервера на Delphi с использованием портов завершения ввода-вывода (IOCP) так node.js в 10-200 раз медленнее его.
https://code.google.com/p/delphi-iocp-framework/
← →
jack128 © (2014-11-21 14:55) [62]
> TypeScript с легкостью превращает динамический JavaScript
> в язык со статической типизацией и синтаксисом с привычным
> человеческим лицом.
Да, typescript - это тема. Я слежу за ним.
> честно говоря не понимаю. чего все носятся с этим node.
Возможно потому что front-end разработчики хотят писать server side, а ничего кроме js не умеют.
← →
junglecat © (2014-11-21 15:02) [63]> front-end разработчики хотят писать server side
мне кажется, что хороший фронтэнд - он же нередко и дизайнер - не захочет писать серверсайд.
А если захочет, то наверняка он знает какой-то серверный язык до кучи
← →
Ellisium © (2014-11-21 15:18) [64]
> он даже со всеми оптимизациями является очень медленным
а я наоборот читал, что он очень быстрый. Один из немногих, который выдерживает проблему 10`000... или я что-то не то читал?
← →
DVM © (2014-11-21 15:38) [65]
> Ellisium © (21.11.14 15:18) [64]
> а я наоборот читал, что он очень быстрый. Один из немногих,
> который выдерживает проблему 10`000
Я чего то не заметил что он быстрый.
https://code.google.com/p/delphi-iocp-framework/
Там есть результаты сравнения.
← →
jack128 © (2014-11-21 16:00) [66]
> Один из немногих, который выдерживает проблему 10`000...
> или я что-то не то читал?
http://habrahabr.ru/post/145796/
← →
Ellisium © (2014-11-21 18:08) [67]Жэк, ну по крайней мере ты же сам приводил примеры как node.js уделывает Delphi по какой-то арифметике...
← →
jack128 © (2014-11-21 18:42) [68]Меня это интересовало в контексте дельфи, а не нода.жс. и то что та нода сделала Дельфи по производительности-это не победа ноды. Это проигрыш Дельфи.
← →
Ellisium © (2014-11-21 19:32) [69]Ну понятно.
В целом, это все обсуждение сферических коней. Тот же PHP, который недоязык, который для хоумпейдж, который для былокодеров. Но вся фишка в том, что есть крупнейшие ресурсы с сотнями миллионов пользователей, которые отлично живут на PHP. Да, там есть специальные заточки, свои фреймворки, свои шаблонизаторы, но тем не менее. И всё это работает на PHP + MySQL с шардированием и прекрасно себя чувствует, причем для определения шарда зачастую используется одна БД, которая всё тянет (в том числе, например, в яндексе так). Так что всё гораздо проще, чем многие думают и зачастую сложнее, чем представляют :)
← →
Rouse_ © (2014-11-21 19:43) [70]Что такое "шардирование"?
ЗЫ: я реально не в курсе.
← →
Rouse_ © (2014-11-21 19:46) [71]ЗЗЫ: я просто в курсе что у Яндекса охрененный такой датацентр в количестве "многа штук", о чем они писали на хабре, но не знал что у них всего одна база данных.
← →
junglecat © (2014-11-21 21:26) [72]> с шардированием
от слова shard - осколок?
← →
DVM © (2014-11-21 22:11) [73]
> Ellisium © (21.11.14 19:32) [69]
> Ну понятно.
>
> В целом, это все обсуждение сферических коней.
Почему сферических? Вполне реальных. Я ж тебе приводил ссылку, там код с примером, запускаешь - видишь как сервер на IOCP быстрее такого же на node.js в 10 раз минимум.
Но быстродействие это ерунда, мало где нужны сотни тысяч подключений в секунду.
Но как скажите мне поддерживать большое приложение на этом чертовом JavaScript. Исключений нет, эти дурацкие коллбеки для мазохистов. Не понимаю я.
← →
junglecat © (2014-11-21 22:41) [74]> на этом чертовом JavaScript. Исключений нет
как нет?
http://javascript.ru/try-catch
← →
DVM © (2014-11-21 23:06) [75]
> junglecat © (21.11.14 22:41) [74]
Не, формально они конечно есть, но пользоваться ими на практике так как мы привыкли не получится. Вместо этого ошибку протаскивают через ворох коллбеков на самый верхний уровень там как то обрабатывают.
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2015.09.10;
Скачать: [xml.tar.bz2];
Память: 0.67 MB
Время: 0.05 c