Re[14]: Пределы C++
От: NikeByNike Россия  
Дата: 04.06.08 09:32
Оценка:
Здравствуйте, jazzer, Вы писали:

NBN>>Я писал проект работающий под 6 операционками, начиная от десктопа и заканчивая холодильниками и кондиционерами.

NBN>>Сейчас проект попроще — только 3 разные операционки (их вариации и различные платформы не в счёт)

J>Тогда я не понимаю, о чем ты споришь — в твоем коде тоже будут и голые указатели, и указатели на void (а то и что похуже, типа LPARAM).

Где-то внутри — они есть. Только в 99% случаев я их не вижу.
То что кто-то пишет что-то наподобии:
return ((int (*)(int, int))0x12345678)(1, 1);

не означает что я тоже должен так писать.

J>В первой ссылке написано, что есть такой классный GC для С++, что если не дышать и не топать громко, то он работает примерно так, как должен работать GC в нормальном управляемом языке.

J>А это означает, что GC в том смысле, в котором он рулит в управляемых языках, в С++ нет.
Ага, смартпоинтеров тоже нет. Если их используешь — тоже топать низя. И наследования тоже нет — ану как забудешь виртуальный деструктор? Вобщем ничего нет, одна адресная арифметика.
Нужно разобрать угил.
Re[12]: (-)
От: Erop Россия  
Дата: 04.06.08 09:35
Оценка:
Здравствуйте, dip_2000, Вы писали:

NBN>>Фиговое оправдание. void* имеет ограниченное применение только при разработки либ наподобии STL. Вне этого — повод для увольнения.

_> А различного рода API(начиная с Win API) уже отменили что ли ?
А в какое API ты отдаёшь буфер во владение?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[14]: Пределы C++
От: Roman Odaisky Украина  
Дата: 04.06.08 09:37
Оценка: -1
Здравствуйте, jazzer, Вы писали:

J>А это означает, что GC в том смысле, в котором он рулит в управляемых языках, в С++ нет.


И не может быть.

Желающие могут сделать xor list на языке с GC.
До последнего не верил в пирамиду Лебедева.
Re[12]: Пределы C++
От: Erop Россия  
Дата: 04.06.08 09:37
Оценка:
Здравствуйте, jazzer, Вы писали:


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


А что, из явы с этими интерфейссам можно работать?..

Как-то не понятно, почему то, что из С++ легко позвать неуправляемый код, выдаёшь за то, что нет GC...
Логика какя-то странная...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[10]: Пределы C++
От: NikeByNike Россия  
Дата: 04.06.08 09:39
Оценка:
Здравствуйте, jazzer, Вы писали:

NBN>>Где я писал что есть поддержка???


J>http://www.rsdn.ru/forum/message/2975105.1.aspx
Автор: NikeByNike
Дата: 04.06.08

J>

J>Строго говоря GC в С++ есть, только реально никому не нужен, поэтому традиционно не используется.

J>Твои слова?
Тут нет ни слова про поддержку. Поддержка будет в следующем стандарте.
Это из разряда — в С можно писать в ООП стиле, включая использование виртуальных функций, но вот поддежки ООП в языке нет.

J>Особенно интересно в свете развернувшейся дискуссии, что ты вкладываешь в слово "строго" выше?

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

NBN>>Ну и что? Я могу привести пару дурацких примеров наподобии твоего — доказывающих, что нет смартпоинтеров.

NBN>>Но они есть
J>Да, они есть, а GC нет.
J>Потому что GC — это "создал и забыл", с гарантией, что никогда не получишь указателей в никуда или в мертвый объект.
Ну я примерно так и писал в тестовом проекте. Выделял-выделял-выделял память и не заботился о её удалении и всё работает зашибись. Единственное что я когда пишу — понимаю, что происходит и соблюдаю условия необходимые для работы gc.

J>А GC в стиле "создал и не дай бог забудешь, где и что и как с ним обращаться" — такой GC действительно никому не нужен, разве что в качестве back-end управляемой среды.

C++ у нас феррари
Нужно разобрать угил.
Re[13]: (-)
От: dip_2000 Россия  
Дата: 04.06.08 09:40
Оценка:
Здравствуйте, Erop, Вы писали:

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


NBN>>>Фиговое оправдание. void* имеет ограниченное применение только при разработки либ наподобии STL. Вне этого — повод для увольнения.

