powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическая локальная переменная
60 сообщений из 60, показаны все 3 страниц
Автоматическая локальная переменная
    #38342352
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Chudo chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }



Результат работы
Код: plaintext
1.
1231



Возможно ли создание такого чудного класса на плюсах? Если да, то как?
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342397
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,
Код: plaintext
1.
void b( Chudo chudo ) {...}

имхо, только так
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342492
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychLumix,
Код: plaintext
1.
void b( Chudo chudo ) {...}

имхо, только так

По-моему вы не поняли задачу. Или я путанно объяснил. Посмотрите ещё раз на результат работы.

Может вот так понятнее будет.

Код: plaintext
1.
2.
3.
4.
class Chudo { ... } chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }
main() { a(); } // => 1231
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342501
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixИли я путанно объяснил.
Ты вообще ничего не объяснил. Твой пример будет работать после модификации на ровно одно
слово:
Код: sql
1.
2.
3.
4.
class Chudo { ... } chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { Chudo chudo = 2; print(chudo); chudo++; print(chudo);  }
main() { a(); } // => 1231


Но ты как партизан молчишь почему тебе не хочется так сделать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342576
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНо ты как партизан молчишь почему тебе не хочется так сделать.


Тут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.

Крейзи вариант этого задачи я пока не оглашаю, чтобы не нервировать людей, но наверное и так все догадались, что этот чудообъект нужен для рекурсивного алгоритма.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342585
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.
Уволить к чертям того, кто такую задачу поставил.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342607
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyLumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.
Уволить к чертям того, кто такую задачу поставил.

...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342637
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
LumixВозможно ли создание такого чудного класса на плюсах? Если да, то как?Невозможно
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342690
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.

Крейзи вариант этого задачи я пока не оглашаю, чтобы не нервировать людей, но наверное и так все догадались, что этот чудообъект нужен для рекурсивного алгоритма.

Оглашай крейзи вариант уже.

А то что значит, что "ведёт он себя локально" -- не ясно.
Также не забудь написать, что делает великолепная функция 'print'.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342703
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переход через границу функции туда и сюда надо как-то отслеживать по-любому.
Это возможно, но автоматом это сделать не получится, надо создавать какой-то объект. После этого все остальные части задачи будут уже легкорешаемы.

Создание объекта можно будте завуалировать после этого в каких-то макросах.
типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
void foo()
{
   START_FUNCTION(foo);

   // код

   END_FUNCTION(foo);
}



При этом конечно же END_FUNCTION(foo); только для красоты, для функционала нужен только START_FUNCTION.
Имя тоже не нужно (оно есть в стандартных и не очень стандартных предопределённых макросах).
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342710
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixМожет вот так понятнее будет.да я понял, чё тут было не понятного.

LumixСоздание объекта, который является глобальным, но ведет себя локально в зависимости от места использованиятакая задача не решается. Надо просто поменять её постановку, или описать изначальную задачу. Видимо, она как-то связана с вашими последними топиками в программировании, но сил нет додумывать её самостоятельно.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342722
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПереход через границу функции туда и сюда надо как-то отслеживать по-любому.
Это возможно, но автоматом это сделать не получится, надо создавать какой-то объект. После этого все остальные части задачи будут уже легкорешаемы.



Ручной вариант уже рассматривали

Код: plaintext
1.
2.
void a() { uniqe i; chudo(i) = 1; print(chudo(i)); b(); print(chudo(i)); }
void b() { uniqe i; chudo(i) = 2; print(chudo(i)); chudo(i)++; print(chudo(i));  }



но с локальной переменной получается проще

Код: plaintext
1.
2.
void a() { Chudo chudo = 1; print(chudo); b(); print(chudo); }
void b() { Сhudo chudo = 2; print(chudo); chudo++; print(chudo);  }



MasterZivТакже не забудь написать, что делает великолепная функция 'print'.

