Author Topic: команда UNDEFINE  (Read 8850 times)

0 Members and 5 Guests are viewing this topic.

Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
команда UNDEFINE
« on: March 04, 2015, 02:44:26 AM »
Всем привет , такое предложение при работе с кучей скриптов одновременно когда один скрипт запускает другие функцией SUB,могут возникнуть проблеммы из за  перемменых остающихся в памяти можно запилить команду типо UNDEFINE которая удаляла бы все переменные в скрипте выше этой команды они все равно отработали свое ну естественно не трогая переменные в #include  :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: команда UNDEFINE
« Reply #1 on: March 04, 2015, 08:55:10 AM »
...один скрипт запускает другие функцией SUB...
Вот это и подозрительно. Такое трактование SUB.

За переменными нужно следить, не бросать их на произвол судьбы. Холить и лелеять. Обнулять при необходимости. Разделить их в уме и скрипте минимум на две группы: постоянные (или долгоиграющие) и более менее временные которые используются в небольшом законченном блоке и вне его могут быть свободны и использоваться повторно.

Я не против дополнительных функций, это хорошо. Но если ты забываешь обнулить необходимые переменные (а обычно их не много, вообще единицы), то так же будешь забывать о нужных стирая их глобальным затиральщиком.
Я, например, вообще не вижу для себя применения такой команды. Всегда есть переменные - константы для каждого скрипта. Есть переменные полученные и заданные близко к началу и необходимые до самого конца.
" выше этой команды... ну естественно не трогая переменные в #include" опять же или не представление что такое #include или я даже не знаю. #include это не функция и код подключаемый по нему может быть и обычным кодом и функцией и подпрограммой, да всем чем угодно. Почему тогда нужно код подключаемый #include исключать из "UNDEFINE"? Это дополнительные ограничения, которые нужно помнить, об которые будут постоянно спотыкаться и которые почти никому не нужны.
Придётся добавлять часть лишнего кода только ради того, что кто-то не привык обнулять переменные в нужных местах или это лень делать.

Не наезд, а только личное мнение. Может я и не прав.


Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
Re: команда UNDEFINE
« Reply #2 on: March 04, 2015, 10:53:30 AM »
насчет того что переменных немного ты загнул я на мелочи не размениваюсь и речь веду не об одном скрипте а десятках связаных и контролировать есть ли одинаковые переменные в них и если возникнут проблеммы то перелопачивать кучу скриптов выискивая проблемную переменную весьма проблемотично а вот еслиб была команда обнулить переменные в конце каждого скрипта скопом а не вписывая каждую отдельно было намного бы проще у меня скрипт один на капчу довольно весомый а он всего один из десятков которые будут связаны в одну цепочку  :)

Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
Re: команда UNDEFINE
« Reply #3 on: March 04, 2015, 11:24:21 AM »
Спешу тебя обрадовать, функция удаления ВСЕХ переменных уже существует, пользуйся на здоровье.
Называется перезапуск "Clickermann", выполнить его можно несколькими способами, наиболие удобный для себя, ты выберешь сам.
блин ну вы даете какойже это БОТ тогда если его вручную над перезапускать и контролить не я собираюсь такие скрипты писать которые сами будут решать возможные проблемы с учутом ошибокок даж самого кликера единственное что мой скрипт остановит эт зависание компа остальное сам бот должен решать  ;D

Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
Re: команда UNDEFINE
« Reply #4 on: March 04, 2015, 11:46:36 AM »
сорь ты наверно имел ввиду перезапустить скрипт с помощью другово скрипта?
похоже на танцы с бубнами хорошо бы чтоб в самой программе были такие функции
« Last Edit: March 04, 2015, 11:48:57 AM by Gen345 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: команда UNDEFINE
« Reply #5 on: March 04, 2015, 12:39:08 PM »
насчет того что переменных немного ты загнул я на мелочи не размениваюсь и речь веду не об одном скрипте а десятках связаных и контролировать есть ли одинаковые переменные в них и если возникнут проблеммы то перелопачивать кучу скриптов выискивая проблемную переменную весьма проблемотично а вот еслиб была команда обнулить переменные в конце каждого скрипта скопом а не вписывая каждую отдельно было намного бы проще у меня скрипт один на капчу довольно весомый а он всего один из десятков которые будут связаны в одну цепочку  :)