_>> А различного рода API(начиная с Win API) уже отменили что ли ?
E>А в какое API ты отдаёшь буфер во владение?
в исходном примере от jazzer'a была немного другая история. мы скорее получали владение. А таких историй масса
Re[15]: Пределы C++
От: NikeByNike Россия  
Дата: 04.06.08 09:40
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

J>>А это означает, что GC в том смысле, в котором он рулит в управляемых языках, в С++ нет.


RO>И не может быть.


Хоть 10 раз можно повторить, это бесполезно пока есть конкретные работающие примеры.
Нужно разобрать угил.
Re[10]: Пределы C++
От: Erop Россия  
Дата: 04.06.08 09:45
Оценка:
Здравствуйте, jazzer, Вы писали:


J>А GC в стиле "создал и не дай бог забудешь, где и что и как с ним обращаться" — такой GC действительно никому не нужен, разве что в качестве back-end управляемой среды.

Например, ты можешь завернуть управляемый указаетль в умный, который просто не даст тебе сделать из него неуправляемый неявно...
В целом я так тебя понял, что ты считаешь, что в C++ нет GC? так как можно получить неуправляемый указатель и он останется после разрушения нашего объекта. Так в С++ много чего можно. Если тебе не нужны неуправляемые указатели, то просо не пользуйся ими
Или ты боишься, что скажется неуправляемость аргументов в функции типа strstr? Так старый С-шный код вроде как GC никак не зовёт...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[14]: (-)
От: NikeByNike Россия  
Дата: 04.06.08 09:46
Оценка:
Здравствуйте, dip_2000, Вы писали:

E>>А в какое API ты отдаёшь буфер во владение?

_>в исходном примере от jazzer'a была немного другая история. мы скорее получали владение. А таких историй масса
Пример jazzer'a никакого отношения к gc не имеет.

Пример с gc выглядит так:

{
  int** pp = gcnew int*( gcnew int(1) );
  **p = 2;
  pp = 0;
  pp = gcnew int*( gcnew int(3) );
}


При использовании подходящей либы — данный код вполне корректен и утечки памяти не происходит.
Нужно разобрать угил.
Re[16]: Пределы C++
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.06.08 09:46
Оценка:
Здравствуйте, NikeByNike, Вы писали:

J>>>А это означает, что GC в том смысле, в котором он рулит в управляемых языках, в С++ нет.


RO>>И не может быть.


NBN>Хоть 10 раз можно повторить, это бесполезно пока есть конкретные работающие примеры.


Пока эти примеры похожи на исключения, только подтверждающие общие правила.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[17]: Пределы C++
От: NikeByNike Россия  
Дата: 04.06.08 09:50
Оценка:
Здравствуйте, eao197, Вы писали:

NBN>>Хоть 10 раз можно повторить, это бесполезно пока есть конкретные работающие примеры.


E>Пока эти примеры похожи на исключения, только подтверждающие общие правила.


Ты о чём?
Нужно разобрать угил.
Re[15]: (-)
От: jazzer Россия Skype: enerjazzer
Дата: 04.06.08 09:52
Оценка:
Здравствуйте, NikeByNike, Вы писали:

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


E>>>А в какое API ты отдаёшь буфер во владение?

_>>в исходном примере от jazzer'a была немного другая история. мы скорее получали владение. А таких историй масса
NBN>Пример jazzer'a никакого отношения к gc не имеет.
Имхо, мой пример как раз в нему отношение и имеет, потому что этот код в системах с GC будет работать без запинки.
И можно будет говорить о том, что в С++ есть GC, только тогда, когда код на С++ с использованием GC будет таким же прозрачным.

NBN>Пример с gc выглядит так:


NBN>
NBN>{
NBN>  int** pp = gcnew int*( gcnew int(1) );
NBN>  **p = 2;
NBN>  pp = 0;
NBN>  pp = gcnew int*( gcnew int(3) );
NBN>}
NBN>


NBN>При использовании подходящей либы — данный код вполне корректен и утечки памяти не происходит.


А можешь продемонстрировать, как это будет с моим примером (ссылка на член структуры)?
Измени его, чтобы удовлетворяло правилам боэмовского GС.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[15]: Неее, у меня самоотвод
От: dip_2000 Россия  
Дата: 04.06.08 09:54
Оценка: +1
Здравствуйте, NikeByNike, Вы писали:

NBN>Пример jazzer'a никакого отношения к gc не имеет.