В данном случае это абсолютно неважно, я просто привел её в качестве дампера, чтобы всем было понятно где на каком этапе какой значение.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342729
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychНадо просто поменять её постановку, или описать изначальную задачу. Видимо, она как-то связана с вашими последними топиками в программировании, но сил нет додумывать её самостоятельно.

Эта тема никак не связана с другими темами. Она сама по себе.
Я в принципе понимаю, ответ на мой вопрос: <b>нет</b>, но задал уж так может есть в плюсах какие-то глубокие фишки для таких случаев, тем более щас появился С++11 и я пока толком не знаю всей его глубины.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342780
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix
Код: plaintext
1.
2.
3.
Chudo chudo;
void a() { chudo = 1; print(chudo); b(); print(chudo); }
void b() { chudo = 2; print(chudo); chudo++; print(chudo);  }



Результат работы
Код: plaintext
1.
1231



Возможно ли создание такого чудного класса на плюсах? Если да, то как?


гуглить
operator=(....);
operator int();

Но с принтЭфом и прочими функциями с переменным количестом аргументов
без явного приведения к типу ИМХО(вроде не приснилось) работать не будет.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342783
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЯ в принципе понимаю, ответ на мой вопрос: <b>нет</b>, но задал уж так может есть в плюсах какие-то глубокие фишки для таких случаев, тем более щас появился С++11 и я пока толком не знаю всей его глубины.

ответ да ,
но с определенным количество нетривиальных ограничений .
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342789
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР,

Операторы никакие не помогут, тут надо ловить переход через границу функции, это надо каких-то акторов или
CLOS pre- post- методов.
В С++ этого нет.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342869
pre-post
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

pre/post можно добавить как-нибудь так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class Chudo
{
public:
    begin_level() {/*whatever to begin level*/};
    end_level() {/*whatever to end level*/};
};

class Level
{
    Chudo &_chudo;

public:
    Level(Chudo &chudo) : _chudo(chudo){ _chudo.begin_level();}
    ~Level() { _chudo.end_level();}
}

Chudo chudo;
a() { Level(chudo); bla-bla-bla;}
b() { Level(chudo); bla-bla-bla; a(); bla-bla-bla; }

void main()
{
    b();
}
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342893
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pre-post,

имхо те же яйца только сбоку. Получается, что единственный инструмент "из коробки" для таких случае это только локальная переменная.

Видимо для таких целей была придумана шняга под названием аспектно-ориентированное программирование, но что-то она больно мозги в трубочку сворачивает.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342922
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего-то я никак не пойму. А зачем это все?
Можно более-менее реальный пример когда подобные трюки могут быть полезны?
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342927
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlЧего-то я никак не пойму. А зачем это все?
Можно более-менее реальный пример когда подобные трюки могут быть полезны?

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

Например, по вопросу заданному в этой теме крутые спецы посмотрели и сказали, что автоподкапотных шняг тут замутить не получится. Мне этого вердикта достаточно и я благодарен им за то, что уделили время и свою квалификацию. Теперь я буду знать, что ничего кроме локальной переменной в данном случае не поможет и что локальная переменная это единственный "автоматический" механизм маркирования атомарных подпространств.

В реальном проекте принято решение остановиться на вариенте с автоуниками, которые маркируют подпространства, то есть тот пример, где я показал chudo(i) = 1, chudo(i)++, chudo(i).func(), ...

Ещё раз спасибо всем, кто отписался в теме.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342951
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quo]сформулировать её[/quot] в этом основная проблема на мой взгляд ))
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38342953
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixВ реальном проекте
такой херью не стадают
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343083
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixТут дело не в партизанстве, а это задача такая. Создание объекта, который является глобальным, но ведет себя локально в зависимости от места использования.Глобально какой нужен функционал?
Получаем доступ ко всем локальным объектам:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
#include <iostream>
#include <vector>

using namespace std;

class Chudo
{
protected:
    int val;
    static vector<Chudo *> locals;

public:
    Chudo()
    {
        locals.push_back(this);
        val=-1;
    }

