написание больших программ на C++

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# — у меня такого опыта нет (есть только с С++). Удается ли на них писать большие проекты, какие там проблемы возникают?

laki

какие там проблемы возникают?
ты же указал все зависит от квалификации программистов.
и кстати в шарпе тоже полный дамп стека выкидывается

Olenenok

Добавь к этому отсутствие полиморфизма "из коробки" для C++ - приходится работать с указателями, что автоматически ухудшает синтаксис и повышает число опасных мест

Marinavo_0507

Дело в том, описанная проблема вызвана тем, что язык не содержит никаких механизмов, которые бы позволяли защитить один модуль программы от ошибок в другом модуле программы.
Такие механизмы есть на уровне ОС, и их можно отлично использовать, если интересует надёжное решение.

Landstreicher

> ты же указал все зависит от квалификации программистов.
То есть ты хочешь сказать, что если программисты — мегаотцы, то они могут (за разумное время) написать программу C++ сколь угодно большого размера без memory corruption?
> и кстати в шарпе тоже полный дамп стека выкидывается
Возможно Просто я ни разу живьем не видел программы на C#

laki

То есть ты хочешь сказать, что если программисты — мегаотцы, то они могут (за разумное время) написать программу C++ сколь угодно большого размера без memory corruption?
есть такие команды. проблема то останется, всем людям свойственно ошибаться, вопрос сколько времени уйдет на тестирование и отладку.

laki

кстати 1 млн строк это скока проект занимает? ориентировачно

Landstreicher

> Такие механизмы есть на уровне ОС, и их можно отлично использовать, если интересует надёжное решение.
Я правильно понимаю, что предлагается разбить одну программу на несколько программ, взаимодействующих через какие-нибудь файлы/сокеты/пайпы? Действительно, этот способ позволяет отодвинуть порог дальше. Если же добиться того, чтобы вся система состояла из относительно небольших больших программ, то можно решить проблему целиком. Кстати, тут получается строго обоснование unix-way.
Основная проблема такого подхода — не всякую систему удается разбить на отдельные взаимодействующие процессы. Часто бывает что необходим один толстый процесс с сложной функциональностью

Realist

Для любого языка существует размер программы, выше которого уже хрен чего напишешь, я полагаю. Потому как каждая идея программирования, повышающие абстрактность программ, управляемость проектов, модульность и прочее, так вот каждый такой прием, повышают эту планку, но не убирают.
Про Python рискну предположить, что там ограничением может быть открытость всех членов класса.
А проект на C++ изначально использует аццкую сметь Си и плохого стиля. Правла ведь, что всю адресную арифметику там можно запихать в STL? А коли так, то ошибки памяти останутся только в некорректных итераторах. Компилим в дебужном режиме и получаем вместь испорченной памяти ассерты как раз в модулях, содержащих ошибки. В чем я не прав?

laki

А проект на C++ изначально использует аццкую сметь Си и плохого стиля.
за что же так си и сипипи то не любите.
надо наверно говорить про область проекта его конечное назначение.
я вот сейчас как раз готовлю кп для того, чтобы убедить заказчика делать не на LAMP, а на .NET + оракл.

kokoc88

На самом деле всё не так плохо, как ты пишешь. Я уже два года делаю проект на сочетании Си++, C# и Java. За это время я понял, что в каждом языке есть правила, которые надо соблюдать, чтобы программа работала правильно.
В нерабочее состояние программу можно привести не только испорченной памятью: чего стоит непонимание как работает synchronized/wait в Java, бесконечная утечка ресурсов в C# или Java (я к тому, что может лучше упасть и перезапуститься, чем висеть и не реагировать на раздражители очень высокая сложность поддержки транзакционных методов в этих языках, особенности работы с потоками в C#, бесконечные runtime исключения от сторонних библиотек. В Си++ от очень многих бед спасают деструкторы.
Если у тебя код, где используется много malloc и работы с памятью напрямую, то это нельзя назвать Си++ кодом. Необходимость в этом отпала уже давно, а сочетание new/shared_ptr/weak_ptr используется у всех программистов на уровне рефлекса.
Open source код никогда не надо приводить как пример. Его в 95% случаев пишут любители, которым нечем заняться после работы. Каким бы ни был язык, у них почти всегда получаются какие-то ляпы. Причём наличие этого самого source обычно не помогает.

laki

проект на сочетании Си++, C# и Java.
а ты не путаешь, что в рамках одного проекта работают три рзных апликухи, которые между собой взаимодействуют?

kokoc88

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

Realist

Я плюсы люблю, более того, я больше ничего и не знаю
Проблема плюсов в том, что они унаследовали многие веши Сей, которые, кк показала практика, устарели и не безопасны. Те же самые maaloc, приведение типов и прочее. В С++ используются более безопасные аналоги, но нет запрета писать ересь старыми средствами. Такова филосовия С++ и такова цена этой философии.

laki

ок ясно

kokoc88

В С++ используются более безопасные аналоги,
Да, и всё же весьма тяжело от C-style cast перейти на static_cast

ppplva

Open source код никогда не надо приводить как пример. Его в 95% случаев пишут любители, которым нечем заняться после работы. Каким бы ни был язык, у них почти всегда получаются какие-то ляпы. Причём наличие этого самого source обычно не помогает.
Так было лет 10 назад. Сейчас большинство разработчиков крупных open source проектов работает в компаниях и занимается этим full time.

Marinavo_0507

> Сейчас большинство разработчиков крупных open source проектов работает в компаниях и занимается этим full time.
Видимо, поэтому исследования компаний-аудиторов кода показывают примерно одинаковое в среднем качество открытого и закрытого кода.
Конечно, это не относится к компании, где работает - там настоящие профи пишут высококачественный софт, а говно-опен-сорсом не занимаются

Marinavo_0507

Основная проблема такого подхода — не всякую систему удается разбить на отдельные взаимодействующие процессы.
Как-то не верится. Если на несколько разработчиков можно разбить, то, думаю, и на процессы можно. А если разработчик один, то проект не очень большой.

laki

что за манера обсирать сразу же?

ppplva

Это был комплимент )
А троль - тот, кто пишет заведомо неверные, провокационные утверждения.

Marinavo_0507

"заведомо неверные" - лишние слова

laki

А троль - тот, кто пишет заведомо неверные, провокационные утверждения.
а у них у всех буковка А у ника?

ppplva

Нет, что ты! Человек с буквой А всегда прав. Это - первое правило форумчанина.

klyv

Проблема плюсов в том, что они унаследовали многие веши Сей, которые, кк показала практика, устарели и не безопасны.
Почитай про D - они много аргументов приводят в пользу того, что C++ устарел морально.
Но, в отличии от почти всех, они предлагают альтернативу - новый язык.
Digital Mars про D

Olenenok

Open source код никогда не надо приводить как пример. Его в 95% случаев пишут любители, которым нечем заняться после работы. Каким бы ни был язык, у них почти всегда получаются какие-то ляпы. Причём наличие этого самого source обычно не помогает.
хех, как раз в опенсурсных исходниках заметил: обычно программа на си читается намного лучше чем программа на цепепе. Ну а в целом бред. Почему - объяснили выше.

Olenenok

Если у тебя код, где используется много malloc и работы с памятью напрямую, то это нельзя назвать Си++ кодом. Необходимость в этом отпала уже давно, а сочетание new/shared_ptr/weak_ptr используется у всех программистов на уровне рефлекса.
как сочетаются weak_ptr с std::vector? С shared_ptr всё очень плохо, а в std::list и shared_ptr грустно, по логике моей задачи иногда приходится прыгать на несколько элементов. Ну и такой подход не очень хорош, всё-таки, пока shared_ptr и weak_ptr не входят в стандартную библиотеку.

Olenenok

упс, сумбурно получилось. Хотел сказать, что shared_ptr и std::vector нельзя. shared_ptr и std::list очень неудобно. Как у weak_ptr с std::vector?

slonishka

shared_ptr и std::vector нельзя.
с чего бы?

kokoc88

обычно программа на си читается намного лучше чем программа на цепепе
Там проблема не в том, что читается лучше. Она читается дольше.

kokoc88

как сочетаются weak_ptr с std::vector? С shared_ptr всё очень плохо, а в std::list и shared_ptr грустно, по логике моей задачи иногда приходится прыгать на несколько элементов. Ну и такой подход не очень хорош, всё-таки, пока shared_ptr и weak_ptr не входят в стандартную библиотеку.
Ничего из написанного не понял.

Olenenok

