Re[26]: [OFF] Goto's are evil?
От: Sinclair Россия https://github.com/evilguest/
Дата: 02.12.05 08:46
Оценка: :))) :))
Здравствуйте, ArtDenis, Вы писали:

AD>Это что-то из области "булки на деревьях растут, а Россия-родина слонов"?

Ну, не нравится свинодобывающая промышленность — подставь кознестроительную или оброкосборочную.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[16]: Goto's are evil?
От: Глеб Алексеев  
Дата: 02.12.05 09:34
Оценка: 26 (1)
Здравствуйте, eao197, Вы писали:

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


E>У меня начинает складываться впечатление, как в топиках Metaprogramming et al
Автор:
Дата: 09.07.05
и Lisp
Автор: fionbio
Дата: 12.07.05
: функциональные языки какие крутые (круче них, понятное дело, только яйца)! Вот почему они мейнстримом не стали понять до сих пор не могу?


http://www.softcraft.ru/paradigm/fp/whynotfp.shtml
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[24]: Goto's are evil?
От: reductor  
Дата: 02.12.05 10:03
Оценка:
Здравствуйте, Andir, Вы писали:

A>Здравствуйте, Дарней, Вы писали:


Д>>а то, что наука в нашей стране окончательно прогнила и практически ни на что не годится — это и так известный факт


A> Какая чушь! Прогнила не наука, а максимум — система обучения. А Наука не приемлет государственных границ.


A> C Уважением, Andir!


Одно из другого следует
иначе бы не приходилось открывать вот это: http://www.mccme.ru/head/celi.htm
Re[5]: Goto's are evil?
От: GlebZ Россия  
Дата: 02.12.05 10:41
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Тогда уж еще и Биллу Гейтсу — влияние его империи еще сильнее.

Не пойдет. Гейтс — менеджер и финансист. Ему другая премия полагается(хотя не знаю, нужна ли она ему).

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Goto's are evil?
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.12.05 10:47
Оценка: :)
eao197 wrote:
>
> Pzz>Ну вообще, по-моему, это правильно. Диссертация все же должна быть про
> Pzz>науку, а не про то, какую замечательную программу можем мы написать. И
> Pzz>оцениваться диссертация, по-моему, должна в первую очередь с точки
> Pzz>зрения научного вклада.
>
> А вот мне интересно, за какие открытия присуждают звания "кандидата
> технических наук"?

За учебно-тренировочные.
Posted via RSDN NNTP Server 2.0
Re[18]: Goto's are evil?
От: reductor  
Дата: 02.12.05 10:51
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Простите, но если вы не понимаете, что интероперабельность делается не только одним extern-вызовом функций, то вы просто дилетант.

Сейчас мы выясним кто здесь дилетант.


R>>Уфф. Меня аж чуть просветление не хватило. То есть это не баг, а _фича_ Си++ такое управление памятью?

C>Да, причем она дает достаточно много преимуществ по сравнению с другими языками.

Опишите их. По сравнению с Окамлом, Хаскелем и Cyclone.

R>>Вообще, прежде чем ответить, хочется конечно понять для чего оно вам такое нужно.

R>>А то ведь есть такое: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Gc.html
C>Ну GC. И что? Кого сейчас этим можно удивить?

Во-первых удивить этим можно С++ к которому такой GC не прицеишь, а во-вторых — речь идет о memory management, если не ошибаюсь?
это включает в себя и то, что описано на той странице. Покажите мне как в С++ сделать то, что умеет окамловский GC.
и не в C++ для .NET, ага?

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


R>>А есть и такое: http://www.research.att.com/projects/cyclone/online-manual/main-screen008.html

C>

C> // Finally, destroy the key and the region
C> free_ukey(key);

C>В морг.

че?

C>Да и подобное делается с помощью пулов в обычном С++.


Вы о чем вообще. Пул — это что, средство _языка_ должно быть?

R>>Но хочется понять долго ли мемори менеджмент в С++ доходил до state-of-the-art, чтобы достигнуть достигать такого — язык, к которому даже GC нормальный не прицепишь. А то мне кажется, идея такого мемори менеджмента мягко говоря не нова.

C>Почему же, консервативные GC подцепляются без проблем (лично Boehm GC использовал). А С++/CLI вообще рассчитан на точную сборку.

Консервативные GC идут туда же, куда автопойнтеры, смартпойнтеры и всякая другая жуть на подпорках для эмуляции GC.
сейчас, на секундочку, 2005 год заканчивается.
что касается C++ на .NET, речь началась про С++, который у страуструпа, а не который на .NET. Не увиливайте.


C>А вот покажите мне, пожалуйста, язык с понятием умных указателей, автоматических объектов, placement new, и при этом не клон С++


Вы сами перечитали хоть перед тем как это отправить?
Во-первых это к языку как таковому отношения не имеет, во-вторых, зачем какому-то языку костыль, если в нем изначально все сделано правильно. смартпойнтеры... надо же.


C>(Hint: наиболее близко к этому подходит язык D).

Очень смешно, но не в тему.



C>>>2) Взаимодействие с кодом на С. Где у нас еще есть extern "C"?

R>>Хм.
R>>С/Objective-C/D/Cyclone ?
C>C не считаем. Objective-C страдает с управлением памятью, да и недоделаный он вообще какой-то. D — да, но это последователь С++.