Слушайте, уважаемый... я щас несколько раз перечитал исходный пост jazzer'a, там несколько раз русским по белому упоминается GC. Но это еще пол беды, началось все с вашей фразы

Строго говоря GC в С++ есть

которую на протяжении всей дисскуссии вас просят прояснить, а прояснения не наступает
Это конечно безумно интересная дисскуссия, но я не готов в ней учавствовать со скоростью 2 поста в минуту Особенно когда посты как минимум на первый взгляд(а для меня и на второй), выглядят противоречащими один другому
Извиняюсь, что вмешался
Посмотрим на сколько у jazzer'a хватит терпения
Re[18]: Пределы C++
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 04.06.08 09:56
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>>>Хоть 10 раз можно повторить, это бесполезно пока есть конкретные работающие примеры.


E>>Пока эти примеры похожи на исключения, только подтверждающие общие правила.


NBN>Ты о чём?


О том, что приведенные в качестве примера разработанные тобой программы, работающие на С++ c GC, не являются достаточным опровержением тезиса о том, что в C++ нет GC. Это всего лишь демонстрация того, что на C++ можно написать так, что какой-то GC будет работать. В общем, как секс ежиков -- очень и очень осторожный.

Но в общем случае для C++ GC до сих пор нет.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[16]: (-)
От: NikeByNike Россия  
Дата: 04.06.08 10:05
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Имхо, мой пример как раз в нему отношение и имеет, потому что этот код в системах с GC будет работать без запинки.

Ойли, ты можешь получить gc-указатель на объект созанный на стеке?

J>И можно будет говорить о том, что в С++ есть GC, только тогда, когда код на С++ с использованием GC будет таким же прозрачным.

Я не вижу никакого смысла отменять возможность выделения памяти на стеке под временные объекты.
Нужно разобрать угил.
Re[4]: GC для C++
От: remark Россия http://www.1024cores.net/
Дата: 04.06.08 10:05
Оценка: 24 (4) +1
Здравствуйте, jazzer, Вы писали:

J>>>1. Отсутствие GC. На С++ крайне сложно писать прототипы и вообще заниматься "быстрой разработкой", просто потому что в С++ ресурсами приходится управлять вручную, в отличие от управляемых языков, в которых все объекты, будучи однажды созданными, живут вечно.


NBN>>Строго говоря GC в С++ есть, только реально никому не нужен, поэтому традиционно не используется.


J>"Строго говоря" — это в стандарте, что ли?

J>Где он есть? Он умеет разруливать касты к голым указателям и обратно? А указатели внутрь структур? (то же самое относится и к умным указателям, кстати)


Для С++ есть ряд GC с разными характеристиками. Причём есть ряд GC так сказать промышленного уровня.
Первое, что надо упомянуть, это естественно Boehm GC:
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

Platforms
The collector is not completely portable, but the distribution includes ports to most standard PC and UNIX/Linux platforms. The collector should work on Linux, *BSD, recent Windows versions, MacOS X, HP/UX, Solaris, Tru64, Irix and a few other operating systems. Some ports are more polished than others. There are instructions for porting the collector to a new platform.


Current users:
Known current users of some variant of this collector include:
The runtime system for GCJ, the static GNU java compiler.
W3m, a text-based web browser.
Some versions of the Xerox DocuPrint printer software.
The Mozilla project, as leak detector.
The Mono project, an open source implementation of the .NET development framework.
The DotGNU Portable.NET project, another open source .NET implementation.
The Irssi IRC client.
The Berkeley Titanium project.
The NAGWare f90 Fortran 90 compiler.
Elwood Corporation's Eclipse Common Lisp system, C library, and translator.
The Bigloo Scheme and Camloo ML compilers written by Manuel Serrano and others.
Brent Benson's libscheme.
The MzScheme scheme implementation.
The University of Washington Cecil Implementation.
The Berkeley Sather implementation.
The Berkeley Harmonia Project.
The Toba Java Virtual Machine to C translator.
The Gwydion Dylan compiler.
The GNU Objective C runtime.
Macaulay 2, a system to support research in algebraic geometry and commutative algebra.
The Vesta configuration management system.
Visual Prolog 6.
Asymptote LaTeX-compatible vector graphics language.


GC консервативный, т.е. никакая дополнительная мета-информация ему не нужна, но зато он считает указателем всё, что похоже на указатель. Т.е. "void*" он будет обрабатывать корректно.