Хм, действительно, можно. С чем-то спутал, не помню с чем

slonishka

наверное с auto_ptr =)

Olenenok

точно

Olenenok

но, тем не менее, это костыль, лучше бы нормальный сборщик мусора положили, а то будет как вот здесь:
#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;
}

kokoc88

shared_ptr<foo> derzhi_silney;
Это не костыль, надо учиться правилам программирования с smart_ptr, в ветке упоминали weak_ptr.

Olenenok

и что? потом каждый раз при работе из weak_ptr делать shared_ptr, а потом работать? это уже перл какой-то получается

laki

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

kokoc88

и что? потом каждый раз при работе из weak_ptr делать shared_ptr, а потом работать? это уже перл какой-то получается
Именно так и делается, причём в языках с GC тоже довольно часто так поступают. Накладные расходы на это равняются ::InterlockedIncrement

Dasar

> Насколько вообще язык C++ применим для написания больших проектов?
лучше не применять. об этом уже несколько раз говорилось даже в этом форуме.
ps
существующие managed-языки тоже могут везти себя не адекватно. например, при работе нескольких тредов очень легко получить испорченную память даже в managed-языках.
но по сравнению с C/C++/дельфи это конечно цветочки.

bleyman

О, кстати, оффтоп немножко, как раз сегодня вдруг задумался

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 один раз делается, вначале, это так?

daru

Насколько вообще язык 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" не участвую.

Landstreicher

Большое спасибо всем ответившим! В ваших ответах много интересных мыслей.
Особенно радует, что все ответы конструктивные, без holy-war-ов.

Landstreicher

Как-то не верится. Если на несколько разработчиков можно разбить, то, думаю, и на процессы можно. А если разработчик один, то проект не очень большой.
Покажи, как можно разбить на несколько процессов Firefox или OpenOffice. Я пока не вижу разумных способов это сделать.

Landstreicher

В нерабочее состояние программу можно привести не только испорченной памятью: чего стоит непонимание как работает synchronized/wait в Java, бесконечная утечка ресурсов в C# или Java (я к тому, что может лучше упасть и перезапуститься, чем висеть и не реагировать на раздражители очень высокая сложность поддержки транзакционных методов в этих языках, особенности работы с потоками в C#, бесконечные runtime исключения от сторонних библиотек.
Можно про это поподробнее? Всякие memory corruption я видел и отлаживал много раз, а вот про это ничего не слышал.
Особенно непонятно как может возникать утечка ресурсов в C# — там же garbage collection

Landstreicher

лучше не применять. об этом уже несколько раз говорилось даже в этом форуме.
Тут некоторые говорят . Чего скажешь по этому поводу?
ps
существующие managed-языки тоже могут везти себя не адекватно. например, при работе нескольких тредов очень легко получить испорченную память даже в managed-языках.
Можешь поподробнее про это? Пример кода можешь привести?

Landstreicher

Но те проблемы, о которых говорится в оригинальном посте (ошибки при работе с памятью практически полностью были устранены за счёт:
Ценная информация! Буду двигаться в ту же сторону.
<offtopic>Что за проект, если не секрет?</offtopic>
Сухой остаток: если не ошибаюсь, то за 2.5 года к нам попал в руки только один дамп свернувшегося у клиента в продакшене процесса
IMHO это реально КРУТО!
Могу опять же засвидетельствовать, что замутить в java'е утечку памяли не намного сложнее, чем в c++.
Можно пару слов об этом? Никак не пойму, как в языке с garbage collection можно замутить утечку памяти.

Marinavo_0507

> Покажи, как можно разбить на несколько процессов Firefox или
> OpenOffice. Я пока не вижу разумных способов это сделать.
Браузер:
1. Управление GUI (всего, кроме собственно страничек).
2. Управление общим долговременным хранилищем данных.
3. Работа с удалёнными серверами (возможно, несколько видов таких, по одному на протокол).
4. Обработка HTML.
5. Показ странички (заданной уже во внутреннем представлении).
6. Исполнение скриптов, плагинов.
Главное - это чтобы 4, 5 создавались для каждого сайта заново, а не повторно использовались. Если всё сделать правильно, то кроме увеличения устойчивости к ошибкам, получится улучшение user experience: пока ресолвится DNS или рендерится HTML, весь гуй прорисовывается сразу и отвечает на действия пользователя.
OpenOffice вообще не должен существовать, так что не факт, что его можно сделать разумно.

Marinavo_0507

Можно пару слов об этом? Никак не пойму, как в языке с garbage collection можно замутить утечку памяти.
Элементарно: делаешь большую коллекцию (или несколько и кладёшь туда ссылки на всё, что у тебя есть, а удалять забываешь.

Papazyan

> Насколько вообще язык C++ применим для написания больших проектов?
лучше не применять. об этом уже несколько раз говорилось даже в этом форуме.
Да, в наши дни писать на С++ не круто. Работы меньше и платят меньше чем за Джаву, а сам язык сильно переусложнен какими-то ad-hoc хаками. Новый стандарт примут, вообще вешаться можно будет.

Marinavo_0507

круто
механизмы отслеживания состояния heap'а
а вот под этим что подразумевается?

durka82

Покажи, как можно разбить на несколько процессов Firefox или OpenOffice. Я пока не вижу разумных способов это сделать.
До OpenOffice-а пока не добрался, но по аналогии с МОфисом там должно быть дофига подсистем, которые можно (и нужно!) выделять в отдельные процессы.
А вот Firefox меня уже достал тем, что у него нет никакого разбиения по процессам (исходники не изучал - такое впечатление по его работе)
Какие проблемы из-за этого возникают:
1. Отдельное расширение может значительно замедлить работу всего Лиса, а может и вообще убить
2. Конкретное содержимое страницы (скрипты, навороченная графика, плагинный контент) может значительно замедлить работу и даже заставить перезапустить Лис
3. Конкретный компонент (мб они на самом деле расширения - не знаю) может тоже периодически тормозить казалось бы на ровном месте (например встроенный загрузчик файлов/страниц начинает тормозить(вместе со всем Лисом) при большом списке загруженного)
С моей точки зрения стоило бы разбить все это на процессы следующим образом:
1. Ядро браузера - Уровень расширений - Расширение (ну или хотя бы разбить их на группы по степени безопастности и на каждую группу запускать свой процесс)
2. Ядро браузера - Управление отрисовкой - (Скрипт/Графика/Уровень плагинов - Плагин)
3. Ядро браузера - Уровень компонентов - Компонент
Соответственно разбить это все по отдельным исполнителям можно.
Собственно хорошим примером такого разбиение может быть любая ОСь.

evgen5555

Как размер исходников может влиять на сложность отлова ошибки?

laki

в джобе запость
Работы меньше и платят меньше чем за Джаву

Dasar

> Тут некоторые говорят обратное. Чего скажешь по этому поводу?
и это подтверждает, что при разработке на C++ есть два момента:
1. обязательно требуется команда хороших программистов
2. феодальное хозяйство (очень малое использование чужого кода).
в С++ в лучшем случае используются небольшие сильно локализованные библиотеки, очень редко используется код со сложным поведением.
Возьмем, например, тот же Дельфи там в отличии от С++ сложился рынок сторонних компонентов: этому благоприятствовал то:
1. в дельфи есть мало-мальская проверка границ памяти: как при работе со строками, так и при работе с массивами - поэтому проездов по памяти намного меньше => меньше фатальных сбоев при в сбое в стороннем компоненте.
2. в дельфи есть встроенная поддержка бинарных модулей.

Marinavo_0507

А вот Firefox меня уже достал тем, что у него нет никакого разбиения по процессам (исходники не изучал - такое впечатление по его работе)
Тематичный тред: http://realworldtech.com/forums/index.cfm?action=detail&...

Dasar

> Можешь поподробнее про это? Пример кода можешь привести?
сейчас с наскоку не получилось.
по памяти, это часто попадалось в .Net 1.0, а вот в .net 2.0 даже может и не встречалось.

Dasar

> Так вот, что произойдёт, если один тред начнёт вызывать SetNext, а второй очень удачно вызовет Dispose?
для того, чтобы вызвать SetNext должна быть где-то остаться внешняя ссылка, такое возможно только если прибивается сразу целый кластер и доступ по ссылке идет из под Finalize
но и в этом случае можно сделать надежно, если сначала GC зануляет все внешние ссылки, а только потом прибивает память.

Papazyan

в джобе запость
Сделай на dice.com search по обоим, умник.

daru

механизмы отслеживания состояния heap'а
а вот под этим что подразумевается?
Была такая низкоуровневая библиотека, которая умела подменять глобальные new и delete и другие функции, работающие с heap'ом, на инструментированные версии. При сборке дебаг-целей это, кажется, делалось всегда, а при сборке релиз-целей можно было директивой компилятора подключить.
Идея такая: после запуска процесса эта либа начинает периодически (например раз в час) дампить в файл информацию о состоянии всего хипа - по каждому выделенному блоку. Отдельная offline-утилита потом анализировала этот файл и находила участки, которые были выделены, например, не ранее, чем через час после запуска и сохранились до самого завершения процесса. Дело в том, что обычно размещённые блоки памяти долго не живут - одна "транзакция" и до свидания. Долгоживущие объекты могли быть:
а) созданными в процессе инициализации системы - такие игнорируются
б) пулируемыми - пулы отключались для тестируемых модулей
в) утёкшими - их и ловили
При работе на windows еще удавалось установить по debug-info название класса утекшего объекта (если это был объект). Если блок памяти был небольшой, то он дампился целиком - можно было покопаться при желании.
<offtopic>Что за проект, если не секрет?</offtopic>
Биллинговая платформа CBOSS. В мои времена она называлась CBOSS Intellectual Network, CBOSSin.
2. феодальное хозяйство (очень малое использование чужого кода).
в С++ в лучшем случае используются небольшие сильно локализованные библиотеки, очень редко используется код со сложным поведением.
С этим согласен: найти универсальные сторонние библиотеки, написанные на c++ , сложно. Почти всё, что нам требовалось [низкоуровневого] мы написали сами. При этом наши разработки (наверное штук 30 "универсальных" библиотек) тоже вряд ли кому-то могут пригодиться вне проекта.

