Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 05:18
Оценка:
Функция что-то делает и,затем возвращает класс. Возвращаемый класс в коде почти не используется, т.е. вместо Class A=func(); почти везде просто func(); . Ф-я все равно его создает или как-то определяет нужно это или нет? И как то же происходит в инлайн-ф-ях?
Re: Создается ли класс, когда он не нужен?
От: TK Лес кывт.рф
Дата: 03.07.07 05:31
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Функция что-то делает и,затем возвращает класс. Возвращаемый класс в коде почти не используется, т.е. вместо Class A=func(); почти везде просто func(); . Ф-я все равно его создает или как-то определяет нужно это или нет? И как то же происходит в инлайн-ф-ях?


"почти" не считается если создание класса есть то, никто его не выкинет. сама функция определить будут использоваться ее результаты или нет — не может. определить использование (принять решение об inline) может JIT компилятор но, на его возможности особо рассчитывать не стоит.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 05:47
Оценка:
Здравствуйте, TK, Вы писали:

(принять решение об inline) может JIT компилятор но, на его возможности особо рассчитывать не стоит.
А я читал, что если IL-код ф-ии менее 15 строк, это ф-я всегда инлайн. Интересно, что она делает в описываемом случае?
Re: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 03.07.07 10:29
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Функция что-то делает и,затем возвращает класс. Возвращаемый класс в коде почти не используется, т.е. вместо Class A=func(); почти везде просто func(); . Ф-я все равно его создает или как-то определяет нужно это или нет? И как то же происходит в инлайн-ф-ях?


Класс создается, но раз ссылки на него никуда не сохраняется он будет собран сборщиком мусора. Если функция возвращает объект на пару сотен мегабайт памяти, то имеет смысл написать другую функцию, которая не создает такой громоздкий объект и когда объект не нужен вызывать ее.
Если функция возвращает IDisposable объект, то его нужно задиспозить.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 13:22
Оценка:
Здравствуйте, _Morpheus_,
Т.е. и в инлайн случае создается? У меня ф-я — пара строк, явно инлайновая. Используется часто. Иногда, редко, желателен возвращаемый класс: экономит чуть-чуть код и все. Если инлайн возвращаемый класс не создает (куда JIT воткнет его код?), все осталяю так. Иначе переписываю.
Re[3]: Создается ли класс, когда он не нужен?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 03.07.07 14:55
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если инлайн возвращаемый класс не создает (куда JIT воткнет его код?)


Туда, где стоит оператор new. Не понимаю, как inline может влиять на это. Вы имеете в виду создание экземпляра класса или что-то другое?
Re[4]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 15:47
Оценка:
Здравствуйте, nikov, Вы писали:

N>Туда, где стоит оператор new. Не понимаю, как inline может влиять на это. Вы имеете в виду создание экземпляра класса или что-то другое?


Да я имею в виду новый объект, создаваемый new. И не понимаю почему б компилятору не догадаться, что если некуда передать указатель на объект, во время инлайна, то и создавать его не стоит в этом месте. И инлайн, соответственно, к тому что в одном месте надо сгенерить код создания объекта, в другом не надо. Это ж проще пареной репы и случаи такие часты. Разные алгоритмы других случаев оптимизации, вероятно, бывают сложнее.
Re[5]: Создается ли класс, когда он не нужен?
От: IvanDunaev  
Дата: 03.07.07 15:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Да я имею в виду новый объект, создаваемый new. И не понимаю почему б компилятору не догадаться, что если некуда передать указатель на объект, во время инлайна, то и создавать его не стоит в этом месте. И инлайн, соответственно, к тому что в одном месте надо сгенерить код создания объекта, в другом не надо. Это ж проще пареной репы и случаи такие часты. Разные алгоритмы других случаев оптимизации, вероятно, бывают сложнее.


потому что при создании объекта выполняется код в конструкторе
Re[6]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 16:05
Оценка:
Здравствуйте, IvanDunaev, Вы писали:

ID>потому что при создании объекта выполняется код в конструкторе


