Почему это чудо написано на Perl'e а не на C++
Модератор: 4epT
Правила форума
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Все вопросы по OK не касающиеся плагинов и макросов публикуются в этом разделе.
Перед тем как что то писать, пожалуйста, удостоверьтесь что данная тема не поднималась, вы полностью изучили мануалы по конфигурационным файлам бота и не нашли там решения.
Почему это чудо написано на Perl'e а не на C++
Собственно сабж ? Сдается мне все тормоза из-за перла происходят. Он все-таки не этих задач предназначен. Из опыта, - не правильно написанный код "вывешивает" сервера не с одной парой процессоров.
Кто-нибудь задумывался переписать на других языках ?! Просто чем больше смотрю код, тем больше убеждаюсь в этом. [b]Извините за оффтоп.[/b]
Кто-нибудь задумывался переписать на других языках ?! Просто чем больше смотрю код, тем больше убеждаюсь в этом. [b]Извините за оффтоп.[/b]
[quote="Kissa2k"]Некоторые чувствительные к производительности части openkore как раз написаны на си (в частности эмулятор padded-пакетов)[/quote]
Вот как раз ЭТО можно и на перле с ЭТИМ он справится, потому как писал демона который принимал, распаковывал, изменял, запаковывал и отправлял .... и обратно. Примерно так ~100000 пакетов в секунду и при том загрузка процессора была меньше 1 (Старая добрая Шапка).
[quote="Kissa2k"]А вообще перл проще - нет утечек памяти[/quote]
Ух ты. Просто за этим не нужно следить, .... но пару не обдуманых движений и УПС извини админ, что ночью сервер не отвечает
[quote="Kissa2k"]нестрогий контроль типов, никаких переполняющихся буферов[/quote]
Согласен, но в С/С++ это проблема порингов (на нашем языке).
[quote="vit"]Переписать?... переписывай. Перепиши ка 5 метров текста на другой язык.[/quote]
В среде С/С++ не способен быть лидером, могу молоток держать ... гвозди подносить. Но опенсорс, он и в африке опенсорс людей знающих и увлекающихся много ... лидеров мало.
В.Высоцкий - "... настоящих буйных мало ... вот и нету мужиков ..."
Вот как раз ЭТО можно и на перле с ЭТИМ он справится, потому как писал демона который принимал, распаковывал, изменял, запаковывал и отправлял .... и обратно. Примерно так ~100000 пакетов в секунду и при том загрузка процессора была меньше 1 (Старая добрая Шапка).
[quote="Kissa2k"]А вообще перл проще - нет утечек памяти[/quote]
Ух ты. Просто за этим не нужно следить, .... но пару не обдуманых движений и УПС извини админ, что ночью сервер не отвечает
[quote="Kissa2k"]нестрогий контроль типов, никаких переполняющихся буферов[/quote]
Согласен, но в С/С++ это проблема порингов (на нашем языке).
[quote="vit"]Переписать?... переписывай. Перепиши ка 5 метров текста на другой язык.[/quote]
В среде С/С++ не способен быть лидером, могу молоток держать ... гвозди подносить. Но опенсорс, он и в африке опенсорс людей знающих и увлекающихся много ... лидеров мало.
В.Высоцкий - "... настоящих буйных мало ... вот и нету мужиков ..."
Re: Почему это чудо написано на Perl'e а не на C++
Смешно. Вам сдается, что тормоза из за перла?QnX писал(а):Собственно сабж ? Сдается мне все тормоза из-за перла происходят. Он все-таки не этих задач предназначен.
1) что за тормоза? где тормоза? что конкретно тормозит?
2) когда кажется - креститься надо, говорит народная мудрость
Вы уж извините за немного грубоватый тон, но в вашем посте нет ни обозначенной проблемы, ни каких либо уточнений почему это именно так.
А между прочим, в ОК есть встроенный бенчмарк, который показывает сколько времени затрачивает каждый блок.
Вы его смотрели?
Хаха, забавные дискусии разводите тут, пахнет (даже воняет) троллингом. Давайте трезво оценем факты, язык программирования для своего проекта выбирает автор исходя из личных предпочтений, степени владения им, требованиями проекта например зачем писать веб-приложения на си или даже asm, когда с помощью php это делается гораздо проще и быстрее (хотя и менее производительно). Спорить какой язык лучше - это глупо и ничего не изменит, любите OK такой какая она есть =^_^=.
[quote="Kissa2k"]любите OK такой какая она есть[/quote]
Я же очень .... респект и низкий поклон авторам ... первый раз за несколько лет игры дополз до 90+ лвл соло. Еще раз им респект ! Так же как Клику и Пирожку .... и всем остальным.
[quote]Смешно. Вам сдается, что тормоза из за перла?
1) что за тормоза? где тормоза? что конкретно тормозит? [/quote]
Очень просто хотя бы при телепорте (читать смена локации) - будете спорить, что есть тормоза ?! А сдается мне потому что он после этого перечитывает все подряд, начиная с места появления ... через статы и скилы ... и заканчивая окружающим(щими)
[quote]2) когда кажется - креститься надо, говорит народная мудрость[/quote]
Теперь про кажеться:
[b]Perl:[/b]
[code]
#!/usr/bin/perl
Test();
#print "End\n";
sub Test {
my $fw = 1000;
my $fh = 1000;
my ($lock_x, $lock_y, $lock_rx, $lock_ry) = ("" ,"", "", "");
my ($randX, $randY);
my $i = 500;
do {
$randX = int(rand($fw) + 1);
$randX = int($lock_x - $lock_rx + rand(2*$lock_rx+1)) if ($lock_x ne '' && $lock_rx ne '');
$randY = int(rand($fh) + 1);
$randY = int($lock_y - $lock_ry + rand(2*$lock_ry+1)) if ($lock_y ne '' && $lock_ry ne '');
} while (--$i && !isYes($randX, $randY));
}
sub isYes {
return 0;
}
[/code]
[b]C[/b]
[code]
#include <stdlib.h>
#include <stdio.h>
int isYes(int a, int b) {
return 0;
}
int getRand(int max) {
return (rand()%(max-1));
}
int main() {
int i = 500;
int fw = 1000; int fh = 1000;
int lock_x, lock_y, lock_rx, lock_ry;
int randX; int randY;
do {
randX = getRand(fw) + 1;
if (lock_x != 0 && lock_rx != 0) {
randX = lock_x - lock_rx + getRand(2*lock_rx+1);
}
randY = getRand(fh) + 1;
if (lock_y != 0 && lock_ry != 0) {
randX = lock_y - lock_ry + getRand(2*lock_ry+1);
}
} while (--i && i > 0);
}
[/code]
Теперь сам тест
user@dstation:~$ time ./test.pl
real 0m0.004s
user 0m0.000s
sys 0m0.000s
user@dstation:~$ time ./test
real 0m0.001s
user 0m0.000s
sys 0m0.000s
Ммммммм всего-то цикл из 500 итераций не делающих ни чего !
Разница в 3 раза .... пустые слова ?!
[color=green][size=9]Добавлено спустя 12 минут 14 секунд:[/size][/color]
В догонку Сервак 2-х процессорный и 4G на борту.
[color=green][size=9]Добавлено спустя 4 минуты 25 секунд:[/size][/color]
Да и ни чего не делает ...
Я же очень .... респект и низкий поклон авторам ... первый раз за несколько лет игры дополз до 90+ лвл соло. Еще раз им респект ! Так же как Клику и Пирожку .... и всем остальным.
[quote]Смешно. Вам сдается, что тормоза из за перла?
1) что за тормоза? где тормоза? что конкретно тормозит? [/quote]
Очень просто хотя бы при телепорте (читать смена локации) - будете спорить, что есть тормоза ?! А сдается мне потому что он после этого перечитывает все подряд, начиная с места появления ... через статы и скилы ... и заканчивая окружающим(щими)
[quote]2) когда кажется - креститься надо, говорит народная мудрость[/quote]
Теперь про кажеться:
[b]Perl:[/b]
[code]
#!/usr/bin/perl
Test();
#print "End\n";
sub Test {
my $fw = 1000;
my $fh = 1000;
my ($lock_x, $lock_y, $lock_rx, $lock_ry) = ("" ,"", "", "");
my ($randX, $randY);
my $i = 500;
do {
$randX = int(rand($fw) + 1);
$randX = int($lock_x - $lock_rx + rand(2*$lock_rx+1)) if ($lock_x ne '' && $lock_rx ne '');
$randY = int(rand($fh) + 1);
$randY = int($lock_y - $lock_ry + rand(2*$lock_ry+1)) if ($lock_y ne '' && $lock_ry ne '');
} while (--$i && !isYes($randX, $randY));
}
sub isYes {
return 0;
}
[/code]
[b]C[/b]
[code]
#include <stdlib.h>
#include <stdio.h>
int isYes(int a, int b) {
return 0;
}
int getRand(int max) {
return (rand()%(max-1));
}
int main() {
int i = 500;
int fw = 1000; int fh = 1000;
int lock_x, lock_y, lock_rx, lock_ry;
int randX; int randY;
do {
randX = getRand(fw) + 1;
if (lock_x != 0 && lock_rx != 0) {
randX = lock_x - lock_rx + getRand(2*lock_rx+1);
}
randY = getRand(fh) + 1;
if (lock_y != 0 && lock_ry != 0) {
randX = lock_y - lock_ry + getRand(2*lock_ry+1);
}
} while (--i && i > 0);
}
[/code]
Теперь сам тест
user@dstation:~$ time ./test.pl
real 0m0.004s
user 0m0.000s
sys 0m0.000s
user@dstation:~$ time ./test
real 0m0.001s
user 0m0.000s
sys 0m0.000s
Ммммммм всего-то цикл из 500 итераций не делающих ни чего !
Разница в 3 раза .... пустые слова ?!
[color=green][size=9]Добавлено спустя 12 минут 14 секунд:[/size][/color]
В догонку Сервак 2-х процессорный и 4G на борту.
[color=green][size=9]Добавлено спустя 4 минуты 25 секунд:[/size][/color]
Да и ни чего не делает ...
Вот и я в туже сторону думаю, только нужно понять на каком этапе перл будет подгружать эти ДЛЛ. Скорее все в момент исполнения, .... тогда толку с того почти ни какого, а то и вовсе приведет к регресу. Пока библиотека загрузится, пока код отработает. Конечно можно юзать невыгружаемые библиотеки .... нужно подумать.