Автор Тема: обучение управлению памятью  (Прочитано 9121 раз)

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
обучение управлению памятью
« : Февраль 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. Тем более если не думать о статической памяти на этапе проектирования.

DIzer

  • Гость
Re: обучение управлению памятью
« Ответ #1 : Февраль 10, 2012, 04:34:02 pm »

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: обучение управлению памятью
« Ответ #2 : Февраль 10, 2012, 04:44:03 pm »
Ну дa, обшибся  info21  :) следовало  поставить слово динамическую (ему просто по своей деятельности это было не нужно,а в Обероне нет операции взятия адреса переменной, но смею сказать, большинству обучающихся это не понадобится) .

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

DIzer

  • Гость
Re: обучение управлению памятью
« Ответ #3 : Февраль 10, 2012, 04:46:08 pm »


В базовом/школьном курсе по алгоритимизации - конечно не понадобится. Я даже соглашусь, что парить про память там будет бесполезно/вредно.
А он и говорит про БАЗОВЫЙ курс.А что имел ввиду Валерий   :) :) :) :) - давайте спросим у него
« Последнее редактирование: Февраль 10, 2012, 04:49:09 pm от DIzer »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: обучение управлению памятью
« Ответ #4 : Февраль 10, 2012, 04:54:56 pm »
Ну дa, обшибся  info21  :) следовало  поставить слово динамическую (ему просто по своей деятельности это было не нужно,а в Обероне нет операции взятия адреса переменной, но смею сказать, большинству обучающихся это не понадобится) .

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

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

DIzer

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

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

В базовом курсе и днамическая память не потребуется - все на стеке. Так что сборщик мусора не при делах.
НУ да , а списки, графы, динамические массивы , классы , функциональные типы...
« Последнее редактирование: Февраль 10, 2012, 04:57:57 pm от DIzer »

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: обучение управлению памятью
« Ответ #6 : Февраль 10, 2012, 05:03:07 pm »
НУ да , а списки, графы, динамические массивы , классы , функциональные типы...
Мы ведь все еще про базовый школьный курс? Про 5-7 класс?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

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

valexey

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

Вообще, мое мнение таково - как только доходим до структур требующих динамической памяти (списки, деревья и прочие графы) так сразу и про память (выделение/освобождение) сказать. Во-первых это просто и даже как-то интуитивно понятно (взял - положи на место когда стало не нужно). Во-вторых это ж отличный пример для демонстрации (а главное - и применения) алгоритмов на этих самых структурах. Для освобождение памяти дерева так или иначе придется таки это дерево обойти, равно как и список. Вначале учимся создавать, затем учимся уничтожать созданное. Полный жизненный цикл.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: обучение управлению памятью
« Ответ #9 : Февраль 10, 2012, 05:48:25 pm »
Но вообще, вспоминая как я учился, то среди тех кто интересовался программированием (ходил на углубленку по информатике, в кружок ходил и так далее) ни у кого не было проблем с памятью.

Вообще, мое мнение таково - как только доходим до структур требующих динамической памяти (списки, деревья и прочие графы) так сразу и про память (выделение/освобождение) сказать. Во-первых это просто и даже как-то интуитивно понятно (взял - положи на место когда стало не нужно). Во-вторых это ж отличный пример для демонстрации (а главное - и применения) алгоритмов на этих самых структурах. Для освобождение памяти дерева так или иначе придется таки это дерево обойти, равно как и список. Вначале учимся создавать, затем учимся уничтожать созданное. Полный жизненный цикл.
С теми кто  :( " интересовался программированием (ходил на углубленку по информатике, в кружок ходил и так далее) "   проблем и нет, но в этом году у нас таких на потоке (50 чел. , специальность прикладная математика) - нет, а в следующем, есть  уверенность ,  что и  "другие" будут в среднем слабее чем в этом.
« Последнее редактирование: Февраль 10, 2012, 05:52:19 pm от DIzer »

valexey

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

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

DIzer

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

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

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

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: обучение управлению памятью
« Ответ #12 : Февраль 11, 2012, 06:05:54 am »
Динамический алгоритм можно отобразить на статическую память, например, с помощью массивов.
В частности, отлаженный вычислительный алгоритм можно отобразить на Фортран, откомпилировать охрененно оптимизирующим компилятором и подключать через DLL.

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

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: обучение управлению памятью
« Ответ #13 : Февраль 11, 2012, 07:06:28 am »
Динамический алгоритм можно отобразить на статическую память, например, с помощью массивов.
В частности, отлаженный вычислительный алгоритм можно отобразить на Фортран, откомпилировать охрененно оптимизирующим компилятором и подключать через DLL.
Кстати, да. Вот есть библиотека LINPACK (мы ей периодически пользуемся). В девичестве она писана была на фортране, сейчас конечно она уже давно на Сях переписана, но внутренняя структура, логика, интерфейсы остались те же. Что приятно в ней удивило - тамошние функции явно просят сказать им в каком куске памяти нужно работать. То есть явно. Неявно никто в кучу не лезет и менеджер памяти не насилует. А уж что это будет за память - динамическая, статическая или автоматическая, либу не волнует.

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

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

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

Да, и еще - когда начинаешь думать о том как освободить память волей или не волей приходится нарисовать в голове общую схему что с чем у тебя в программе связано. И как устроено. Что позволяет много лучше и яснее понять собственную же программу. Очень полезное упражнение.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: обучение управлению памятью
« Ответ #14 : Февраль 11, 2012, 07:12:16 am »
Динамический алгоритм можно отобразить на статическую память, например, с помощью массивов.
В частности, отлаженный вычислительный алгоритм можно отобразить на Фортран, откомпилировать охрененно оптимизирующим компилятором и подключать через DLL.

По поводу памяти - лично я объясняю студентам всегда, как оно внутри устроено. Ну а удалять пусть учатся в курсе низко-системного программирования. Где Assembler/C/программирование над POSIX-подобными API... У меня пока времени на такой курс не хватало. С переходом на ФГОС-3 (образовательные стандарты нового поколения), кажется, получится.
1 Вы говорите про логическое высокоуровневое отображение  (например стек -структура работающяя про принципу LIFO, с по крайней мере парой всем известных операций) Vlad про низкоуровневое прямое  список в хипе, на статический список
2 Лично я всегда даю простейшую модель - линейная адресация, ее хватает в 90  процентах высокоуровневых приложений, но предупреждаю что высокоуровневые модели, заменяются на более релевантные и или уточняются при переходе низкоуровневому программированию.