C>Cyclone — слишком мало возможностей. Нет OOP, темплейтов и т.п.


Чего еще там нет? Вы это почитав/подумав написали?
"т.п." там нет. да.


R>>А вообще конечно это одна из самых важных и уникальных идей и языка С++, да..

R>>Скажите, а foreign export ccall в Хаскеле написать уже нет?
R>>или там external в O'Caml
C>Простите, но если вы не понимаете, что интероперабельность делается не только одним extern-вызовом функций, то вы просто дилетант.

А расскажите мне чем она делается?
А то у меня вообще тут автомат генерирует все. И я потом пользуюсь.
Получается, что даже проще.


C>И нет. Ни Хаскел, ни OCaml не имеют даже близких возможностей интероперабельности.


Близких, это каких?
А то интересно очень.

C>>>Я писал на OCaml'е и немного на Haskell'е, например. Неплохо, но далеко

C>>>не самая лучшая вещь с начала времен.
R>>А расскажите какая лучшая?
C>Никакая. Но функциональные языки уж точно на нее не тянут.

Расскажите почему. Подробно. И покажите.

R>>Кстати еще интересно чем вам так мемори менеджмент в окамле и хаскеле не угодил. Правда.

C>Не всегда GC (и связаный с ним оверхед) нужен. И кое-где он не нужен совсем.

А вот это здорово.
Расскажите какой оверхед у GC. _Особенно_ Окамловского.
И почему окамл быстрее С++ при этом.
Re[9]: Goto's are evil?
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.12.05 10:53
Оценка:
Cyberax wrote:
>
>>> Надо сказать, что ядро к окружению отношение не очень большое имеет (а
>>> Unix — это прежде всего окружение). То есть на Linux'е можно запустить и
>>> встроеное устройство вообще без файловой системы. Кроме того, критикам
>>> Линуса стоит напомнить, что есть куча *BSD-систем, которые так и не
>>> набрали популярность (в отличие от Линукса).
>> Вообще без файловой системы, это вряд ли.
>
> Сам такое устройство видел. Делается без проблем — все нужное пишется в
> виде ядерных модулей и статически линкуется.

Так можно, но зачем тогда Линух? Почему не eCos или RTEMS, которые как
раз предназначены быть прилинкованы к программе в виде библиотеки.

По-моему, Linux без user space это все же извращение...

А что касается "без проблем", инициализацию в ядре придется таки
подхачить, чтобы оно /sbin/init не пыталось запускать. Для многих, хотя
и не для всех, идея что-то поковырять в ядре не кажется беспроблемной
Posted via RSDN NNTP Server 2.0
Re[10]: Goto's are evil?
От: Cyberax Марс  
Дата: 02.12.05 11:11
Оценка:
Pzz wrote:

> Так можно, но зачем тогда Линух? Почему не eCos или RTEMS, которые как

> раз предназначены быть прилинкованы к программе в виде библиотеки.
> По-моему, Linux без user space это все же извращение...

Куча готовых драйверов, сервисов ядра и т.п.

> А что касается "без проблем", инициализацию в ядре придется таки

> подхачить, чтобы оно /sbin/init не пыталось запускать.

Не помню, но кажется это делается даже из make menuconfig.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[20]: Goto's are evil?
От: reductor  
Дата: 02.12.05 11:12
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>reductor wrote:


>> ПК>Пожалуй, правильнее говорить об управлении временем жизни объектов,

>> с чем C++, действительно, справляется лучше ряда других языков
>> благодаря детерминированному разрушению объектов. GC этой задачи не
>> решает.
>> Я все же не понимаю кое-чего. Для каких задач нужно такое управление?

C>Например, если нельзя допускать пауз GC и большого оверхеда

C>конкурентного GC. Или если существуют гораздо более эффективные методы
C>управления памятью для данной задачи (preallocated пулы, например). Или
C>если требуется детерминированое уничтожение объекта.

Вы на чей вопрос здесь отвечаете?
Я спрашивал для каких задач. Конкретнее.
Опять же, про паузы интересно.
http://www.ocaml-tutorial.org/garbage_collection

Эффективное управление...

>> Но даже если так, почему С++ здесь справляется лучше тех языков, у

>> которых нет проблем с алиасингом?

C>А в С++ нет проблем с алиасингом. Более того, он тоже успешно

C>используется для некоторых трюков.

Переведите


C>Вот вам прямо с About Haskell


Что вы хотели сказать цитированием мне этого sales talk десятилетней давности?


>> Окамла, у которого очень прогрессивный копирующий GC при котором куча

>> всегда утрамбована и который еще и полностью управляемый?
>> Или чем С++ здесь лучше Cyclone c его регионами и прочим?

C>А говорите "выучить язык за пару дней"...


Говорю.

C>В С++ продумано взаимодействие аллокаторов, стандартных контейнеров,

C>алгоритмов и т.п. Например, как мне поместить в контейнер OCaml'а
C>объект, созданый в блоке shared memory? Причем указатели в этом объекте
C>представлены в виде смещений относительно начала блока, а null pointer
C>представлен в виде указателя со смещением -1.