    ~Chudo()
    {
        locals.pop_back();
    }

    void operator++ ()
    {
        ++val;
    }

    void print()
    {
        cout<<val<<endl;
    }

    void operator= (int v)
    {
        val=v;
    }

    void print_locals()
    {
        for(unsigned int i=0; i<locals.size(); i++)
        {
            cout<<"local_"<<i<<" = "<<locals[i]->val<<endl;
        }
    }
};
vector<Chudo *> Chudo::locals;

void b()
{ Chudo c,d; c=2; c.print(); ++c; c.print(); c.print_locals(); }
void a()
{ Chudo c,d; c=1; c.print(); c.print_locals(); b(); c.print(); c.print_locals(); }

int main()
{
    a();
    return 0;
}

...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343210
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Lumix, Почему собственно "локальная" подразумевается на уровне функции? В С++ концепция локальности несколько шире.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
main() 
{
  int i = 1;
  std::cout << i;
  { 
    int  i = 2;
    std::cout << i;
  }
  std::cout << i;
}
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343345
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Малыхин Сергей[quo]сформулировать её в этом основная проблема на мой взгляд ))[/quot]

Проблема не в том, чтобы сформулировать задачу, а в том, чтобы сформулировать её troll-safe. Например, даже при формулировании такой малюсенькой задачки, некоторые персонажи подумали, что это задача про перегрузку операторов и стали активно отвлекать внимание именно на этом аспекте.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343357
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилLumixВ реальном проекте
такой херью не стадают

...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343360
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaГлобально какой нужен функционал?
Получаем доступ ко всем локальным объектам:

Нет смысла обсуждать что-то глобально, если вы даже не поняли такой малюсенькой задачки.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343364
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?Lumix, Почему собственно "локальная" подразумевается на уровне функции? В С++ концепция локальности несколько шире.


Это ещё один пример отхода от темы с целью создания объема обсуждений.
Да функции в плюсах не исчерпывают понятие локальности, но задача была не об этом.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343456
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Не он один нифига не понял, думаю, многим было непонятно.

На исходный вопрос ты ответ получил, думаю, теперь можно было бы озвучить исходную сверхзадачу, может в этом разрезе тебе было бы больше помощи.

Картинки больше не пости, юмор, мы понимаем, но это не ПТ.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343469
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumix,

Глобальные переменные нельзя менять в алгоритмах.
Их можно устанавливать только при инициализации/перезагрузке конфига приложения, и они должны действовать на все части приложения без исключения.
Если же какому-то алгоритму требуются модификация, то делаете копию глобальной переменной и передаете ее аргументом в алгоритм, как это было показано в первом сообщении от egorych.
Все остальное - несопровождаемая ересь.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343494
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky,

Ну ладно уж....
Куча схем проектирования приложений завязана именно на глобальные переменные и неявный контекст.

Начиная с самой прикольный глобальной переменной — стека вызовов функций — , через стандартные потоки ввода-вывода, и кончая просто переменными, которые неудобно передавать в каждую функцию.

не всегда все так однозначно.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343536
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivкончая просто переменными, которые неудобно передавать в каждую функцию.

Если вам не удобно передавать в функцию аргументы, и вы используете глоальные вместо этого, то вы отказываетесь от многопоточности и рекурсии.
Пока вы помните об этом - ок. Но потом вы увольняетесь и новый сотрудник уже не знает об этом.
Вот я и говорю: несопровождаемая ересь.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343675
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
LumixПроблема не в том, чтобы сформулировать задачу, а в том, чтобы сформулировать её troll-safeСпециально сформулировать так, чтобы было ничего непонятно, а потом всем отвечать "нет, вы неправильно поняли" - это ли не троллинг?
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343702
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возможно доработка глобальной переменной
13206814
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343755
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНе он один нифига не понял, думаю, многим было непонятно.

