LINUX.ORG.RU

Аргумент в поддержку Mono

 ,


0

0

Neil McAllister(InfoWorld), 2 года назад предсказал, что mono умрёт после открытия Java http://www.infoworld.com/article/06/11/20/47OPopenent_1.html. Теперь он признаёт свою ошибку. За это время проект перестал быть просто клоном .Net и стал чем-то значительно большим. Появились проекты, расширяющие mono за пределы платформы Microsoft.

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

С другой стороны, mono - кроссплатформенная система и позволяет запускать приложения на Linux, Macos X, Windows и с минимумом усилий создавать приложения для всех этих платформ.

Кроме этого, mono поддерживает full static compilation - способность компилировать CLR байт-код в двоичный код процессора. Результирующий код не нуждается ни в just-in-time компиляторе, ни в runtime. Это позволило разработчикам игровой платформы Unity использовать mono для разработки игр для Windows и Macos без изменения кода, простой компиляцией на целевую платформу. Кроме того это позволяет запускать двоичный код на iPhone, где невозможен запуск виртуальной машины из-за запрета Apple. Те же возможности использованы для построения игр для Nintendo Wii.

Mono создало cвою нишу и успешно развивается, так как не пытается заменить Java или .Net, а идёт своим путём.

>>> The case for supporting and using Mono

★★★

Проверено: Shaman007 ()

Ответ на: комментарий от Guest30

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

А разве управляемый код не избавляет от утечек памяти?? (не считая ошибок реализации платформы)

>ОН нормально справляется с приложениями типа две формочки три кнопки, которых 90%, не говоря уже про консольные приложения.

>>да с этим что угодно справляется. может кроме brainfuck. теже пистоны-перлы-руби с парой графических оберток, и тоже кроссплатформенно. и полностью свободно и полностью функционально под всеми платформами.

пистоны-перлы-руби притеснены (и фактически истреблены) на ОС windows, которая пока(?) занимает бОльшую долю рынка. а .NET отлично себя там чуствует и пиарится некрософтом по самое небалуй. И не будем путать Интерпретацию и промежуточную компиляцию.

programmist
()
Ответ на: комментарий от gaa

>>> man 5литература гипербола

>> Как тролли стали отмазываться, а? %)

> Вы так говорите, как будто считаете троллинг чем-то предосудительным :о)

Да не, я в восхищении. Ждем троллинга в стихах. Гекзаметром, или пятистопным ямбом.

tailgunner ★★★★★
()

Что ни говори, а .NET ( и Mono) всегда будет Windows-ориентированной. Хотя-бы потому, что *.exe и *.dll

anonymous
()
Ответ на: комментарий от tailgunner

> Нет. А ты точно прогер?

А давай-ка, умник, ты нам покажешь пример кода с гарантированной утечкой памяти под mono/.NET

Barlog_M
()
Ответ на: комментарий от Barlog_M

Ты совсем дурак ? Утечки памяти это логические ошибки.

anonymous
()

прозреваю срач страниц на 15

Theif
()

Когда уже x86 вытеснят аппаратные точконетпроцессоры?

anonymous
()
Ответ на: комментарий от Barlog_M

>А давай-ка, умник, ты нам покажешь пример кода с гарантированной утечкой памяти под mono/.NET

Думаю, что прекрасно подойдут примеры от той же Java, например.

Заводим глобальный хэш-массив соответствий ID(int) и объектов. Добавляем в массив пары ID => object. Забываем удалять, когда объект больше не нужен. Имеем постоянную утечку памяти.

Это простой пример.

В общем случае при наличии глобальных хранилищ ссылок на объекты проблема может становиться очень тонкой.

В L2 Fortress я несколько месяцев отлавливал все утечки памяти при перемещениях игровых объектов по карте, при переходе из сегмента в сегмент. В старом сегменте объекты не всегда корректно выносились из списка активных объектов и вследствие этого память методично текла.

KRoN73 ★★★★★
()
Ответ на: комментарий от tailgunner

>Нет

Если не взаимодействовать с неуправляемым кодом и нет ошибок в GC, то ДА. Если я не прав - обьясните

>А ты точно прогер

точно. но для сбербанка писал не я))))

programmist
()
Ответ на: комментарий от programmist

Человек который задаёт вопросы "А разве управляемый код не избавляет от утечек памяти??" это не прогер, а ходячий мешок тупого говна квалификация которого не соответствует занимаемой должности.

anonymous
()
Ответ на: комментарий от KRoN73

>Заводим глобальный хэш-массив соответствий ID(int) и объектов. Добавляем в массив пары ID => object. Забываем удалять, когда объект больше не нужен. Имеем постоянную утечку памяти.

Подобного примера я и ожидал. Это преднамеренная утечка памяти. Ибо ссылка на объект существует, вот он и не убирается сборщиком.
Причем, как только станет ненужной ссылка на весь массив - всё очиститься.

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

А при вашем раскладе создание любого объекта в памяти можно считать уже утечкой.

Barlog_M
()
Ответ на: комментарий от tailgunner

> Да не, я в восхищении. Ждем троллинга в стихах. Гекзаметром, или пятистопным ямбом.