Вы будете продолжать фантазировать или хотя бы прочитаете мануал по окамлу?
А то мало того, что придумываете жуть всякую, еще и жуть, которая к особенностям языка (в том числе и С++) вообще не относится.
Указатели, объекты, shared memory... мнда.
И кстати.
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Foreign.html
Re[19]: Goto's are evil?
От: Cyberax Марс  
Дата: 02.12.05 12:02
Оценка:
reductor wrote:

> R>>Уфф. Меня аж чуть просветление не хватило. То есть это не баг, а

> _фича_ Си++ такое управление памятью?
> C>Да, причем она дает достаточно много преимуществ по сравнению с
> другими языками.
> Опишите их. По сравнению с Окамлом, Хаскелем и Cyclone.

См. ниже.

> R>>Вообще, прежде чем ответить, хочется конечно понять для чего оно

> вам такое нужно.
> R>>А то ведь есть такое:
> http://caml.inria.fr/pub/docs/manual-ocaml/libref/Gc.html
> C>Ну GC. И что? Кого сейчас этим можно удивить?
> Во-первых удивить этим можно С++ к которому такой GC не прицеишь, а
> во-вторых — речь идет о memory management, если не ошибаюсь?

Ручном управлении памятью.

> это включает в себя и то, что описано на той странице. Покажите мне

> как в С++ сделать то, что умеет окамловский GC.
> и не в C++ для .NET, ага?

В С++ для этого есть другие средства. Зачастую более адекватные.

> После чего попробуйте мне рассказать, что в окамле и где угодно нельзя

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

См. пример в другом письме с объектом в shared memory.

> R>>А есть и такое:

> http://www.research.att.com/projects/cyclone/online-manual/main-screen008.html
> C> // Finally, destroy the key and the region
> C> free_ukey(key);
> C>В морг.
> че?

Руками освобождать ресурсы. Дикость в современном С++.

> C>Да и подобное делается с помощью пулов в обычном С++.

> Вы о чем вообще. Пул — это что, средство _языка_ должно быть?

Нет, благодаря средству языка (а именно placement new) можно
реализовать свое управление памятью для объектов. И в частности данную
систему.

> C>Почему же, консервативные GC подцепляются без проблем (лично Boehm

> GC использовал). А С++/CLI вообще рассчитан на точную сборку.
> Консервативные GC идут туда же, куда автопойнтеры, смартпойнтеры и
> всякая другая жуть на подпорках для эмуляции GC. сейчас, на
> секундочку, 2005 год заканчивается. что касается C++ на .NET, речь
> началась про С++, который у страуструпа, а не который на .NET. Не
> увиливайте.

И что? Можно и точный GC для С++ сделать, но это потребует кооперации со
стороны программиста. В библиотеке Boost.Regex, например, есть такой
один (хотя и примитивный).

> C>А вот покажите мне, пожалуйста, язык с понятием умных указателей,

> автоматических объектов, placement new, и при этом не клон С++
> Вы сами перечитали хоть перед тем как это отправить? Во-первых это к
> языку как таковому отношения не имеет,

Да? Читаем: автоматические объекты — одна из центральных фич языка.
Умные указатели — требуют перегрузки оператора разыменования, так что
это тоже языковая особенность. Placement new — одна из форм ключевого
слова new.

Дальше будете демонстрировать незнание?

> во-вторых, зачем какому-то языку костыль, если в нем изначально все

> сделано правильно. смартпойнтеры... надо же.

Вы не понимаете значение слова "гибкость"? Или наивно полагаете, что
можно предусмотреть все случаи использования заранее?

В качестве примера:
struct vtk_object_deleter_t
{
    template <class T> void operator()(T *_ptr)
    {
       _ptr->Delete();
    }
} vtk_object_deleter;

shared_ptr<vtkBoxWidget> someFunc()
{
    shared_ptr<vtkBoxWidget> box_widget(vtkBoxWidget::New(), 
vtk_object_deleter);
    ...
    return box_widget;
}

Имеем: библиотека VTK, все объекты в ней создаются с помощью
статического метода New, а уничтожаются методом Delete. Требуется
написать функцию, которая будет создавать объект, чего-то с ним делать и
возвращать его. При этом я не должен заботиться о необходимости ручного
вызова Delete.

> C>Cyclone — слишком мало возможностей. Нет OOP, темплейтов и т.п.

> Чего еще там нет? Вы это почитав/подумав написали?
> "т.п." там нет. да.

Когда я в последний раз смотрел — еще не было. Теперь добавили, но все
равно с ограничениями.

> C>Простите, но если вы не понимаете, что интероперабельность делается

> не только одним extern-вызовом функций, то вы просто дилетант.
> А расскажите мне чем она делается? А то у меня вообще тут автомат
> генерирует все. И я потом пользуюсь.
> Получается, что даже проще.

Это _использование_ C через проксики, а не полноценная
интероперабельность с ним. А то так можно взять SOAP и сказать, что с
помощью него можно с С интероперировать.

> C>И нет. Ни Хаскел, ни OCaml не имеют даже близких возможностей

> интероперабельности.
> Близких, это каких?

Битовые поля? union'ы? #pragma pack? Поддержка __stdcall, __fastcall и
других calling conventions. Поддержка сторонних аллокаторов.

> R>>А расскажите какая лучшая?

> C>Никакая. Но функциональные языки уж точно на нее не тянут.
> Расскажите почему. Подробно. И покажите.

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