Ой, да ладно! Кому надо было все поняли задачу, особенно это вас касается. Вы же сразу поняли, что это задача про маркеры атомарных обработчиков с единым общим репо. Ещё до начала темы я знал, что эта задача имеет решение через локальные переменные, а вопрос этой темы был существуют ли в плюсах автоматические средства для подобных маркеров. Ответ оказался не существует.

MasterZivНа исходный вопрос ты ответ получил, думаю, теперь можно было бы озвучить исходную сверхзадачу, может в этом разрезе тебе было бы больше помощи.

Мне реально не хочется выкладывать сюда всю задачу, потому что опыт общения на этом форуме и на других айтишных тусовках показывает, что тролли победят, что когда дело доходит до очень оригинальных задач, то у многих включаются слишком большие эмоции и людям становится сложно сосредоточится на главных вещах и отказаться от исследования второстепенных, например, как чуть выше кто-то начал объяснять что локальная область видимости не исчерпывается только функцией. Да, это так, но в контексте поставленной задачи это второстепенный и соответственно неважный аспект (по крайней мере до тех пор, пока он не станет источником для решения основной задачи, а я более чем уверен, что автор того замечания просто хотел побравировать своей квалификацией ничего не предлагая взамен для решения основной задачи). Так вот если даже в такой малюсенькой задачке было столько "отклонений", то если вывалить сюда всю задачу, то это просто начнется срач, который 100% потом передет на личности.

Что касается более навороченного варианта этой задачи, то он связан рекурсией. Ведь очевидно, что в данном случае был соблазн решить задачу вот так, хотя это и суперкриво, но зато формально это с использованием "автоматических" средств языка

Код: plaintext
1.
2.
a() { c(__function__) = 1; print(c(__function__)); b(); print(c(__function__)); }
b() { c(__function__) = 2; print(c(__function__)); c(__function__)++; print(c(__function__)); }



Ну а к переходу к рекурсии, этот вариант сразу отсосет по полной и задача перестанет решаться.

Код: plaintext
1.
a() { c(__function__) = 1; print(c(__function__)); a(); print(c(__function__)); }



Но на автоуниках она решается (это опять же очень условный сильно пожатый пример)

Код: plaintext
1.
a() { uniqe i; if(c(i).func()) return; a(); c(i).func(); }



Сейчас ещё ведутся исследования по поводу замены рекурсивного алгоритма на циклический алгоритмом, потому что кое-то шептнул, что единственное отличие рекурсии от цикла - это наличие стека, а стек можно всегда замутить самому.

В какой-то мере мой вопрос этой темы можно было даже так сформулировать: предоставляют ли плюсы доступ к своему стеку для навешивания на него логики. Вроде как ответ: не предоставляют , а ещё точнее локальные переменные это и есть инструмент который плюсы предоставляют для доступа к стеку на навешивания логики, и при этом, этот инструмент единственный

- - - - - - - - - - - - - - - - - - - - - - - - - - - -

Если мне задали вопрос: а чего ты хотел в принципе увидеть в случае, если бы на вопрос твоей темы ответ бы да? . То я бы ответил, что ожидал что-то типа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class Chudo 
{ 
     ...

     int value;

     ...

public:

     [onFirstLocalScopeUseCreateNewObject, DestroyOnLocalScopeExit] // можно просто [localable]
     Chudo() { ... } 

     ... 
     bool func() 
     { 
           ... 
           print(value);  // this для этого value зависит от области видимости объекта chudo
           ... 
           return true; 
     } 
     ... 

} chudo;

a() { chudo = getNextSerialId(); ... if(chudo.func()) return; ... a(); ... chudo.dunc(); ... }





MasterZivКартинки больше не пости, юмор, мы понимаем, но это не ПТ.