Так я и справшиваю, ПОЧЕМУ, ЗАЧЕМ, в инлайн ф-ии выполняется лишний код запуска коструктора, что является тавтологией вопроса зачем создается объект. При отладке, если переменная (объект) не используется, появляется предупреждение, хотя она может модифицироваться. Чего ж во время создания кода, компилятор отключает эту свою функцию для достаточно частых случаев (если отключает — я пока не понял логики).
Re[7]: Создается ли класс, когда он не нужен?
От: IvanDunaev  
Дата: 03.07.07 16:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, IvanDunaev, Вы писали:


ID>>потому что при создании объекта выполняется код в конструкторе


А>Так я и справшиваю, ПОЧЕМУ, ЗАЧЕМ, в инлайн ф-ии выполняется лишний код запуска коструктора, что является тавтологией вопроса зачем создается объект. При отладке, если переменная (объект) не используется, появляется предупреждение, хотя она может модифицироваться. Чего ж во время создания кода, компилятор отключает эту свою функцию для достаточно частых случаев (если отключает — я пока не понял логики).


во-первых, никаких официальных критериев для инлайна не существует.
во-вторых, нельзя определить, является ли код лишним. формально код в конструкторе может быть произвольным и работать с чем-нибудь глобальным
Re[7]: Создается ли класс, когда он не нужен?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 03.07.07 16:23
Оценка:
Здравствуйте, Аноним, Вы писали:

ID>>потому что при создании объекта выполняется код в конструкторе


А>Так я и справшиваю, ПОЧЕМУ, ЗАЧЕМ, в инлайн ф-ии выполняется лишний код запуска коструктора, что является тавтологией вопроса зачем создается объект. А>Чего ж во время создания кода, компилятор отключает эту свою функцию для достаточно частых случаев.


Потому что это достаточно непростой анализ. Код конструктора может сохранять где-либо ссылку на создаваемый объект, делая его достижимым и не подлежащим сборке мусора. Поэтому компилятору приходилось бы заглядывать внутрь кода конструкторов, вызываемых из метода, возвращаемое значение которых игнорируется.
Re[8]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 17:16
Оценка:
Здравствуйте, IvanDunaev, Вы писали:

ID>во-первых, никаких официальных критериев для инлайна не существует.


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

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


Можно, заглянув в конструктор. И, еще раз, это делается во время отладки.
Re[8]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 03.07.07 17:24
Оценка:
Здравствуйте, nikov, Вы писали:

N>Потому что это достаточно непростой анализ. Код конструктора может сохранять где-либо ссылку на создаваемый объект, делая его достижимым и не подлежащим сборке мусора. Поэтому компилятору приходилось бы заглядывать внутрь кода конструкторов, вызываемых из метода, возвращаемое значение которых игнорируется.


Я понял, Вы утверждаете, что алгоритмы распаралеливания кода, попытки его предсказания с расчетом вероятностей ветвления и т.д., (что делается, правда не компилятором а процессором, но делается работа людей, создающих эти алгоритмы), так создание таких алгоритмов проще чем заглянуть в конструктор при компилировании инлайна. Возможно. Но я не вижу сложностей в заглядывании в конструктор. Может приведете одну. Конечно, снижение производительности компиляции, но незначительное: инлайн, кажется, выполняется JIT, и ничего, хотя заглядываний при этом хватает.
Re[9]: Создается ли класс, когда он не нужен?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 03.07.07 20:14
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Но я не вижу сложностей в заглядывании в конструктор. Может приведете одну.


Это просто не сделано. Напишите компилятор, в котором устранен этот недостаток.
Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 04.07.07 02:21
Оценка:
Класс создается всегда когда вы пишите new, и компилятор ничего не выкидывет, поскольку не может знать какие глобальные задачи может решать просто созданный класс.
Любое удобство идет за счет мегагерцеф! : {<b>1</b>, <b>2</b>, <b>3</b>, 4, 5}


Данное сообщение получено с сайта www.gotdotnet.ru
Re[3]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 09:11
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Т.е. и в инлайн случае создается? У меня ф-я — пара строк, явно инлайновая.

А>Используется часто. Иногда, редко,