Далее есть HnxGC:
http://hnxgc.harnixworld.com/
Он точный, т.е. ему нужна мета-информация относительно расположения указателей в объектах. Соотв. управляет он только объектами отнаследованными от спец. класса. Плюс использует умные указатели и подсчёт ссылок. Т.е. не-циклический мусор удаляется синхронно. А циклический во время запуска сборки мусора, которая соотв. проходит очень редко. Если нет циклического мусора, то видимо сборку можно вообще не запускать, но на всякий случай она всё равно "будет там".


SGCL
http://sourceforge.net/projects/sgcl/
Его не смотрел, но в описании написано "Precise, concurrent Garbage Collection library for C++.", т.е. видимо тоже использует мета-информацию. Плюс parallel и concurrent.


Не пользуются ими C++ программисты видимо просто из "исторических" причин. Типа мы же 20 обходились без GC, а теперь Вы нам пытаетесь сказать, что без него нельзя писать работающие программы и жить вообще
Хотя можно и писать на C++, и использовтаь GC одновременно — достаточно поглядеть на список пользователей Boehm GC.


1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[16]: Неее, у меня самоотвод
От: NikeByNike Россия  
Дата: 04.06.08 10:07
Оценка:
Здравствуйте, dip_2000, Вы писали:

_>Слушайте, уважаемый... я щас несколько раз перечитал исходный пост jazzer'a, там несколько раз русским по белому упоминается GC. Но это еще пол беды, началось все с вашей фразы

_>

_>Строго говоря GC в С++ есть

_>которую на протяжении всей дисскуссии вас просят прояснить, а прояснения не наступает
http://www.rsdn.ru/forum/message/2975642.1.aspx
Автор: NikeByNike
Дата: 04.06.08

http://www.rsdn.ru/forum/message/2975624.1.aspx
Автор: NikeByNike
Дата: 04.06.08
Нужно разобрать угил.
Re[17]: (-)
От: jazzer Россия Skype: enerjazzer
Дата: 04.06.08 10:08
Оценка:
Здравствуйте, NikeByNike, Вы писали:

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


J>>Имхо, мой пример как раз в нему отношение и имеет, потому что этот код в системах с GC будет работать без запинки.

NBN>Ойли, ты можешь получить gc-указатель на объект созанный на стеке?
Я же сказал, расставь __gc по вкусу.
Естественно, подразумевается, что s создан управляемым.
Прошу прощения, если запутал тебя.

J>>И можно будет говорить о том, что в С++ есть GC, только тогда, когда код на С++ с использованием GC будет таким же прозрачным.

NBN>Я не вижу никакого смысла отменять возможность выделения памяти на стеке под временные объекты.
По этому поводу никто с тобой и не спорит, вроде.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[19]: Пределы C++
От: NikeByNike Россия  
Дата: 04.06.08 10:11
Оценка:
Здравствуйте, eao197, Вы писали:

NBN>>Ты о чём?


E>О том, что приведенные в качестве примера разработанные тобой программы, работающие на С++ c GC

Где я приводил такой пример???

E>не являются достаточным опровержением тезиса о том, что в C++ нет GC.

Ага, если код есть и работает, это не является доказательством его наличия?

E>Это всего лишь демонстрация того, что на C++ можно написать так, что какой-то GC будет работать.

А этого не достаточно, для того чтобы признать, что на С++ можно писать используя gc?

E>В общем, как секс ежиков -- очень и очень осторожный.

Спорно.

E>Но в общем случае для C++ GC до сих пор нет.

Как раз в общем он есть. Просто не используется по нескольким причинам (скорость, нераспространённость, отсуствие поддержки со стороны стандартных либ).
Нужно разобрать угил.
Re[18]: (-)
От: NikeByNike Россия  
Дата: 04.06.08 10:15
Оценка:
Здравствуйте, jazzer, Вы писали:

NBN>>Ойли, ты можешь получить gc-указатель на объект созанный на стеке?

J>Я же сказал, расставь __gc по вкусу.
А это что?

J>Естественно, подразумевается, что s создан управляемым.

J>Прошу прощения, если запутал тебя.

Если я правильно понял, то всё будет выглядеть так:

struct S
{
  int* i;
  S()
  {
    i = gcnew int(1);
  }
};

int* f()
{
  S s;
  return s.i;
}

int main()
{
  int* pi = f();
}
Нужно разобрать угил.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.