Это не юмор. С моей точки зрения это адекватная реакция на "выподы" некоторых участников в стиле: такой херью не страдают, за такие задачи надо увольнять архитекторов и т.д. Я этими картинками вношу нонсенс в ветку диалога ("выпад") тем самым усиливаю маразм и отбиваю желание продолжать это ответвление.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343788
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
?LumixПроблема не в том, чтобы сформулировать задачу, а в том, чтобы сформулировать её troll-safeСпециально сформулировать так, чтобы было ничего непонятно, а потом всем отвечать "нет, вы неправильно поняли" - это ли не троллинг?

Вот как раз из-за таких Guest'ов я и не хочу выкладывать сюда всю задачу.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343790
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЕсли вам не удобно передавать в функцию аргументы, и вы используете глоальные вместо этого, то вы отказываетесь от многопоточности и рекурсии.


Да, потеря профита в циклическом алгоритме - это основной минус, почему никто не хочет уходить в цикл и все ищут вариант именно с рекурсией.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343812
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyLumix,
Глобальные переменные нельзя менять в алгоритмах.
Их можно устанавливать только при инициализации/перезагрузке конфига приложения, и они должны действовать на все части приложения без исключения.
Если же какому-то алгоритму требуются модификация, то делаете копию глобальной переменной и передаете ее аргументом в алгоритм, как это было показано в первом сообщении от egorych.

Формально вы правы. Но если посмотреть на ситуацию очень сверху, то речь не про глобальное или локальное, а про методы разграничения пространств.

Какие ключевые проблемы бывают при работе параллельных воркеров - это запись в одно и то же место или отставание синхронизации, когда один из воркеров принимает решение на основе информации, которая уже устарела.

Эти две задачи легко решаемы, если найти критерий разграничения пространств ответственности между параллельным воркерами и свести точки синхронизации со всего поля в спецпространства (это что-то типа концепции индексов в базах данных, когда для управления чем-то большим используется нечто более маленькое, но сохраняющее уникальные признаки).

Приведу пример задачи.

Как параллельными воркерами распарсить сериализованную сетку. Это можно сделать за счет разграничения сферы ответственности. А это значит, что решение сводится к нахождению формата (структуры данных) пригодных для параллельного вычисления. Так вот если этот формат уже будет содержать в самом себе разграничение (распараллеливание), тогда и появляется возможность безопасно хранить и параллельно обрабатывать это репо глобально.

Под глобально здесь подразумевается, не синтактическая глобальная переменная, а "общая переменная" для некого множества разных функций. При этом множеством разных функций может быть одна единственная функция, но рекурсивная.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38343963
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Lumixэто задача про маркеры атомарных обработчиков с единым общим репоЭкземпляр некоего класса в каждом обработчике, статические мемберы этого класса для общего репо???
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344060
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixMasterZivНе он один нифига не понял, думаю, многим было непонятно.

Ой, да ладно! Кому надо было все поняли задачу, особенно это вас касается. Вы же сразу поняли, что это задача про маркеры атомарных обработчиков с единым общим репо.

Он великий телепат. Он понял даже то, чего мой мозг не воспринял.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344364
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixКому надо было все поняли задачуLumixэто задача про маркеры атомарных обработчиков с единым общим репо.
Товарищи, кто понял, объясните, пожалуйста, мне, что такое "маркеры атомарных обработчиков с единым общим репо".
Или сбросьте хотя бы ссылку, доходчиво рассказывающую, что это за зверь и зачем он нужен.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344426
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор утверждает что это защита от троллей.
Но мне сильно кажется что он не прав.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344443
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MozokLumixКому надо было все поняли задачуLumixэто задача про маркеры атомарных обработчиков с единым общим репо.
Товарищи, кто понял, объясните, пожалуйста, мне, что такое "маркеры атомарных обработчиков с единым общим репо".
Или сбросьте хотя бы ссылку, доходчиво рассказывающую, что это за зверь и зачем он нужен.

Если совсем по-тупому объяснять, то представь, что запрещено вообще пользоваться переменными внутри функции. Как тогда работать с данными? Только через общее хранилище. А как определить к какому обработчику относится та или иная запись? С помощью маркеров.

