Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2011, 16:58   #131
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
ересь какая-то. ещё раз повторяю: мне не нужна экзотика мне нужен нормальный язык
Ересь не ересь, а радиотелескопы фортовыми программами управляли
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.12.2011, 19:13   #132
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Ну почему вы все опираетесь на эти древние модели управления памятью - ручное управление, сборка мусора? Никто не знает про парадигму RAII.

let
f = File("input.txt")
in
{
// Только здесь можно использовать объект f
} // Здесь файл закроется
Ну да, LISP вчера появился.
Код:
(let ((f (file 'input.txt))) ())
А это вы написали очень похоже на область видимости, и немного не в тему выходит. Ваш пример больше "где" но не "как". "Здесь файл закроется" - кем? как он будет удален? Т.е. показали где он будет доступен и удален, но не как.
Код:
{
auto f = File("input.txt");
// do something
// close file
} // к объекту нет доступа здесь и он освобожден из памяти
Это кстати С++

Последний раз редактировалось BOBAH13; 08.12.2011 в 19:21.
BOBAH13 вне форума Ответить с цитированием
Старый 08.12.2011, 19:19   #133
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Это кстати С++
я думаю разница в том что там код in не выполнится если не удалось создать f(то есть открыть файл).
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.12.2011, 19:24   #134
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
я думаю разница в том что там код in не выполнится если не удалось создать f(то есть открыть файл).
Ну а я могу сказать, что зависит от реализации класса File, он может выкинуть std::exception тогда блок вылетит и код дальше по тексту не будет выполненн. Ну или как std::iostream работает is_open() метод, if поставили да и все в конце блока с if закрыли файл. Конечно идея в новой java и C# лучше -> using (File f = File("input.txt")) {} и все тут. Но по сути просто удаление и авто-закрытие файла.
BOBAH13 вне форума Ответить с цитированием
Старый 08.12.2011, 21:00   #135
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Могу предложить восточную философию - критические функции должны иметь недоступные программеру антиподы . new пожалуйста, delete фигу. OpenFile пожалуйста, CloseFile фигу. Вот пусть компилятор и производит все эти анти в конце блока (то есть в операторе } ), где объявлен первый элемент пары. Поначалу необычно, но это не просто сборка мусора, это глобальная подтирка за программером. Уверен все программы автоматически станут намного стабильней. Это как электрон и позитрон, вместе они уравнивают вселенную Вашего процесса .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 08.12.2011 в 21:02.
Utkin вне форума Ответить с цитированием
Старый 08.12.2011, 21:43   #136
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от anyx Посмотреть сообщение
Ну почему вы все опираетесь на эти древние модели управления памятью - ручное управление, сборка мусора? Никто не знает про парадигму RAII. Можно вручную ограничить облась, где ресурс используется, тогда он будет освобождён строго по выходу из блока:
Код:
let
    f = File("input.txt")
in
{
    // Только здесь можно использовать объект f
} // Здесь файл закроется
Ничего, что один из вариантов этого самого "нового" рая - "умные" указатели в плюсах?
Перепишите такой же безопасный и изящный код в случае с взаимоуказывающими объектами. И тут начинается веселье в виде слабых ссылок/невладеющих указателей, которые не дай бог неправильно назначить.
Если брать RAII в целом, то это фигня.
- А давайте инициализировать объект в момент его создания, а когда он больше не нужен - освобождать ресурсы?
- А давайте.
Так и повелось. Офигенно, ёмко, научно, полезно. А самое главное - свежо и инновационно. Додуматься фишки объектов, что лежат в стеке, запилить для объектов в куче - это гениально и не каждому дано.
Цитата:
Сообщение от anyx Посмотреть сообщение
Тут и никакого ручного управления памятью, и освобождение ресурса в определённое время (в отличие от сборки мусора, где освободится неизвестно когда)
Только в сложных иерархиях объектов таки нужно будет какое-никакое ручное управление и так же возможны утечки, при неграмотном использовании.
Цитата:
Сообщение от anyx Посмотреть сообщение
Забыть, как выделяется и освобождается память в языке?! Жесть...
malloc я и не собирался приводить в соответствие с Си, а вот с realloc лоханулся - это да. Слова уже путаю, совсем старый стал.
Цитата:
Сообщение от anyx Посмотреть сообщение
Но в С++ нет сборщика мусора. Только ручное управление памятью, только хардкор!
Но сборщик таки можно запилить и они существуют в природе и кем-то даже наверно используются.
pu4koff вне форума Ответить с цитированием
Старый 09.12.2011, 15:38   #137
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Не надо никаких директив пихать, а то делфи получится.
в Делфи просто помечается функция так, а в плюсах у нее именно имя должно совпадать с именем класса, и вся разница.
Цитата:
В случае иерархии объектов (хуже, если там есть 2 объекта, которые ссылаются друг на друга) это уже не так легко и требует достаточного объема вычислительных ресурсов, чтобы со всем этим разобраться. Нет чёткой границы, куда можно воткнуть проверку на ненужность объекта.
я думаю эта проблема решима, мысли есть, но пока оставлю при себе.
Цитата:
ты можешь себе представить сборщик мусора в драйвере? в котором любое неверное движение заставляет систему уйти в BSOD.
да могу, сборка по ссылкам вполне все сделает верно, а не будет чтото вызывать когда попало.(когда будет запущен сборщик известно)
Цитата:
И перед закрывающей } вставлять делете для объекта/объектов (если нет его упоминания далее по тексту) непосредственно перед компиляцией.
тут лучше или 100% уничтожение строголокальных обьектов или же уменьшение счетчика ссылок.
Цитата:
а вообще я изначально не в тему начал тут флудить, ибо обсуждается здесь высокоуровневый язык
ну вы мне подкинули одну мысль насчет сборщика, дать все-таки возможность ручного уменьшения счетчика(но не более чем на 1), если вдруг допустим надо освободить обьект раньше конца блока.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2011, 19:09   #138
anyx
Форумчанин
 
Регистрация: 10.09.2009
Сообщений: 352
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
известно причем точно известно.
Аргументируйте, а то у меня создалось впечатление, что вы не знаете, что такое сборка мусора.

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
А это вы написали очень похоже на область видимости, и немного не в тему выходит. Ваш пример больше "где" но не "как". "Здесь файл закроется" - кем? как он будет удален? Т.е. показали где он будет доступен и удален, но не как
По выходу из блока будет вызван деструктор объекта.

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

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Ну а я могу сказать, что зависит от реализации класса File, он может выкинуть std::exception тогда блок вылетит и код дальше по тексту не будет выполненн. Ну или как std::iostream работает is_open() метод, if поставили да и все в конце блока с if закрыли файл. Конечно идея в новой java и C# лучше -> using (File f = File("input.txt")) {} и все тут. Но по сути просто удаление и авто-закрытие файла.
И где отсылка к моим предыдущим сообщениям по RAII? Вот кто-нибудь прочитает и из-за синтаксических различий не поймёт, что речь всё о том же

Цитата:
Сообщение от Utkin Посмотреть сообщение
Могу предложить восточную философию - критические функции должны иметь недоступные программеру антиподы . new пожалуйста, delete фигу. OpenFile пожалуйста, CloseFile фигу. Вот пусть компилятор и производит все эти анти в конце блока (то есть в операторе } ), где объявлен первый элемент пары. Поначалу необычно, но это не просто сборка мусора, это глобальная подтирка за программером. Уверен все программы автоматически станут намного стабильней. Это как электрон и позитрон, вместе они уравнивают вселенную Вашего процесса .
И это тоже RAII! Господа, вы пол-страницы обсуждаете одно и то же, думая, что говорите о разных вещах!

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Ничего, что один из вариантов этого самого "нового" рая - "умные" указатели в плюсах?
Перепишите такой же безопасный и изящный код в случае с взаимоуказывающими объектами. И тут начинается веселье в виде слабых ссылок/невладеющих указателей, которые не дай бог неправильно назначить.
Если брать RAII в целом, то это фигня
1. "Плюсы" и "безопасность" - вещи несовместимые.
2. Я не говорю, что RAII - это всё, я говорю, что это хорошее дополнение к сборке мусора, позволяющее закрыть файл/сокет/любой другой ресурс в определённый момент, а не фиг знает когда, как при сборке мусора.
anyx вне форума Ответить с цитированием
Старый 09.12.2011, 19:18   #139
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

кстати
Цитата:
он может выкинуть std::exception тогда блок вылетит и код дальше по тексту не будет выполненн.
и тогда вылетит вся функция а не блок.
либо же писать try-catch блок.

и кстати еще, сборка мусора(не используемой памяти) и уничтожение объектов тоже не обязано быть одним и тем же.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 09.12.2011, 19:28   #140
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
И это тоже RAII! Господа, вы пол-страницы обсуждаете одно и то же, думая, что говорите о разных вещах!
Не совсем. Во-первых, применительно не только ООП. Во-вторых, деструктор тоже будет недоступен программисту. В-третьих, можно дать возможость программеру писать обе функции, но разрешать выполнять только одну, начальную. И потом я не предполагаю явную иницилизацию переменной. Отличия есть и существенные. Примерно также как объявление переменных в Дельфи и С#.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
можно ли подобный текст перевести на человеческий язык? alexxx777 Помощь студентам 0 24.05.2010 19:56
Как создать вид подобный SolidWorks. KemanSR Общие вопросы C/C++ 6 04.05.2010 21:30
Добавить модуль в phpnuke-подобный движок Able2Know Фриланс 3 23.04.2010 16:29
В Access есть тип данных "Счетчик".Есть ли подобный тип данных в MS Sql Server 2000? An_ton SQL, базы данных 5 16.01.2009 17:55