Чего это я "загнул"? Я тоже не размениваюсь и переменных создаю дофига и больше.  Я говорил что переменных требующих обнуления не много. При нормальной организации написания, большую часть и так обнуляем перед использованием. Часть не требует обнуления вообще. Остаются "маргиналы" которые да, мы уничтожаем как руки дойдут, но их не много.

...и речь веду не об одном скрипте а десятках связаных...

А это называется "лапша". Много инклюдов это нормально, а вот много (десятки) скриптов это не есть гуд.

...контролировать есть ли одинаковые переменные в них и если возникнут проблеммы то перелопачивать кучу скриптов выискивая проблемную переменную весьма проблемотично...
Во многих языках вообще необходимо переменные в начале объявлять. Вот и объяви их в начале своих кусков.
А проверять на совпадения... Я в больших скриптах при подключении туда большого куска кода вывожу списки переменных. Здесь даже скриптик онлайн выкладывали, вот он http://jsfiddle.net/AH5M2/2/embedded/result/
« Last Edit: March 04, 2015, 12:42:43 PM by Vint »


Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
Re: команда UNDEFINE
« Reply #6 on: March 04, 2015, 01:35:00 PM »
А это называется "лапша". Много инклюдов это нормально, а вот много (десятки) скриптов это не есть гуд.
ага считаешь лучше написать 10ти часавой скрипт длиной в 10-20к строк а не сделать для каждой задачи свой скрипт каждый из которых будет запускать основной скрипт в который только и будет вложена функция запуска скриптов и еще один отдельный скрипт который будет испровлять возможные проблемы и третий скрипт который будет контролить функциональность главного скрипта винда тож и из кучи скриптов состоит в которые вложены еще меньшие скрипты а писать одну портянку на все это  забей ничего хорошего из этого не выйдет   ;)
ладно не суть эт я так предложение внес проблема с переменными одинаковыми есть и искать причину довольно сложно перебирая весь код особенно если скрипт большой вот шас запустил просто 3 скрипта 2 делают дело и отчитываются в журнал 3 с небольшими задержками читает журнал и в зависимости от содержание запускает первый или второй скрипт хорошо бы еслиб программа сама умела загружать нужный скрипт в отдельное окно кликера и включать их например по названию или выключать обшие переменные создают проблеммы когда каждый скрипт должен отдельно отработать независимо какие там переменые чтоб журнальчик не вести в каком скрипте уже есть такие переменные и может возникнуть конфликт в потоке если например запустить или через саб
« Last Edit: March 04, 2015, 01:52:02 PM by Gen345 »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: команда UNDEFINE
« Reply #7 on: March 04, 2015, 03:49:54 PM »
Кто заставляет делать простыню на 10000 строк? Дроби на файлы и подключай инклюдами. Выносы блоки в сабы. Не вижу тут проблемы. Всё структурируется и разделяется в одном скрипте. А скакать по отдельным скриптам запуская их друг из друга стабильности ну ни как не прибавит. Это и есть лапша. Или мы о разном?

хорошо бы еслиб программа сама умела загружать нужный скрипт в отдельное окно кликера и включать их например по названию
А чем здесь EXECUTE не подходит с прописанным автораном? Запускай что хочешь.


Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
Re: команда UNDEFINE
« Reply #8 on: March 04, 2015, 04:11:49 PM »
ну я еще новичок в этом деле не все изучил а на счет того чтоб в сабы загонять не дкмаю что получиться у меня задача не один скрипт 500+ строк который много часов 30 действий делать будет а около сотни пятиминуток по 100+ действий и над чтоб работали без проблем и если один не справился с задачей основной скрипт бы просто проигнорировал еще рандомное время запуска у каждого кароч через журнал управление хочу сделать где каждый бы скрипт отчитывался о своей проделаной или несделаной работе а главный мониторил бы журнал ну и соотвественно делал нужные действия перезапускал проверял наличие ошибок запускал дополнительный скрипт с проверкой на возможный проблемы и если проблемма в скрипте просто пропускал бы и на следуший переключался в один скрипт все не вогнать и инклуды не помогут а только запутают если будет проблема потом ее просто не найдешь а каждый скрипт отдельно править будет просто

Kedrick

  • Освоившийся
  • **
  • Posts: 70
    • View Profile