Надеюсь теперь понятнее стало.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344448
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот я нарисовал, чтобы понятнее было.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344449
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, разделение Степанова на контейнеры, итераторы и алгоритмы это "песня из этого же альбома".
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344453
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такие шняги называются чистые фукнции. Это функции без побочных эффектов.

Так вот им в противоположность есть тотально нахер грязные функции, которые состоят из одних сплошных побочных эффектов, то есть они получают все сами и отдают все сами минуя официальный вход (аргументы) и официальный выход (возврат значения).

На плюсах оказалось, что особенно в случае рекурсий тотально грязная функция невозможна и что как минимум придется использовать хотя бы один локальный маркер.

Чтобы сэмулировать рекурсию в цикле, придется самому мутить стек, но тут теряются плюшки с многопоточностью (параллельной обработкой).

В общем сложная эта тема и страшно её обсуждать в условиях форумной среды.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344504
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЕсли совсем по-тупому объяснять, то представь, что запрещено вообще пользоваться переменными внутри функции. Как тогда работать с данными? Только через общее хранилище. А как определить к какому обработчику относится та или иная запись? С помощью маркеров.

Надеюсь теперь понятнее стало.
А теперь объясни еще почему (и главное кем!) запрещено пользоваться переменными внутри функции?



LumixЕсть такие шняги называются чистые фукнции. Это функции без побочных эффектов.Это тебе, друг мой, надо идти в функциональные языки. Хаскел там или ОКамл какой... Писать используя функциональную парадигму на С++ возможно, хоть и не удобно. Но возможно.
Потренируешься в чисто функциональном языке - тогда и поймешь как это сделать в С++.

LumixТак вот им в противоположность есть тотально нахер грязные функции, которые состоят из одних сплошных побочных эффектов, то есть они получают все сами и отдают все сами минуя официальный вход (аргументы) и официальный выход (возврат значения).Ну можно и так писать. Очень это не рекомендуется, но возможно. Хотя если использовать этот подход ты быстро обнаружишь что для написания настолько "грязной" функции тебе придется всю программу в нее запихать. Иначе настоящей грязи не получится :)

LumixНа плюсах оказалось, что особенно в случае рекурсий тотально грязная функция невозможна и что как минимум придется использовать хотя бы один локальный маркер.Да она ни на каком языке не возможна. Если ты конечно не задался целью написать бессмысленную функцию... А реальные, делающие полезную работу, рекурсивные функции абсолютно грязными быть не могут.

LumixЧтобы сэмулировать рекурсию в цикле, придется самому мутить стек, но тут теряются плюшки с многопоточностью (параллельной обработкой).Это почему это вдруг? Если ты даже решил свой стек делать (что, кстати, не обязательно), то что мешает твоим потокам создавать себе собственные стеки?

LumixВ общем сложная эта тема и страшно её обсуждать в условиях форумной среды.Ну да, когда тема подается вся такой загадочной и запутанной - ее обсуждать действительно сложно.
Зря ты боишься троллей. В этой теме пока что тролль всего один, Lumix'ом представляется. Знаешь такого?
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344520
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixПроблема не в том, чтобы сформулировать задачу, а в том, чтобы сформулировать её troll-safe. Например, даже при формулировании такой малюсенькой задачки, некоторые персонажи подумали, что это задача про перегрузку операторов и стали активно отвлекать внимание именно на этом аспекте.

вы на меня намекаете?

будьте добры расскажите как компилятор это съест ?

Код: plaintext
1.
2.
class Chudo { ... } chudo;
chudo = 1;



взято отсюда 14611994



А это 14612735
Код: plaintext
1.
chudo(i) = 1;


вобще не С++
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344523
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LumixЧтобы сэмулировать рекурсию в цикле, придется самому мутить стек, но тут теряются плюшки с многопоточностью (параллельной обработкой).



Я не вижу проблем потери плюшек.