а при чем тут инлайновая/не инлайновая, часто/не часто используется? Может у тебя в конструкторе объекта целая работа происходит и что тогда, из-за того что функция инлайновая компилятор должен выкинуть кусок логики программы?! Если ты написал создание объекта, то объект будет создаваться и не важно часто ты вызываешь этот код или редко...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[7]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 09:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

ID>>потому что при создании объекта выполняется код в конструкторе


А>Так я и справшиваю, ПОЧЕМУ, ЗАЧЕМ, в инлайн ф-ии выполняется лишний код запуска коструктора


он никак не лишний, раз ты написал что в этом случае нужно создавать объект, значит его нужно создавать. А в конструкторе может быть важный для нормального продолжения работы код и если он не выполнется то приложение упадет, так почему компилятор должен выкидывать код, необходимость выполнить который ты явным образом прописал в программе?!
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[9]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 09:23
Оценка:
Здравствуйте, <Аноним>, Вы писали:


А> Возможно. Но я не вижу сложностей в заглядывании в конструктор. Может приведете одну. Конечно, снижение производительности компиляции, но незначительное: инлайн, кажется, выполняется JIT, и ничего, хотя заглядываний при этом хватает.


А зря не видишь
Конструктор может быть пустой, но это еще не значит что во время выполнения кода он тоже будет пустой...
Кроме того в конструкторе может производиться создание нового экземпляра этого класса, т.е. рекурсивное создание объектов до поступления какого-либо события — в этом случае заглядывание выльется в зависание и переполнение стека.
Из конструктора также может быть вызвана пара десятков тысяч функций, причем не все могут быть доступны на этапе компиляции. А какаянить из этих функций может цеплять объект к важному списку объектов. Ну и т.д.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re: Создается ли класс, когда он не нужен?
От: andrey.bond  
Дата: 04.07.07 09:52
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Функция что-то делает и,затем возвращает класс. Возвращаемый класс в коде почти не используется, т.е. вместо Class A=func(); почти везде просто func(); . Ф-я все равно его создает или как-то определяет нужно это или нет? И как то же происходит в инлайн-ф-ях?


А можно посмотреть код? Уж больно заинтересовала меня это ваша функция...
Re: Создается ли класс, когда он не нужен?
От: tol05  
Дата: 04.07.07 13:37
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Функция что-то делает и,затем возвращает класс. Возвращаемый класс в коде почти не используется, т.е. вместо Class A=func(); почти везде просто func(); . Ф-я все равно его создает или как-то определяет нужно это или нет? И как то же происходит в инлайн-ф-ях?


Читал. Напрягался, анализировал. Столько ответов, все-таки... А ответ, по-моему, на поверхности: Если ф-ция возвращает объект (по крайней мере разработчик ф-ции так написал), то этот объект обязан быть созданным, независимо от того, как и кто (из стороннего кода) использует этот код.

Этот вопрос подобен вопросу "если я не использую объект, возвращаемый ф-цией, то зачем мне вообще в ф-цию заходить?"

А ф-ция, между прочим, может создавать объекты, которые могут не использоваться внешним (по-отношению к ф-ции) кодом, но могут, уже при своем создании, подключаться к каким-либо ресурсам, выполнять полезную работу... Может ли компилятор просчитать все варианты написания кода? думаю нет. Пусть лучше клиент кода решает свои проблемы с разработчиком кода, не вмешивая компилятор.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 14:52
Оценка:
Здравствуйте, tol05, Вы писали:

T>Этот вопрос подобен вопросу "если я не использую объект, возвращаемый ф-цией, то зачем мне вообще в ф-цию заходить?"


+1
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[10]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 04.07.07 17:21
Оценка:
Здравствуйте, nikov, Вы писали:

N>Это просто не сделано. Напишите компилятор, в котором устранен этот недостаток.


Это обычный компилятор. Когда работает сборщик мусора, он проделывает аналогичную работу, определяя нужен ли где объект. Почему не делать это во время компиляции все равно не понимаю.
А как Вы считаете, если объект не нужен, то указатель на него все равно копируется для передачи из ф-ии?
Re[11]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 17:41
Оценка:
Здравствуйте, <Аноним>, Вы писали:

N>>Это просто не сделано. Напишите компилятор, в котором устранен этот недостаток.


А>Это обычный компилятор. Когда работает сборщик мусора, он проделывает аналогичную работу, определяя нужен ли где объект. Почему не делать это во время компиляции все равно не понимаю.

А>А как Вы считаете, если объект не нужен, то указатель на него все равно копируется для передачи из ф-ии?

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

То что ты хочешь это не C#, это уже непредсказуемый язык, на котором напишешь одно, а получишь совершенно другое.


Попробуй скомпилировать такую программу, смысл которой складывать 2+2 и выводить результат:

using System;
using System.Windows.Forms;

public class A
{
    public int X=0;
    public int Y=0;
    
    public void DoWork()
    {
        int result = X+Y;
        MessageBox.Show(X.ToString()+" + "+Y.ToString()+" = "+result.ToString(), "Работа");
    }
}


public class Program
{
    static void Main()
    {
        getInstance();    // вызываем метод который создает и возвращает объект A, но полученный объект никуда не сохраняем
    }

    private static A getInstance()
    {
        A a = new A();
        a.X = 2;
        a.Y = 2;
        a.DoWork();
        return a;
    }
}


а теперь попробуй закоментировать код в методе getInstance это и будет та "оптимизация" которую ты хочешь от компилятора.
И проверь продолжает ли выполнять свою функцию программа или нет
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[10]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 04.07.07 18:25
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

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

Не понял, но это не важно. Какая разница пустой не пустой?

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


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

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


А еще в конструкторе могут вызываться ресурсы, создаваться файла, отправляться эсэмэски. Даже и.т.д. может делаться в конструкторе. Ну что? Или ты решил еще больше оптимизировать "объект не нужен — не надо вызывать конструктор (не глядя в него)"

_M_> Здравствуйте, tol05, Вы писали:


_M_>T>Этот вопрос подобен вопросу "если я не использую объект, возвращаемый ф-цией, то зачем мне вообще в ф-цию заходить?"


_M_>+1


Нет, не подобен.
Этот вопрос аналогичен "если все, что делает ф-я не нужно, можно ли ее не вызывать".
Re[2]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 04.07.07 18:32
Оценка:
Здравствуйте, andrey.bond, Вы писали:

AB>А можно посмотреть код? Уж больно заинтересовала меня это ваша функция...


ИМХО ф-й которые возвращают значение, но оно редко используется много в фрейморке. К примеру, MessageBox.Show("Test");

Мой код примерно следующий:


 class A : Base
  {
   // поля A
  }
  class B : Base
  {
   // поля B
  }
  class Result
  {
   //поля Result;
  }
  Base reductionBase(ref Base _base1, ref Base _base2)
  {
   // согласованное изменение полей в _base1, _base2 в зависимости от их величин по определенному алгоритму
   // локальные переменные в которых хранятся результаты согласования полей
   return new Result(локальные_переменные_в_которых_хранятся_результаты_согласования_полей);
   //Result, в дальнейшем нужен не всегда
  }
Re[11]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 18:43
Оценка:
Здравствуйте, <Аноним>, Вы писали:

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

А>Не понял, но это не важно. Какая разница пустой не пустой?

Большая, может в конструкторе реализован Q3, и в момент создания объекта пользователь может немного расслабиться порезавшись в Q3.
Если объект не будет создаваться то и в кваку пользователь уже не сможет поиграть...

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


А>Почему? Он анализирует рекурсивные ф-ии (не уверен, но кажется, иногда заменяя их работу циклом). Он должен только проверить, то что постоянно проверяет сборщик мусора, и проверить это только один раз во время компиляции. Тогда не надо будет делать эту же работу многократно потом.


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

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


А>А еще в конструкторе могут вызываться ресурсы, создаваться файла, отправляться эсэмэски. Даже и.т.д. может делаться в конструкторе. Ну что? Или ты решил еще больше оптимизировать "объект не нужен — не надо вызывать конструктор (не глядя в него)"


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


_M_>>T>Этот вопрос подобен вопросу "если я не использую объект, возвращаемый ф-цией, то зачем мне вообще в ф-цию заходить?"