Re: команда UNDEFINE
« Reply #9 on: March 05, 2015, 09:08:33 AM »
Кто запрещает называть переменные внятным словом?
$start = 0
$clik_tut = 0
$clik_tam = 0
$flag_otmeny = 0
$flag_starta_kapchi = 0
$просто_флаг = 0
$временная_переменная = 0
$свари_кофе = 0
$пора_спать = 0

миллион вариантов которые совпадать и мешать друг другу не будут в принципе. И читабельность скрипта повышается

Gen345

  • Освоившийся
  • **
  • Posts: 27
    • View Profile
Re: команда UNDEFINE
« Reply #10 on: March 05, 2015, 01:33:24 PM »
да проехали уже разберусь ато загрызете  ;D
представь 100+ скриптов от 500+ строк которые должны автоматом работать  без сбоев точней каждый скрипт в отдельности может ошибиться но который ими управляет должен работать на 100% поэтому и хочу максимально изолировать каждый скрипт ну и тем более не думать какие переменные в каждом скрипте писать чтоб не дай бог какой нить конфликт не случился
P:S еще такой вариант $переменная_длинней_любой_другой_переменной_больше_делать_нех_как_печатать_такие_переменные_)))
« Last Edit: March 05, 2015, 01:44:38 PM by Gen345 »

ezfalcon

  • Освоившийся
  • **
  • Posts: 30
    • View Profile
Re: команда UNDEFINE
« Reply #11 on: March 17, 2015, 12:39:14 PM »
Добавлю по теме

Есть пара проблем:
1) все переменные глобальные, где бы они не объявлялись.

2) утечка памяти. Вызов undefine, arrpop и любые другие операции, похоже, порождают мертвые куски выделенной памяти.

[spoiler=утечка памяти]
Code: (clickermann) [Select]
#name "Memory leak unit"

logshow(1)
LOGCLEAR

#define COUNT:1000000

sub (prnRes, $test, $count, $t)
   print($test, "(", $count") passed in: ", $t, " sec, (", int($count / $t), " op/sec)")
end_sub

sub (testDefUndef, $count)
   $t = $_ms
   for ($i = 0, $i < $count)
      define($var)
      undefine($var)
   end_cyc
   $t = ($_ms - $t) / 1000
   prnRes("testDefUndef", $count, $t)
end_sub

sub (testPushPop, $count)
   define($var)
   $t = $_ms
   for ($i = 0, $i < $count)
      arrpush($var, $i)
      arrpop($var)
   end_cyc
   undefine($var)
   $t = ($_ms - $t) / 1000
   prnRes("testPushPop", $count, $t)
end_sub

sub (testAssign, $count)
   $t = $_ms
   for ($i = 0, $i < $count)
      $var = "something"
   end_cyc
   $t = ($_ms - $t) / 1000
   prnRes("testAssign", $count, $t)
end_sub

sub (prnScr, $title)
   GETSCREEN
   screenshot($title)
end_sub

prnScr("memleak")

testDefUndef(COUNT)
prnScr("memleak")

testPushPop(COUNT)
prnScr("memleak")

testAssign(COUNT)
prnScr("memleak")

halt








[/spoiler]

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: команда UNDEFINE
« Reply #12 on: March 17, 2015, 02:04:01 PM »
Добавлю по теме

Есть пара проблем:
1) все переменные глобальные, где бы они не объявлялись.

2) утечка памяти. Вызов undefine, arrpop и любые другие операции, похоже, порождают мертвые куски выделенной памяти.

Да, поджирает.
В первом тесте думал после undefine просто память не освобождает сразу, ну мало ли там, сборщик нужно ждать. Я кстати удалением почти не пользуюсь, без надобности, только для массивов.

так оно и при каждом присваивании жрёт (4 тест)

Они это делают на пару с переменной цикла $i.
так, хоть и медленней, тоже жрёт:
Code: (clickermann) [Select]
  for ($i = 0, $i < $count)
  end_cyc
что уже гораздо хуже.
« Last Edit: March 17, 2015, 02:24:42 PM by Vint »


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: команда UNDEFINE
« Reply #13 on: May 01, 2015, 01:46:35 PM »
Ничоси, у меня на каждый тест по 600-700 секунд уходит. И новая версия 4.11.003 действительно теперь не наращивает память.