Вы хотите в рекурсии плодить нити ?
Да не вопрос , плодите на здоровье , эти нити будут иметь свои стеки
что в цикле , что в рекурсии вы получите количество автоматических
стеков равное количеству нитей.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344641
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlА теперь объясни еще почему (и главное кем!) запрещено пользоваться переменными внутри функции?

Ну вот началось! Это ведь очередная вариация на тему "таких надо увольнять", "такого в реальных проектах не бывает" и т.п.
Чё опять какую-нибудь картинку тупую запостить?

White OwlLumixЕсть такие шняги называются чистые фукнции. Это функции без побочных эффектов.Это тебе, друг мой, надо идти в функциональные языки. Хаскел там или ОКамл какой... Писать используя функциональную парадигму на С++ возможно, хоть и не удобно. Но возможно.
Потренируешься в чисто функциональном языке - тогда и поймешь как это сделать в С++.

Именно поэтому я и не хочу открывать всю задачу, что человек подумал, что это задача про чистые функции. То есть многие люди на форуме просто как парсер реагируют на термины не пытаясь сначала осмыслить их в контексте. Ну при чем тут хаскель??? Кто вообще тут собирался использовать функциональную парадигму на с++??? Зачем эти фантазии???

Вот почему я не хочу выкладывать сюда задачу.

White OwlНу можно и так писать. Очень это не рекомендуется, но возможно. Хотя если использовать этот подход ты быстро обнаружишь что для написания настолько "грязной" функции тебе придется всю программу в нее запихать. Иначе настоящей грязи не получится :)

Это тоже вариация на тему "так не делают", "за это надо увольнять" и т.п. Я не хочу публиковать задачу, чтобы в ответ услышать очередную миллионную вариацию "за это надо увольнять".


White OwlДа она ни на каком языке не возможна. Если ты конечно не задался целью написать бессмысленную функцию... А реальные, делающие полезную работу, рекурсивные функции абсолютно грязными быть не могут.

Какой смысл публиковать задачу для дискуссии, если человек своими словами повторяет то, что и так в теме уже несколько раз было сформулировано.


White OwlЭто почему это вдруг? Если ты даже решил свой стек делать (что, кстати, не обязательно), то что мешает твоим потокам создавать себе собственные стеки?

Отсутствие критерия или даже метода попила действующего алгоритма на треды.

White OwlНу да, когда тема подается вся такой загадочной и запутанной - ее обсуждать действительно сложно.
Зря ты боишься троллей. В этой теме пока что тролль всего один, Lumix'ом представляется. Знаешь такого?

Ну вот собственно говоря ещё раз сказал себе спасибо, что не стал публиковать задачу. Вы продемонстрировали типичное "форумное" поведение и отношение.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344646
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРА это 14612735
Код: plaintext
1.
chudo(i) = 1;


вобще не С++

Фейспалм.

ДохтаРВы хотите в рекурсии плодить нити ?
Да не вопрос , плодите на здоровье , эти нити будут иметь свои стеки
что в цикле , что в рекурсии вы получите количество автоматических
стеков равное количеству нитей.

Фейспалм.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Короче, ещё раз всем спасибо, кто отписался в теме, я с этой темы сваливаю.
То, что я хотел и ради чего я открывал тему я уже получил.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344654
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
LumixWhite OwlА теперь объясни еще почему (и главное кем!) запрещено пользоваться переменными внутри функции?

Ну вот началось! Это ведь очередная вариация на тему "таких надо увольнять", "такого в реальных проектах не бывает" и т.п.
Чё опять какую-нибудь картинку тупую запостить?
Троллинг детектед...
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38344661
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
LumixВот я нарисовал, чтобы понятнее было.Понятней вот от этого? Фейспалм
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38345284
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
будьте добры расскажите как компилятор это съест ?

Код: plaintext
1.
2.
3.
4.
class Chudo { ... } chudo;
// объявление класса и тут же переменной этого класса. ДОпустимая конструкция.
chudo = 1;
// присваивание переменной.