durka82



2. феодальное хозяйство (очень малое использование чужого кода). в С++ в лучшем случае используются небольшие сильно локализованные библиотеки, очень редко используется код со сложным поведением.
С этим согласен: найти универсальные сторонние библиотеки, написанные на c++ , сложно. Почти всё, что нам требовалось [низкоуровневого] мы написали сами. При этом наши разработки (наверное штук 30 "универсальных" библиотек) тоже вряд ли кому-то могут пригодиться вне проекта.
Это все потому, что без этого не будет должной уверенности в качестве исполнения кода (что требуется из-за возможности легко в нем напортачить).
Так?

laki

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

Papazyan

это не показатель. умнег
А что показатель? Твой внутренний голос? Я привел конкретный способ измерения, основанный на данных крупнейшего в США job-сайта. Хотя можешь повторить поиск на monster.com или craiglist. То, что джава давно обошла по популярности С++ известно всем, про это уже статьи написаны и блогпосты запосщены. Даже МС, крупнейший бастион С++писательства, положила мышь на него.

timefim

Даже МС, крупнейший бастион С++писательства, положила мышь на него.
На чем же они интересно все свои продукты пишут?

Papazyan

На чем же они интересно все свои продукты пишут?
Важно не то, на чем они пишут, а то, на чем они предлагают писать другим

durka82

Интересно.
Спасибо, посмотрю

daru