> R>>Кстати еще интересно чем вам так мемори менеджмент в окамле и

> хаскеле не угодил. Правда.
> C>Не всегда GC (и связаный с ним оверхед) нужен. И кое-где он не нужен
> совсем.
> А вот это здорово. Расскажите какой оверхед у GC.

Могу и рассказать — как работают GC я знаю в мельчайших подробностях.
Можете почитать тему:
http://rsdn.ru/Forum/Message.aspx?mid=993364&amp;only=1
Автор: Cyberax
Дата: 18.01.05


> _Особенно_ Окамловского. И почему окамл быстрее С++ при этом.


Не быстрее. Просто иногда помогает отсутствие алиасинга (о котором в С++
можно сказать компилятору с помощью слова restrict).

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[17]: Goto's are evil?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.12.05 12:17
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

E>>У меня начинает складываться впечатление, как в топиках Metaprogramming et al
Автор:
Дата: 09.07.05
и Lisp
Автор: fionbio
Дата: 12.07.05
: функциональные языки какие крутые (круче них, понятное дело, только яйца)! Вот почему они мейнстримом не стали понять до сих пор не могу?


ГА>http://www.softcraft.ru/paradigm/fp/whynotfp.shtml


Не удержался...

Функциональное программирование прекрасно, оно — радость созерцания. Как только кто-то поймет функциональное программирование, он немедленно перейдет к нему. Массы, которые застряли в устаревшем императивном и объектно-ориентированном программировании, делают это из слепого предубеждения. Они просто не понимают.

Каким-то религиозным духом попахивает
Хотя интересно было бы найти время покопаться в исходниках unison, он вроде на OCaml был реализован. В свое время и ООП пыталось пробивать себе дорогу.

В предыдущей колонке [1] перечислены некоторые из таких применений, и подчеркнуто как используется мощность функциональных языков. Разработчиков сетей связи привлекает Erlang своей поддержкой параллелизма и распределенных вычислений; последнее непосредственно связано с тем фактом, что функциональные данные, являющиеся неизменным, хорошо пригодны для передачи по сети. Создателей систем доказательств теорем привлекает ML с его поддержкой символьных вычислений. Генетики тяготеют к CPL/Kleisli, потому что его система типов поддерживает доступ к гетерогенным базам данных, и потому что математические свойства функциональных языков могут использоваться для оптимизации запросов. Разработчики экспертных систем привлечены к Natural Expert, потому что ленивые вычисления походят на рассуждения обратным логическим выводом, и потому что ленивые вычисления дают возможность создавать экономичный интерфейс к базам данных.

Хочется добавить, что C, C++ и Java успешно работают во всех этих областях
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[21]: Goto's are evil?
От: Cyberax Марс  
Дата: 02.12.05 12:21
Оценка:
reductor wrote:

> C>Например, если нельзя допускать пауз GC и большого оверхеда

> C>конкурентного GC. Или если существуют гораздо более эффективные методы
> C>управления памятью для данной задачи (preallocated пулы, например). Или
> C>если требуется *детерминированое* уничтожение объекта.
> Вы на чей вопрос здесь отвечаете?
> Я спрашивал для каких задач. Конкретнее.

Игры, требовательные десктопные приложения, системный софт.

> Опять же, про паузы интересно.


RTFM: http://www.memorymanagement.org/

> C>А в С++ нет проблем с алиасингом. Более того, он тоже успешно

> C>используется для некоторых трюков.
> Переведите

В С++ нет проблем с накладывающимися массивами, так как они с помощью
адресной арифметики могут быть использованы для интересных
inplace-преобразований.

> C>Вот вам прямо с About Haskell

> Что вы хотели сказать цитированием мне этого sales talk десятилетней
> давности?

А что, вы один должны гнать sales-talk десятилетней давности про GC?

> C>В С++ продумано взаимодействие аллокаторов, стандартных контейнеров,

> C>алгоритмов и т.п. Например, как мне поместить в контейнер OCaml'а
> C>объект, созданый в блоке shared memory? Причем указатели в этом объекте
> C>представлены в виде смещений относительно начала блока, а null pointer
> C>представлен в виде указателя со смещением -1.
> Вы будете продолжать фантазировать или хотя бы прочитаете мануал по
> окамлу?

КАК мне разместить, скажем, список OCaml'а в shared memory и передать на
него ссылку в другой процесс? В С++ это делается так:
   //Type of shared memory vector
   typedef vector<int, shmem_allocator_int_t > MyVect;
   //Create named vector
   MyVect *shmem_vect = segment.construct<MyVect> 
("ShmVect")(segment.get_raw_alloc_algo());
   for(int i = 0; i < max; ++i){
      shmem_vect->push_back(i);
   }

В другом процессе:
   typedef vector<int, shmem_allocator_int_t > MyVect;
   MyVect *shmem_vect = segment.find<MyVect>("ShmVect").first;
   //А теперь можно, например, посортировать вектор.
   std::sort(shmem_vect->rbegin(), shmem_vect->rend());


Хотя я знаю, что вы скажете — дадите мне ссылку на документацию по FFI и
станете рассказывать, что shared memory устарел и никому не нужен.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[11]: Goto's are evil?
От: Pzz Россия https://github.com/alexpevzner
Дата: 02.12.05 12:26
Оценка:
Cyberax wrote:
>
>> Так можно, но зачем тогда Линух? Почему не eCos или RTEMS, которые как
>> раз предназначены быть прилинкованы к программе в виде библиотеки.
>> По-моему, Linux без user space это все же извращение...
>
> Куча готовых драйверов, сервисов ядра и т.п.

Ну, куча драйверов не нужна. Нужны именно те, которые соответствуют
вашей embedded системе. А таковых может и не быть.

Что до сервисов, они гораздо в более удобном виде доступны из user space.

>> А что касается "без проблем", инициализацию в ядре придется таки

>> подхачить, чтобы оно /sbin/init не пыталось запускать.
>
> Не помню, но кажется это делается даже из make menuconfig.

По-моему, все же не делается. И оно еще обижается, если у него нету хоть
какой-нибудь рутовой файловой системы.
Posted via RSDN NNTP Server 2.0
Re[12]: Goto's are evil?
От: Cyberax Марс  
Дата: 02.12.05 12:29
Оценка:
Pzz wrote:

>> Куча готовых драйверов, сервисов ядра и т.п.

> Ну, куча драйверов не нужна. Нужны именно те, которые соответствуют
> вашей embedded системе. А таковых может и не быть.

Ну вот как раз в Линуксе они были Этот девайс — промышленный
контроллер с видеокамерой.

>>> А что касается "без проблем", инициализацию в ядре придется таки

>>> подхачить, чтобы оно /sbin/init не пыталось запускать.
>> Не помню, но кажется это делается даже из make menuconfig.
> По-моему, все же не делается. И оно еще обижается, если у него нету хоть
> какой-нибудь рутовой файловой системы.

Может быть, уже не помню, а смотреть лень Но оно точно очень просто
делается.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[4]: Goto's are evil?
От: 0xDEADBEEF Ниоткуда  
Дата: 02.12.05 13:12
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Здравствуйте, 0xDEADBEEF, Вы писали:


M>Откровенно говоря , после взгляда на вход в середину цикла , разбираться что этот код делает — пропадает у меня охота ..


В середину бесконечного цикла — it makes a lot of difference.
Впрочем, если вы послушный ребенок и никогда не стреляли из рогатки, потому что мама запрещает, я вас понимаю...

Впрочем, на вопрос вы не ответили. А вопрос, напоминаю, был: "должен ли goto в данном куске кода быть изничтожен, если да, то какие преимущества сие действие принесет".
__________
16.There is no cause so right that one cannot find a fool following it.
Re[5]: Goto's are evil?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.12.05 13:18
Оценка:
Здравствуйте, 0xDEADBEEF, Вы писали:

DEA>В середину бесконечного цикла — it makes a lot of difference.

DEA>Впрочем, если вы послушный ребенок и никогда не стреляли из рогатки, потому что мама запрещает, я вас понимаю...

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

... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[20]: Goto's are evil?
От: reductor  
Дата: 02.12.05 13:48
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>reductor wrote:


>> R>>Уфф. Меня аж чуть просветление не хватило. То есть это не баг, а

>> _фича_ Си++ такое управление памятью?
>> C>Да, причем она дает достаточно много преимуществ по сравнению с
>> другими языками.
>> Опишите их. По сравнению с Окамлом, Хаскелем и Cyclone.

C>См. ниже.


>> R>>Вообще, прежде чем ответить, хочется конечно понять для чего оно

>> вам такое нужно.
>> R>>А то ведь есть такое:
>> http://caml.inria.fr/pub/docs/manual-ocaml/libref/Gc.html
>> C>Ну GC. И что? Кого сейчас этим можно удивить?
>> Во-первых удивить этим можно С++ к которому такой GC не прицеишь, а
>> во-вторых — речь идет о memory management, если не ошибаюсь?

C>Ручном управлении памятью.


Последний раз — GC не запрещает вручную выделять память. И попробуйте сказать обратное.
При это по ссылке приведены функции, аналог которых попробуйте найдите в С++.


>> это включает в себя и то, что описано на той странице. Покажите мне

>> как в С++ сделать то, что умеет окамловский GC.
>> и не в C++ для .NET, ага?

C>В С++ для этого есть другие средства. Зачастую более адекватные.


Покажите как в С++ дефрагментировать кучу


>> После чего попробуйте мне рассказать, что в окамле и где угодно нельзя

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

C>См. пример в другом письме с объектом в shared memory.


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


>> R>>А есть и такое:

>> http://www.research.att.com/projects/cyclone/online-manual/main-screen008.html
>> C> // Finally, destroy the key and the region
>> C> free_ukey(key);
>> C>В морг.
>> че?

C>Руками освобождать ресурсы. Дикость в современном С++.


Это дикость везде.
Но в данном случае вы говорили про ручное управление. Вас шатает из стороны в сторону. Держитесь.
Или хотите сказать, в Cyclone нельзя делать этого автоматически?


>> C>Да и подобное делается с помощью пулов в обычном С++.

>> Вы о чем вообще. Пул — это что, средство _языка_ должно быть?

C>Нет, благодаря средству языка (а именно placement new) можно

C>реализовать свое управление памятью для объектов. И в частности данную
C>систему.

Вот этого я не понял. Хотите сказать, синтаксическая возможность написать new (buffer) — это достижение и уникальная особенность?
Или создать буфер заранее?
И в cyclone/caml/haskell/lisp этого нельзя?
Great.

>> C>Почему же, консервативные GC подцепляются без проблем (лично Boehm

>> GC использовал). А С++/CLI вообще рассчитан на точную сборку.
>> Консервативные GC идут туда же, куда автопойнтеры, смартпойнтеры и
>> всякая другая жуть на подпорках для эмуляции GC. сейчас, на
>> секундочку, 2005 год заканчивается. что касается C++ на .NET, речь
>> началась про С++, который у страуструпа, а не который на .NET. Не
>> увиливайте.

C>И что? Можно и точный GC для С++ сделать, но это потребует кооперации со

C>стороны программиста. В библиотеке Boost.Regex, например, есть такой
C>один (хотя и примитивный).

Нельзя. Или покажите мне как взять например wxwidgets и запустить его под инкрементальным GC который еще автоматом отучит каждый объект при создании требовать указания родителя.

Кооперация... state-of-the-art система с кооперацией.


>> C>А вот покажите мне, пожалуйста, язык с понятием умных указателей,

>> автоматических объектов, placement new, и при этом не клон С++
>> Вы сами перечитали хоть перед тем как это отправить? Во-первых это к
>> языку как таковому отношения не имеет,

C>Да? Читаем: автоматические объекты — одна из центральных фич языка.


Это не фича, это баг.

C>Умные указатели — требуют перегрузки оператора разыменования, так что

C>это тоже языковая особенность. Placement new — одна из форм ключевого
C>слова new.

И таким образом все эти уникальные особенности сводятся к возможности перегружать операторы?
Это не уникальная черта С++. Можете мне просто поверить.
Я уж не говорю, что само понятие "оператор" — это тоже баг в С++.

C>Дальше будете демонстрировать незнание?


О да, великий гуру.

>> во-вторых, зачем какому-то языку костыль, если в нем изначально все

>> сделано правильно. смартпойнтеры... надо же.

C>Вы не понимаете значение слова "гибкость"? Или наивно полагаете, что

C>можно предусмотреть все случаи использования заранее?

Это не гибкость, это затычки для тех дыр, которые можно кое как заткнуть в С++.
Сделать такое хоть в хаскеле не представляется проблемой.
но там это просто _не нужно_.

C>В качестве примера:


C>Имеем: библиотека VTK, все объекты в ней создаются с помощью

C>статического метода New, а уничтожаются методом Delete. Требуется
C>написать функцию, которая будет создавать объект, чего-то с ним делать и
C>возвращать его. При этом я не должен заботиться о необходимости ручного
C>вызова Delete.

Хотите сказать, где-то так нельзя?
Я вам там кидал ссылку на то, что в стандартной библиотеке хаскеля это делает.

>> C>Cyclone — слишком мало возможностей. Нет OOP, темплейтов и т.п.

>> Чего еще там нет? Вы это почитав/подумав написали?
>> "т.п." там нет. да.

C>Когда я в последний раз смотрел — еще не было. Теперь добавили, но все

C>равно с ограничениями.

Знаете, это не разговор. Ручное управление памятью — это очень низкого уровня класс задач.
И Cyclone при этом дает ее выполнять с помощью гораздо более высокуровневых инструментов, чем С++
и гораздо мощнее.
Система типов ML, экзистенциальные и абстрактные типы, сабтайпинг, полиморфные структуры, регионы, блаблабла.
Кроме того, что некоторые вещи в С++ будешь делать год, чтобы заработало, другие там еще и вовсе невозможны по фундаментальным причинам.
Вы вскрыли самое больное место С++ — его Си наследие в области того же управления памяти зачем-то.
Даже фортран ведет себя более пристойно в этом смысле.
А потом опять вскрыли — всю эту жуткую систему перегрузки и шаблонов, которая пыхтит, сопит и очень часто не может сделать даже простейшие вещи.

продавец из вас прямо скажем, не очень

>> C>Простите, но если вы не понимаете, что интероперабельность делается

>> не только одним extern-вызовом функций, то вы просто дилетант.
>> А расскажите мне чем она делается? А то у меня вообще тут автомат
>> генерирует все. И я потом пользуюсь.
>> Получается, что даже проще.

C>Это _использование_ C через проксики, а не полноценная

C>интероперабельность с ним. А то так можно взять SOAP и сказать, что с
C>помощью него можно с С интероперировать.

Можно, а что вас не устраивает, кстати?


>> C>И нет. Ни Хаскел, ни OCaml не имеют даже близких возможностей

>> интероперабельности.
>> Близких, это каких?

C>Битовые поля? union'ы? #pragma pack? Поддержка __stdcall, __fastcall и

C>других calling conventions. Поддержка сторонних аллокаторов.

ЭЭ... foreign import stdcall в хаскеле? Ну и я там ссылку кидал на модуль Foreign.*
А в чем вообще проблема-то?
Что мешает _кому угодно_ завести такую поддержку?
Как и аллокаторы и что угодно еще

>> R>>А расскажите какая лучшая?

>> C>Никакая. Но функциональные языки уж точно на нее не тянут.
>> Расскажите почему. Подробно. И покажите.

C>Преимущества пока что не перевешивают недостатков. Я бы предпочел


Так а какие недостатки-то. Меня этот вопрос сводит с ума.

C>обычный императивный язык с небольшими функциональными расширениями,

C>пока в этом направлении движется C#.

Да, C# движется, пока не дойдет до F#
а F# движется пока не дойдет до окамла.
Вы этого события ждете?

>> R>>Кстати еще интересно чем вам так мемори менеджмент в окамле и

>> хаскеле не угодил. Правда.
>> C>Не всегда GC (и связаный с ним оверхед) нужен. И кое-где он не нужен
>> совсем.
>> А вот это здорово. Расскажите какой оверхед у GC.

C>Могу и рассказать — как работают GC я знаю в мельчайших подробностях.

C>Можете почитать тему:
C>http://rsdn.ru/Forum/Message.aspx?mid=993364&amp;only=1
Автор: Cyberax
Дата: 18.01.05


О чем вы там вообще? Что еще за JIT и каким образом это относится к окамлу?
Ну и мельчайшие подробности. Вы откуда это взяли?

>> _Особенно_ Окамловского. И почему окамл быстрее С++ при этом.


C>Не быстрее. Просто иногда помогает отсутствие алиасинга (о котором в С++

C>можно сказать компилятору с помощью слова restrict).

Бум!
все, приехали. просто отсутствие aliasing и то фигня — просто скажи restrict и будет все в ажуре.
Re[6]: Goto's are evil?
От: 0xDEADBEEF Ниоткуда  
Дата: 02.12.05 14:02
Оценка:
Здравствуйте, eao197, Вы писали:

E>Стрельба из рогатки, кстати, отнюдь не безобидное занятие и запрещается не безосновательно.

...переход улицы, кстати, тоже. Но иногда надо.

E>А если ты используешь goto по принципу "запретный плод сладок".

Ну я вроде бы обосоновал почему я применяю goto в данном случае...
Просто я не испытываю по этому поводу комплексов и применяю его там, где оно подходит

А от вас, я тоже хотел бы услышать ответ на вопрос: "должен ли goto в данном куске кода быть изничтожен, если да, то какие преимущества сие действие принесет".

Кстати, вот еще один пример моего goto-любства: http://www.rsdn.ru/Forum/Message.aspx?mid=1470445
Автор: 0xDEADBEEF
Дата: 03.11.05
__________
16.There is no cause so right that one cannot find a fool following it.
Re[5]: Goto's are evil?
От: minorlogic Украина  
Дата: 02.12.05 14:04
Оценка:
Здравствуйте, 0xDEADBEEF, Вы писали:

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


M>>Откровенно говоря , после взгляда на вход в середину цикла , разбираться что этот код делает — пропадает у меня охота ..


DEA>В середину бесконечного цикла — it makes a lot of difference.

DEA>Впрочем, если вы послушный ребенок и никогда не стреляли из рогатки, потому что мама запрещает, я вас понимаю...
Давайте не на личности. ?

DEA>Впрочем, на вопрос вы не ответили. А вопрос, напоминаю, был: "должен ли goto в данном куске кода быть изничтожен, если да, то какие преимущества сие действие принесет".


Я уже писал , goto это НЕЯВНАЯ управляющая конструкция , чтобы понять чем она занимается надо отслеживать логику переходов.
А к примеру do{}while ЯВНО указывает на логику цикла .
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[21]: Goto's are evil?
От: Cyberax Марс  
Дата: 02.12.05 14:29
Оценка:
reductor wrote:

> C>*Ручном* управлении памятью.

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

Не запрещает. Но делает это очень неудобным для использования, да еще и
добавляет проблем — GC во время циклов сборки должен сканировать
выделенные пользователем блоки памяти.

Это создает проблемы с расшареной памятью — может возникнуть race
condition с другим процессом. Массивы объектов тоже должны особым
образом инициализироваться. В общем, RTFM стандарт C++/CLI — там
подробно эти сложности расписаны.

> При это по ссылке приведены функции, аналог которых попробуйте найдите

> в С++.

С++/CLI или Boehm GC — для тех кому это нужно. В большинстве случаев GC
_не_ нужен.

> C>В С++ для этого есть другие средства. Зачастую более адекватные.

> Покажите как в С++ дефрагментировать кучу

1. Не фрагментировать ее. Тем более, что в С++ достаточно для этого средств.
2. Использовать memcpy-moveable-объекты.
3. Сделать move constructor объектам и дефрагментировать на здоровье.
4. Использовать уплотняющий GC.
5. Еще что-то можно придумать.

Придется делать руками (как GC в Boost.Regex), но я не помню, чтобы это
мне когда-нибудь нужно было. Custom'ных аллокаторов для задач мне всегда
хватало.

> C>См. пример в другом письме с объектом в shared memory.

> Мимо кассы.
> Скажите зачем вам нужно выделять руками память и освобождать ее.

Это не требует GC. Консервативный GC ведь вам не нравится, а точный GC
тянет за собой слона.

> C>Руками освобождать ресурсы. Дикость в современном С++.

> Это дикость везде.

Только не в языках с GC. Там это норма.

> Но в данном случае вы говорили про ручное управление. Вас шатает из

> стороны в сторону. Держитесь.

Простите, но связь между этими двумя понятиями — одно из самых больших
преимуществ. И вы после этого говорите, что знаете С++????

> Или хотите сказать, в Cyclone нельзя делать этого автоматически?


Нет. В Cyclone нет деструкторов с С++ной семантикой вызова.

> C>Нет, благодаря *средству языка* (а именно placement new) можно

> C>реализовать свое управление памятью для объектов. И в частности данную
> C>систему.
> Вот этого я не понял. Хотите сказать, синтаксическая возможность
> написать new (buffer) — это достижение и уникальная особенность?

Да (достижение, хотя и не уникальное). Как мне такое сделать в OCaml? Вы
подумайте как это сделать, и что это за собой влечет для GC.

> C>И что? Можно и точный GC для С++ сделать, но это потребует

> кооперации со
> C>стороны программиста. В библиотеке Boost.Regex, например, есть такой
> C>один (хотя и примитивный).
> Нельзя.

Можно. Смотрите tracking_ptr.hpp из xpressive в Boost'е, например. В
xpressive используется простой _точный_ GC.

> Или покажите мне как взять например wxwidgets и запустить его под

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

А нафига это в wxWidgets нужно? Там вполне хватает ручного управления
памятью.

> C>Да? Читаем: автоматические объекты — одна из центральных фич языка.

> Это не фича, это баг.

Ну да. Их же нет в OCaml'е....

> C>Умные указатели — требуют перегрузки оператора разыменования, так что

> C>это тоже языковая особенность. Placement new — одна из форм ключевого
> C>слова new.
> И таким образом все эти уникальные особенности сводятся к возможности
> перегружать операторы?

Как мне в OCaml перегрузить оператор обращения к члену структуры?

> C>Вы не понимаете значение слова "гибкость"? Или наивно полагаете, что

> C>можно предусмотреть все случаи использования заранее?
> Это не гибкость, это затычки для тех дыр, которые можно кое как
> заткнуть в С++.
> Сделать такое хоть в хаскеле не представляется проблемой.
> но там это просто _не нужно_.

Почему-то вы считаете GC — панацеей. И в упор не видите проблем, которые
он создает.

> C>Имеем: библиотека VTK, все объекты в ней создаются с помощью

> C>статического метода New, а уничтожаются методом Delete. Требуется
> C>написать функцию, которая будет создавать объект, чего-то с ним
> делать и
> C>возвращать его. При этом я не должен заботиться о необходимости ручного
> C>вызова Delete.
> Хотите сказать, где-то так нельзя?

Да.

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

> Я вам там кидал ссылку на то, что в стандартной библиотеке хаскеля это

> делает.

Ткните пальцем.

> C>Когда я в последний раз смотрел — еще не было. Теперь добавили, но все

> C>равно с ограничениями.
> Знаете, это не разговор. Ручное управление памятью — это очень низкого
> уровня класс задач.
> И Cyclone при этом дает ее выполнять с помощью гораздо более
> высокуровневых инструментов, чем С++
> и гораздо мощнее.

Не вижу тучи проектов на этом супермощном языке. А лет ему немало уже —
я его в 2001 еще смотрел (если не раньше).

> C>Это _использование_ C через проксики, а не полноценная

> C>интероперабельность с ним. А то так можно взять SOAP и сказать, что с
> C>помощью него можно с С интероперировать.
> Можно, а что вас не устраивает, кстати?

1. Скорость.
2. Уровень интеграции.
3. Трудоемкость сложной интеграции.

> C>Битовые поля? union'ы? #pragma pack? Поддержка __stdcall, __fastcall и

> C>других calling conventions. Поддержка сторонних аллокаторов.
> ЭЭ... foreign import stdcall в хаскеле? Ну и я там ссылку кидал на
> модуль Foreign.*

А __thiscall с __fastcall'ом? В доке по FFI написано про всего две
конвенции — "по умолчанию" и stdcall. Я кстати еще про распространенную
pascal-конвенцию забыл.||*||*

> Что мешает _кому угодно_ завести такую поддержку?


Так ведь не сделали? Значит, что-то мешает.

> Да, C# движется, пока не дойдет до F#

> а F# движется пока не дойдет до окамла.

Мечтатель...

> C>Могу и рассказать — как работают GC я знаю в мельчайших подробностях.

> C>Можете почитать тему:
> C>http://rsdn.ru/Forum/Message.aspx?mid=993364&amp;only=1
Автор: Cyberax
Дата: 18.01.05

> <http://rsdn.ru/Forum/Message.aspx?mid=993364&amp;only=1&gt;
Автор: Cyberax
Дата: 18.01.05

> О чем вы там вообще? Что еще за JIT и каким образом это относится к
> окамлу?
> Ну и мельчайшие подробности. Вы откуда это взяли?

Кхм. Вообще-то JIT — это Just-In-Time компляция, не знать этого стыдно
(кстати, в OCaml'е оно есть для байт-кодов). И читайте всю тему, а не
одно сообщение.

> C>Не быстрее. Просто иногда помогает отсутствие алиасинга (о котором в

> С++
> C>можно сказать компилятору с помощью слова restrict).
> Бум!
> все, приехали. просто отсутствие aliasing и то фигня — просто скажи
> restrict и будет все в ажуре.

Ну да, если я уверен, что в моем коде нет алиасинга, то я могу дать хинт
оптимизатору с помощью атрибута restrict.
Типа так:
void some_func(restrict int *a, restrict int *b)
{
    while(*b!=0)
       *b++=*a++;
}


--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.