Здравствуйте, AndrewVK, Вы писали:
AVK>Сравнивать надо компиляторы одинаковых языков.
Одинаковых — это как ? Turbo Pascal и Object Pascal — это одинаковые ? Второй сложнее, да, но не в десять раз. А уж совсем одинаковые — где же взять язык, который за 20 лет совсем не менялся ?
PD>>+1 насчет рефакторинга. Интеллисенс там есть, хоть и не такой.
AVK>Вот именно что тоже убогий.
Ну это кому как. Мне достаточно. А еще есть Visual Assist.
PD>>Ну слава богу, хоть ТурбоПаскаль однопроходной. А VC++ — сколько проходов все же ?
AVK>Не интересовался.
Два.
PD>>>>Откуда такая информация ? Ссылку дай, только не по экзотическим языкам.
AVK>>>http://blogs.msdn.com/ericlippert/archive/2010/02/04/how-many-passes.aspx
PD>>Ну что же, если в C# это нужно — на здоровье. В С++ — нет.
AVK>Потому что С++ существенно более старый язык.
О да. Вот с этим соглашусь.
А что касается C#, то вряд ли он многопроходной. Слишком уж он быстро компилирует, быстрее, чем С++. Ну да, в нем нет оптимизации, так и для С++/Debug ее тоже нет.
PD>>то да, предописание необходимо
AVK>Вот именно. А в Java и C# такой необходимости нет, там forward declaration отсутствует как класс.
Андрей, не наводи тень на плетень!
Структура данных любой програмы — это граф. С циклами в общем случае, то есть к дереву не сводимый. И компилятору надо эти циклы как-то объяснить. Как именно — не так уж важно, но объяснить надо. В одном случае он их берет из предописаний, в другом — иначе. В конце концов за 2 прохода можно собрать все имена и связи.
В том же С вполне можно было бы допустить
struct A {
struct B* ptr;
};
struct B {...};
и без всякого предописания struct B, но это означало бы, что компилятор на первом проходе должен составить таблицу всех имен, а на втором — проанализировать до конца. Авторы С хотели, чтобы можно было обойтись одним проходом, вот и создали предописание как помощь компилятору. Вот и все.
PD>>Но из этого, в общем, мало что следует.
AVK>Из этого следует то, что язык специально заточен под минимальное количество проходов. А минимальное количество проходов нужно как раз чтобы компилятору хватало малого объема памяти.
Так, хоть с тем, что в С++ проходов мало, ты наконец согласился. Прогресс.
Могу лишь повториться — двух проходов хватит всегда. Малый объем памяти тут ни при чем, так как проход — это просмотр исходного текста. Собственно просмотр можно сделать на буфере любого разумного размера, а вот сколько займут эти структуры во внутреннем формате, зависит от программы, и для сложной функции он малым не будет просто потому, что не может быть. И на 64 К откомпилировать программу в тысячи строк просто не удастся, если не делать промежуточных выводов в файл, а это падение скорости.
PD>>Ты хоть представление имеешь о том, как компиляция в С/C++ идет ?
AVK>Павел, если есть желание заняться пенисометрией, то не советую. У меня все равно длиннее. Ты не у меня пробелы в знаниях ищи,
Глупо. Если ты заявил, что для компиляции в С++ нужна какая-то DLL, то не удивляйся, когда получаешь такие разъяснения. Не хочешь их получать — не делай такие заявления, а сначала разберись.
>а подумай, как это связано с лимитом потребления памяти.
Что связано ? DLL ? Никак не связано — я тебе уже объяснил, что она там не используется никак.
P.S. DLL- вообще-то элемент ОС Windows. И к языку С++ отношения не имеют.
PD>>Думаю, это просто означает, что не очень хорошо продуман функционал.
AVK>Нет, это означает что программа не качественна и не полностью удовлетворяет требованиям.
Именно так.
PD>> Потому что невозможно его использовать целиком одновременно.
AVK>Возможно.
Именно так.
AVK>>>Пакеты в студии, кстати, грузятся по требованию. Но далеко не всегда это можно обеспечить чисто логически. Ряд пакетов обязаны стартовать в момент загрузки солюшена.
PD>>Да, знаю.
AVK>Ну так вот в основном эти пакеты память и жрут.
Так вот и надо выяснить, нужны ли они все одновременно.
P.S. Будет время — посмотрю студию с помощью VMMAP и напишу.