написание больших программ на C++
какие там проблемы возникают?ты же указал все зависит от квалификации программистов.
и кстати в шарпе тоже полный дамп стека выкидывается
Добавь к этому отсутствие полиморфизма "из коробки" для C++ - приходится работать с указателями, что автоматически ухудшает синтаксис и повышает число опасных мест
Дело в том, описанная проблема вызвана тем, что язык не содержит никаких механизмов, которые бы позволяли защитить один модуль программы от ошибок в другом модуле программы.Такие механизмы есть на уровне ОС, и их можно отлично использовать, если интересует надёжное решение.
То есть ты хочешь сказать, что если программисты — мегаотцы, то они могут (за разумное время) написать программу C++ сколь угодно большого размера без memory corruption?
> и кстати в шарпе тоже полный дамп стека выкидывается
Возможно Просто я ни разу живьем не видел программы на C#
То есть ты хочешь сказать, что если программисты — мегаотцы, то они могут (за разумное время) написать программу C++ сколь угодно большого размера без memory corruption?есть такие команды. проблема то останется, всем людям свойственно ошибаться, вопрос сколько времени уйдет на тестирование и отладку.
кстати 1 млн строк это скока проект занимает? ориентировачно
Я правильно понимаю, что предлагается разбить одну программу на несколько программ, взаимодействующих через какие-нибудь файлы/сокеты/пайпы? Действительно, этот способ позволяет отодвинуть порог дальше. Если же добиться того, чтобы вся система состояла из относительно небольших больших программ, то можно решить проблему целиком. Кстати, тут получается строго обоснование unix-way.
Основная проблема такого подхода — не всякую систему удается разбить на отдельные взаимодействующие процессы. Часто бывает что необходим один толстый процесс с сложной функциональностью
Про Python рискну предположить, что там ограничением может быть открытость всех членов класса.
А проект на C++ изначально использует аццкую сметь Си и плохого стиля. Правла ведь, что всю адресную арифметику там можно запихать в STL? А коли так, то ошибки памяти останутся только в некорректных итераторах. Компилим в дебужном режиме и получаем вместь испорченной памяти ассерты как раз в модулях, содержащих ошибки. В чем я не прав?
А проект на C++ изначально использует аццкую сметь Си и плохого стиля.за что же так си и сипипи то не любите.
надо наверно говорить про область проекта его конечное назначение.
я вот сейчас как раз готовлю кп для того, чтобы убедить заказчика делать не на LAMP, а на .NET + оракл.
В нерабочее состояние программу можно привести не только испорченной памятью: чего стоит непонимание как работает synchronized/wait в Java, бесконечная утечка ресурсов в C# или Java (я к тому, что может лучше упасть и перезапуститься, чем висеть и не реагировать на раздражители очень высокая сложность поддержки транзакционных методов в этих языках, особенности работы с потоками в C#, бесконечные runtime исключения от сторонних библиотек. В Си++ от очень многих бед спасают деструкторы.
Если у тебя код, где используется много malloc и работы с памятью напрямую, то это нельзя назвать Си++ кодом. Необходимость в этом отпала уже давно, а сочетание new/shared_ptr/weak_ptr используется у всех программистов на уровне рефлекса.
Open source код никогда не надо приводить как пример. Его в 95% случаев пишут любители, которым нечем заняться после работы. Каким бы ни был язык, у них почти всегда получаются какие-то ляпы. Причём наличие этого самого source обычно не помогает.
проект на сочетании Си++, C# и Java.а ты не путаешь, что в рамках одного проекта работают три рзных апликухи, которые между собой взаимодействуют?
а ты не путаешь, что в рамках одного проекта работают три рзных апликухи, которые между собой взаимодействуют?Я это и называю "сочетанием". Имелось ввиду, что я пишу на всех трёх языках уже довольно продолжительное время.
Проблема плюсов в том, что они унаследовали многие веши Сей, которые, кк показала практика, устарели и не безопасны. Те же самые maaloc, приведение типов и прочее. В С++ используются более безопасные аналоги, но нет запрета писать ересь старыми средствами. Такова филосовия С++ и такова цена этой философии.
ок ясно
В С++ используются более безопасные аналоги,Да, и всё же весьма тяжело от C-style cast перейти на static_cast
Open source код никогда не надо приводить как пример. Его в 95% случаев пишут любители, которым нечем заняться после работы. Каким бы ни был язык, у них почти всегда получаются какие-то ляпы. Причём наличие этого самого source обычно не помогает.Так было лет 10 назад. Сейчас большинство разработчиков крупных open source проектов работает в компаниях и занимается этим full time.
Видимо, поэтому исследования компаний-аудиторов кода показывают примерно одинаковое в среднем качество открытого и закрытого кода.
Конечно, это не относится к компании, где работает - там настоящие профи пишут высококачественный софт, а говно-опен-сорсом не занимаются
Основная проблема такого подхода — не всякую систему удается разбить на отдельные взаимодействующие процессы.Как-то не верится. Если на несколько разработчиков можно разбить, то, думаю, и на процессы можно. А если разработчик один, то проект не очень большой.
что за манера обсирать сразу же?
А троль - тот, кто пишет заведомо неверные, провокационные утверждения.
"заведомо неверные" - лишние слова
А троль - тот, кто пишет заведомо неверные, провокационные утверждения.а у них у всех буковка А у ника?
Нет, что ты! Человек с буквой А всегда прав. Это - первое правило форумчанина.
Проблема плюсов в том, что они унаследовали многие веши Сей, которые, кк показала практика, устарели и не безопасны.Почитай про D - они много аргументов приводят в пользу того, что C++ устарел морально.
Но, в отличии от почти всех, они предлагают альтернативу - новый язык.
Digital Mars про D
Open source код никогда не надо приводить как пример. Его в 95% случаев пишут любители, которым нечем заняться после работы. Каким бы ни был язык, у них почти всегда получаются какие-то ляпы. Причём наличие этого самого source обычно не помогает.хех, как раз в опенсурсных исходниках заметил: обычно программа на си читается намного лучше чем программа на цепепе. Ну а в целом бред. Почему - объяснили выше.
Если у тебя код, где используется много malloc и работы с памятью напрямую, то это нельзя назвать Си++ кодом. Необходимость в этом отпала уже давно, а сочетание new/shared_ptr/weak_ptr используется у всех программистов на уровне рефлекса.как сочетаются weak_ptr с std::vector? С shared_ptr всё очень плохо, а в std::list и shared_ptr грустно, по логике моей задачи иногда приходится прыгать на несколько элементов. Ну и такой подход не очень хорош, всё-таки, пока shared_ptr и weak_ptr не входят в стандартную библиотеку.
упс, сумбурно получилось. Хотел сказать, что shared_ptr и std::vector нельзя. shared_ptr и std::list очень неудобно. Как у weak_ptr с std::vector?
shared_ptr и std::vector нельзя.с чего бы?
обычно программа на си читается намного лучше чем программа на цепепеТам проблема не в том, что читается лучше. Она читается дольше.
как сочетаются weak_ptr с std::vector? С shared_ptr всё очень плохо, а в std::list и shared_ptr грустно, по логике моей задачи иногда приходится прыгать на несколько элементов. Ну и такой подход не очень хорош, всё-таки, пока shared_ptr и weak_ptr не входят в стандартную библиотеку.Ничего из написанного не понял.
Хм, действительно, можно. С чем-то спутал, не помню с чем
наверное с auto_ptr =)
точно
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
using namespace boost;
class foo
{
shared_ptr<foo> derzhi_silney;
public:
foo {}
foo (const foo& drugoi) { derzhi_silney = drugoi.derzhi_silney; }
~foo { cout << "ступайте" << endl; }
void append (shared_ptr<foo>& drugoi) { derzhi_silney = drugoi; }
};
int main
{
shared_ptr<foo> perviy(new foo vtoroy(new foo);
perviy->append(vtoroy);
vtoroy->append(perviy);
cout << "понеслась!" << endl;
return 0;
}
shared_ptr<foo> derzhi_silney;Это не костыль, надо учиться правилам программирования с smart_ptr, в ветке упоминали weak_ptr.
и что? потом каждый раз при работе из weak_ptr делать shared_ptr, а потом работать? это уже перл какой-то получается
а так бы ответил
и что? потом каждый раз при работе из weak_ptr делать shared_ptr, а потом работать? это уже перл какой-то получаетсяИменно так и делается, причём в языках с GC тоже довольно часто так поступают. Накладные расходы на это равняются ::InterlockedIncrement
лучше не применять. об этом уже несколько раз говорилось даже в этом форуме.
ps
существующие managed-языки тоже могут везти себя не адекватно. например, при работе нескольких тредов очень легко получить испорченную память даже в managed-языках.
но по сравнению с C/C++/дельфи это конечно цветочки.
class Zzz
{
int value;
Zzz next;
public Zzz(Zzz next) { this.next = next; }
public Dispose { this.next = null; GC.Collect;}
public SetNext(int value) { next.value = value; }
}
Чота такое, неважно. Так вот, что произойдёт, если один тред начнёт вызывать SetNext, а второй очень удачно вызовет Dispose? Занимается ли CLR (и конкретно JIT) параноидальными проверками на тему мультитредовости, с critical sections и прочими радостями? Или всё-таки приоритеты стоят так: single-threaded приложения работают safe и быстро, мультитредовые легко позволяют закорраптить память? Изначально вопрос возник насчёт цикла по массиву, в котором вроде проверка на bounds один раз делается, вначале, это так?
Насколько вообще язык C++ применим для написания больших проектов?2.5 года работал в большом c++-проекте: > 1 млн строк кода, ~ 30 человек в 2-х командах, > 6 лет проекту, 3 поддерживаемые платформы, 3 различных компилятора. Могу засвидетельствовать, что язык c++ можно использовать для разработок такого масштаба, хотя связка язык-ос-компилятор и порождает массу довольно странных проблем.
Но те проблемы, о которых говорится в оригинальном посте (ошибки при работе с памятью практически полностью были устранены за счёт:
1) грамотной модульной архитектуры проекта;
2) хорошо продуманной системы интерфейсов между модулями;
3) изоляции прикладного кода от особенностей ос;
4) использованию высокоуровневых библиотек (в основном stl, boost);
5) наличию средств инструментального контроля (автоматические тесты, механизмы отслеживания состояния heap'а, счётчики объектов);
6) [без ложной скромности] довольно крутого коллектива разработчиков как с нашей стороны, так и со стороны клиента.
Сухой остаток: если не ошибаюсь, то за 2.5 года к нам попал в руки только один дамп свернувшегося у клиента в продакшене процесса (мы тогда, кстати, не смогли найти ошибку, а она более не проявлялась). Мелкие проблемы периодически возникали, но они всегда были изолированы в рамках одного модуля, который всегда было легко препарировать.
P.S. Сейчас я работаю на java ee проекте (~140k строк который начинали разработчики, исповедующие другую религию. Могу опять же засвидетельствовать, что замутить в java'е утечку памяли не намного сложнее, чем в c++. Было бы желание, а средства устроить всем райскую жизнь найдутся.
P.P.S. В холи-варах "c++.vs.java" не участвую.
Особенно радует, что все ответы конструктивные, без holy-war-ов.
Как-то не верится. Если на несколько разработчиков можно разбить, то, думаю, и на процессы можно. А если разработчик один, то проект не очень большой.Покажи, как можно разбить на несколько процессов Firefox или OpenOffice. Я пока не вижу разумных способов это сделать.
В нерабочее состояние программу можно привести не только испорченной памятью: чего стоит непонимание как работает synchronized/wait в Java, бесконечная утечка ресурсов в C# или Java (я к тому, что может лучше упасть и перезапуститься, чем висеть и не реагировать на раздражители очень высокая сложность поддержки транзакционных методов в этих языках, особенности работы с потоками в C#, бесконечные runtime исключения от сторонних библиотек.Можно про это поподробнее? Всякие memory corruption я видел и отлаживал много раз, а вот про это ничего не слышал.
Особенно непонятно как может возникать утечка ресурсов в C# — там же garbage collection
лучше не применять. об этом уже несколько раз говорилось даже в этом форуме.Тут некоторые говорят . Чего скажешь по этому поводу?
psМожешь поподробнее про это? Пример кода можешь привести?
существующие managed-языки тоже могут везти себя не адекватно. например, при работе нескольких тредов очень легко получить испорченную память даже в managed-языках.
Но те проблемы, о которых говорится в оригинальном посте (ошибки при работе с памятью практически полностью были устранены за счёт:Ценная информация! Буду двигаться в ту же сторону.
<offtopic>Что за проект, если не секрет?</offtopic>
Сухой остаток: если не ошибаюсь, то за 2.5 года к нам попал в руки только один дамп свернувшегося у клиента в продакшене процессаIMHO это реально КРУТО!
Могу опять же засвидетельствовать, что замутить в java'е утечку памяли не намного сложнее, чем в c++.Можно пару слов об этом? Никак не пойму, как в языке с garbage collection можно замутить утечку памяти.
> OpenOffice. Я пока не вижу разумных способов это сделать.
Браузер:
1. Управление GUI (всего, кроме собственно страничек).
2. Управление общим долговременным хранилищем данных.
3. Работа с удалёнными серверами (возможно, несколько видов таких, по одному на протокол).
4. Обработка HTML.
5. Показ странички (заданной уже во внутреннем представлении).
6. Исполнение скриптов, плагинов.
Главное - это чтобы 4, 5 создавались для каждого сайта заново, а не повторно использовались. Если всё сделать правильно, то кроме увеличения устойчивости к ошибкам, получится улучшение user experience: пока ресолвится DNS или рендерится HTML, весь гуй прорисовывается сразу и отвечает на действия пользователя.
OpenOffice вообще не должен существовать, так что не факт, что его можно сделать разумно.
Можно пару слов об этом? Никак не пойму, как в языке с garbage collection можно замутить утечку памяти.Элементарно: делаешь большую коллекцию (или несколько и кладёшь туда ссылки на всё, что у тебя есть, а удалять забываешь.
> Насколько вообще язык C++ применим для написания больших проектов?Да, в наши дни писать на С++ не круто. Работы меньше и платят меньше чем за Джаву, а сам язык сильно переусложнен какими-то ad-hoc хаками. Новый стандарт примут, вообще вешаться можно будет.
лучше не применять. об этом уже несколько раз говорилось даже в этом форуме.
механизмы отслеживания состояния heap'аа вот под этим что подразумевается?
Покажи, как можно разбить на несколько процессов Firefox или OpenOffice. Я пока не вижу разумных способов это сделать.До OpenOffice-а пока не добрался, но по аналогии с МОфисом там должно быть дофига подсистем, которые можно (и нужно!) выделять в отдельные процессы.
А вот Firefox меня уже достал тем, что у него нет никакого разбиения по процессам (исходники не изучал - такое впечатление по его работе)
Какие проблемы из-за этого возникают:
1. Отдельное расширение может значительно замедлить работу всего Лиса, а может и вообще убить
2. Конкретное содержимое страницы (скрипты, навороченная графика, плагинный контент) может значительно замедлить работу и даже заставить перезапустить Лис
3. Конкретный компонент (мб они на самом деле расширения - не знаю) может тоже периодически тормозить казалось бы на ровном месте (например встроенный загрузчик файлов/страниц начинает тормозить(вместе со всем Лисом) при большом списке загруженного)
С моей точки зрения стоило бы разбить все это на процессы следующим образом:
1. Ядро браузера - Уровень расширений - Расширение (ну или хотя бы разбить их на группы по степени безопастности и на каждую группу запускать свой процесс)
2. Ядро браузера - Управление отрисовкой - (Скрипт/Графика/Уровень плагинов - Плагин)
3. Ядро браузера - Уровень компонентов - Компонент
Соответственно разбить это все по отдельным исполнителям можно.
Собственно хорошим примером такого разбиение может быть любая ОСь.
Как размер исходников может влиять на сложность отлова ошибки?
Работы меньше и платят меньше чем за Джаву
и это подтверждает, что при разработке на C++ есть два момента:
1. обязательно требуется команда хороших программистов
2. феодальное хозяйство (очень малое использование чужого кода).
в С++ в лучшем случае используются небольшие сильно локализованные библиотеки, очень редко используется код со сложным поведением.
Возьмем, например, тот же Дельфи там в отличии от С++ сложился рынок сторонних компонентов: этому благоприятствовал то:
1. в дельфи есть мало-мальская проверка границ памяти: как при работе со строками, так и при работе с массивами - поэтому проездов по памяти намного меньше => меньше фатальных сбоев при в сбое в стороннем компоненте.
2. в дельфи есть встроенная поддержка бинарных модулей.
А вот Firefox меня уже достал тем, что у него нет никакого разбиения по процессам (исходники не изучал - такое впечатление по его работе)Тематичный тред: http://realworldtech.com/forums/index.cfm?action=detail&...
сейчас с наскоку не получилось.
по памяти, это часто попадалось в .Net 1.0, а вот в .net 2.0 даже может и не встречалось.
для того, чтобы вызвать SetNext должна быть где-то остаться внешняя ссылка, такое возможно только если прибивается сразу целый кластер и доступ по ссылке идет из под Finalize
но и в этом случае можно сделать надежно, если сначала GC зануляет все внешние ссылки, а только потом прибивает память.
в джобе запостьСделай на dice.com search по обоим, умник.
Была такая низкоуровневая библиотека, которая умела подменять глобальные new и delete и другие функции, работающие с heap'ом, на инструментированные версии. При сборке дебаг-целей это, кажется, делалось всегда, а при сборке релиз-целей можно было директивой компилятора подключить.механизмы отслеживания состояния heap'аа вот под этим что подразумевается?
Идея такая: после запуска процесса эта либа начинает периодически (например раз в час) дампить в файл информацию о состоянии всего хипа - по каждому выделенному блоку. Отдельная offline-утилита потом анализировала этот файл и находила участки, которые были выделены, например, не ранее, чем через час после запуска и сохранились до самого завершения процесса. Дело в том, что обычно размещённые блоки памяти долго не живут - одна "транзакция" и до свидания. Долгоживущие объекты могли быть:
а) созданными в процессе инициализации системы - такие игнорируются
б) пулируемыми - пулы отключались для тестируемых модулей
в) утёкшими - их и ловили
При работе на windows еще удавалось установить по debug-info название класса утекшего объекта (если это был объект). Если блок памяти был небольшой, то он дампился целиком - можно было покопаться при желании.
<offtopic>Что за проект, если не секрет?</offtopic>Биллинговая платформа CBOSS. В мои времена она называлась CBOSS Intellectual Network, CBOSSin.
2. феодальное хозяйство (очень малое использование чужого кода).С этим согласен: найти универсальные сторонние библиотеки, написанные на c++ , сложно. Почти всё, что нам требовалось [низкоуровневого] мы написали сами. При этом наши разработки (наверное штук 30 "универсальных" библиотек) тоже вряд ли кому-то могут пригодиться вне проекта.
в С++ в лучшем случае используются небольшие сильно локализованные библиотеки, очень редко используется код со сложным поведением.
Это все потому, что без этого не будет должной уверенности в качестве исполнения кода (что требуется из-за возможности легко в нем напортачить).
С этим согласен: найти универсальные сторонние библиотеки, написанные на c++ , сложно. Почти всё, что нам требовалось [низкоуровневого] мы написали сами. При этом наши разработки (наверное штук 30 "универсальных" библиотек) тоже вряд ли кому-то могут пригодиться вне проекта.
2. феодальное хозяйство (очень малое использование чужого кода). в С++ в лучшем случае используются небольшие сильно локализованные библиотеки, очень редко используется код со сложным поведением.
Так?
такое чувство, что ты бот джобишопа
это не показатель. умнегА что показатель? Твой внутренний голос? Я привел конкретный способ измерения, основанный на данных крупнейшего в США job-сайта. Хотя можешь повторить поиск на monster.com или craiglist. То, что джава давно обошла по популярности С++ известно всем, про это уже статьи написаны и блогпосты запосщены. Даже МС, крупнейший бастион С++писательства, положила мышь на него.
Даже МС, крупнейший бастион С++писательства, положила мышь на него.На чем же они интересно все свои продукты пишут?
На чем же они интересно все свои продукты пишут?Важно не то, на чем они пишут, а то, на чем они предлагают писать другим
Спасибо, посмотрю
Это все потому, что без этого не будет должной уверенности в качестве исполнения кода (что требуется из-за возможности легко в нем напортачить).Не только. На c++ вообще очень сложно написать сколько-нибудь универсальную библиотеку. Язык низкоуровневый (что бы про него не говорили... сильно привязан к платформе, к операционной системе. Язык очень сложный - много глюков компиляторов, есть проблемы в самом Стандарте...
Так?
В общем, нам приходилось подтачивать (или просто фиксить) все библиотеки, которые мы использовали в проекте, в т.ч. boost, stlport, xerces/xalan.
Немного о нашей компании. У нас весь код на С / С++, использования чужих библиотек нет (все свои за долгое время существования). Общее количества исходников за 200Мб. Те проекты, которые идут заказчикам, собираются примерно из 30Мб исходников (проектов несколько, есть куча внутренних утилит). Заказчикам поставляли на код на разные платформы, включаю ту, где порядок байт в инте другой. Другой язык программирования нам скорее всего не подойдет из-за жестких ограничений на время выполнения программ (разве что для внутренних утилит). Пока основные заказчики, как я понимаю, не жаловались, что наш код где-то падает. Причем любое падение им бы дорого обошлось и, думаю, нам бы они об этом сообщили . Правда и цена продукта соответствующая.
Правда и цена продукта соответствующая.какая область проектов?
Немного о нашей компании. У нас весь код на С / С++, использования чужих библиотек нет (все свои за долгое время существования). Общее количества исходников за 200Мб. Те проекты, которые идут заказчикам, собираются примерно из 30Мб исходников (проектов несколько, есть куча внутренних утилит). Заказчикам поставляли на код на разные платформы, включаю ту, где порядок байт в инте другой. Другой язык программирования нам скорее всего не подойдет из-за жестких ограничений на время выполнения программ (разве что для внутренних утилит). Пока основные заказчики, как я понимаю, не жаловались, что наш код где-то падает. Причем любое падение им бы дорого обошлось и, думаю, нам бы они об этом сообщили . Правда и цена продукта соответствующая.ну да. у вас, насколько я понимаю, все именно так, как описал :
1. обязательно требуется команда хороших программистов
2. феодальное хозяйство (очень малое использование чужого кода).
Что касается применимости С++ к большим проектам, то он применяется там, где критична быстродействие или там, где продукты коробочные (а там где выполнены оба условия - сам бог велел). Если вы пишите программу для одного (или 2-3) заказчика и она не работаю с большим количеством данных (аудио/видео, большие изображения, много-много текста и т.п. то конечно вам не понятно, зачем использовать C++. У вас просто по другому построен процесс разработки, что С++ использовать нерентабельно. Точно так же было бы глупо писать на С++ веб-сайты. Однако подавляющее число коробочных продуктов написаны на С++.
Собственно, посмотрите что установлено у вас на компе и на чём оно написано. Я что-то не припоминаю ни одной достойной программы на C# или Java. Есть Eclipse и IDEA, но они настолько неповоротливы и монструозны, что даже последний офис нервно курит в сторонке (да и рассчитаны они, собственно, на разработчиков, а не на нормальных пользователей). А больше собственно ничего и нету. Всё остальное на C++, как бы его не хаяли.
Собственно, посмотрите что установлено у вас на компе и на чём оно написано.Боян, уже смотрел.
На C++ мало, если считать по головам, и много, если по потреблению ресурсов
здесь речь про ентерпрайз. C++ не ентерпрайз, .NET и Java - ентерпрайз.
считать по головам
а какие крупные проекты есть, из общеизвестных, написанные не на С/С++ (не учитывая то, что назвали - Eclipse, IDEA)?
на python, например,
или на Java?
понятно, что выбирать между бедным и здоровым или богатым и больным - тяжело, но речь идет о другом.
Опыт непрограммистких отраслей показывает, что обычно компании работают по следующему принципу:
1. Профильные направления - двигаются командой хороших профессионалов
2. Непрофильные стандартные направления - используются готовые чужие наработки/отдается на аутсорсинг
3. Непрофильные нестандартные направления - поддерживаются середнячками.
При использовании C++ получается, что на все три пункта необходимо иметь своих высококлассных программистов.
или там, где продукты коробочные
А каким образом связана коробочность продукта и C++?
Civilization IV!
продукты коробочныеСоветую перейти сразу к более универсальному термину "продукты заводской готовности"
Советую перейти сразу к более универсальному термину "продукты заводской готовности"а программные продукты тоже на заводах делают?
Потому что плохие программисты всё равно сделают кучу ошибок, а сторонние библиотеки будут глючить, и вы не сможете на это повлиятьТут обсуждается немного другое - для некоторых языков, ошибка плохого программиста или глюк сторонней библиотеки могут запросто привести к падению всей системы; а для некоторых - только к падению конкретного модуля (и тогда всё просто - главное, не подпускать плохих программистов к важным модулям)
Я что-то не припоминаю ни одной достойной программы на C# или Java. Есть Eclipse и IDEA, но они настолько неповоротливы и монструозныEclipse - говно сам по себе; если разработчики плохие, хороший язык программирования их не спасёт.
А вообще, навскидку, из того, что прямо сейчас на глаза попалось - gaim и zend studio на джаве и paint.net на c#
Что смешного-то? Нередко бывает, что к программно-аппаратным комплексам применяют слова "комплекс высокой заводской готовности", обычно, для жосткого корпоративного пафоса, но совершенно серьёзно. Энтерпрайз всё-таки, не говно сапогами месить.
он чуть ли не весь на джаве написан
Eclipse - говно сам по себе; если разработчики плохие, хороший язык программирования их не спасёт.
плагин для пыхпыха к нему плохой штоле?
Нет, просто сам эклипс - говно (хотя, мб, мне с версией не повезло - 3.2.0, если что)
По поводу "не редко" - не самый хороший показатель, но всеже:
http://www.yandex.ru/yandsearch?text=%22%EA%EE%EC%EF%EB%E5%E...
Или может есть примеры, где какая-нибудь известная компания-разработчик ПО (к примеру IBM, Oracle) заявляет, что их программный продукт - это "комплекс высокой заводской готовности?".
Или может есть примеры, где какая-нибудь известная компания-разработчик ПО (к примеру IBM, Oracle) заявляет, что их программный продукт - это "комплекс высокой заводской готовности?".Из российских разработчиков - возможно, у меня даже в мануале к ноуту было написано "ПЭВМ (системный блок с матрицей)". Это, видимо, из-за стандартов каких-то, доставшихся в наследство ещё от ссср.
На первой странице - ничего о ПО.
P.S. Вот встань у себя на работе в полный рост посредине комнаты, когда все там будут присутствовать, и скажи, да так чтобы точно все услышали: "Вот что это за говно-термин — система высокой заводской готовности" Ну или что-нибудь вроде того, оценишь реакцию
oracle не подойдет?если ты про СУБД, то на джаве там в основном свистелки и перделки
он чуть ли не весь на джаве написан
Клиент на жаве писан.
Это ты про OCI?
некоторых пафосных российских организаций.Ну так объясни, какое отношение они имеют к разработке современного программного обеспечения. А именно о нем сейчас речь.
P.S. Вот встань у себя на работе в полный рост посредине комнаты, когда все там будут присутствовать, и скажи, да так чтобы точно все услышали: "Вот что это за говно-термин — система высокой заводской готовности" Ну или что-нибудь вроде того, оценишь реакцию
Конечно, весело у тебя фантазия разыгралась =). Но ни про какое говно я не не говорил и публично выступать по этой теме на работе на собираюсь.
Речь была о том, что термин довольно специфичный. Это не противоречит тому, что ты с ним встречался.
Ну так объясни, какое отношение они имеют к разработке современного программного обеспечения.Тут вылезает очередная жесть, ибо эти компании считают, что они действительно современные разработки покупают
Речь была о том, что термин довольно специфичный. Это не противоречит тому, что ты с ним встречался.Речь вроде вообще о заводах и заводской готовности была...
Кстати, о флуде и терминах. Вот интересно, кто как понимает слово "отчуждаемость" в применении к программному обеспечению (пусть даже к современному, большому и на C++)?
Это ты про OCI?А кому нужен OCI? Чтение мануала по нему может привести к нервному срыву. Есть замечательный JDBC драйвер. Я за пару часов написал прогу по скачке данных через него, не зная ни Java, ни JDBC. Джава рулит.
здесь речь про ентерпрайз. C++ не ентерпрайз, .NET и Java - ентерпрайз.Что тут имеется ввиду под ентерпрайз?
Что тут имеется ввиду под ентерпрайз?То, что ПО должно быть написано быстро и содержать мало ошибок.
gaim и zend studio на джаве и paint.netgaim не пользовал, Плохого инчего говорить не буду. влюбом случае, im-клиентов тонны, а gaim среди них далеко не самый популярный. Видать не так хорошь. Плюс тут много зависит не от клиента, а от протокола и владельца сервера, а клиент дело десятое.
zend studio - редкостное тормозилово и глюкалово, и опять таки, продукт для разработчиков, притом чуть ли не монопольный, так что это не в кассу.
paint.net - опять таки, слышу в первый раз. Подозреваю, что это недоделанный фотошоп.
И "потребительских" программ в любом случае большая часть написана на С++. Браузеры - С++, проигрыватели музыки и видео - С++, почтовые и IM-клиенты - почти все на С++.
Java и C# используют , как тут правильно говорили, когда написание кода - непрофильное направление бизнеса. Т.е. софт для поддержки бизнеса может быть на них написан, т.к. во первых, не надо сильно грамотных прграммистов, а во-вторых, легче поддерживать.
Возможно C# когда нибудь и станет языком для написание программ для конечного пользователя (коробочных, потребительских, массовых но заслуга в этом будет не столько языка, сколько майкрософта, который его навязывает (пока что безуспешно). Я не спорю, что C# - язык более приятный, и много знакомых мне высококлассных программистов предпочитают его С++, но для написания программ с высокими требованиями к производительности, потреблению ресурсов и гибкости во взаимодействии с пользователем, С++ пока что остаётся лидером.
тут).
Кстати, всем, кто решил спорить дальше о применимости языков к тем или иным проектам советую почитать http://russian.joelonsoftware.com/Articles/FiveWorlds.html
Кстати, вакансий программиста на Java больше, потому как в штатах в школе вроде как на нём преподают информатику, потому людей, знакомым с ним, гораздо больше сем сишников, потому во многих конторах предпочитают Java в качестве языка проекта. В универе уже переучивают программировать на С/С++ или каком-нибудь ещё языке, но это не спасает - большинство программистов в штатах совершенно неспособны понять как устроена работа с памятью и указатели (по крайней мере большиство тех, кто подавал резюме Джоэлу Сполски, руководителю довольно известной софтверной компании, об этом он в частности пишет Кстати, всем, кто решил спорить дальше о применимости языков к тем или иным проектам советую почитать http://russian.joelonsoftware.com/Articles/FiveWorlds.html
А кому нужен OCI?
например для написания индексов может пригодиться
Плюс тут много зависит не от клиента, а от протокола и владельца сервера, а клиент дело десятое.Тем не менее, клиент очень даже приличный.
zend studio - редкостное тормозилово и глюкаловоНу приведи примеры чего-нибудь более приличного.
Zend Studio, конечно, тормозилово и глюкалово, но по сравнению с аналогами - очень быстрый без единой ошибки.
притом чуть ли не монопольныйНу-ну.
Подозреваю, что это недоделанный фотошопАга, два студента за два года по вечерам написали почти что то, что в адобе сотня человек десять лет делала, при этом - очень мало ошибок, очень стабильная и быстрая работа + удобный интерфейс. Я так понял, тут именно такие примеры хотели.
И "потребительских" программ в любом случае большая часть написана на С++. Браузеры - С++, проигрыватели музыки и видео - С++, почтовые и IM-клиенты - почти все на С++.А теперь скажи, когда вышла первая версия какого-нибудь из этих браузеров/проигрывателей/клиентов. Конечно, если начинали писать десять лет назад - писали на c++; и, конечно же, никто не будет сейчас говорить "вот у нас есть версия 8.7.6.5 - и давайте вместо того, чтобы её улучшать, начнём сейчас с нуля писать девятую версию, на замечательном языке c#".
но для написания программ с высокими требованиями к производительности, потреблению ресурсов и гибкости во взаимодействии с пользователем, С++ пока что остаётся лидеромДля написания программ с очень высокими требованиями к производительности и потреблению ресурсов, лидер - ассемблер. А для написания обычных пользовательских программ - высокоуровневые языки (те же java и c#). На c++ сейчас доделывают софт по привычке (см. выше)
Это ты про OCI?ОСИ - это протокол
клиент - это прога на джаве
а в оракле там дофига всего на джаве написано
там же дофига всяких утилит типа Net Manager
и все они на джаве
Какое-то время назад регулярно юзал прогу ThinkingRock, написанную на Java (единственный мой опыт долгого использования проги на Java). У нее была особенность - если она относительно долго (несколько минут или десятков минут) не активна, а висит в трее, то "засыпает" и потом очень долго раскачивается - несколько секунд или десятков секунд тормозит, потом неспеша начинает делать что просят. Если же раскачалась, то скорость приемлема. Но стоит оставить в покое - все повторяется.
Вопрос: это глюк данной конкретной проги или следствие самой технологии? Наблюдается ли что-то подобное у других прог на джаве?
Из .NET софта регулярно имею дело с VS2005 и SQL Server Management Studio от 2005 сервера. VS заметно тормознее стала, по сравнению с шестой, но еще терпимо. А вот SQL Server Management Studio - это нечто. Дикие тормоза на простейших операциях, прыгающие окошки (когда одни убираются, а другие появляются, и все это небыстро). У меня вопрос - это следствие кривости рук индусов, это дело писавших, или опять же проявление технологии? (ведь та же JIT-компиляция отнюдь не бесплатна)
Тем не менее, клиент очень даже приличный.Тем не менее, в исходниках - Си. А о какой жабе идет речь?
Ага, два студента за два года по вечерам написали почти что то, что в адобе сотня человек десять лет делала, при этом - очень мало ошибок, очень стабильная и быстрая работа + удобный интерфейс. Я так понял, тут именно такие примеры хотели.
Кажется, на тему того, что paint.net и photoshop в разных весовых категориях с тобой уже спорили когда-то.
Для написания программ с очень высокими требованиями к производительности и потреблению ресурсов, лидер - ассемблер. А для написания обычных пользовательских программ - высокоуровневые языки (те же java и c#). На c++ сейчас доделывают софт по привычке (см. выше)
жЭст.
Тем не менее, в исходниках - Си. А о какой жабе идет речь?Значит, меня проглючило, казалось, что на джаве... пользовался им год назад, уже забыл почти - видимо, перепутал джаву с gtk
Кажется, на тему того, что paint.net и photoshop в разных весовых категориях с тобой уже спорили когда-то.1) Не спорили.
2) Тем не менее.
жЭстА что тебе не нравится?
Приведи пример качественного сложного ПО для винды, разрабатывать которое начали, допустим, не больше трёх лет назад. Чтобы на C было написано.
Мне вот в голову ничего не приходит...
Очень может быть. Но есть гораздо более популярные IM-клиенты.
> Zend Studio, конечно, тормозилово и глюкалово, но по сравнению с аналогами - очень быстрый без единой
>> притом чуть ли не монопольный
> Ну-ну.
Разрабатывать аналог Zend Studio - это крайне экономически невыгодно (рынок маленький, а конкурировать с Zend в отладке их же собственного байткода - гиблое дело, это как конкурировать с Adobe в редактировании PDF-файлов поэтому нормальные люди этим не занимаются. То, что на фоне остальных он смотриться неплохо, это не показатель. Главно что сам по себе он плох.
> Ага, два студента за два года по вечерам написали почти что то, что в адобе сотня человек десять лет
> делала, при этом - очень мало ошибок, очень стабильная и быстрая работа + удобный интерфейс. Я так понял,
> тут именно такие примеры хотели.
Вот тут спорить не буду. Может быть и написали. Photoshop из этого не выйдет, скорее всего, так как остались те самые x%, которые требуют (100-x)% затрат времени. Но что программа может быть достойной - в это охотно верю. C# сам по себе неплохой язык, и Microsoft старается его популяризировать среди разработчиков. И лет через 5-10 они своего добьются, но пока - нет. Ибо преимущества не так очевидны, как проблемы - полная зависимость от MS, необходимость, пока ещё поставлять со своей программой довольно большой фреймворк (у большинства он не установлен бОльшие накладные расходы, сомнительные перспективы портирования на другие платвормы (да, на linux вероятно портировать можно будет, но дальше - ни ни). По большей части это не проблемы языка, а политические, экономические и идеологические соображения. И новые проекты, наверное, можно начинать на C#. Но делают это почему-то только "пара студентов, которые пишут код по вечерам", а не сложившиеся компании.
Опять таки, ни одна серьёзная компания, которая допускает возможность того, что рано или поздно ей придётся конкурировать с MS, не станет добровольно писать код под .NET. А значит замены C++ пока что нет.
Из .NET софта регулярно имею дело с VS2005 и SQL Server Management Studio от 2005 сервера.Вроде они не нетовские. У МС под нет я знаю только серию Expression, тормознутые, но не сильно.
А что тебе не нравится?ЖЭст в том, что ты в полные крайности кидаешься. То есть программировать ВСЕ нужно либо на шарпе(типа быстро писать либо на асме(типа быстро работает).
Ну давай еще пофантазируем. Например, шарп проапгрейдим до python/ruby, чтобы еще быстрее!
Короче, бредохрень ты какую-то написал. Я скорее поверю, что в результате эволюции компиляторов ниша асма исчезнет, чем то, что асм заменит си/плюсы.
В общем, ты, наверное, удивишься, но у всех названных языков/технологий есть своя ниша. Причем, отнюдь не 'по привычке'. Вот такой он наш мир - удивительный и непредсказуемый!
Ну давай еще пофантазируем. Например, шарп проапгрейдим до python/ruby, чтобы еще быстрее!часто имеет смысл, т.к. от петона и руби изначально ждут слишком низкого быстродействия и низкоуровневые операции пишут на C/C++, используя их потом в программе. А проги на Java и C# обычно пишут полностью на них самих.
часто имеет смыслЙопт, ясень пень, иногда имеет смысл, я говорю о том, что задачи разные, а универсальной пары языков а-ля пенартур, оптимально покрывающих все множество задач, нет.
То есть программировать ВСЕ нужно либо на шарпе(типа быстро писать либо на асме(типа быстро работает).В общем-то, да.
асм заменит си/плюсыНет, c#/java заменит c/c++.
Раньше c/c++ нужны были, т.к. это были самые высокоуровневые (на тот момент) подобные языки, их преимуществом была лёгкость (относительная) разработки, и малое количество (тоже относительно ассемблера, конечно) глюков.
Сейчас же на c/c++ пишут только когда приходится продолжать разработку проектов, которые _уже_ на c/c++, или когда нужна скорость работы - во втором случае, c/c++ пытается влезть в нишу ассемблера, куда он не влезет никогда.
Для написания программ с очень высокими требованиями к производительности и потреблению ресурсов, лидер - ассемблер.Нет, это C и C++. Обычно, на ассемблере пишут очень маленькие куски кода.
Ты вообще когда-нибудь писал программы с очень высокими требованиями к производительности? Что это были за программы?
Напиши, пожалуйста, поисковый сервер Яндекса на ассемблере в качестве упражнения.
c/c++ пытается влезть в нишу ассемблера, куда он не влезет никогда.Ух, опять начинаем фантазировать? Мсье жОсткий профессионал в программировании на C++ и assembler? Или мсье видел пару раз си шарп, сделал пару сайтов на пхп и теперь делает глобальные выводы о том, о чем даже не имеет понятия, то есть о плюсах и ассемблере? Красноглазый фанатизмЪ жить не дает?
ЗЫ Про 'в общем-то, да' спорить даже желания нет - плакать хочется.
Напиши, пожалуйста, поисковый сервер Яндекса на ассемблере в качестве упражнения.Зачем так жОстко сразу! =) Пусть хотя бы пунто свитчер напишет сначала на асме, а потом- для полного просветления- на джаве.
Ух, опять начинаем фантазировать? Мсье жОсткий профессионал в программировании на C++ и assembler? Или мсье видел пару раз си шарп, сделал пару сайтов на пхп и теперь делает глобальные выводы о том, о чем даже не имеет понятия, то есть о плюсах и ассемблере? Красноглазый фанатизмЪ жить не дает?ппкс
ЗЫ Про 'в общем-то, да' спорить даже желания нет - плакать хочется.
такое ощущение, что пенартур2 живёт в каком-то ином мире
Написать пунто-свичер на c# - большая проблема?
Написать пунто-свичер на c# - большая проблема?Нет, большая проблема начнется, когда ты взглянешь на получившиеся системные требования и начнешь быстро-быстро что-то вводить в текстовое поле
когда ты взглянешь на получившиеся системные требования и начнешь быстро-быстро что-то вводить в текстовое полеХочешь сказать, на проверку одного слова на современном процессоре уйдёт больше 0.01с?
Если я правильно помню, ни си, ни си++ никогда не были самыми высокоуровневыми [ни на какой момент] языками. Это, конечно, к программированию отношения не имеет, но ошибки в истории вызывают опасения, что твоим словам в этом треде вообще доверять не следует.
Я не ахти какой спец по С и полный ламер в асме. Объясни, в чем асм обгоняет си, если мне надо, например, проинтегрировать систему дифференциальных уравнений? В процессе оптимизации я не нашел никаких недостатков си, кроме некоторой затраты тактов на переход по функциям - и то, можно было разобраться с ними средствами си или минимальными асмовскими вставками. Потери на эту траблу составляют порядка процента времени. В чем, объясни, разработка на асме была бы лучше?
Если в этот момент у тебя обсчитывается задача + формируется архив - то на проверку слова может уйти и минута.
Если в этот момент у тебя обсчитывается задача + формируется архив - то на проверку слова может уйти и минута.Если у меня обсчитывается задача + формируется архив - тут уже язык тебя не спасёт, надо выставлять приоритеты процессам. Если обсчитывается задача + формируется архив - тут и от программы на ассемблере можно минуту ждать ответа на вопрос "сколько будет 2+2".
Я говорил про процессорное время.
Ты уже написал Яндекс?
Хочешь сказать, на проверку одного слова на современном процессоре уйдёт больше 0.01сСлушай, я ничего не хочу сказать. И уж тем более рассказывать о том, что тебе придется реализовывать. Просто напиши прогу с функционалом пунто свитчера и начни 'быстро-быстро что-то вводить в текстовое поле', а чтобы скрасить 'современный процессор', запусти, к примеру, флешку какую-нибудь с ютуба. А потом мы с тобой вместе посмеемся!
конкурировать с Zend в отладке их же собственного байткодаКакого байткода, ты что?
А если говорить даже не о IDE, а о просто DE, о редакторе?
То, что на фоне остальных он смотриться неплохо, это не показатель. Главно что сам по себе он плох"Сам по себе он плох" не бывает, бывает плохой по сравнению с чем-то или хороший по сравнению с чем-то. Да, там больше глюков и тормозов, чем в калькуляторе - но это никак не говорит о самом языке, если мы сравниваем совершенно разные вещи.
полная зависимость от MSПочему?
у большинства он не установленНиксоиды пусть ставят себе mono, им всё равно привычно всё собирать; а фреймворки, насколько я помню, интегрированы в xp sp2 - второй версии, и в висту - третьей.
Но делают это почему-то только "пара студентов, которые пишут код по вечерам", а не сложившиеся компании.Ты так и не сказал, какая сложившаяся компания _начала_ разрабатывать _новый_ продукт, с нуля - но на c/c++ (сложный продукт для взаимодействия с пользователями).
ни одна серьёзная компания, которая допускает возможность того, что рано или поздно ей придётся конкурировать с MS, не станет добровольно писать код под .NETКонкурировать с MS - в чём именно?
Просто напиши прогу с функционалом пунто свитчера и начни 'быстро-быстро что-то вводить в текстовое поле'ОК, принеси мне установочный диск с ресурсами для разработки (студия, компилятор оплати мне то время, которое я буду изучать c# и писать эту программу - и посмотрим, будет ли там что-нибудь тормозить.
которое я буду изучать c#А, то есть, ты C# не видел до этого, просто увидел, что это Microsoft, и где-то на форуме прочитал, что это круто, и скоро на нём все будут писать?
ОК, принеси мне установочный диск с ресурсами для разработки (студия, компилятор оплати мне то время, которое я буду изучать c# и писать эту программу - и посмотрим, будет ли там что-нибудь тормозить.Боже упаси! Я тебе по доброте душевной советую получить некоторый опыт, чтобы потом с гордо поднятой головой рассуждать о некоторых вещах, а ты мне в лицо тычешь грязными зелеными бумажками? Фу!
Ну и не говори, что он плохо ездит!
Просто у меня, кроме этого, ещё и другие дела есть; и, чтобы эти другие дела забросить на некоторое время, мне нужны грязные зелёные бумажки
Ты запорожец водил когда-нибудь?он про запорожец слышал мнения других людей, которые ездили на нем
Ну и не говори, что он плохо ездит!
ты вот с чего взял что пунто на C# будет быстро работать? кто (кто сам пробовал писать на С#) тебе это сказал?
кстати, я водил запорожец, едет афигенно
ты вот с чего взял что пунто на C# будет быстро работать?Я не говорил, что он будет как-то необычно быстро работать.
Я говорил про то, что он будет работать со скоростью, достаточной для комфортного пользователя - потому что, как бы ты тут не поливал грязью c#, я не могу представить, почему это программа на c# будет на несколько порядков медленнее того же самого на c/c++.
Тот же punto switcher тратил меньше 1% процессора на tm5800 700mhz. Ты хочешь сказать, что на современном core 2 с частотой 1.5ггц (который раз в десять, если не двадцать, быстрее того crusoe) то же самое, написанное на c#, будет занимать больше, допустим, 10%? Ну и расскажи мне, откуда берутся тормоза в более чем сто раз.
в проге на C# этих атомарных команд больше (всякие там сборки мусора, какиелибо библиотечные вызовы .net) чем на си
если у тебя комп агружен очень сильно, то на отдельную программу (пунто) выделяется мало такого ресурса: время
в результате прога на Си может успеть выполниться (мало атомарных команд) а прога на C# может не успеть, т.к. много команд: часть выполнится сейчас а часть когда прога в следующий раз получит ресурсы
но комп конечно надо сильно загрузить
вопрос в том насколько это сильно
учитывая что на современных компах при просмотре видео частенько бывают подтормаживания мыши (связано чаще со свопом) то вот это "сильно" не так уж и редко встречается
Просто у меня, кроме этого, ещё и другие дела есть; и, чтобы эти другие дела забросить на некоторое время, мне нужны грязные зелёные бумажкиНу прости-прости! Все же это было бы так непедагогично рассуждать о количестве словарей, о частоте проверки, о том, что ввод обрабатывает не только пунто, а также о многих других забавных казусах, поэтому я не стал. Прости меня, умоляю! Об одном прошу смиренно, прежде чем что-то утверждать, требуй сначала грязные зеленые бумажки! Не нарушай универсальность подхода!
Тот же punto switcher тратил меньше 1% процессора на tm5800 700mhzТеперь я знаю, кто пишет тесты для get the facts!
Hooray!
в результате прога на Си может успеть выполниться (мало атомарных команд) а прога на C# может не успетьЭто уже какая-то комедия пошла.
"Давайте загрузим комп сразу двумя процессами, так, чтобы оба пытались весь процессор отобрать, а теперь попробуем запустить программы на c и на c#; о, программа на c успела сделать то, что ей надо, за те 0.001 секунды, которые ей дал процессор - ведь она работает всего 0.0009 секунд; а программа на c# не успела, потому что ей надо 0.0018 секунды - и сейчас она будет ещё полсекунды ждать, пока ещё раз не наступит её очередь. Значит, c рулит, а c# сосёт!"
Реально же, в реальных условиях и при нынешних мощностях процессоров, программа, которая десять лет назад особо не тормозила, и сейчас, переписанная на c#, заметно для пользователя тормозить не будет, хоть и работать будет в два раза (или даже в сто раз) медленнее. Пользователь не заметит, занимает она там 0.01% процессора или 1%. А уж если намеренно грузить процессор на 100% - тогда да, будет тормозить - и может получиться так, что программа на c# будет тормозить ощутимо, тогда как программа на c - нет. Но нормальные пользователи, если и запускают сразу два приложения, настолько требовательных к ресурсам - выставляют им приоритет пониже; а тормоза прикладной программы они даже заметить не успеют за тормозами оболочки.
Хм. Сейчас посмотрел пристальней. Клиент от SQL сервера, который я так ругал за тормознутость, похоже на C++/ATL, судя по зависимостям и встреченным строкам.
А вот devenv.exe (IDE VS) зависит от mscoree.dll и внутри очень часто упоминает CLR. А рядом лежит куча dll-ок с характерными для именования сборок названиями..
Кстати, какой самый простой и надежнай способ отличить .NET-прогу от не .NET?
Я не буду утверждать на 100%, поскольку сам не большой спец в C#, но что-то мне подсказыват, что punto на C# будет в адресное пространство каждого процесса подгружать .NET фреймворк. Не знаю, повлечёт ли это какие-нибудь последствия.
не знаю, как у тебя, а у меня процессор загружен на 100% заметную часть времени. Однако я предпочитаю в это время флудить в форуме, читать книги и т.п. И мне важно, чтобы пунто (которым я, правда, не пользуюсь ) тормозил как можно меньше.
> если и запускают сразу два приложения, настолько требовательных к ресурсам
настолько - это насколько? архивация файлов, просмотр фильма, компоновка пдф, 1с-бухгалтерия - это, по-твоему, чрезмерные задачи для простого пользователя, который и слова такого не знает - "приоритет"?
Однако я предпочитаю в это время флудить в форуме, читать книги и т.п. И мне важно, чтобы пунто (которым я, правда, не пользуюсь ) тормозил как можно меньшеБраузер не тормозит? Чтение книг не тормозит? Ну так и punto switcher на c# тем более тормозить не будет, ему гораздо меньше ресурсов нужно.
архивация файлов, просмотр фильма, компоновка пдф, 1с-бухгалтерия - это, по-твоему, чрезмерные задачи для простого пользователя, который и слова такого не знает - "приоритет"?Одновременно запустить два просмотра фильма в хдтв, если процессор этот хдтв не тянет (примерно в такой ситуации будут наблюдаться тормоза других программ) - да.
Когда G&M лаба на ВМК продает очередную видеотехнологию большой компании типа Real, Samsung, Intel и т.п., то те обычно просят, чтобы все было на чистом С. Если есть какие-то ассемблерные вставки, то просят рядом их аналоги на С.
Сложный алгоритм на асме сделать вручную практически нереально, просто из-за органичений человеческого мозга. К тому же, асм слишком привязан к конкретному процессору. То, что отлично работает на таком-то пентиуме может очень плохо (медленно) работать на другом и вообще не работать на отличном от этого семейства процессоре.
К тому же, интеловский компилятор С/С++ обычно генерит более быстрый код, чем человек, т.к. компилятор часто знает об особенностях целевой платформы гораздо больше, чем программист.
Что касается С++, то из-за сложностей и неоднозначностей в стандарте языка код часто получается привязан к конкретному компилятору, он хуже переносим. С Си такой проблемы нет.
> А если говорить даже не о IDE, а о просто DE, о редакторе?
Редактор у Zend гавно, ибо он тормозной и перегружен феньками. Есть десятки редакторов лучше/удобнеи/быстрее на любой вкус. Zend юзают из-за тесной интеграции с PHP, в основном.
Плох он, например, по стравнению со VS от MS (которая тоже не сахар, но на порядок качественней) , если брать его как среду разработки в широком смысле. Если только как редактор, то тут вариантов куча и маленькая тележка.
> полная зависимость от MS
Потому что программы будут зависеть от проприетарной системы, которой MS может крутить как хочет. Она может писать свои продукты на C++ и тесно интегрировать с системой, не давая тебе такой возможности из .Net Framework. Может обновлять фреймворк по 10 раз на дню без обратной совместимости, заставляя тебя тестировать свои программы во всех комбинациях. Может вообще отказаться от .NET, и ты останешься с кодом, который не на чём компилировать. В конце концов, MS может разориться, все перейдут на Mac OS, а ты будешь кусать локти с ненужным никому кодом.
> Ты так и не сказал, какая сложившаяся компания _начала_ разрабатывать _новый_ продукт, с нуля -
> но на c/c++ (сложный продукт для взаимодействия с пользователями).
Firefox, например. Его код переписывали с нуля относительно недавно. Хотя я им не пользуюсь, потому не уверен, что он на C++, но знающие люди могут меня поправить, если я ошибся. Есть куча довольно новых программ без корней, написанных на С++ (не говоря уже про подавляющее большинство программ под *nix просто так вот выдать на гора список сложно, ибо про большинство проектов я не в курсе того, как долго они разрабатываются.
> Конкурировать с MS - в чём именно?
Не ты с ним, а он с тобой. Захочет он выпускать переводчики, или те же антивирусы. И усё. Если твой продукт не будет так же удобен пользователю (т.е. глубоко интегрирован в ОС и офис, быстр и с удобным интерфейсом то хоть ты в 10 раз лучше вирусы ищи и в 5 раз точнее переводи, а основная масса пользователей класса "чайник" уйдет к MS. Кстати, антивирус на C# - уже смешно звучит.
Zend юзают из-за тесной интеграции с PHP, в основном.Я, наверное, неправильно выразился - нужен редактор именно для php5, с автокомплишеном, переходом к описанию метода/класса/константы по CtrlClick на упоминании и прочие такие фишки.
Что есть подобного, кроме Zend и Eclipse (которые оба написаны именно на джаве)?
Она может писать свои продукты на C++ и тесно интегрировать с системой,Ну, если кто-то хочет тесно интегрировать свои продукты с XYZBSD и наплевать на все остальные системы - флаг ему в руки, но тут с кроссплатформенностью совсем ужасно будет, гораздо хуже, чем у голого .net.
Может обновлять фреймворк по 10 раз на дню без обратной совместимости, заставляя тебя тестировать свои программы во всех комбинацияхМне говорили, что ты в своей программе сам указываешь, какая версия фреймворка используется... меня обманули?
Может вообще отказаться от .NET, и ты останешься с кодом, который не на чём компилировать.net - это тебе не какой-нибудь троцкий, даже если от .net откажутся (как могут отказаться и от c, и от x86, и от компьютеров вообще старые компиляторы всё равно останутся.
Firefox, например. Его код переписывали с нуля относительно недавно.Насколько я понял, там всё-таки не совсем с нуля всё было?
Захочет он выпускать переводчики, или те же антивирусы. И усё. Если твой продукт не будет так же удобен пользователю (т.е. глубоко интегрирован в ОС и офис, быстр и с удобным интерфейсом то хоть ты в 10 раз лучше вирусы ищи и в 5 раз точнее переводи, а основная масса пользователей класса "чайник" уйдет к MSТолько, опять же, переход с c# на си мне тут ничего не даст, кроме повышения стоимости разработки, возможного повышения количества глюков и возможного уменьшения того времени, когда я всё-таки буду способен продавать свой продукт (потому что, если разрабатывать на си, появится он, скорее всего, позже, чем если бы разрабатывали на c#; а уйдут, если тебя послушать - одновременно).
Не говоря уже про подавляющее большинство программ под *nixВсё-таки, какая-нибудь там ttf2pt и браузер - это очень разные программы, как по сложности, так и по целевой аудитории.
Кстати, антивирус на C# - уже смешно звучитЧто смешного?
Кстати, если ты так боишься этого - тут мс вроде собирается, начиная с некоторого момента, делать ос уже на основе чего-то вроде singularity, там вообще вирусы в принципе существовать не смогут - вот ужас то, что же будут есть бедные антивирусописатели, честно ковыряющиеся в си?
Что смешного?Кстати, если ты так боишься этого - тут мс вроде собирается, начиная с некоторого момента, делать ос уже на основе чего-то вроде singularity, там вообще вирусы в принципе существовать не смогут - вот ужас то, что же будут есть бедные антивирусописатели, честно ковыряющиеся в си?Тебе срочно надо курс повышения квалификации пройти. Скажем, месяц чтения seclab.ru. Драйвера они на C# писать не будут никогда, и ядро у OC будет, а значит и уязвимости будут жить долго и счастливо.
> Я, наверное, неправильно выразился - нужен редактор именно для php5, с автокомплишеном, переходом к
> описанию метода/класса/константы по CtrlClick на упоминании и прочие такие фишки.
> Что есть подобного, кроме Zend и Eclipse (которые оба написаны именно на джаве)?
почитай http://forum.dklab.ru/viewtopic.php?p=76711a> до просветления
почитай http://forum.dklab.ru/viewtopic.php?p=76711a> до просветленияАга. Даже фар предлагают. Ну конечно, у фара прямо-таки неебические возможности автокомплишена и перехода к коду.
Драйвера они на C# писать не будут никогдаЭто почему же?
Сейчас, вроде, как раз на C# и пишут.
и ядро у OC будетДа, небольшая часть ядра + проверка синтаксиса (раньше вместо небольшого проверяльщика был весь компилятор) написаны на C. Но это очень мало кода, и его до отсутствия ошибок/дырок вылизать относительно легко. А всё остальное (компилятор, ядро, дрова) - на диалекте C#.
Ты не поверишь, действительно неебические. Вплодь до того, что ты можешь свой плагин написать и делать в редакторе что пожелаешь. Это не считая готовых плагинов. Единственная проблема фара - отсутсвие поддержки юникода. Но это отдельная история.
Если тебе надо именно с автокомплитом под php5, то так и ищи, или на форуме там спроси. Оно есть, и не одно. Я как минимум 2 таких редактора знаю, и оба мне нравятся больше, чем Zend Studio. Но пишу как раз в FAR, ибо привык уже, а другие программы в некоторых аспектах и близко по возможностям редактора FAR к нему не подобрались ещё. Хотя есть в нём и свои неудобства, но всё поддаётся великому напильнику.
> Это почему же?
> Сейчас, вроде, как раз на C# и пишут.
Покажи мне драйвер на C# - убей мой мозг. Я могу даже поспорить, что драйверов на C# не будет, по крайней мере в XP и Vista.
Зато под солярку есть на джаве
Вплодь до того, что ты можешь свой плагин написать и делать в редакторе что пожелаешь.Ага, а ещё я могу на ассемблере с нуля новый редактор написать. Я спрашивал про готовые продукты, и фар мне подходит не больше, чем винда или компьютер.
Это не считая готовых плагиновНу и какие там готовые плагины для редактирования проекта из кучи файлов на пхп5, с автокомплишеном и переходом к коду?
Но пишу как раз в FAR, ибо привык ужеЯ тоже привык, но первым гвоздём стало именно отсутствие человеческой поддержки уникода, а гробом с крышкой - отсутствие автокомплишена и перехода к коду. Так что сейчас я фар использую, только если надо где-то быстро в одном месте что-то попроавить.
Я как минимум 2 таких редактора знаю, и оба мне нравятся больше, чем Zend StudioЭто какие?
> Это почему же?Это к Singularity относилось.
> Сейчас, вроде, как раз на C# и пишут.
Покажи мне драйвер на C# - убей мой мозг. Я могу даже поспорить, что драйверов на C# не будет, по крайней мере в XP и Vista.
Singularity - это другое название нанотехнологий?
Открой для себя википедию.
т.е. Singularity - это несколько Publications и Presentations?
Кстати, какой самый простой и надежнай способ отличить .NET-прогу от не .NET?Я кидаю exeшник в рефлектор а он мне отвечает Нет или не Нет.
А вот devenv.exe (IDE VS) зависит от mscoree.dll
Причина скорее всего в том что студии приходится много общаться с фреймфорком.
Среди этих Presentations есть и видеосъёмка реально работающей оси, кстати.
ОСИ - это протоколпредлагаю открыть Oracle Database Concepts, ну или просто погуглить
клиент - это прога на джаве
а в оракле там дофига всего на джаве написано
там же дофига всяких утилит типа Net Manager
и все они на джаве
OCI - это API, а протокол - это Oracle Net
львиная доля клиентов на джаве используют thin JDBC driver и про OCI не знают
ну и фраза "в оракле там дофига всего на джаве написано", подкрепляемая упоминанием Net Manager - эт конечно лол
на мой взгляд, интереснее поглядеть в лог установки патчсета и посчитать сколько там .so/.dll и сколько jar-ов.
О! singularity - это ещё и отличные мультики!
Это какие?Могу напутать, ибо давно интересовался, но вроде PHP Expert Editor и то ли phpED, то ли UltraEdit. Я их много перепробовал одно время.
А на чём они написаны?
Подозреваю, что на С++. Можешь сам скачать и посмотреть - мне лень.
я так понимаю: некое действие (некая команда пунтосвичера) оно представляется набором атомарных командна основе написания программ для topcoder-а на задачах на скорость - могу точно сказать, что оверхед на C# по сравнению с C++ где-то процентов на 10. Все остальные ускорения C++ над C# получались через ручное использование SSE команд.
в проге на C# этих атомарных команд больше (всякие там сборки мусора, какиелибо библиотечные вызовы .net) чем на си
причем это именно вычислительные/переборные задачи - где во всю нагружается проц и во всю используется память, на "юзерских" программах оверхед будет еще меньше, т.к. юзерская программа довольно большую часть времени проводит в ожиданиях: локов, системных вызовов, чтения с диска и т.д.
могу точно сказать, что оверхед на C# по сравнению с C++ где-то процентов на 10. Все остальные ускорения C++ над C# получались через ручное использование SSE команд.уже во всяких блочных методах вычисления разница будет раз в 20.
Поверь мне, оптимизировать в C++ можно не только ручное использование SSE команд (это через asm что ли?). Львиная доля прироста производительности в реальных программах - оптимизация доступа к памяти и её аллокаций.
BTW, даже самый лучший компилятор не сможет соптимизировать так, как ассемблерщик. Дело в том, что компилятор компилирует программу так, как она написана, а ассемблерщик может изменить алгоритм на низком уровне. В результате алгоритм будет работать быстрее, но его поведение, например, может не совпадать с соотвествующим алгоритмом на С/C++ при некорректных данных (если речь идет о части алгоритма, то окружающий код может гарантировать, что некорректные данные в нее никогда не попадут) или многопоточности. К сожалению, у сопряжения ассемблера с языком С/C++ есть большие проблемы - из него не получить доступа к stl, очень ограничено взаимодействие с объектами и.т.д.
"даже самый лучший компилятор не может соптимизировать так, как это сделает самый лучший ассемблерщик" - так будет корректнее
> из него не получить доступа к stl
а зачем, если ассемблерщик и так может сделать более эффективный алгоритм?
всё же спрошу
кто-нибудь из защищающих здесь ассемблер как Язык Программирования, пробовал писать на нём программы объёмом 3-4 килобайта?
(3-4 килобайта машинных кодов, разумеется)
при чём что бы эта программа не разбивалась на 3-4 модуля, а была чем-то связанным
Эдак можно говорить, что клиент к ораклу - это PHP.
Все эти драйвера - надстройка над OCI, как я понимаю.
в софте для tv.local был цельный кусок в 1.5к строк на асме
т.е. на topcoder-е участвовали тупые C++-программисты, которые так делать не умели?
или какие-то злые феи запрещают эти методы использовать на C#?
зы
я же тебе говорю, все эти оптимизации использовалось и в программах на C#-е, и в программах на C++. Отрыв происходил только если C++ программа начинала использовать sse.
Эдак можно говорить, что клиент к ораклу - это PHP.Найн. Thin JDBC драйвер не требует никаких дополнительных библиотек.
Все эти драйвера - надстройка над OCI, как я понимаю.
все эти оптимизации использовалось и в программах на C#-е, и в программах на C++. Отрыв происходил только если C++ программа начинала использовать sse.А примеры кода есть? Эффектное, наверное, зрелище =]
Почти уверен, что цепепе-программы компилировались в лучшем случае без оптимизаций, а скорее всего - в отладочном режиме.
Убедил. Некоторые клиенты к Ораклу на джаве.
задачи проходили под эгидой Intel-а и компилировались компилятором intel со всеми включенными оптимизирующими фишками.
1. Захавать много памяти.
2. Что повычислять, немного хавая и освобождая памяти.
3. Отпустить память, сказать ответ.
На время работы программы влияет эффективность шага 2, которая зависит от скорости работы с захаванными данными и обычно в первую очередь зависит от асимптотики сложности используемого алгоритма, во вторую очередь - от константы при этой асимптотике, зависящей от качества реализации (не считать лишнего и по несколько раз, использовать правильные структуры данных и т.д. и только в третью очередь от оптимизации единичных операций.
В реальной жизни программы обычно ведут себя не так. (под реальной жизнью я понимаю жизнь коробочных продуктов, опять таки - о чём знаю, о том и говорю, с встаиваемым кодом или играми может быть все по другому) В реальной жизни важно не общее время работы программы, а скорость отклика на действия пользователя. Потому при оптимизации стараются предвычислять всякие разные вещи, заранее загружать в память то, что может понадобится, оптимизировать рабочее множество так, чтобы оно хорошо помещалось в кеш, читать данные из памяти так, чтобы конвееры начинали подгрузку занных в кэш в нужном тебе порядке и т.д. Обыно в реальных программах у тебя вообще нет возможности никак влиять на асимптотику сложности вычислений и очень мало шансов влиять на константы перед этой асиптотикой. В реальных программах правда, оптимизайией на обычно не занимаются, но уж если припёрло, то делают это по уму.
А в топ кодере занимаются оптимизацией не столько программы, сколько алгоритма. Дрочево в виде ассемблерных вставок - это уже извращение и оптимизация вычислений. Это наверное похоже немного на оптимизацию в самых первых 3д-шутерах.
В общем я чего хочу сказать. Топ-кодер не показатель. Там довольно предсказуемый и прямолинейный, что ли, код. Там пользователя нет. Плюс такой момент. В среднем C# на таких вот синтетических тестах, вроде топ кодеровских программ, может и не уступает C++, но на конкретном проблемном случае может проигрывать в разы, и ты уже это никак не спасёшь. А на C++ ты можешь на каком угодно низком уровне управлять процессом работы прораммы.
PS. Кстати, тут вот недавно FJ жаловался, что его более правильная алгоритмически (т.е. с логарифмическим доступом/вставкой/удалением) C#-реализация DNA->RNA на IFPC работала примерно на порядок медленнее, чем более топорная (вроде там был список строк произвольной длины, который время от времени сливался в 1 строку, чтобы длина списка не росла очень-очень быстро) C++-реализация того же. А всё почему? А всё потому, что ситуация попалась довольно нестандартная, и стандартные шестерёнки C# не справились. (Я могу и ошибать по этому вопросу, конечно, ибо детального сравнения не проводил).
допустим - это так, в чем проблема это слияние строк написать на MC++, а остальное на C#?
Да может и нет проблемы. Пробовать надо. Может и на чистом C# можно написать так, что быдет быстро. Проблема в том, что самый правильный и очевидный способ работал медленно. А чтобы это понять, а тем более понять в чём проблема, тебе нужен другой язык.
По теме флуда выше: во-первых, ассемблер никогда не вытеснит С ниоткуда, это даже неинтересно обсуждать, ибо бред. Равно как и шарп/жава/питон/whatever не вытеснят С ниоткуда, кроме, возможно, тех мест, которые изначально надо было писать на плюсах (а вот сами плюсы могут и сдохнуть, хотя я не уверен).
Во-вторых, про пунтосвитчер: в ку3 с WSAD и прыжком на правой кнопке мыши нельзя играть при включённом пунто, прикиньте! =)
В-третьих, про шарп: контрол центр атишных дров написан под .нет, прикиньте! =)
В-третьих, про шарп: контрол центр атишных дров написан под .нет, прикиньте! =)и тормозит, проверено
Во-вторых, про пунтосвитчер: в ку3 с WSAD и прыжком на правой кнопке мыши нельзя играть при включённом пунто, прикиньте! =)
ну и как после этого можно юзать пунту!
прикиньте!чего ту тприкидывать?
сколько с ним мучений изза этого было
Оставить комментарий
Landstreicher
Недавно пришлось столкнуться с относительно крупным проектом на C++ (порядка 144 тыс. строк). Код был очень "грязным": постоянно используются char***, malloc вместо std::vector, не проверяются ошибки, возникают утечки памяти, как следствие — постоянные Segmentation fault при запуске.Чтение этого кода навело меня на следующие соображения. Все написанное далее носит характер непроверенной гипотезы. Требуется ваша критика и обсуждение.
Насколько вообще язык C++ применим для написания больших проектов? Отличительная особенность языков C/C++ — возможность работы с памятью через указатели, адресную арифметику. Проблема состоит в том, ошибки, связанные с порчей памяти, могут проявляться не только в модуле, который сделал ошибку, но и в любом другом модуле. То есть один модуль, например, легко может запортить глобальные переменные другого модуля. Такие ошибки очень сложно отловить, и, с другой стороны, одной такой ошибки вполне достаточно чтобы вся программа упала c фатальной ошибкой.
Далее. Модули пишут люди, которым, как известно, свойственно ошибаться. Даже самые квалифицированные программисты изредка допускают ошибки. Поэтому можно принять, что процент ошибок в программах не может быть ниже некоторой константы, например, 10^-4 на 1 строку кода. Поскольку одной ошибки достаточно, чтобы свалить всю программу, то вероятность этого экспоненциально зависит от размера кода. Конечно, эти рассуждения не строгие, но можно сделать такой вывод.
Существует некоторый порог N (ориентировочно в диапазоне 100 тыс. — 1 млн. строк кода такой что:
1) Программы размером сильно меньше порогового относительно легко пишутся, отлаживаются. При этом можно добиться практически полного отсутствия ошибок с памятью, и, как следствие, стабильной работы программы.
2) Программы размером сильно более порогового содержат достаточное количество ошибок работы с памятью для того чтобы программа регулярно падала, содержала уязвимости и т.д.
Конечно, если программисты очень квалифицированы, то они могут написать работающую программу размера и 2N, и 5N. Но все равно, как мне кажется, порог при этом куда-то отодвигается, но не исчезает.
Подтверждением этой гипотезы может служить тот факт, что такие программы, как например, OpenOffice, Firefox, Sendmail, GCC либо постоянно падают (как например OpenOffice либо в них постоянно находят всякие уязвимости (как например в Firefox, Sendmail).
Почему это зависит от языка? Дело в том, описанная проблема вызвана тем, что язык не содержит никаких механизмов, которые бы позволяли защитить один модуль программы от ошибок в другом модуле программы. Существуют языки в которых подобные механизмы существуют. Взять, например, какой-нибудь Python/Java/C#. В них не существует указателей и адресной арифметики и, как следствие, память испортить нельзя. Если в каком-то модуле происходит ошибка, то кидается исключение, которое в отличие от memory corruption обнаруживается сразу. В Python или Java в таких случаях обычно печатается полный дамп стека, по которому очень легко понять, что сглючило, и исправить ошибку. Получается, что шансов написать большую стабильно работающую программу на Python/Java/C# гораздо больше.
Респект всем, кто дочитал до сюда! Сильно интересует ваше мнение относительно приведенной выше гипотезы. Особенно интересует мнение людей, имевших опыт при работе с большими проектами на языках типа Python/Java/C# — у меня такого опыта нет (есть только с С++). Удается ли на них писать большие проекты, какие там проблемы возникают?