Это все потому, что без этого не будет должной уверенности в качестве исполнения кода (что требуется из-за возможности легко в нем напортачить).
Так?
Не только. На c++ вообще очень сложно написать сколько-нибудь универсальную библиотеку. Язык низкоуровневый (что бы про него не говорили... сильно привязан к платформе, к операционной системе. Язык очень сложный - много глюков компиляторов, есть проблемы в самом Стандарте...
В общем, нам приходилось подтачивать (или просто фиксить) все библиотеки, которые мы использовали в проекте, в т.ч. boost, stlport, xerces/xalan.

deniska

Немного о нашей компании. У нас весь код на С / С++, использования чужих библиотек нет (все свои за долгое время существования). Общее количества исходников за 200Мб. Те проекты, которые идут заказчикам, собираются примерно из 30Мб исходников (проектов несколько, есть куча внутренних утилит). Заказчикам поставляли на код на разные платформы, включаю ту, где порядок байт в инте другой. Другой язык программирования нам скорее всего не подойдет из-за жестких ограничений на время выполнения программ (разве что для внутренних утилит). Пока основные заказчики, как я понимаю, не жаловались, что наш код где-то падает. Причем любое падение им бы дорого обошлось и, думаю, нам бы они об этом сообщили . Правда и цена продукта соответствующая.

laki

Правда и цена продукта соответствующая.
какая область проектов?

slonishka

Немного о нашей компании. У нас весь код на С / С++, использования чужих библиотек нет (все свои за долгое время существования). Общее количества исходников за 200Мб. Те проекты, которые идут заказчикам, собираются примерно из 30Мб исходников (проектов несколько, есть куча внутренних утилит). Заказчикам поставляли на код на разные платформы, включаю ту, где порядок байт в инте другой. Другой язык программирования нам скорее всего не подойдет из-за жестких ограничений на время выполнения программ (разве что для внутренних утилит). Пока основные заказчики, как я понимаю, не жаловались, что наш код где-то падает. Причем любое падение им бы дорого обошлось и, думаю, нам бы они об этом сообщили . Правда и цена продукта соответствующая.
ну да. у вас, насколько я понимаю, все именно так, как описал :
1. обязательно требуется команда хороших программистов
2. феодальное хозяйство (очень малое использование чужого кода).

sbs-66

Разрабатывать большой проект с группой плохих программистов и активно используя сторонние библиотеки - это гиблое дело на любом языке программирования. Потому что плохие программисты всё равно сделают кучу ошибок, а сторонние библиотеки будут глючить, и вы не сможете на это повлиять.
Что касается применимости С++ к большим проектам, то он применяется там, где критична быстродействие или там, где продукты коробочные (а там где выполнены оба условия - сам бог велел). Если вы пишите программу для одного (или 2-3) заказчика и она не работаю с большим количеством данных (аудио/видео, большие изображения, много-много текста и т.п. то конечно вам не понятно, зачем использовать C++. У вас просто по другому построен процесс разработки, что С++ использовать нерентабельно. Точно так же было бы глупо писать на С++ веб-сайты. Однако подавляющее число коробочных продуктов написаны на С++.
Собственно, посмотрите что установлено у вас на компе и на чём оно написано. Я что-то не припоминаю ни одной достойной программы на C# или Java. Есть Eclipse и IDEA, но они настолько неповоротливы и монструозны, что даже последний офис нервно курит в сторонке (да и рассчитаны они, собственно, на разработчиков, а не на нормальных пользователей). А больше собственно ничего и нету. Всё остальное на C++, как бы его не хаяли.

Marinavo_0507

Собственно, посмотрите что установлено у вас на компе и на чём оно написано.
Боян, уже смотрел.
На C++ мало, если считать по головам, и много, если по потреблению ресурсов

Olenenok

здесь речь про ентерпрайз. C++ не ентерпрайз, .NET и Java - ентерпрайз.

SCIF32

считать по головам

а какие крупные проекты есть, из общеизвестных, написанные не на С/С++ (не учитывая то, что назвали - Eclipse, IDEA)?
на python, например,
или на Java?

Dasar

> Разрабатывать большой проект с группой плохих программистов и активно используя сторонние библиотеки - это гиблое дело на любом языке программирования
понятно, что выбирать между бедным и здоровым или богатым и больным - тяжело, но речь идет о другом.
Опыт непрограммистких отраслей показывает, что обычно компании работают по следующему принципу:
1. Профильные направления - двигаются командой хороших профессионалов
2. Непрофильные стандартные направления - используются готовые чужие наработки/отдается на аутсорсинг
3. Непрофильные нестандартные направления - поддерживаются середнячками.
При использовании C++ получается, что на все три пункта необходимо иметь своих высококлассных программистов.

timefim

или там, где продукты коробочные

А каким образом связана коробочность продукта и C++?

rosali

> на python, например,
Civilization IV!

Oper

продукты коробочные
Советую перейти сразу к более универсальному термину "продукты заводской готовности"

SCIF32

Советую перейти сразу к более универсальному термину "продукты заводской готовности"
а программные продукты тоже на заводах делают?

kruzer25

Потому что плохие программисты всё равно сделают кучу ошибок, а сторонние библиотеки будут глючить, и вы не сможете на это повлиять
Тут обсуждается немного другое - для некоторых языков, ошибка плохого программиста или глюк сторонней библиотеки могут запросто привести к падению всей системы; а для некоторых - только к падению конкретного модуля (и тогда всё просто - главное, не подпускать плохих программистов к важным модулям)

kruzer25

Я что-то не припоминаю ни одной достойной программы на C# или Java. Есть Eclipse и IDEA, но они настолько неповоротливы и монструозны
Eclipse - говно сам по себе; если разработчики плохие, хороший язык программирования их не спасёт.
А вообще, навскидку, из того, что прямо сейчас на глаза попалось - gaim и zend studio на джаве и paint.net на c#

Ober

Что смешного-то? Нередко бывает, что к программно-аппаратным комплексам применяют слова "комплекс высокой заводской готовности", обычно, для жосткого корпоративного пафоса, но совершенно серьёзно. Энтерпрайз всё-таки, не говно сапогами месить.

pitrik2

oracle не подойдет?
он чуть ли не весь на джаве написан

Olenenok

Eclipse - говно сам по себе; если разработчики плохие, хороший язык программирования их не спасёт.

плагин для пыхпыха к нему плохой штоле?

kruzer25

Нет, просто сам эклипс - говно (хотя, мб, мне с версией не повезло - 3.2.0, если что)

SCIF32

Смешон как раз пафос и то, что к современному программному обеспечению этот термин не имеет никакого отношения. А используется лишь по инерции.
По поводу "не редко" - не самый хороший показатель, но всеже:
http://www.yandex.ru/yandsearch?text=%22%EA%EE%EC%EF%EB%E5%E...
Или может есть примеры, где какая-нибудь известная компания-разработчик ПО (к примеру IBM, Oracle) заявляет, что их программный продукт - это "комплекс высокой заводской готовности?".

kruzer25

Или может есть примеры, где какая-нибудь известная компания-разработчик ПО (к примеру IBM, Oracle) заявляет, что их программный продукт - это "комплекс высокой заводской готовности?".
Из российских разработчиков - возможно, у меня даже в мануале к ноуту было написано "ПЭВМ (системный блок с матрицей)". Это, видимо, из-за стандартов каких-то, доставшихся в наследство ещё от ссср.

kruzer25

На первой странице - ничего о ПО.

Ober

Я не в яндексах всяких это видел, а в печатной документации некоторых пафосных российских организаций.
P.S. Вот встань у себя на работе в полный рост посредине комнаты, когда все там будут присутствовать, и скажи, да так чтобы точно все услышали: "Вот что это за говно-термин — система высокой заводской готовности" Ну или что-нибудь вроде того, оценишь реакцию

ava3443

oracle не подойдет?
он чуть ли не весь на джаве написан
если ты про СУБД, то на джаве там в основном свистелки и перделки

evgen5555

Клиент на жаве писан.

Marinavo_0507

Это ты про OCI?

SCIF32

некоторых пафосных российских организаций.
Ну так объясни, какое отношение они имеют к разработке современного программного обеспечения. А именно о нем сейчас речь.

P.S. Вот встань у себя на работе в полный рост посредине комнаты, когда все там будут присутствовать, и скажи, да так чтобы точно все услышали: "Вот что это за говно-термин — система высокой заводской готовности" Ну или что-нибудь вроде того, оценишь реакцию

Конечно, весело у тебя фантазия разыгралась =). Но ни про какое говно я не не говорил и публично выступать по этой теме на работе на собираюсь.
Речь была о том, что термин довольно специфичный. Это не противоречит тому, что ты с ним встречался.

Ober

Ну так объясни, какое отношение они имеют к разработке современного программного обеспечения.
Тут вылезает очередная жесть, ибо эти компании считают, что они действительно современные разработки покупают
Речь была о том, что термин довольно специфичный. Это не противоречит тому, что ты с ним встречался.
Речь вроде вообще о заводах и заводской готовности была...
Кстати, о флуде и терминах. Вот интересно, кто как понимает слово "отчуждаемость" в применении к программному обеспечению (пусть даже к современному, большому и на C++)?

Papazyan

Это ты про OCI?
А кому нужен OCI? Чтение мануала по нему может привести к нервному срыву. Есть замечательный JDBC драйвер. Я за пару часов написал прогу по скачке данных через него, не зная ни Java, ни JDBC. Джава рулит.

sbs-66

здесь речь про ентерпрайз. C++ не ентерпрайз, .NET и Java - ентерпрайз.
Что тут имеется ввиду под ентерпрайз?

Olenenok

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

sbs-66

gaim и zend studio на джаве и paint.net
gaim не пользовал, Плохого инчего говорить не буду. влюбом случае, im-клиентов тонны, а gaim среди них далеко не самый популярный. Видать не так хорошь. Плюс тут много зависит не от клиента, а от протокола и владельца сервера, а клиент дело десятое.
zend studio - редкостное тормозилово и глюкалово, и опять таки, продукт для разработчиков, притом чуть ли не монопольный, так что это не в кассу.
paint.net - опять таки, слышу в первый раз. Подозреваю, что это недоделанный фотошоп.
И "потребительских" программ в любом случае большая часть написана на С++. Браузеры - С++, проигрыватели музыки и видео - С++, почтовые и IM-клиенты - почти все на С++.
Java и C# используют , как тут правильно говорили, когда написание кода - непрофильное направление бизнеса. Т.е. софт для поддержки бизнеса может быть на них написан, т.к. во первых, не надо сильно грамотных прграммистов, а во-вторых, легче поддерживать.
Возможно C# когда нибудь и станет языком для написание программ для конечного пользователя (коробочных, потребительских, массовых но заслуга в этом будет не столько языка, сколько майкрософта, который его навязывает (пока что безуспешно). Я не спорю, что C# - язык более приятный, и много знакомых мне высококлассных программистов предпочитают его С++, но для написания программ с высокими требованиями к производительности, потреблению ресурсов и гибкости во взаимодействии с пользователем, С++ пока что остаётся лидером.

sbs-66

Кстати, вакансий программиста на Java больше, потому как в штатах в школе вроде как на нём преподают информатику, потому людей, знакомым с ним, гораздо больше сем сишников, потому во многих конторах предпочитают Java в качестве языка проекта. В универе уже переучивают программировать на С/С++ или каком-нибудь ещё языке, но это не спасает - большинство программистов в штатах совершенно неспособны понять как устроена работа с памятью и указатели (по крайней мере большиство тех, кто подавал резюме Джоэлу Сполски, руководителю довольно известной софтверной компании, об этом он в частности пишет тут).
Кстати, всем, кто решил спорить дальше о применимости языков к тем или иным проектам советую почитать http://russian.joelonsoftware.com/Articles/FiveWorlds.html

Vantucha

А кому нужен OCI?

например для написания индексов может пригодиться

kruzer25

Плюс тут много зависит не от клиента, а от протокола и владельца сервера, а клиент дело десятое.
Тем не менее, клиент очень даже приличный.
zend studio - редкостное тормозилово и глюкалово
Ну приведи примеры чего-нибудь более приличного.
Zend Studio, конечно, тормозилово и глюкалово, но по сравнению с аналогами - очень быстрый без единой ошибки.
притом чуть ли не монопольный
Ну-ну.
Подозреваю, что это недоделанный фотошоп
Ага, два студента за два года по вечерам написали почти что то, что в адобе сотня человек десять лет делала, при этом - очень мало ошибок, очень стабильная и быстрая работа + удобный интерфейс. Я так понял, тут именно такие примеры хотели.
И "потребительских" программ в любом случае большая часть написана на С++. Браузеры - С++, проигрыватели музыки и видео - С++, почтовые и IM-клиенты - почти все на С++.
А теперь скажи, когда вышла первая версия какого-нибудь из этих браузеров/проигрывателей/клиентов. Конечно, если начинали писать десять лет назад - писали на c++; и, конечно же, никто не будет сейчас говорить "вот у нас есть версия 8.7.6.5 - и давайте вместо того, чтобы её улучшать, начнём сейчас с нуля писать девятую версию, на замечательном языке c#".
но для написания программ с высокими требованиями к производительности, потреблению ресурсов и гибкости во взаимодействии с пользователем, С++ пока что остаётся лидером
Для написания программ с очень высокими требованиями к производительности и потреблению ресурсов, лидер - ассемблер. А для написания обычных пользовательских программ - высокоуровневые языки (те же java и c#). На c++ сейчас доделывают софт по привычке (см. выше)

pitrik2

Это ты про OCI?
ОСИ - это протокол
клиент - это прога на джаве
а в оракле там дофига всего на джаве написано
там же дофига всяких утилит типа Net Manager
и все они на джаве

karkar

Вопрос из зала.
Какое-то время назад регулярно юзал прогу ThinkingRock, написанную на Java (единственный мой опыт долгого использования проги на Java). У нее была особенность - если она относительно долго (несколько минут или десятков минут) не активна, а висит в трее, то "засыпает" и потом очень долго раскачивается - несколько секунд или десятков секунд тормозит, потом неспеша начинает делать что просят. Если же раскачалась, то скорость приемлема. Но стоит оставить в покое - все повторяется.
Вопрос: это глюк данной конкретной проги или следствие самой технологии? Наблюдается ли что-то подобное у других прог на джаве?
Из .NET софта регулярно имею дело с VS2005 и SQL Server Management Studio от 2005 сервера. VS заметно тормознее стала, по сравнению с шестой, но еще терпимо. А вот SQL Server Management Studio - это нечто. Дикие тормоза на простейших операциях, прыгающие окошки (когда одни убираются, а другие появляются, и все это небыстро). У меня вопрос - это следствие кривости рук индусов, это дело писавших, или опять же проявление технологии? (ведь та же JIT-компиляция отнюдь не бесплатна)

tipnote

Тем не менее, клиент очень даже приличный.
Тем не менее, в исходниках - Си. А о какой жабе идет речь?
Ага, два студента за два года по вечерам написали почти что то, что в адобе сотня человек десять лет делала, при этом - очень мало ошибок, очень стабильная и быстрая работа + удобный интерфейс. Я так понял, тут именно такие примеры хотели.

Кажется, на тему того, что paint.net и photoshop в разных весовых категориях с тобой уже спорили когда-то.
Для написания программ с очень высокими требованиями к производительности и потреблению ресурсов, лидер - ассемблер. А для написания обычных пользовательских программ - высокоуровневые языки (те же java и c#). На c++ сейчас доделывают софт по привычке (см. выше)

жЭст.

kruzer25

Тем не менее, в исходниках - Си. А о какой жабе идет речь?
Значит, меня проглючило, казалось, что на джаве... пользовался им год назад, уже забыл почти - видимо, перепутал джаву с gtk
Кажется, на тему того, что paint.net и photoshop в разных весовых категориях с тобой уже спорили когда-то.
1) Не спорили.
2) Тем не менее.
жЭст
А что тебе не нравится?
Приведи пример качественного сложного ПО для винды, разрабатывать которое начали, допустим, не больше трёх лет назад. Чтобы на C было написано.
Мне вот в голову ничего не приходит...

sbs-66

> Тем не менее, клиент очень даже приличный.
Очень может быть. Но есть гораздо более популярные IM-клиенты.
> Zend Studio, конечно, тормозилово и глюкалово, но по сравнению с аналогами - очень быстрый без единой
>> притом чуть ли не монопольный
> Ну-ну.
Разрабатывать аналог Zend Studio - это крайне экономически невыгодно (рынок маленький, а конкурировать с Zend в отладке их же собственного байткода - гиблое дело, это как конкурировать с Adobe в редактировании PDF-файлов поэтому нормальные люди этим не занимаются. То, что на фоне остальных он смотриться неплохо, это не показатель. Главно что сам по себе он плох.
> Ага, два студента за два года по вечерам написали почти что то, что в адобе сотня человек десять лет
> делала, при этом - очень мало ошибок, очень стабильная и быстрая работа + удобный интерфейс. Я так понял,
> тут именно такие примеры хотели.
Вот тут спорить не буду. Может быть и написали. Photoshop из этого не выйдет, скорее всего, так как остались те самые x%, которые требуют (100-x)% затрат времени. Но что программа может быть достойной - в это охотно верю. C# сам по себе неплохой язык, и Microsoft старается его популяризировать среди разработчиков. И лет через 5-10 они своего добьются, но пока - нет. Ибо преимущества не так очевидны, как проблемы - полная зависимость от MS, необходимость, пока ещё поставлять со своей программой довольно большой фреймворк (у большинства он не установлен бОльшие накладные расходы, сомнительные перспективы портирования на другие платвормы (да, на linux вероятно портировать можно будет, но дальше - ни ни). По большей части это не проблемы языка, а политические, экономические и идеологические соображения. И новые проекты, наверное, можно начинать на C#. Но делают это почему-то только "пара студентов, которые пишут код по вечерам", а не сложившиеся компании.
Опять таки, ни одна серьёзная компания, которая допускает возможность того, что рано или поздно ей придётся конкурировать с MS, не станет добровольно писать код под .NET. А значит замены C++ пока что нет.

timefim

Из .NET софта регулярно имею дело с VS2005 и SQL Server Management Studio от 2005 сервера.
Вроде они не нетовские. У МС под нет я знаю только серию Expression, тормознутые, но не сильно.

tipnote

А что тебе не нравится?
ЖЭст в том, что ты в полные крайности кидаешься. То есть программировать ВСЕ нужно либо на шарпе(типа быстро писать либо на асме(типа быстро работает).
Ну давай еще пофантазируем. Например, шарп проапгрейдим до python/ruby, чтобы еще быстрее!
Короче, бредохрень ты какую-то написал. Я скорее поверю, что в результате эволюции компиляторов ниша асма исчезнет, чем то, что асм заменит си/плюсы.
В общем, ты, наверное, удивишься, но у всех названных языков/технологий есть своя ниша. Причем, отнюдь не 'по привычке'. Вот такой он наш мир - удивительный и непредсказуемый!

Olenenok

Ну давай еще пофантазируем. Например, шарп проапгрейдим до python/ruby, чтобы еще быстрее!
часто имеет смысл, т.к. от петона и руби изначально ждут слишком низкого быстродействия и низкоуровневые операции пишут на C/C++, используя их потом в программе. А проги на Java и C# обычно пишут полностью на них самих.

tipnote

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

kruzer25

То есть программировать ВСЕ нужно либо на шарпе(типа быстро писать либо на асме(типа быстро работает).
В общем-то, да.
асм заменит си/плюсы
Нет, c#/java заменит c/c++.
Раньше c/c++ нужны были, т.к. это были самые высокоуровневые (на тот момент) подобные языки, их преимуществом была лёгкость (относительная) разработки, и малое количество (тоже относительно ассемблера, конечно) глюков.
Сейчас же на c/c++ пишут только когда приходится продолжать разработку проектов, которые _уже_ на c/c++, или когда нужна скорость работы - во втором случае, c/c++ пытается влезть в нишу ассемблера, куда он не влезет никогда.

nikita270601

Для написания программ с очень высокими требованиями к производительности и потреблению ресурсов, лидер - ассемблер.
Нет, это C и C++. Обычно, на ассемблере пишут очень маленькие куски кода.
Ты вообще когда-нибудь писал программы с очень высокими требованиями к производительности? Что это были за программы?
Напиши, пожалуйста, поисковый сервер Яндекса на ассемблере в качестве упражнения.

tipnote

c/c++ пытается влезть в нишу ассемблера, куда он не влезет никогда.
Ух, опять начинаем фантазировать? Мсье жОсткий профессионал в программировании на C++ и assembler? Или мсье видел пару раз си шарп, сделал пару сайтов на пхп и теперь делает глобальные выводы о том, о чем даже не имеет понятия, то есть о плюсах и ассемблере? Красноглазый фанатизмЪ жить не дает?
ЗЫ Про 'в общем-то, да' спорить даже желания нет - плакать хочется.

tipnote

Напиши, пожалуйста, поисковый сервер Яндекса на ассемблере в качестве упражнения.
Зачем так жОстко сразу! =) Пусть хотя бы пунто свитчер напишет сначала на асме, а потом- для полного просветления- на джаве.

myrka68

Ух, опять начинаем фантазировать? Мсье жОсткий профессионал в программировании на C++ и assembler? Или мсье видел пару раз си шарп, сделал пару сайтов на пхп и теперь делает глобальные выводы о том, о чем даже не имеет понятия, то есть о плюсах и ассемблере? Красноглазый фанатизмЪ жить не дает?
ЗЫ Про 'в общем-то, да' спорить даже желания нет - плакать хочется.
ппкс
такое ощущение, что пенартур2 живёт в каком-то ином мире

kruzer25

Написать пунто-свичер на c# - большая проблема?

tipnote

Написать пунто-свичер на c# - большая проблема?
Нет, большая проблема начнется, когда ты взглянешь на получившиеся системные требования и начнешь быстро-быстро что-то вводить в текстовое поле

kruzer25

когда ты взглянешь на получившиеся системные требования и начнешь быстро-быстро что-то вводить в текстовое поле
Хочешь сказать, на проверку одного слова на современном процессоре уйдёт больше 0.01с?

mkrec

> Раньше c/c++ нужны были, т.к. это были самые высокоуровневые (на тот момент) подобные языки, их преимуществом была лёгкость (относительная) разработки, и малое количество (тоже относительно ассемблера, конечно) глюков.
Если я правильно помню, ни си, ни си++ никогда не были самыми высокоуровневыми [ни на какой момент] языками. Это, конечно, к программированию отношения не имеет, но ошибки в истории вызывают опасения, что твоим словам в этом треде вообще доверять не следует.
Я не ахти какой спец по С и полный ламер в асме. Объясни, в чем асм обгоняет си, если мне надо, например, проинтегрировать систему дифференциальных уравнений? В процессе оптимизации я не нашел никаких недостатков си, кроме некоторой затраты тактов на переход по функциям - и то, можно было разобраться с ними средствами си или минимальными асмовскими вставками. Потери на эту траблу составляют порядка процента времени. В чем, объясни, разработка на асме была бы лучше?

mkrec

> Хочешь сказать, на проверку одного слова на современном процессоре уйдёт больше 0.01с?
Если в этот момент у тебя обсчитывается задача + формируется архив - то на проверку слова может уйти и минута.

kruzer25

Если в этот момент у тебя обсчитывается задача + формируется архив - то на проверку слова может уйти и минута.
Если у меня обсчитывается задача + формируется архив - тут уже язык тебя не спасёт, надо выставлять приоритеты процессам. Если обсчитывается задача + формируется архив - тут и от программы на ассемблере можно минуту ждать ответа на вопрос "сколько будет 2+2".
Я говорил про процессорное время.

nikita270601

Ты уже написал Яндекс?

tipnote

Хочешь сказать, на проверку одного слова на современном процессоре уйдёт больше 0.01с
Слушай, я ничего не хочу сказать. И уж тем более рассказывать о том, что тебе придется реализовывать. Просто напиши прогу с функционалом пунто свитчера и начни 'быстро-быстро что-то вводить в текстовое поле', а чтобы скрасить 'современный процессор', запусти, к примеру, флешку какую-нибудь с ютуба. А потом мы с тобой вместе посмеемся!

kruzer25

конкурировать с Zend в отладке их же собственного байткода
Какого байткода, ты что?
А если говорить даже не о IDE, а о просто DE, о редакторе?
То, что на фоне остальных он смотриться неплохо, это не показатель. Главно что сам по себе он плох
"Сам по себе он плох" не бывает, бывает плохой по сравнению с чем-то или хороший по сравнению с чем-то. Да, там больше глюков и тормозов, чем в калькуляторе - но это никак не говорит о самом языке, если мы сравниваем совершенно разные вещи.
полная зависимость от MS
Почему?
у большинства он не установлен
Никсоиды пусть ставят себе mono, им всё равно привычно всё собирать; а фреймворки, насколько я помню, интегрированы в xp sp2 - второй версии, и в висту - третьей.
Но делают это почему-то только "пара студентов, которые пишут код по вечерам", а не сложившиеся компании.
Ты так и не сказал, какая сложившаяся компания _начала_ разрабатывать _новый_ продукт, с нуля - но на c/c++ (сложный продукт для взаимодействия с пользователями).
ни одна серьёзная компания, которая допускает возможность того, что рано или поздно ей придётся конкурировать с MS, не станет добровольно писать код под .NET
Конкурировать с MS - в чём именно?

kruzer25

Просто напиши прогу с функционалом пунто свитчера и начни 'быстро-быстро что-то вводить в текстовое поле'
ОК, принеси мне установочный диск с ресурсами для разработки (студия, компилятор оплати мне то время, которое я буду изучать c# и писать эту программу - и посмотрим, будет ли там что-нибудь тормозить.

nikita270601

которое я буду изучать c#
А, то есть, ты C# не видел до этого, просто увидел, что это Microsoft, и где-то на форуме прочитал, что это круто, и скоро на нём все будут писать?

tipnote

ОК, принеси мне установочный диск с ресурсами для разработки (студия, компилятор оплати мне то время, которое я буду изучать c# и писать эту программу - и посмотрим, будет ли там что-нибудь тормозить.
Боже упаси! Я тебе по доброте душевной советую получить некоторый опыт, чтобы потом с гордо поднятой головой рассуждать о некоторых вещах, а ты мне в лицо тычешь грязными зелеными бумажками? Фу!

kruzer25

Ты запорожец водил когда-нибудь?
Ну и не говори, что он плохо ездит!

kruzer25

Просто у меня, кроме этого, ещё и другие дела есть; и, чтобы эти другие дела забросить на некоторое время, мне нужны грязные зелёные бумажки

pitrik2

Ты запорожец водил когда-нибудь?
Ну и не говори, что он плохо ездит!
он про запорожец слышал мнения других людей, которые ездили на нем
ты вот с чего взял что пунто на C# будет быстро работать? кто (кто сам пробовал писать на С#) тебе это сказал?
кстати, я водил запорожец, едет афигенно

kruzer25

ты вот с чего взял что пунто на C# будет быстро работать?
Я не говорил, что он будет как-то необычно быстро работать.
Я говорил про то, что он будет работать со скоростью, достаточной для комфортного пользователя - потому что, как бы ты тут не поливал грязью c#, я не могу представить, почему это программа на c# будет на несколько порядков медленнее того же самого на c/c++.
Тот же punto switcher тратил меньше 1% процессора на tm5800 700mhz. Ты хочешь сказать, что на современном core 2 с частотой 1.5ггц (который раз в десять, если не двадцать, быстрее того crusoe) то же самое, написанное на c#, будет занимать больше, допустим, 10%? Ну и расскажи мне, откуда берутся тормоза в более чем сто раз.

pitrik2

я так понимаю: некое действие (некая команда пунтосвичера) оно представляется набором атомарных команд
в проге на C# этих атомарных команд больше (всякие там сборки мусора, какиелибо библиотечные вызовы .net) чем на си
если у тебя комп агружен очень сильно, то на отдельную программу (пунто) выделяется мало такого ресурса: время
в результате прога на Си может успеть выполниться (мало атомарных команд) а прога на C# может не успеть, т.к. много команд: часть выполнится сейчас а часть когда прога в следующий раз получит ресурсы
но комп конечно надо сильно загрузить
вопрос в том насколько это сильно
учитывая что на современных компах при просмотре видео частенько бывают подтормаживания мыши (связано чаще со свопом) то вот это "сильно" не так уж и редко встречается

tipnote

Просто у меня, кроме этого, ещё и другие дела есть; и, чтобы эти другие дела забросить на некоторое время, мне нужны грязные зелёные бумажки
Ну прости-прости! Все же это было бы так непедагогично рассуждать о количестве словарей, о частоте проверки, о том, что ввод обрабатывает не только пунто, а также о многих других забавных казусах, поэтому я не стал. Прости меня, умоляю! Об одном прошу смиренно, прежде чем что-то утверждать, требуй сначала грязные зеленые бумажки! Не нарушай универсальность подхода!

tipnote

Тот же punto switcher тратил меньше 1% процессора на tm5800 700mhz
Теперь я знаю, кто пишет тесты для get the facts!
Hooray!

kruzer25

в результате прога на Си может успеть выполниться (мало атомарных команд) а прога на C# может не успеть
Это уже какая-то комедия пошла.
"Давайте загрузим комп сразу двумя процессами, так, чтобы оба пытались весь процессор отобрать, а теперь попробуем запустить программы на c и на c#; о, программа на c успела сделать то, что ей надо, за те 0.001 секунды, которые ей дал процессор - ведь она работает всего 0.0009 секунд; а программа на c# не успела, потому что ей надо 0.0018 секунды - и сейчас она будет ещё полсекунды ждать, пока ещё раз не наступит её очередь. Значит, c рулит, а c# сосёт!"
Реально же, в реальных условиях и при нынешних мощностях процессоров, программа, которая десять лет назад особо не тормозила, и сейчас, переписанная на c#, заметно для пользователя тормозить не будет, хоть и работать будет в два раза (или даже в сто раз) медленнее. Пользователь не заметит, занимает она там 0.01% процессора или 1%. А уж если намеренно грузить процессор на 100% - тогда да, будет тормозить - и может получиться так, что программа на c# будет тормозить ощутимо, тогда как программа на c - нет. Но нормальные пользователи, если и запускают сразу два приложения, настолько требовательных к ресурсам - выставляют им приоритет пониже; а тормоза прикладной программы они даже заметить не успеют за тормозами оболочки.

karkar

>Вроде они не нетовские.
Хм. Сейчас посмотрел пристальней. Клиент от SQL сервера, который я так ругал за тормознутость, похоже на C++/ATL, судя по зависимостям и встреченным строкам.
А вот devenv.exe (IDE VS) зависит от mscoree.dll и внутри очень часто упоминает CLR. А рядом лежит куча dll-ок с характерными для именования сборок названиями..
Кстати, какой самый простой и надежнай способ отличить .NET-прогу от не .NET?

sbs-66

Я не буду утверждать на 100%, поскольку сам не большой спец в C#, но что-то мне подсказыват, что punto на C# будет в адресное пространство каждого процесса подгружать .NET фреймворк. Не знаю, повлечёт ли это какие-нибудь последствия.

mkrec

> А уж если намеренно грузить процессор на 100%
не знаю, как у тебя, а у меня процессор загружен на 100% заметную часть времени. Однако я предпочитаю в это время флудить в форуме, читать книги и т.п. И мне важно, чтобы пунто (которым я, правда, не пользуюсь ) тормозил как можно меньше.
> если и запускают сразу два приложения, настолько требовательных к ресурсам
настолько - это насколько? архивация файлов, просмотр фильма, компоновка пдф, 1с-бухгалтерия - это, по-твоему, чрезмерные задачи для простого пользователя, который и слова такого не знает - "приоритет"?

kruzer25

Однако я предпочитаю в это время флудить в форуме, читать книги и т.п. И мне важно, чтобы пунто (которым я, правда, не пользуюсь ) тормозил как можно меньше
Браузер не тормозит? Чтение книг не тормозит? Ну так и punto switcher на c# тем более тормозить не будет, ему гораздо меньше ресурсов нужно.
архивация файлов, просмотр фильма, компоновка пдф, 1с-бухгалтерия - это, по-твоему, чрезмерные задачи для простого пользователя, который и слова такого не знает - "приоритет"?
Одновременно запустить два просмотра фильма в хдтв, если процессор этот хдтв не тянет (примерно в такой ситуации будут наблюдаться тормоза других программ) - да.

karkar

Про С/С++ и асм:
Когда G&M лаба на ВМК продает очередную видеотехнологию большой компании типа Real, Samsung, Intel и т.п., то те обычно просят, чтобы все было на чистом С. Если есть какие-то ассемблерные вставки, то просят рядом их аналоги на С.
Сложный алгоритм на асме сделать вручную практически нереально, просто из-за органичений человеческого мозга. К тому же, асм слишком привязан к конкретному процессору. То, что отлично работает на таком-то пентиуме может очень плохо (медленно) работать на другом и вообще не работать на отличном от этого семейства процессоре.
К тому же, интеловский компилятор С/С++ обычно генерит более быстрый код, чем человек, т.к. компилятор часто знает об особенностях целевой платформы гораздо больше, чем программист.
Что касается С++, то из-за сложностей и неоднозначностей в стандарте языка код часто получается привязан к конкретному компилятору, он хуже переносим. С Си такой проблемы нет.

sbs-66

> Какого байткода, ты что?
> А если говорить даже не о 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# - уже смешно звучит.

kruzer25

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, там вообще вирусы в принципе существовать не смогут - вот ужас то, что же будут есть бедные антивирусописатели, честно ковыряющиеся в си?

sbs-66

Что смешного?Кстати, если ты так боишься этого - тут мс вроде собирается, начиная с некоторого момента, делать ос уже на основе чего-то вроде singularity, там вообще вирусы в принципе существовать не смогут - вот ужас то, что же будут есть бедные антивирусописатели, честно ковыряющиеся в си?
Тебе срочно надо курс повышения квалификации пройти. Скажем, месяц чтения seclab.ru. Драйвера они на C# писать не будут никогда, и ядро у OC будет, а значит и уязвимости будут жить долго и счастливо.
> Я, наверное, неправильно выразился - нужен редактор именно для php5, с автокомплишеном, переходом к
> описанию метода/класса/константы по CtrlClick на упоминании и прочие такие фишки.
> Что есть подобного, кроме Zend и Eclipse (которые оба написаны именно на джаве)?
почитай http://forum.dklab.ru/viewtopic.php?p=76711a> до просветления

sbs-66

> Ага. Даже фар предлагают. Ну конечно, у фара прямо-таки неебические возможности автокомплишена и перехода к коду.
Ты не поверишь, действительно неебические. Вплодь до того, что ты можешь свой плагин написать и делать в редакторе что пожелаешь. Это не считая готовых плагинов. Единственная проблема фара - отсутсвие поддержки юникода. Но это отдельная история.
Если тебе надо именно с автокомплитом под php5, то так и ищи, или на форуме там спроси. Оно есть, и не одно. Я как минимум 2 таких редактора знаю, и оба мне нравятся больше, чем Zend Studio. Но пишу как раз в FAR, ибо привык уже, а другие программы в некоторых аспектах и близко по возможностям редактора FAR к нему не подобрались ещё. Хотя есть в нём и свои неудобства, но всё поддаётся великому напильнику.
> Это почему же?
> Сейчас, вроде, как раз на C# и пишут.
Покажи мне драйвер на C# - убей мой мозг. Я могу даже поспорить, что драйверов на C# не будет, по крайней мере в XP и Vista.

Olenenok

Зато под солярку есть на джаве

kruzer25

Вплодь до того, что ты можешь свой плагин написать и делать в редакторе что пожелаешь.
Ага, а ещё я могу на ассемблере с нуля новый редактор написать. Я спрашивал про готовые продукты, и фар мне подходит не больше, чем винда или компьютер.
Это не считая готовых плагинов
Ну и какие там готовые плагины для редактирования проекта из кучи файлов на пхп5, с автокомплишеном и переходом к коду?
Но пишу как раз в FAR, ибо привык уже
Я тоже привык, но первым гвоздём стало именно отсутствие человеческой поддержки уникода, а гробом с крышкой - отсутствие автокомплишена и перехода к коду. Так что сейчас я фар использую, только если надо где-то быстро в одном месте что-то попроавить.
Я как минимум 2 таких редактора знаю, и оба мне нравятся больше, чем Zend Studio
Это какие?
> Это почему же?
> Сейчас, вроде, как раз на C# и пишут.
Покажи мне драйвер на C# - убей мой мозг. Я могу даже поспорить, что драйверов на C# не будет, по крайней мере в XP и Vista.
Это к Singularity относилось.

oleg_n

Singularity - это другое название нанотехнологий?

kruzer25

Открой для себя википедию.

oleg_n

т.е. Singularity - это несколько Publications и Presentations?

timefim

Кстати, какой самый простой и надежнай способ отличить .NET-прогу от не .NET?
Я кидаю exeшник в рефлектор а он мне отвечает Нет или не Нет.
А вот devenv.exe (IDE VS) зависит от mscoree.dll

Причина скорее всего в том что студии приходится много общаться с фреймфорком.

kruzer25

Publications и Presentations - это то, что доступно на сайте.
Среди этих Presentations есть и видеосъёмка реально работающей оси, кстати.

ava3443

ОСИ - это протокол
клиент - это прога на джаве
а в оракле там дофига всего на джаве написано
там же дофига всяких утилит типа Net Manager
и все они на джаве
предлагаю открыть Oracle Database Concepts, ну или просто погуглить
OCI - это API, а протокол - это Oracle Net
львиная доля клиентов на джаве используют thin JDBC driver и про OCI не знают
ну и фраза "в оракле там дофига всего на джаве написано", подкрепляемая упоминанием Net Manager - эт конечно лол
на мой взгляд, интереснее поглядеть в лог установки патчсета и посчитать сколько там .so/.dll и сколько jar-ов.

oleg_n

О! singularity - это ещё и отличные мультики!

sbs-66

Это какие?
Могу напутать, ибо давно интересовался, но вроде PHP Expert Editor и то ли phpED, то ли UltraEdit. Я их много перепробовал одно время.

kruzer25

ОК, зачот.
А на чём они написаны?

sbs-66

Подозреваю, что на С++. Можешь сам скачать и посмотреть - мне лень.

Dasar

я так понимаю: некое действие (некая команда пунтосвичера) оно представляется набором атомарных команд
в проге на C# этих атомарных команд больше (всякие там сборки мусора, какиелибо библиотечные вызовы .net) чем на си
на основе написания программ для topcoder-а на задачах на скорость - могу точно сказать, что оверхед на C# по сравнению с C++ где-то процентов на 10. Все остальные ускорения C++ над C# получались через ручное использование SSE команд.
причем это именно вычислительные/переборные задачи - где во всю нагружается проц и во всю используется память, на "юзерских" программах оверхед будет еще меньше, т.к. юзерская программа довольно большую часть времени проводит в ожиданиях: локов, системных вызовов, чтения с диска и т.д.

Olenenok

могу точно сказать, что оверхед на C# по сравнению с C++ где-то процентов на 10. Все остальные ускорения C++ над C# получались через ручное использование SSE команд.
уже во всяких блочных методах вычисления разница будет раз в 20.

sbs-66

Поверь мне, оптимизировать в C++ можно не только ручное использование SSE команд (это через asm что ли?). Львиная доля прироста производительности в реальных программах - оптимизация доступа к памяти и её аллокаций.

suchkov

BTW, даже самый лучший компилятор не сможет соптимизировать так, как ассемблерщик. Дело в том, что компилятор компилирует программу так, как она написана, а ассемблерщик может изменить алгоритм на низком уровне. В результате алгоритм будет работать быстрее, но его поведение, например, может не совпадать с соотвествующим алгоритмом на С/C++ при некорректных данных (если речь идет о части алгоритма, то окружающий код может гарантировать, что некорректные данные в нее никогда не попадут) или многопоточности. К сожалению, у сопряжения ассемблера с языком С/C++ есть большие проблемы - из него не получить доступа к stl, очень ограничено взаимодействие с объектами и.т.д.

mkrec

> даже самый лучший компилятор не сможет соптимизировать так, как ассемблерщик
"даже самый лучший компилятор не может соптимизировать так, как это сделает самый лучший ассемблерщик" - так будет корректнее
> из него не получить доступа к stl
а зачем, если ассемблерщик и так может сделать более эффективный алгоритм?

oleg_n

хотя мой опыт тесного общения с ассемблером ограничился замечательным процессором z80
всё же спрошу
кто-нибудь из защищающих здесь ассемблер как Язык Программирования, пробовал писать на нём программы объёмом 3-4 килобайта?
(3-4 килобайта машинных кодов, разумеется)
при чём что бы эта программа не разбивалась на 3-4 модуля, а была чем-то связанным

Marinavo_0507

> Есть замечательный JDBC драйвер.
Эдак можно говорить, что клиент к ораклу - это PHP.
Все эти драйвера - надстройка над OCI, как я понимаю.

Chupa

в софте для tv.local был цельный кусок в 1.5к строк на асме

Dasar

> Поверь мне, оптимизировать в C++ можно не только ручное использование SSE команд (это через asm что ли?).
т.е. на topcoder-е участвовали тупые C++-программисты, которые так делать не умели?
или какие-то злые феи запрещают эти методы использовать на C#?
зы
я же тебе говорю, все эти оптимизации использовалось и в программах на C#-е, и в программах на C++. Отрыв происходил только если C++ программа начинала использовать sse.

Papazyan

Эдак можно говорить, что клиент к ораклу - это PHP.
Все эти драйвера - надстройка над OCI, как я понимаю.
Найн. Thin JDBC драйвер не требует никаких дополнительных библиотек.

Ober

все эти оптимизации использовалось и в программах на C#-е, и в программах на C++. Отрыв происходил только если C++ программа начинала использовать sse.
А примеры кода есть? Эффектное, наверное, зрелище =]

Olenenok

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

Marinavo_0507

Убедил. Некоторые клиенты к Ораклу на джаве.

Dasar

задачи проходили под эгидой Intel-а и компилировались компилятором intel со всеми включенными оптимизирующими фишками.

sbs-66

В топ кодере программа обычно ведёт себя так:
1. Захавать много памяти.
2. Что повычислять, немного хавая и освобождая памяти.
3. Отпустить память, сказать ответ.
На время работы программы влияет эффективность шага 2, которая зависит от скорости работы с захаванными данными и обычно в первую очередь зависит от асимптотики сложности используемого алгоритма, во вторую очередь - от константы при этой асимптотике, зависящей от качества реализации (не считать лишнего и по несколько раз, использовать правильные структуры данных и т.д. и только в третью очередь от оптимизации единичных операций.
В реальной жизни программы обычно ведут себя не так. (под реальной жизнью я понимаю жизнь коробочных продуктов, опять таки - о чём знаю, о том и говорю, с встаиваемым кодом или играми может быть все по другому) В реальной жизни важно не общее время работы программы, а скорость отклика на действия пользователя. Потому при оптимизации стараются предвычислять всякие разные вещи, заранее загружать в память то, что может понадобится, оптимизировать рабочее множество так, чтобы оно хорошо помещалось в кеш, читать данные из памяти так, чтобы конвееры начинали подгрузку занных в кэш в нужном тебе порядке и т.д. Обыно в реальных программах у тебя вообще нет возможности никак влиять на асимптотику сложности вычислений и очень мало шансов влиять на константы перед этой асиптотикой. В реальных программах правда, оптимизайией на обычно не занимаются, но уж если припёрло, то делают это по уму.
А в топ кодере занимаются оптимизацией не столько программы, сколько алгоритма. Дрочево в виде ассемблерных вставок - это уже извращение и оптимизация вычислений. Это наверное похоже немного на оптимизацию в самых первых 3д-шутерах.
В общем я чего хочу сказать. Топ-кодер не показатель. Там довольно предсказуемый и прямолинейный, что ли, код. Там пользователя нет. Плюс такой момент. В среднем C# на таких вот синтетических тестах, вроде топ кодеровских программ, может и не уступает C++, но на конкретном проблемном случае может проигрывать в разы, и ты уже это никак не спасёшь. А на C++ ты можешь на каком угодно низком уровне управлять процессом работы прораммы.
PS. Кстати, тут вот недавно FJ жаловался, что его более правильная алгоритмически (т.е. с логарифмическим доступом/вставкой/удалением) C#-реализация DNA->RNA на IFPC работала примерно на порядок медленнее, чем более топорная (вроде там был список строк произвольной длины, который время от времени сливался в 1 строку, чтобы длина списка не росла очень-очень быстро) C++-реализация того же. А всё почему? А всё потому, что ситуация попалась довольно нестандартная, и стандартные шестерёнки C# не справились. (Я могу и ошибать по этому вопросу, конечно, ибо детального сравнения не проводил).

Dasar

> Кстати, тут вот недавно FJ жаловался, что его более правильная алгоритмически (т.е. с логарифмическим доступом/вставкой/удалением) C#-реализация DNA->RNA на IFPC работала примерно на порядок медленнее, чем более топорная (вроде там был список строк произвольной длины, который время от времени сливался в 1 строку,
допустим - это так, в чем проблема это слияние строк написать на MC++, а остальное на C#?

sbs-66

Да может и нет проблемы. Пробовать надо. Может и на чистом C# можно написать так, что быдет быстро. Проблема в том, что самый правильный и очевидный способ работал медленно. А чтобы это понять, а тем более понять в чём проблема, тебе нужен другой язык.

bleyman

Ну... Я на самом деле использовал какой-то класс BigList, про который я смутно представляю, как он внутри устроен, может, я даже и неправильно его использовал местами. Вообще у меня появляется периодически желание всё-таки разобраться, насколько именно в данной конкретной задаче шарп просасывает сям.
По теме флуда выше: во-первых, ассемблер никогда не вытеснит С ниоткуда, это даже неинтересно обсуждать, ибо бред. Равно как и шарп/жава/питон/whatever не вытеснят С ниоткуда, кроме, возможно, тех мест, которые изначально надо было писать на плюсах (а вот сами плюсы могут и сдохнуть, хотя я не уверен).
Во-вторых, про пунтосвитчер: в ку3 с WSAD и прыжком на правой кнопке мыши нельзя играть при включённом пунто, прикиньте! =)
В-третьих, про шарп: контрол центр атишных дров написан под .нет, прикиньте! =)

Olenenok

В-третьих, про шарп: контрол центр атишных дров написан под .нет, прикиньте! =)
и тормозит, проверено
Во-вторых, про пунтосвитчер: в ку3 с WSAD и прыжком на правой кнопке мыши нельзя играть при включённом пунто, прикиньте! =)

ну и как после этого можно юзать пунту!

pitrik2

прикиньте!
чего ту тприкидывать?
сколько с ним мучений изза этого было
Оставить комментарий
Имя или ник:
Комментарий: