Здравствуйте, BulatZiganshin, Вы писали:
BZ>точно. а продуманная структура управления регистрами и явное использование адресов памяти в программе ещё круче, вот только несколько дороговато в разработке. язык — это средство описания алгоритма, а не детального расписывания того, что должен процессор делать каждый из 3 миллиардов циклов в секунду :) если ты так нацелен контролировать свой процессор, то тебе нужны машкоды и что-нибудь неспекулятивное :)
Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне? :)
Здравствуйте, BulatZiganshin, Вы писали:
BZ>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких
Ага, напоминает известное предложение ставить большие баки на речные суда и заполнять их водой. Типа если натыкаешься на мель — просто сливаешь воду и плывёшь себе дальше
Здравствуйте, NikeByNike, Вы писали:
NBN>Здравствуйте, BulatZiganshin, Вы писали:
BZ>>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"
NBN>Я когда пишу на С++ — просто выделяю память, и не занимаюсь её освобожденим — пока в этом нет необходимости. NBN>Мемориликов в годовалом проекте нет, хотя в ходе разработки тестирования на лики не производилось.
на фортране вообще не было распределения памяти, вопрос только в том, в каком стиле при этом приходится программировать и за какими ограничениями следить, чтобы не дай бог не потерять память
Здравствуйте, NikeByNike, Вы писали:
NBN>Здравствуйте, gandjustas, Вы писали:
G>>В такой аналогии нужно больше деталей. G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение. NBN>И тут вжииик, и оказывается что у меня на компе мало памяти... Всего гиг. Пока не поставил серьёзное ява приложение не догадывался, что у меня мало памяти.
Сейчас память стоит очень дешево, купить себе пару гигов может позволить каждый.
G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет. NBN>Ага, особенно это интересно на телефоне, где тебе приходится заниматься колдовством, вместо нормального распределения ограниченного ресурса
В телефони памяти просто мало, там нельзя писать также как на PC, память будет кончаться независимо от языка.
Здравствуйте, NikeByNike, Вы писали:
NBN>Ага, напоминает известное предложение ставить большие баки на речные суда и заполнять их водой. Типа если натыкаешься на мель — просто сливаешь воду и плывёшь себе дальше
читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками
Здравствуйте, denisko, Вы писали:
D>Здравствуйте, BulatZiganshin, Вы писали:
BZ>>Здравствуйте, COFF, Вы писали:
COF>>>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?
BZ>>а ты следишь за всеми процесами в системе и напрягаешься от мусора в памяти?
BZ>>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких D>Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.
А некоторые вообще пишут свой GC...
D>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?
Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.
Здравствуйте, COFF, Вы писали:
COF>Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне?
я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР
Здравствуйте, NikeByNike, Вы писали:
NBN>И тут вжииик, и оказывается что у меня на компе мало памяти... Всего гиг. Пока не поставил серьёзное ява приложение не догадывался, что у меня мало памяти.
у меня столько один firefox сейчас жрёт
G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет. NBN>Ага, особенно это интересно на телефоне, где тебе приходится заниматься колдовством, вместо нормального распределения ограниченного ресурса
вот на телефоне и занимайся шаманством с памятью на С, в 80-х годах мы как-то умещались в 640 кб
Здравствуйте, gandjustas, Вы писали:
G>А некоторые вообще пишут свой GC...
Выделить пулы не требует написания кода практически.
D>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой? G>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.
А два сообщения выше вы написали, что гарантия 3x Врать не ходошо
Здравствуйте, denisko, Вы писали:
D>Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.
ага. когда у тебя 10 библиотек, они вилимо собираются вместе и договариваются об общем пуле
D>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?
Здравствуйте, COFF, Вы писали:
COF>Здравствуйте, gandjustas, Вы писали:
G>>В такой аналогии нужно больше деталей. G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение. G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.
COF>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?
А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.
А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.
Здравствуйте, gandjustas, Вы писали:
COF>>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков? G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет. G>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.
И тут можно доставать травку, чтобы картинка на мониторе выглядела более плавной
Здравствуйте, gandjustas, Вы писали:
G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет. G>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.
Я не хочу вдаваться в детали, можно дискутировать об особенностях выделения памяти с gc или без него сколь угодно долго, но факт налицо — управляемые приложения на десктопе тормозят и жрут память. В теории возможно они хороши, а C++ плох, но практика пока этого не показывает.
Здравствуйте, gandjustas, Вы писали:
G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет.
При необходимости? Конечно да!
G>И GC не будет.
Потому что не сможет
Здравствуйте, BulatZiganshin, Вы писали:
BZ>я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР :))
Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++? ;)
Здравствуйте, BulatZiganshin, Вы писали:
BZ>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками
C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.
Здравствуйте, COFF, Вы писали:
COF>Здравствуйте, BulatZiganshin, Вы писали:
BZ>>точно. а продуманная структура управления регистрами и явное использование адресов памяти в программе ещё круче, вот только несколько дороговато в разработке. язык — это средство описания алгоритма, а не детального расписывания того, что должен процессор делать каждый из 3 миллиардов циклов в секунду если ты так нацелен контролировать свой процессор, то тебе нужны машкоды и что-нибудь неспекулятивное
COF>Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне?
Язык C++ не обладает возможностью описать алгоритм на высоком уровне.
Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.
Здравствуйте, COFF, Вы писали:
COF>Ну, беты появились года за два до релиза — вот и выходит почти 10 лет.
Ну, отсчитывать от бет неприлично. Не думаешь же ты, что кто-то начинал переводить проекты при бете
COF>Потом, почему именно 2.0? Где гарантия, что завтра не будешь говорить то же самое про 3.5?
Черт. Я знал, что так напишешь
COF>Вообще, я же не против .нет, я против огульного охаивания C++ определенными дот-нетчиками
Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.
Здравствуйте, COFF, Вы писали:
COF>Здравствуйте, gandjustas, Вы писали:
G>>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет. G>>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.
COF>Я не хочу вдаваться в детали, можно дискутировать об особенностях выделения памяти с gc или без него сколь угодно долго, но факт налицо — управляемые приложения на десктопе тормозят и жрут память. В теории возможно они хороши, а C++ плох, но практика пока этого не показывает.
Ну покажите примеры программ на десктопе которые тормозят и жрут память?
Я постоянно пользуюсь двумя десктомпными программами на .NET : paint.NET и Windows Live Writer, ни одна из них не тормозит и не жрет память.
Журт панять у меня на компе больше всего в доску неуправляемые браузеры.
Не надо в качестве примера приводить плохо написанные программы на .NET или java, плохо написанных программ на С++ все равно больше.