четверг, 22 января 2009 г.

I'm not standard. Is C++ the best language?

Продолжение "I'm not standard". Тов.Чистяков, утверждает, что я считаю C++ отличным языком программирования?

Это не так. Так было когда-то, но времена меняются, я меняюсь. Два года назад на своей страничке я завел раздел "В поисках лучшего языка", для того, чтобы описать почему я хочу найти замену C++ и какие языки я рассматривал/рассматриваю в качестве потенциальной замены. Если бы я продолжал считать C++ отличным языком программирования, этого раздела просто не было бы.

В качестве замены C++ в разное время я рассматривал Scala, D, Eiffel, Nice (с этим языками я познакомился довольно плотно), а так же OCaml и C# (менее плотно, в особенности C#). Но, в моих текущих условиях, отказаться от C++ просто так все равно не получится. Слишком много кода, который гораздо дешевле развивать и совершенствовать, чем переписывать. Да и выбрать в качестве замены можно разве что Java, из-за ее переносимости. Но, на мой взгляд, безопасность Java является ее единственным достоинством (как языка), по сравнению с C++. Мне доводилось программировать на Java, я был не в восторге. Так что, в какой-то степени, замена C++ на Java -- это смена шила на мыло.

Наилучшие впечатления в качестве языка для разработки промышленного программного обеспечения на меня произвел Eiffel. Особенно в купе с доработками, которые появились в языке после версии 6.1. Но у Eiffel есть две большие проблемы: религия Eiffel и слишком высокие цены на средства разработки. Так что, если только Eiffel внезапно не выпустит бесплатный компилятор с большой бесплатной базовой библиотекой, шансов у него нет.

Еще хотелось бы плотно познакомиться с Ada (особенно в версии стандарта Ada-2005), но до этого пока не дошли руки.

Наилучшие перспективы на будущее, как мне кажется, у двух языков для платформы .Net: C# и F#. Но есть ли хорошие перспективы у самого .Net как у кросс-платформенного проекта? Может быть, со временем Mono покажет. (Я бы сам с удовольствием бы занялся разработкой ПО под какую-то одну платформу, под тот же .Net... Но пока нужно принимать во внимание разнообразные *nix-ы.)

Так что сейчас я программирую на C++. По большей части с удовольствием. Временами с сожалением. Была бы возможность сменить его на что-то достаточно мощное и безопасное -- сменил бы.

2 комментария:

TN комментирует...

Здравствуйте, Евгений Анатольевич.
Прощу прощения за, возможно, достаточно профанский вопрос. Но в чём заключается уязвимость языка С++ с вашей точки зрения?
С уважением, TN.

Евгений Охотников комментирует...

2TN: О том, что именно мне не нравится в C++ и почему бы я хотел сменить его на что-то более безопасное, я писал здесь: http://eao197.narod.ru/better_language/0_why_i_need_new_language.html и здесь: http://eao197.narod.ru/better_language/1_whats_wrong_with_cpp.html

Или вы подразумевали под "уязвимостью языка" что-то другое?

Если речь идет именно об уязвимостях (с точки зрения переполнения буферов, обращения по битым указателям, расстрела стека и пр.) -- то у C++ (как и у его предка C) их полный набор. В некоторых случаях вся эта низкоуровневость является благом (когда нужно биты и такты экономить), в некоторых -- головной болью. Поскольку последние лет восемь я занимаюсь разработкой ПО, которое должно работать в режиме 24x7, то для меня это больше головная боль. Хорошо хоть опыт уже позволяет писать так, что непредсказуемые падения приложений встречаются не часто (может быть пару раз в году). Но когда случаются, очень много сил уходит на то, чтобы понять, где именно зарыта собака. Тогда как в языке с контролем за границами массивов и подробным stack trace подобные ошибки локализовались бы на раз. И приводили бы всего лишь к выбросу исключения, а не падению всего приложения в самый неподходящий момент.