Вот троллинг онегинской строфой:

Пускай слыву зелёным троллем,
Мне всё равно — я даже рад:
Пишу Онегина размером
Про наш весёлый маскарад.
Я видел ту лихую пляску
И от Мигеля слышал сказку
Про то, что моно лишь внедрив
Надежности придёт прилив.
Лапшу с ушей своих снимая
Мы мыслим только лишь о том,
Каким же надо быть скотом,
Чтоб никогда не унывая
В систему Кернигана с Ритчи
Тащить MS кривые притчи.

gaa ★★
()
Ответ на: комментарий от Barlog_M

> А давай-ка, умник, ты нам покажешь пример кода с гарантированной утечкой памяти под mono/.NET

А давай-ка, милейший, ты проследуешь на йух, и поучишься там вежливости по отношению к старшим :D

tailgunner ★★★★★
()

Теперь стало модно обсирать моно, как это было раньше с жабой, пока гугель не приказал жабу любить. Как можно быть настолько тупыми, просто удивительно.

i_hate_black_lor_gui
()
Ответ на: комментарий от KRoN73

>Заводим глобальный хэш-массив соответствий ID(int) и объектов. Добавляем в массив пары ID => object. Забываем удалять, когда объект больше не нужен. Имеем постоянную утечку памяти.

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

Когда неуправляемый код забывает освободить память, выданную ему ОС, то она ему больше не доступна (все ссылки потеряны, повторно выделить нельзя). Это и есть утечка.

programmist
()
Ответ на: комментарий от Barlog_M

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

Guest30
()
Ответ на: комментарий от programmist

> Пока есть ссылки на память она считается используемой. И это логическая ошибка, но эта память доступна приложению. то есть она не утекла.

> Когда неуправляемый код забывает освободить память, выданную ему ОС, то она ему больше не доступна (все ссылки потеряны, повторно выделить нельзя). Это и есть утечка.


Пока на кусок памяти не вызвано free, он сичтается используемым. Про то, что на используемый кусок памяти совершенно не обязательно должна указывать ссылка ты узнаешь, когда наконец-то дочитаешь свой самоучитель по программированию до раздела о массивах.

gaa ★★
()

Интересно, где сейчас юзверей больше на mono или на кутях4?

Siado ★★★★★
()

угу, память в моно не течёт, она просто сразу вся забирается, вон глисту грузанёшь, гига с лишним уже нет, а в сусе я даже и не знаю, как извратиться, чтобы столько памяти было забито

anonymous
()
Ответ на: комментарий от Barlog_M

>Это преднамеренная утечка памяти.

Таких не бывает.

>Ибо ссылка на объект существует, вот он и не убирается сборщиком.

---/ Ибо память выделена, вот она и не освобождается ядром.

>А при вашем раскладе создание любого объекта в памяти можно считать уже утечкой.

Абслолютно. Если он не нужен для выполнения программы в ни в данный момент ни в дальнейшем, то конечно.

Ты просто фантастически невообразимо глуп.

anonymous
()
Ответ на: комментарий от gaa

>Пока на кусок памяти не вызвано free, он сичтается используемым. Про то, что на используемый кусок памяти совершенно не обязательно должна указывать ссылка ты узнаешь, когда наконец-то дочитаешь свой самоучитель по программированию до раздела о массивах.

Я это знаю. При потери ссылки, ты просто не отличишь выделенную память от не выделенной. И не сможешь сделать free выделенной памяти.

programmist
()
Ответ на: комментарий от programmist

> Пока есть ссылки на память она считается используемой. И это логическая ошибка

Ну так все утечки памяти - логические ошибки. Не вызвал free или не прибил ссылку - никакой разницы.

> но эта память доступна приложению

Ну так память, на которую не сделали free, тоже доступна приложению :D

tailgunner ★★★★★
()
Ответ на: комментарий от programmist

>то есть она не утекла.

Они утекла, если для выполнения задачи программы она уже не нужна. В сях ты забываешь сделать free, в шарпе забываешь убрать все ссылки. Разницы никакой.

anonymous
()

Ява, Моно иль дотнет - Так глобально, так надежно! Ведь платформы лучше нет, И невозможное - возможно.

anonymous
()
Ответ на: комментарий от anonymous

>в шарпе забываешь убрать все ссылки

А разве шарп сам неиспользуемые ссылки не подчищает?

anonymous
()
Ответ на: комментарий от anonymous

> Ты просто фантастически невообразимо глуп.

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

Barlog_M
()
Ответ на: комментарий от programmist

> При потери ссылки,
Ой, моя русская языка...

> ты просто не отличишь выделенную память от не выделенной. И не сможешь сделать free выделенной памяти.

Давай сформулируй ещё определение "потерянной ссылки", чтоб добавить фееричности своим словам.

gaa ★★
()
Ответ на: комментарий от tailgunner

>Ну так память, на которую не сделали free, тоже доступна приложению

Только если потерял ссылку можешь о ней забыть. Она тобой используется, но та не можешь с ней работать.

Если в Управляемом коде потерять ссылку, то GC (который все помнит и знает) уберет все что ты нагадил

programmist
()
Ответ на: комментарий от anonymous

Да, этот вопрос будут обсуждать 3 страницы, не меньше Ж)

anonymous
()
Ответ на: комментарий от programmist

> Если в Управляемом коде потерять ссылку, то GC (который все помнит и знает) уберет все что ты нагадил

Ты недостаточно ясно выразил своё благоговение перед Великим Управляемым Кодом и Сборщиком Мусора --- Пророком Его! :о)

gaa ★★
()
Ответ на: комментарий от programmist

> Только если потерял ссылку можешь о ней забыть. Она тобой используется, но та не можешь с ней работать.

Ты что сказать-то хотел?

> Если в Управляемом коде потерять ссылку, то GC (который все помнит и знает) уберет все что ты нагадил

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

tailgunner ★★★★★
()
Ответ на: комментарий от Barlog_M

Подменяешь понятия ты. Обратимся к народной мудрости(педии):

http://en.wikipedia.org/wiki/Memory_leak

>In computer science, a memory leak is a particular type of unintentional memory consumption by a computer program where the program fails to release memory when no longer needed

"не освобождение ссылок" прекрасно под определение подходит. "no longer needed" ключевой момент. Ссылки "no longer needed".

anonymous
()
Ответ на: комментарий от tailgunner

>Если ты забудешь ссылку в глобальном списке, не уберет.

Глобальные переменные выпилить как класс.

anonymous
()
Ответ на: комментарий от tailgunner

>Ты что сказать-то хотел?

Нет ссылки - что освобождать? Угадывать адреса что-ли?

>Если ты забудешь

Про забудешь - Никто не спорит, никакой GC не спасет. Все меняется если ты ее потеряешь (перезатрешь указатель например). В управляемом коде GC все уберет

programmist
()
Ответ на: комментарий от anonymous

> Подменяешь понятия ты. Обратимся к народной мудрости(педии):

Попробую объяснить в близких тебе понятиях, если ума не хватает понять, о чем тут вам, любителям C++, твердят:

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

С точки зрения логики - это не так.

Barlog_M
()
Ответ на: комментарий от Barlog_M

>Один гвозди не забивает - слетает при замахе сразу

Прям Моно и точконет так часто падает?

anonymous
()
Ответ на: комментарий от Barlog_M

>Есть два молотка. Один гвозди не забивает - слетает при замахе сразу. А вторым можно не забить, если не замахиваться, или не брать его в руки и т.п.

класс первых молотков подмножества класса вторых...

st0ke
()
Ответ на: комментарий от Barlog_M

>С точки зрения логики

Какой логики ? Темпоральной, пропозициональной, первого порядка, второго порядка, высокого порядка, категорной, квантовой, нечёткой, многозначной ?

Логика это не твоё.

anonymous
()
Ответ на: комментарий от anonymous

>>Это преднамеренная утечка памяти.
>Таких не бывает.


мьсе, а как же это:

...
#define NULL 0
...
void *a = malloc (4096);
a = NULL;
...

преднамеренная утечка ;)

st0ke
()

и совсем не обязательно такие виртуальные машины как джава. моно и дотнет или скриптовые языки (с ними тоже могут накладки с этим. как в javascript), чтобы память очищалась автоматически. достаточно вспомнить, например, о D :)

anonymous
()
Ответ на: комментарий от programmist

> пистоны-перлы-руби … И не будем путать Интерпретацию и промежуточную компиляцию.

Пейтон отлично компилируется в такой же байткод, как и что-то под моно.

kim-roader ★★
()
Ответ на: комментарий от anonymous

>Это не утечка. Это задача у тебя была такая. Утечка это когда в задачу утечки не входят.

читаем http://ru.wikipedia.org/wiki/Утечка_памяти особенно пример

>Утечка памяти - процесс неконтролируемого уменьшения объема свободной оперативной памяти


контролируемо ли это в моем коде? Нет.. как я могу запустив программу проконтролировать это, моя ошибка, случайно написал a=0; перепутал строчки например, а потом ещё и код работающий с этой "а" удалил. Конечно такие ошибки я делать не буду, но попадает даже под ЛОРовское определение данное выше ;)

st0ke
()

Пока mono не собирает свежие релизы под самый популярный linux-дистрибутив, ubuntu, он не станет широко использоваться для быдлок^Wпрограммирования

kim-roader ★★
()
Ответ на: комментарий от anonymous

>и совсем не обязательно такие виртуальные машины как джава. моно и дотнет или скриптовые языки (с ними тоже могут накладки с этим. как в javascript), чтобы память очищалась автоматически.

а это единственная причина использовать яву и моно(.NET)?


st0ke
()
Ответ на: комментарий от kim-roader

>Пока mono не собирает свежие релизы под самый популярный linux-дистрибутив, ubuntu, он не станет широко использоваться для быдлок

и это очень-очень хорошо, нафиг они не нужны

st0ke
()
Ответ на: комментарий от kim-roader

> Пока mono не собирает свежие релизы под самый популярный linux-дистрибутив, ubuntu, он не станет широко использоваться для быдлок^Wпрограммирования

Есть оно в бубунте.

gaa ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.