Автор Тема: Зачем сборщик мусора? (v2.0)  (Прочитано 29427 раз)

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #45 : Февраль 07, 2012, 04:24:11 pm »
Вопрос  - принципиально можно ли порушить такую систему   использованием НЕТИПИЗИРОВАННЫХ указателей и оператором ВЗЯТИЯ АДРЕСА?
А откуда возьмутся указатели, если динамической памяти нету?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #46 : Февраль 07, 2012, 04:25:52 pm »
А откуда возьмутся указатели, если динамической памяти нету?
Гм. У каждой переменной есть адрес. Адрес так или иначе можно получить любой переменной, в том числе и на стэке (автоматической памяти) или в статической памяти. Собственно даже в Обероне это можно (правда нужно будет подключить SYSTEM).
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #47 : Февраль 07, 2012, 04:25:59 pm »
Интерфейс - это нечто "между лицами", то, что делает возможным/упрощает взаимодействие "лиц". Интерфейсы, встроенные в языки/поддерживаемые языками программирования, просто частный случай. В общем случае интерфейсы могут быть явно не специфицированы/не объявлены, но без них взаимодействие невозможно.
ФУНДАМЕНТАЛЬНЫМ  является понятие СИСТЕМЫ описывающей НЕКОТОРУЮ ИНТЕРЕСУЮЩУЮ НАС ЗАДАЧУ, ваше определение ограничивает системы случаем когда есть ВЗАИМОДЕЙСТВИЕ между компонентами
Есть много определений понятия "система", но большая часть из них сходится в том, что "система состоит из элементов и связей между элементами". Связи - это и есть взаимодействие (или описание взаимодействия). Систем, у которых элементы не взаимодействуют, не бывает, это просто нечто сложенное в кучу.
Связи, которые соединяют элементы/компоненты системы, называются "слабыми" ("сильные" связи образуют сами элементы). "Слабость" "слабых связей" заключается в том, система может их в любой момент разорвать/перестроить. Другими словами, слабые связи опосредованы, явно или скрыто. Но без связей... это не система.

Я стараюсь избегать понятия "сложность". По семантике "сложный" значит "с ложью", поскольку одним из основных свойств истины является простота (и если не простой, значит и не истинный, т.е. ложный).
Компонент не может понизить "сложность" системы, поскольку не в его воле изменить количество и смысл уровней системы, но упростить решение задач, за счёт блочной сборки, он может (для этого он и предназначен).
1. :)  А мне насрать на семантику -есть задача которую надо решить, есть система (возможно не единственная)которая ее описывает в каком -то приближении (или точно)...Я к чему это говорю - для определения можно использовать различные фундаментальных базовых понятий и  категорий - главное чтобы результат был удовлетворительным (поставленные задачи решались).
Такой подход возможен, и он давно известен. В программировании этот подход получил название "экстремального". Проблема только в том, что при данном подходе возникает проблема "отложенной сложности". То есть, берётся какая-то частная задача и решается (максимально быстро и эффективно). Заказчик доволен, программисты счастливы. Потом берётся другая задача и тоже решается быстро и эффективно. Однако наступает момент, когда приходит понимание, что между задачами существуют внутренние связи, и изменения, сделанные одной задачей, должны влиять на решение другой задачи. Наступает пора рефакторинга. И тут ВДРУГ выясняется, что внутренних связей много и задач... тоже много и переделывать надо всё, что было сделано... а заказчик уже недоволен, его приучили к быстрым решениям, и он хочет решения новых задач (в соответствии с бизнес-планом). Атмосфера накаляется, а появление удовлетворительного решения... откладывается. Вот и приходим к "отложенной сложности".
К семантике можно относится различно, главное, чтобы она к нам относилась... с пониманием... :)
Ох
1. Мое определение не противоречит вашему (ваше вложено в него)
2.Свободная трактовка понятия "ЭКСТРЕМАЛЬНОГО ПРОГРАММИРОВАНИЯ"  :) , но конечно согласен, что подобную ИДЕОЛОГИЮ можно использовать при ВЫБОРЕ  конкретной системы,описывающей задачу. По поводу описанных недостатков = это просто получаемые с помощью такой идеологии решения тяжело поддерживать в течение длительного времени.

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #48 : Февраль 07, 2012, 04:47:57 pm »
Вопрос  - принципиально можно ли порушить такую систему   использованием НЕТИПИЗИРОВАННЫХ указателей и оператором ВЗЯТИЯ АДРЕСА?
А откуда возьмутся указатели, если динамической памяти нету?
Ну вы даете, однако, - а как вы будете возвращать значения из процедур (в языке СИ) там ссылок нет, используя глобальные переменные?

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #49 : Февраль 07, 2012, 04:50:06 pm »
Ну вы даете, однако, - а как вы будете возвращать значения из процедур (в языке СИ) там ссылок нет, используя глобальные переменные?
Можно возвращать через стек. То есть прям всю структуру целиком.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #50 : Февраль 07, 2012, 04:57:55 pm »
Ну вы даете, однако, - а как вы будете возвращать значения из процедур (в языке СИ) там ссылок нет, используя глобальные переменные?
Можно возвращать через стек. То есть прям всю структуру целиком.
  Не понял

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #51 : Февраль 07, 2012, 05:07:56 pm »
Можно возвращать через стек. То есть прям всю структуру целиком.
  Не понял

typedef struct {int a; int b; int c;} A;