А это
Код: plaintext
1.
chudo(i) = 1;


вобще не С++

функция или функциональный объект возвращает ссылку на что-то , этому чему-то присваивается 1.
Вообще, С++ не занимается разборами что там и как, в принципе это допустимая конструкция.

chudo(i) = 1 -- выражение, присваивание (1) этому, это -- ( chudo(i) ) . В зависимости от того, что такое chudo(i), это может иметь или не иметь смысл.

Но всё вполне валидно.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38345288
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тему предлагаю прикрыть. Далее идёт неконструктив.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38347831
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivА это
Код: plaintext
1.
chudo(i) = 1;


вобще не С++

функция или функциональный объект возвращает ссылку на что-то , этому чему-то присваивается 1.
Вообще, С++ не занимается разборами что там и как, в принципе это допустимая конструкция.

chudo(i) = 1 -- выражение, присваивание (1) этому, это -- ( chudo(i) ) . В зависимости от того, что такое chudo(i), это может иметь или не иметь смысл.

Но всё вполне валидно.

Прошу прощения ,у меня остался не высненным следующий вопрос.
Судя по сингнатурами
chudo(i) есть некий
Код: plaintext
1.
sometypeX Chedo::operator(sometypeY i)();


То есть функция-метод.
Я не нашел в стандарте, что функция-метод может быть L-value для данного случая.

Давайте расставим точки над Ё для понимания.

согласен посыпать голову пеплом, если
в стандарте найдется разрешение функции-методу быть L-value при операциях присвоения
из константы.
А еще лучше, если там будет описан механизм создания всяких автоматических переменных, вызовов
конструкторов копирования...... итд тп
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38348037
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРесть некий
Код: plaintext
1.
sometypeX Chedo::operator(sometypeY i)();


То есть функция-метод.
Я не нашел в стандарте, что функция-метод может быть L-value для данного случая.

Давайте расставим точки над Ё для понимания.
... если
в стандарте найдется разрешение функции-методу быть L-value при операциях присвоения
из константы.
А еще лучше, если там будет описан механизм создания всяких автоматических переменных, вызовов
конструкторов копирования...... итд тп


Давай пойдём от обратного ... Где в стандарте написано, что это НЕЛЬЗЯ делать?
Любая функция (кроме специальных) может возвращать всё, что угодно.
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38348188
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivДохтаРесть некий
Код: plaintext
1.
sometypeX Chedo::operator(sometypeY i)();


То есть функция-метод.
Я не нашел в стандарте, что функция-метод может быть L-value для данного случая.

Давайте расставим точки над Ё для понимания.
... если
в стандарте найдется разрешение функции-методу быть L-value при операциях присвоения
из константы.
А еще лучше, если там будет описан механизм создания всяких автоматических переменных, вызовов
конструкторов копирования...... итд тп


Давай пойдём от обратного ... Где в стандарте написано, что это НЕЛЬЗЯ делать?
Любая функция (кроме специальных) может возвращать всё, что угодно.

возвращать то может, но Rvalue ,

а я про Lvalue говорю и спрашиваю ,
давайте это не путать.

Можете в качестве доказательства своей правоты привести компилируемый пример.
Class Chudo {} ; chudo;
chudo(i) = 1;

Что бы компилятор съел такую конструкцию где функция-метод является Lvalue .
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38348226
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаР, ну ты даешь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct foo {
    enum {marker_count = 4};
    int a[marker_count];
    int& operator()(size_t index) {return a[index];};
};

foo f;
f(0) = 1;
...
Рейтинг: 0 / 0
Автоматическая локальная переменная
    #38348310
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковДохтаР, ну ты даешь:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
struct foo {
    enum {marker_count = 4};
    int a[marker_count];
    int& operator()(size_t index) {return a[index];};
};

foo f;
f(0) = 1;



Согласен , убедили , посыпаю голову пеплом .
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Автоматическая локальная переменная
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]