_M_>>+1


А>Нет, не подобен.

А>Этот вопрос аналогичен "если все, что делает ф-я не нужно, можно ли ее не вызывать".

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

Короче глупый разговор, компилятор должен делать то что ему написали и соответствовать спецификации, он это делает и соответствует. А функция выбирать от балды какие куски кода заменять на NOP'ы никому не нужна.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[3]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 19:05
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Здравствуйте, andrey.bond, Вы писали:


AB>>А можно посмотреть код? Уж больно заинтересовала меня это ваша функция...


А>ИМХО ф-й которые возвращают значение, но оно редко используется много в фрейморке. К примеру, MessageBox.Show("Test");


А>Мой код примерно следующий:



А>
А>  Base reductionBase(ref Base _base1, ref Base _base2)
А>  {
А>   // согласованное изменение полей в _base1, _base2 в зависимости от их величин по определенному алгоритму
А>   // локальные переменные в которых хранятся результаты согласования полей
А>   return new Result(локальные_переменные_в_которых_хранятся_результаты_согласования_полей);
А>   //Result, в дальнейшем нужен не всегда
А>  }
А>


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

Сделал бы так:
    public class SmartAndFastReductor
    {
        private class Reductor
        {
            // переменные в которых хранятся результаты согласования полей
        
            public void reductionBase(ref Base _base1, ref Base _base2)
            {
                // согласованное изменение полей в _base1, _base2 в зависимости от их величин по определенному алгоритму
                // вместо локальных переменных используются переменные класса Reductor
            }

            public Base Result { get { return new Result(переменные_класса_Reductor_в_которых_хранятся_результаты_согласования_полей); } }
        }

        public Base ReductionBaseWithResult(ref Base _base1, ref Base _base2)
        {
            Reductor reductor = new Reductor();
            reductor.reductionBase(ref _base1, ref _base2);
            return reductor.Result;                                                    // экземпляр Result будет создаваться только в случае крайней необходимости
        }

        public void ReductionBaseWithoutResult(ref Base _base1, ref Base _base2)
        {
            Reductor reductor = new Reductor();
            reductor.reductionBase(ref _base1, ref _base2);
        }
    }


Когда не нужно создание Result — вызывай ReductionBaseWithoutResult и тогда время не будет тратиться на медленную операцию создания Result...
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[12]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 04.07.07 19:11
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>а теперь попробуй закоментировать код в методе getInstance это и будет та "оптимизация" которую ты хочешь от компилятора.

_M_>И проверь продолжает ли выполнять свою функцию программа или нет

После сообщения от nikov, в котором было указано, что в конструктор надо заглянуть, я с этим согласился (не согласившись, что это трудно). И тебе писал, что нужно заглянуть.
Игры, в которые играют люди, их сдорово формируют. И кто-то тоже сначала играл в дурака, чтоб боялись, — ты много видел таких, которые не доигрались.
Ты предлагаешь игру склероз?
Re[13]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 04.07.07 19:17
Оценка:
Здравствуйте, <Аноним>, Вы писали:

_M_>>а теперь попробуй закоментировать код в методе getInstance это и будет та "оптимизация" которую ты хочешь от компилятора.

_M_>>И проверь продолжает ли выполнять свою функцию программа или нет

А>После сообщения от nikov, в котором было указано, что в конструктор надо заглянуть, я с этим согласился (не согласившись, что это трудно). И тебе писал, что нужно заглянуть.

А> Игры, в которые играют люди, их сдорово формируют. И кто-то тоже сначала играл в дурака, чтоб боялись, — ты много видел таких, которые не доигрались.
А> Ты предлагаешь игру склероз?

Во время компиляции конструктор может быть пустым, однако во время выполнения он может оказаться и не пустым... Если компилятор посмотрит в конструктор и решит раз он пустой то объект создавать не нужно и выкинет этот код. То во время выполнения окажется что конструктор не пустой, но код-то уже выкинут и получится что компилятор сделал неправильный код.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[14]: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 04.07.07 19:48
Оценка:
Здравствуйте, _Morpheus_, Вы писали:


_M_>Во время компиляции конструктор может быть пустым, однако во время выполнения он может оказаться и не пустым...


Я, к сожалению, таких тонкостей не знал. Не мог бы сказать, как после компиляции пустой конструктор может иметь код. Кажется, какой-то класс, полезный для самомодификации когда-то на форуме упомянался, но затем, был аналогичный вопрос на который не ответили. И платформа (одна из целей), чтоб вирусов не было.
Re[9]: Создается ли класс, когда он не нужен?
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.07.07 08:49
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:
А>Я понял, Вы утверждаете, что алгоритмы распаралеливания кода, попытки его предсказания с расчетом вероятностей ветвления и т.д., (что делается, правда не компилятором а процессором, но делается работа людей, создающих эти алгоритмы), так создание таких алгоритмов проще чем заглянуть в конструктор при компилировании инлайна. Возможно. Но я не вижу сложностей в заглядывании в конструктор.
Я полагаю, это от того, что ты вообще себе слабо представляешь, что такое "заглянуть в конструктор". В подавляющем большинстве случаев доказать отсутствие побочных эффектов не удастся, при этом стоимость попытки доказательства будет чудовищной.
А>Может приведете одну. Конечно, снижение производительности компиляции, но незначительное: инлайн, кажется, выполняется JIT, и ничего, хотя заглядываний при этом хватает.
Там практически нет "заглядываний". Сам код не анализируется, анализируется только сигнатура метода.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: Создается ли класс, когда он не нужен?
От: Lloyd Россия  
Дата: 05.07.07 08:55
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

_M_>Во время компиляции конструктор может быть пустым, однако во время выполнения он может оказаться и не пустым... Если компилятор посмотрит в конструктор и решит раз он пустой то объект создавать не нужно и выкинет этот код. То во время выполнения окажется что конструктор не пустой, но код-то уже выкинут и получится что компилятор сделал неправильный код.


А ты какую компиляцию имеешь в виду: C#-ную или jit?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Создается ли класс, когда он не нужен?
От: _Morpheus_  
Дата: 05.07.07 09:17
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Здравствуйте, _Morpheus_, Вы писали:


_M_>>Во время компиляции конструктор может быть пустым, однако во время выполнения он может оказаться и не пустым... Если компилятор посмотрит в конструктор и решит раз он пустой то объект создавать не нужно и выкинет этот код. То во время выполнения окажется что конструктор не пустой, но код-то уже выкинут и получится что компилятор сделал неправильный код.


L>А ты какую компиляцию имеешь в виду: C#-ную или jit?


C# -> IL
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[16]: Создается ли класс, когда он не нужен?
От: Lloyd Россия  
Дата: 05.07.07 09:24
Оценка:
Здравствуйте, _Morpheus_, Вы писали:

L>>А ты какую компиляцию имеешь в виду: C#-ную или jit?


_M_>C# -> IL


А он говорит о jit-е.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Создается ли класс, когда он не нужен?
От: Аноним  
Дата: 07.07.07 00:16
Оценка:
Думаю вам нечего беспокойться, так как ссылка на объект не сохраняеться, только если вы в конструкторе тела не присваивате какому либо другому объекту.. сборка мусора происходит часто, и мало использованные объекты удаляются мгновенно, но при одном условии если объект занимат не больше 20KB, к таким объектам применяться механизм поколеней. Если объект не содержит массивов и других классов (!), а простые данные, например параметры x и y типа float, разумнее использовать структуры!


Данное сообщение получено с сайта www.gotdotnet.ru
Re[2]: Создается ли класс, когда он не нужен?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 08.07.07 20:05
Оценка:
Здравствуйте, v.vladimir, Вы писали:

VV>Если объект не содержит массивов и других классов (!), а простые данные, например параметры x и y типа float, разумнее использовать структуры!


А так же если объект не использует полиморфизм, не требует реализации интерфейсов (за исключением одного случая), нигде не кастится к object и не имеет большой размер (< нескольких десятков байт).
... << RSDN@Home 1.2.0 alpha rev. 693 on Windows Vista 6.0.6000.0>>
AVK Blog
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.