Oberon space

General Category => Общий раздел => Тема начата: vlad от Февраль 10, 2012, 04:18:48 pm

Название: обучение управлению памятью
Отправлено: vlad от Февраль 10, 2012, 04:18:48 pm
Поскольку сам info21 цитирует нас на своем ресурсе, то нельзя не прокомментировать :) Вот альтернативная ссылка: http://forum.oberoncore.ru/viewtopic.php?p=70577#p70577
(конечно ссылку на оригинал info21 не дал, ну так что ж с него возьмешь...)

Цитата: Info21
Сформулирую главную мысль покороче, повторившись в 100000-й раз:

В отличие от всевозможных интерпретируемых языков (ФЯ и проч.)

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

Цитата: Info21
автоматическое управление памятью в Обероне позволяет разделить (DIVIDE ET IMPERA) две важные и разные вещи:

фазу проектирования структур данных -- когда нужные структуры данных еще не известны -- и

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

Сложные структуры невозможно отразить на статическую память. Тем более в обероне, где не бывает указателей без NEW. Тем более если не думать о статической памяти на этапе проектирования.
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 10, 2012, 04:34:02 pm

Сложные структуры невозможно отразить на статическую память. Тем более в обероне, где не бывает указателей без NEW. Тем более если не думать о статической памяти на этапе проектирования.
Ну дa, обшибся  info21  :) следовало  поставить слово динамическую (ему просто по своей деятельности это было не нужно,а в Обероне нет операции взятия адреса переменной, но смею сказать, большинству обучающихся это не понадобится) .  А вообще на сообщение Валерия мог бы ответить и более внушительно (благо форма исходного сообщения позволяла). Но все это от "лукавого", лично я так и не понял, что хотел сказать Валерий этим сообщением... и о чем были ответы на него. Так что сказать "Конечно, V._S. прав." -в такой ситуации-  что же  "каждый точит что захочет".
Название: Re: обучение управлению памятью
Отправлено: vlad от Февраль 10, 2012, 04:44:03 pm
Ну дa, обшибся  info21  :) следовало  поставить слово динамическую (ему просто по своей деятельности это было не нужно,а в Обероне нет операции взятия адреса переменной, но смею сказать, большинству обучающихся это не понадобится) .

В базовом/школьном курсе по алгоритимизации - конечно не понадобится. Я даже соглашусь, что парить про память там будет бесполезно/вредно.
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 10, 2012, 04:46:08 pm


В базовом/школьном курсе по алгоритимизации - конечно не понадобится. Я даже соглашусь, что парить про память там будет бесполезно/вредно.
А он и говорит про БАЗОВЫЙ курс.А что имел ввиду Валерий   :) :) :) :) - давайте спросим у него
Название: Re: обучение управлению памятью
Отправлено: valexey от Февраль 10, 2012, 04:54:56 pm
Ну дa, обшибся  info21  :) следовало  поставить слово динамическую (ему просто по своей деятельности это было не нужно,а в Обероне нет операции взятия адреса переменной, но смею сказать, большинству обучающихся это не понадобится) .

В базовом/школьном курсе по алгоритимизации - конечно не понадобится. Я даже соглашусь, что парить про память там будет бесполезно/вредно.

В базовом курсе и днамическая память не потребуется - все на стеке. Так что сборщик мусора не при делах.
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 10, 2012, 04:56:26 pm
Ну дa, обшибся  info21  :) следовало  поставить слово динамическую (ему просто по своей деятельности это было не нужно,а в Обероне нет операции взятия адреса переменной, но смею сказать, большинству обучающихся это не понадобится) .

В базовом/школьном курсе по алгоритимизации - конечно не понадобится. Я даже соглашусь, что парить про память там будет бесполезно/вредно.