A foo() {A a; a.a = 42; return a;}

void main(){A b = foo();}
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #52 : Февраль 07, 2012, 05:18:12 pm »
Можно возвращать через стек. То есть прям всю структуру целиком.
  Не понял

typedef struct {int a; int b; int c;} A;

A foo() {A a; a.a = 42; return a;}

void main(){A b = foo();}
Да, конечно, просто я не использую термин СТЕК для этого способа.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #53 : Февраль 07, 2012, 05:22:26 pm »
Да, конечно, просто я не использую термин СТЕК для этого способа.
Тем не менее структура возвращается реально через таки стек :-) (если в регистр не влазит). Ну и наружу не торчат какие-либо указатели.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #54 : Февраль 07, 2012, 05:29:43 pm »

Тем не менее структура возвращается реально через таки стек :-) (если в регистр не влазит). Ну и наружу не торчат какие-либо указатели.
Это (реализация) меня не волнует - у меня достаточно других проблем.... Главное что формально таким образом возможно вернуть ВСЕ (или нет? не помню  :)  ) допустимые  в языке значения переменных, другое дело , что это не всегда  удобно...

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #55 : Февраль 07, 2012, 07:23:49 pm »
Гм. У каждой переменной есть адрес. Адрес так или иначе можно получить любой переменной, в том числе и на стэке (автоматической памяти) или в статической памяти. Собственно даже в Обероне это можно (правда нужно будет подключить SYSTEM).
А ещё можно внести в язык оператор Polaarrebane.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Зачем сборщик мусора? (v2.0)
« Ответ #56 : Февраль 07, 2012, 08:32:12 pm »
А в чём смысл следующего пункта?
я) Отвечающая заданному интерфейсу;
Если он не отвечает заданному интерфейсу, то он не компонент? У двух разных компоентов разное назначение, а потому разные интерфейсы.
Каждый из них несовместим с интерфейсом своего соседа. Но от этого он не перестаёт быть компонентом.

Или бывает нечто, где отсутствует данный пункт, но имеются остальные два?

alexus

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #57 : Февраль 08, 2012, 02:56:35 am »
Ох
1. Мое определение не противоречит вашему (ваше вложено в него)
а) моего определения здесь вообще нет, я привёл часть принятого в Теории Систем определения;
б) Ваше определение противоречит принятому, в силу того, что оно не отличает целое и кучу разрозненных/несвязанных частей. А понятие целое пересекается с понятием цель... которое тоже является системным.

2.Свободная трактовка понятия "ЭКСТРЕМАЛЬНОГО ПРОГРАММИРОВАНИЯ"  :) , но конечно согласен, что подобную ИДЕОЛОГИЮ можно использовать при ВЫБОРЕ  конкретной системы,описывающей задачу. По поводу описанных недостатков = это просто получаемые с помощью такой идеологии решения тяжело поддерживать в течение длительного времени.
Да, согласен, хотя из без проблем поддержки экстремальное программирование плохо подходит для создания больших систем.

alexus

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #58 : Февраль 08, 2012, 03:13:29 am »
А в чём смысл следующего пункта?
я) Отвечающая заданному интерфейсу;
Если он не отвечает заданному интерфейсу, то он не компонент? У двух разных компоентов разное назначение, а потому разные интерфейсы.
Каждый из них несовместим с интерфейсом своего соседа. Но от этого он не перестаёт быть компонентом.

Или бывает нечто, где отсутствует данный пункт, но имеются остальные два?
Просто возникло разночтение. Речь о том, что в системе может быть несколько уровней. Интерфейсы определяются на стыке двух смежных уровней (определение интерфейсов - отдельная задача системного проектирования). Каждый компонент нижнего уровня системы может реализовывать какое-то подмножество (функционально-однородное, о чём говорил DIzer) интерфейсов. Разные компоненты могут реализовывать одно и тоже или разные подмножества интерфейсов.
Любое подмножество интерфейсов с полным правом можно назвать интерфейсом. То есть, один интерфейс может включать в себя группу других интерфейсов (рекурсии, как правило, запрещены... хотя бы исходя из здравого смысла).
Если компонент не реализует заданные интерфейсы, то он не имеет смысла... обращаться к нему просто не будут. Если компонент смешивает внутри себя интерфейсы разных уровней, то он является потенциальным источником проблем, поскольку связывает внутри себя реализации разных уровней. И при изменении одного из уровней, возможна утрата работоспособности других уровней.
Поясню этот момент на простой аналогии. Есть подпрограмма, её интерфейс - это список формальных параметров. Внутри подпрограммы могут быть другие подпрограммы. Теперь представим, что существует некоторый фрагмент кода, который взаимодействует с вложенными подпрограммами, минуя заголовки хозяйских подпрограмм. Если теперь изменить реализацию хозяйских подпрограмм, то этот фрагмент кода становится "убийцей", даже несмотря на то, что интерфейсы подпрограмм (список формальных параметров, тип вызова и пр.) были сохранены. Примерно тоже самое происходит и при нарушении инкапсуляции уровней системы отдельными компонентами.

DIzer

  • Гость
Re: Зачем сборщик мусора? (v2.0)
« Ответ #59 : Февраль 08, 2012, 09:05:58 am »
А понятие целое пересекается с понятием цель... которое тоже является системным.

Теперь кажется я  начинаю осознавать причину   нелюбви  к любителям семантики, спасибо   :)