В базовом курсе и днамическая память не потребуется - все на стеке. Так что сборщик мусора не при делах.
НУ да , а списки, графы, динамические массивы , классы , функциональные типы...
Название: Re: обучение управлению памятью
Отправлено: valexey от Февраль 10, 2012, 05:03:07 pm
НУ да , а списки, графы, динамические массивы , классы , функциональные типы...
Мы ведь все еще про базовый школьный курс? Про 5-7 класс?
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 10, 2012, 05:10:28 pm
НУ да , а списки, графы, динамические массивы , классы , функциональные типы...
Мы ведь все еще про базовый школьный курс? Про 5-7 класс?
  :( Эх Алексей -  реальность такова , сейчас в 5-7 Ю и даже в 8-11 классах учат пользоваться Эксплорером, Вордом....По этому Info21 и вся его шабла имеет полное право издеваться на высказываниями Vlad'a и AlexUs'a. В реальности ИМЕЕТ СМЫСЛ ГОВОРИТЬ о выпускниках ПРОФИЛЬНЫХ лицеев, первых курсах естественнонаучных направлений вузов, продвинутых колледжей... такие вот пироги  :(
Название: Re: обучение управлению памятью
Отправлено: valexey от Февраль 10, 2012, 05:42:26 pm
НУ да , а списки, графы, динамические массивы , классы , функциональные типы...
Мы ведь все еще про базовый школьный курс? Про 5-7 класс?
  :( Эх Алексей -  реальность такова , сейчас в 5-7 Ю и даже в 8-11 классах учат пользоваться Эксплорером, Вордом....По этому Info21 и вся его шабла имеет полное право издеваться на высказываниями Vlad'a и AlexUs'a. В реальности ИМЕЕТ СМЫСЛ ГОВОРИТЬ о выпускниках ПРОФИЛЬНЫХ лицеев, первых курсах естественнонаучных направлений вузов, продвинутых колледжей... такие вот пироги  :(
Ну, эксплорером тоже надо уметь пользоваться :-)
Но вообще, вспоминая как я учился, то среди тех кто интересовался программированием (ходил на углубленку по информатике, в кружок ходил и так далее) ни у кого не было проблем с памятью.

Вообще, мое мнение таково - как только доходим до структур требующих динамической памяти (списки, деревья и прочие графы) так сразу и про память (выделение/освобождение) сказать. Во-первых это просто и даже как-то интуитивно понятно (взял - положи на место когда стало не нужно). Во-вторых это ж отличный пример для демонстрации (а главное - и применения) алгоритмов на этих самых структурах. Для освобождение памяти дерева так или иначе придется таки это дерево обойти, равно как и список. Вначале учимся создавать, затем учимся уничтожать созданное. Полный жизненный цикл.
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 10, 2012, 05:48:25 pm
Но вообще, вспоминая как я учился, то среди тех кто интересовался программированием (ходил на углубленку по информатике, в кружок ходил и так далее) ни у кого не было проблем с памятью.

Вообще, мое мнение таково - как только доходим до структур требующих динамической памяти (списки, деревья и прочие графы) так сразу и про память (выделение/освобождение) сказать. Во-первых это просто и даже как-то интуитивно понятно (взял - положи на место когда стало не нужно). Во-вторых это ж отличный пример для демонстрации (а главное - и применения) алгоритмов на этих самых структурах. Для освобождение памяти дерева так или иначе придется таки это дерево обойти, равно как и список. Вначале учимся создавать, затем учимся уничтожать созданное. Полный жизненный цикл.
С теми кто  :( " интересовался программированием (ходил на углубленку по информатике, в кружок ходил и так далее) "   проблем и нет, но в этом году у нас таких на потоке (50 чел. , специальность прикладная математика) - нет, а в следующем, есть  уверенность ,  что и  "другие" будут в среднем слабее чем в этом.
Название: Re: обучение управлению памятью
Отправлено: valexey от Февраль 10, 2012, 05:58:01 pm
С теми кто  :( " интересовался программированием (ходил на углубленку по информатике, в кружок ходил и так далее) "   проблем и нет, но в этом году у нас таких на потоке (50 чел. , специальность прикладная математика) - нет.
Вопрос конечно риторический, но стоит ли продолжать мучать животинку? В смысле если им это не интересно, то и не будут они ничего уметь и знать. Если они у вас от армии косят и барщину отрабатывают, то как вы ни изгиляйтесь со сборщиками мусора, методиками и прочим - ничего не выйдет (хотя экзамен они сдадут и получат неплохие оценки). Ну, точнее есть только один шанс получить из них что-то вменяемое - заинтересовать. Как-то исхитриться сделать так, чтобы им вот это все стало интересно.

PS. Практика показывает, что студенты в ВУЗе в массе своей (то есть те, которым там НЕ интересно) учатся ровно одному - сдавать экзамены на Отл с минимальными усилиями. Они хорошие психологи. Они могут заучть (наизусть) толстый конспект и научиться правильно отвечать на вопросы преподавателя. При этом у них в голове по профильным предметам - нуль. Несмотря на красный диплом одного из ведущих ВУЗов.
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 10, 2012, 06:11:08 pm
Вопрос конечно риторический, но стоит ли продолжать мучать животинку? В смысле если им это не интересно, то и не будут они ничего уметь и знать. Если они у вас от армии косят и барщину отрабатывают, то как вы ни изгиляйтесь со сборщиками мусора, методиками и прочим - ничего не выйдет (хотя экзамен они сдадут и получат неплохие оценки). Ну, точнее есть только один шанс получить из них что-то вменяемое - заинтересовать. Как-то исхитриться сделать так, чтобы им вот это все стало интересно.

PS. Практика показывает, что студенты в ВУЗе в массе своей (то есть те, которым там НЕ интересно) учатся ровно одному - сдавать экзамены на Отл с минимальными усилиями. Они хорошие психологи. Они могут заучть (наизусть) толстый конспект и научиться правильно отвечать на вопросы преподавателя. При этом у них в голове по профильным предметам - нуль. Несмотря на красный диплом одного из ведущих ВУЗов.

1. Они в большинстве своем не знают что хотят.
2. В специальности "прикладная математика" программированию уделяется много времени, но оно не является ОПРЕДЕЛЯЮЩИМ.
3. Ну да , таких много - но тот навык - "прикладная психология" то же довольно полезен.
4.А вообще , опыт показывает, что именно старательные люди (не обязательно те которым предметы даются ИЗНАЧАЛЬНО легко, т.е. понимание темы к которым приходит относительно поздно ) являются основным "мясом" для контор, и даже получают доступ к КРАСНЫМ КНОПКАМ.
Название: Re: обучение управлению памятью
Отправлено: Илья Ермаков от Февраль 11, 2012, 06:05:54 am
Динамический алгоритм можно отобразить на статическую память, например, с помощью массивов.
В частности, отлаженный вычислительный алгоритм можно отобразить на Фортран, откомпилировать охрененно оптимизирующим компилятором и подключать через DLL.

По поводу памяти - лично я объясняю студентам всегда, как оно внутри устроено. Ну а удалять пусть учатся в курсе низко-системного программирования. Где Assembler/C/программирование над POSIX-подобными API... У меня пока времени на такой курс не хватало. С переходом на ФГОС-3 (образовательные стандарты нового поколения), кажется, получится.
Название: Re: обучение управлению памятью
Отправлено: valexey от Февраль 11, 2012, 07:06:28 am
Динамический алгоритм можно отобразить на статическую память, например, с помощью массивов.
В частности, отлаженный вычислительный алгоритм можно отобразить на Фортран, откомпилировать охрененно оптимизирующим компилятором и подключать через DLL.
Кстати, да. Вот есть библиотека LINPACK (мы ей периодически пользуемся). В девичестве она писана была на фортране, сейчас конечно она уже давно на Сях переписана, но внутренняя структура, логика, интерфейсы остались те же. Что приятно в ней удивило - тамошние функции явно просят сказать им в каком куске памяти нужно работать. То есть явно. Неявно никто в кучу не лезет и менеджер памяти не насилует. А уж что это будет за память - динамическая, статическая или автоматическая, либу не волнует.

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

По поводу памяти - лично я объясняю студентам всегда, как оно внутри устроено. Ну а удалять пусть учатся в курсе низко-системного программирования. Где Assembler/C/программирование над POSIX-подобными API... У меня пока времени на такой курс не хватало. С переходом на ФГОС-3 (образовательные стандарты нового поколения), кажется, получится.
А таки чего там учиться то? Это ж элементарно. Причем тут позикс и асм? Я думаю, что умение освобождать память из под структуры данных нужно учиться когда учишься строить (занимать память под) эту структуру данных.

И еще раз повторю - уметь освобождать память, это прежде всего связано не с памятью а с умением убирать за собой. Работать с произвольным ресурсом (просто память наиболее распространенный ресурс). Кроме того, сборщик мусора не спасет от ВСЕХ утечек памяти. А от утечек других ресурсов не спасет вообще.

Да, и еще - когда начинаешь думать о том как освободить память волей или не волей приходится нарисовать в голове общую схему что с чем у тебя в программе связано. И как устроено. Что позволяет много лучше и яснее понять собственную же программу. Очень полезное упражнение.
Название: Re: обучение управлению памятью
Отправлено: DIzer от Февраль 11, 2012, 07:12:16 am
Динамический алгоритм можно отобразить на статическую память, например, с помощью массивов.
В частности, отлаженный вычислительный алгоритм можно отобразить на Фортран, откомпилировать охрененно оптимизирующим компилятором и подключать через DLL.

По поводу памяти - лично я объясняю студентам всегда, как оно внутри устроено. Ну а удалять пусть учатся в курсе низко-системного программирования. Где Assembler/C/программирование над POSIX-подобными API... У меня пока времени на такой курс не хватало. С переходом на ФГОС-3 (образовательные стандарты нового поколения), кажется, получится.
1 Вы говорите про логическое высокоуровневое отображение  (например стек -структура работающяя про принципу LIFO, с по крайней мере парой всем известных операций) Vlad про низкоуровневое прямое  список в хипе, на статический список
2 Лично я всегда даю простейшую модель - линейная адресация, ее хватает в 90  процентах высокоуровневых приложений, но предупреждаю что высокоуровневые модели, заменяются на более релевантные и или уточняются при переходе низкоуровневому программированию.
Название: Re: обучение управлению памятью
Отправлено: Valery Solovey от Февраль 11, 2012, 05:13:26 pm
А что имел ввиду Валерий   :) :) :) :) - давайте спросим у него
Я увидел задачу, напоминающую учебную, и предоставил схему её решения. Времени я на неё потратил больше, чем Vlad, но недостаточно, чтобы уверенно сказать, что она работает. Для этого понадобилось бы ещё некоторое количество времени. Ещё несколько человек предоставили свои варианты решения. После этого началось решение задачи "что лучше". Я не называю своё решение лучшим. Я согласен, что зачастую следует использовать стандартные библиотеки. Но выбор лучшего алгоритма - это другая задача.
Поскольку, как я считаю, целью было получение схемы, то я не сделал ошибок. Вы сказали, что мои ошибки что-то показывают. Но в исходной задаче решение было у меня в голове, а код - это реплика, с помощью которой я хотел передать решение. В устной речи бывают оговорки, и если собеседник замечает неточность, то он акцентирует на ней внимание, чтобы говорящий добавил в свои слова определённость.
Поскольку задача имела черты учебной, то я решил немного по этому поводу высказаться. Почему, собсна, sort() лучше? С чего Vlad взял, что решением будет она, а не "i++; println();"? Потому-то она и учебная, что ученик должен понять, что здесь будет решением. А отвeт "правильно будет использовать sort()" или "... подсчётом", как я уже говорил - это решение другой задачи. Важной для инженера, да, но не сейчас.
Название: Re: обучение управлению памятью
Отправлено: vlad от Февраль 12, 2012, 03:06:08 pm
Да, и еще - когда начинаешь думать о том как освободить память волей или не волей приходится нарисовать в голове общую схему что с чем у тебя в программе связано. И как устроено. Что позволяет много лучше и яснее понять собственную же программу. Очень полезное упражнение.

Кстати да, подтверждаю. При всей доступности в С++ смартпоинтеров с подсчетом ссылок (shared_ptr, прямой аналог ссылок языков с GC) в дело, как правило, идут более специализированные смартпоитеры - отражающие семантику владения (scoped_ptr) и передачи владения (auto_ptr). Именно потому, что дают лучшее понимание что, откуда и куда. Например, классическая фабрика всегда будет возвращать auto_ptr.