Pull to refresh

Comments 125

Я был с докладом на ADD-1 и ADD-2. Да, есть, но не сказал бы, что много.
Я был на ADD-3, докладов, конечно по теме было мало, но разговоры «в кулуарах» активно велись по моему субъективному ощущению в основном о плюсах.
Я просто не могу удержаться и не спросить: ну и что?
Ну мало докладов, и что с того? Чего переживать-то по этому поводу? Я вот программист на C++. И, как программист на C++, искренне желаю ему покоиться уже с миром, и мечтаю о воцарении на его месте по-настоящему современного языка. И да, никакие новые плюшки C++11, как бы они не были хороши, не сделают его современным, в сравнении с тем же C# или D по выразительности. Системные и научные приложения все равно пишутся на C, а для бизнес приложений такой контроль, какой дает C++ не нужен, не нужна невероятная быстрота исполнения кода.
А что вы думаете про Vala?
Я просто не встречал практического применения D, в отличие от Vala. Хотя издалека выглядит очень вкусно, конечно.
Да десятки «нерожденных детей» на гуглкоде лежат, что-то хвалят хвалят, а не юзают этот Ди.
Всему своё время. Хоть D и не очень популярен, но его разработчики вот уже с десяток лет не опускают руки и ведут разработку, при этом у языка нет никакой рекламы и поддержки корпораций. Так что рано или поздно D достигнет уровня production, а C++ — уровня «как же он задолбал». Да, печально, что это происходит так медленно, но тенденция очевидна: у D появляются новые пользователи благодаря инновационности языка, а C++ держится на плаву за счёт кучи написанного на нём кода и развитой инфраструктуры (компиляторы, IDE и т.п.), но это ничуть не умаляет переусложнённости и некоторой архаичности языка (#include и #define — это просто кал мамонта в наши дни-то).
Какое практическое применение у Vala?
Я с тем же успехом могу назвать практическим применением D его стандартную библиотеку. Ничего удивительного в том, что язык от Gnome форсят в Gnome нет, о практическом применении можно говорить, посмотрев на проект вне этой экосистемы.
Т. е. набор прикладных приложений, которыми пользуется куча народу — это не прикладное применение? Vala вообще-то конкретно под и для этой экосистемы и разрабатывалась.

По аналогии — бейзкамп не практическое применение рельс что ли? Жжете.
Практическое применение — это пришёл человек со стороны, подобрал язык для своих целей и у него всё получилось. Контекст этого топика — языки общего назначения, иначе просто странно сравнивать употребимость domain-specific языка и общего.
Не-тривиальных прикладных приложений в этом списке ( live.gnome.org/Vala/Documentation#Projects_Developed_in_Vala ) я, к слову, вижу хорошо если штук 5.

Что такое бейзкамп я не в курсе, а о рельсах знаю только то, что это web и ruby, неудачное сравнение.
У вас очень странное понятие о практических применениях.

Т. е. если я в своем проекте для описания каких-нибудь метаданных придумал свой собственный DSL, внедрил и запустил проект, который пользуются — это не практическое применение придуманного DSL`а?

Рельсы придумали в свое время в первую очередь для написания вполне конкретного веб-приложения — бейзкампа. То же самое, что и с гномом. Для реализация задачи придумали свой новый инструмент, который эту задачу эффективно решил.
У меня оно разное, я пытался угадать контекст из вашей же формулировки.
Если одноразовое применение DSL это то же самое практическое применение, о котором вы говорили, сравнивая Vala и D, то боюсь даже представить какую программу вы ожидаете увидеть в качестве практического применения D.
Любая софтина которая решает поставленную прикладную задачу и реально кем-то используется. Библиотеки — это не совсем прикладная задача ;)
Чем вас тот же vibed.org не устроил тогда? Или boxen player? Или различные вариации на тему сайтов через fastcgi + d?
Не знаю, я ничего из этого никогда не видел ;)
Ну вот, а истерику нагнетаем в комментариях :P
Стыдно!

Если серьёзно, рекомендую обязательно взглянуть на vibed — очень крутая штука, в активной разработке. Если D это C++ done right, то vibed — node.js done right :)
Спасибо!

Я правильно понимаю, что с sdl/opengl оно скрещивается нормально?
Да, никаких фатальных проблем не должно быть.

Биндинги на них можно брать отсюда: github.com/aldacron/Derelict3. Я этим не занимался никогда, поэтому не знаю, какая версия сейчас считается актуальной, надо немного почитать по ссылкам: )
Спасибо, обязательно поковыряюсь ;)
С год назад избавились от этого счастья в одном проекте ;)
Тогда это был сырой, не без глюков, неудобный в отладке язык.
Не поймите неправильно, я не заявляю, что это плохой язык. Я на нем пишу и не жалуюсь. Просто он устарел в сравнении с теми самыми новомодными. Мне было бы приятнее писать на языке D, который был бы потрясающим вариантом для высокопроизводительных программ, если бы за его продвижение взялся какой-нибудь IT-гигант.
Мне кажется, C++ суждено быть здесь ещё очень долго, потому что именно его устаревшие и во многом трудные для понимания и использования особенности делают возможным реализацию всяких нетривиальностей (что на том же бусте вытворяют, рассказывать не надо). Я не знаю, когда все аналоги удастся реализовать на других языках.

Другое дело, что C++ превращается во что-то монструозное, и доля программистов, способных по-настоящему полноценно его использовать, падает. Какой-то тупик.
Вот полностью согласен с вашей точкой зрения, только, по поводу на других языках, я же столько про D и говорю потому, что там все это не только можно, но гораздо проще и гармоничней.
> Я не знаю, когда все аналоги удастся реализовать на других языках.

Люди часто утверждают, что чего-то нет только потому, что сами этого никогда не видели. Если в чем-то очень уверен попробуй опровергнуть это. Но опровергать нужно беспристрастно.
Я не могу говорить за все 3000 языков программирования, так что это задача непосильная. Всегда может найтись человек, который скажет: а вы не рассмотрели язык X. В своё время автор STL Степанов сказал в интервью:

«At present C++ is the best vehicle for this style of programming. I have tried different languages and I think that C++ allows this marvelous combination of abstractness and efficiency. However, I think that it is possible to design a language based on C and on many of the insights that C++ brought into the world, a language which is more suitable to this style of programming, which lacks some of the deficiencies of C++, in particular its enormous size.»

Но это было давно. Может, чего-то изменилось. Но если посмотреть на разнообразие буста, подозреваю, что всё так до сих пор. Язык, на котором можно реализовать все эти вещи, будет столь же монструозным. Выбросим препроцессор? Не будет Boost.Preprocessor. Выбросим шаблоны? Не будет Boost.MPL и так далее. А если мы всё это воткнём, здравствуй снова C++. Скажем, из простого языка для студентов Java всё больше превращается в такое же болото. То же самое происходит с C#. Конечно, мы радуемся шаблонам и всяким lambda-штучкам, но язык от них проще не становится.
Вы внимательно читали мой комментарий?
Ваши аргументы кудато вообще в сторону.

1. Комментарий о С++ человека который посвятил ему всю жизнь — я думаю он очень кретичен и беспристрастен.
2. Зачем что-то выбрасывать? Я вообще не о том. И вы опять используете догадки и выдумки. Откройте глаза!

Вы наверное даже и не подозреваете что в мире есть что-то кроме С++ и буста?

Ладно, это негодование.
Вы лучше скажите с чем вы сравниваете?
И откуда знаете о том, что чего-то и из С++ нигде нету?
Конечно, внимательно. Там всего два предложения.

По поводу (1). Если на то пошло, Степанов не апологет C++, там совсем другая история. Он искал язык, где можно воплотить идеи обобщённого программирования. И не нашёл ничего кроме Ады. Лишь позже шаблоны встроили в C++, и ему удалось добиться более широкого признания.
По поводу (2) — я не понял смысла фразы (т.е. в чём месседж? не призывы ко мне, а на что надо конкретно обратить внимание?)

«Откуда я знаю, что в C++ есть то, чего нет нигде»? Хороший вопрос. Я не знаю. У меня нет времени выучить все 3000 языков программирования.

Скажем, объекты уже есть практически везде, окей.

Шаблоны — в Java недавно появились, в C# тоже. При этом до сих пор их поддержка отстаёт (позже вышли).

Метапрограммирование — вообще не знаю, где оно есть за пределами C++ (берём популярные языки).

Препроцессор (с помощью которого реализуют кучу нетривиальных вещей) — почти нигде нет, потому что он ещё в C был объявлен «злом», и от него избавляются.

Множественное наследование — иногда полезно, где оно?

Перегрузка операций — аналогично.

(Ну это то, что первое в голову приходит)
> Я не знаю, когда все аналоги удастся реализовать на других языках.
То есть вы уверенны что, что-то не реализовано.

Но после вы показываете что ваша уверенность не аргументирована.
> «Откуда я знаю, что в C++ есть то, чего нет нигде»? Хороший вопрос. Я не знаю. У меня нет времени выучить все 3000 языков программирования.
Вы путаетесь. Не нужно учить все 3000 языков, нужно выбрать все С++ фичи (их намного меньше чем 3000) и найти на каждую минимум по языку. Это и будет опровержение ваших догадок.

И раз вы уже вспомнили шаблоны, метапрограммирование и тд. Вы согласитесь, что сами по себе они ничего не стоят, а только в применении к конкретной задачи.
Так вот, моя догадка («Вы наверное даже и не подозреваете что в мире есть что-то кроме С++ и буста?») подтверждается.

1. Шаблоны — особый вид полиморфизма, в котором динамически типизированные языки не нуждаются, а в функциональных реализовано по другому.
2. Перегрузка операторов — аналогично. Более того есть возможности создавать свои.
3. Метапрограммирование (Препроцессор сюда же, или вы думаете что это что то другое?) — как вам не стыдно.
4. Множественное наследование — аналогично.

П.С. Проверяйте на валидность то «что первое в голову приходит»
Если вырезать энтропию из вашей реплики, получится: «каждая фича C++ реализована где-то». Это и так очевидно, C++ никогда не претендовал на революционность. Вот вы лучше назовите хоть один язык, где все те же фичи реализованы вместе, а не по отдельности. По отдельности я и так знаю.

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

А мои знания языков здесь не при чём. С ними как раз всё в порядке.
Тогда вернитесь далеко назад и прочтите еще раз свою же фразу:
> Я не знаю, когда все аналоги удастся реализовать на других языках.
Давайте не будем играть в слова и в загадки.

Есть такая вещь как швейцарский нож. Там внутри всё. Если там совсем всё, это довольно уродливый инструмент, но универсальный. Во многих задачах эта универсальность полезна.

Я не вижу второго такого ножа. Если в силу невежества — укажите мне его.

Вот и всё, что хотел сказать. Если не удалось с первого раза, приношу извинения. Надеюсь, со второго раза получилось.
[Язык] Далеко ходить не буду.
1. Nemerle
2. Haskell
3. Python

Не бросайтесь словами если не имеете аргументов.
Ну это даже не смешно. Приведённые языки совершенно другого рода, абсолютно не совпадающие с задачами C++. А какие аргументы нужны? Я должен на полном серьёзе сейчас объяснять здесь разницу между C++ и Haskell?
Нет. Просто скажите чего нет в Haskell, но есть в С++
Указатели есть. Правильный ответ Препроцессор.
Я знаю, это была шутка :)
А если серьезно, там нет шаблонов и слабой типизации.
Я же специально написал про серьезно…
Я думал «серьезно» тоже шутка. Шаблоны есть, но выглядят не так, если метапрограммирование, то есть Template Haskell.
Слабой типизации? Это манипуляции с void*? Зачем оно надо? Или что-то другое имеется ввиду?
Я думал изобретение типов — это шаг вперед.
Слабая типизация это не только void*, и не стояло вопроса зачем, стоял вопрос чего нет.
А про шаблоны в обычном хаскеле можно поподробней?
Вот впихну я в язык мега крутую но абсолютно ненужною штуку А, а потом скажу «параша твой язык, в нем нету А».

Вопрос стоял чего нету полезного.

Про шаблоны — разве в обычном хаскеле нельзя параметризовать типами типы и термы?
Можно, но это не метаязык, это часть системы типов, таким образом, это другой тип полиморфизма. И в догонку, вы считаете в void* бесполезным?
void* — плохой дизайн, и если вы его используете, это еще не значит, что он полезный.
Касательно шаблонов. (Все сильнее изумляюсь способу мышления. У вас императивный? Ничего личного, просто интересно).
Очень часто можно слышать:
Импер.: Там нету такой фичи!
Функц.: Зачем она тебе? Какую задачу ты хочешь решить.

Даже между заслуженными программистами возник такой вопрос.
Я не знаю, какой у меня способ мышления, но эстетически я больше люблю функциональный слить, haskell — один из самых любимых мной языков. И не надо оскорблять функциональщиков, обвиняя их в привычке отвечать вопросом на вопрос. И повторюсь, я не говорил, что в хаскеле нужны эти фичи, просто вы спросили каких нет, я ответил, я и сам знаю, что нафиг они там не нужны.
=) на этом и решим.
Никогда в жизни не собирался оскорблять функциональщиков (в том диалоге я — Функц.). Плохо в людях разбираюсь, мне показалось, что вы Импер.
Ооо, а я понял, что вы имели ввиду под «зачем»! Но там говорится все таки о реализации зависящей от цели, это не тот контекст :)
И спасибо большое за видео, обязательно посмотрю, такая волнующая тема :)
> Функц.: Зачем она тебе? Какую задачу ты хочешь решить.

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

Поэтому хорошие языки поддерживают обе эти парадигмы. Хочешь — пиши функционально, не хочешь — императивно.
Я бы послушал. Возможно, коллега предложит подход, которого я не замечаю. Не «запусти левый мотор, подними правую руку и подожди 3 секунды», а «оглядись и подумай, что лучше сделать», например.
Хорошо, нормальный человек не будет отказываться от полезного совета.
Но выдавать отсутствие какой-либо возможности языка за его плюс — довольно странно. Пусть есть альтернатива, но оставьте мне и мой старый способ.
Но вообще, указатели в хаскеле, это костыль для взаимодействия с си, там они противоестественны, так что вообще-то я бы не стал засчитывать их.
Пожалуйста.

На Haskell нельзя написать систему реального времени (например, для встроенного прибора для самолёта), потому что в любой момент может запуститься garbage collector и удлинить конкретный шаг цикла. Аналогично работает механизм ленивых вычислений — два вызова функции f(x) могут отличаться по скорости в неопределённое количество раз. Я понимаю, что этот механизм полезен, но вот его ограничение.

Далее, я не совсем понимаю, как на Haskell реализовать прямой доступ к памяти. Допустим, у меня есть девайс, в котором экран отображается на оперативную память. Мне надо нарисовать на экране окружность; нужен прямой доступ к конкретным физическим адресам.

Библиотека контейнеров. Вот здесь я не так уверен, но насколько знаю, на Haskell «из коробки» нет такого обилия структур данных (массивы, ассоциативные массивы, деревья, хэш-таблицы, списки, деки) как в C++ или даже в Java. Я понимаю, что всё это реализовать МОЖНО, но одно дело можно, а другое — уже есть.

Вообще со времён развития Java мне окончательно стало ясно, что язык уже не так важен, как вся экосистема вокруг него. Есть библиотека функций — есть язык. Нет библиотеки — нет языка, как хорош бы он ни был.

Подключиться к сети с MPI-интерфейсом, загрузить JPG файл, открыть zip-архив, работать с графами, складывать и пересчитывать даты-времена, читать xml файлы, разбирать регулярные выражения, преобразовывать строки из unicode в ascii с учётом локали, выполнять математические алгоритмы — для всего этого есть либо решение «из коробки», либо де-факто стандарты.
Контейнеров там куча, все, что вы перечислили после RTS, там все есть, не надо его недооценивать так. Но вообще, как вы выше сказать сравнивать хаскелл с плюсами — это очень странно, очень.
А кстати в C++ как раз нет большинства из вами перечисленного, все если в либах, но в стандартной либе далеко не все.
По сравнению с C# и Java стандартизация в C++ вообще слабая часть, как-то они очень медленно всё делают. Куча опций, которым давно место в стандарте, до сих пор находятся в де-факто стандартных библиотеках, это правда.
Просто скажите чего нет в Haskell, но есть в С++

Нет boost::units.
Нет compile time duck typing; что-то полиморфное превращается в хинты выводу типов с кучей ghc-расширений. В С++-то сначала можно написать код, а потом расставить static_assert.
Это те ограничения языка, в которые уперся я и с которыми сложно что-либо сделать. Во всяком случае, MPL освоить было куда проще. Так-то еще и на дописывание библиотек приходится тратить половину времени кодирования, но ситуация улучшается. Жалко, что другие быстрые языки с REPL еще хуже.
Увы, молодой человек, Вам наверное очень приятно мечтать о том что придет какой-нибуть добрый волшебник и создаст супер-пупер язык программирования, после чего в мире наступит всеобщее счастье. Это конечно такие сладкие мечты, но реальность как всегда более сурова.
Не хочу вас расстраивать, но Серебрянной пули не существует.

Всякий инструмент имеет свои четкие границы применений. Но это само по себе не порождает проблем. Проблемы начинаются когда:
1) инструмент начинают использовать вне пределов применения (т.е. микроскопом пытаются забивать гвозди.)
2) имеющийся инструментарий использут неправильно
3) использование инструмента, не задумываясь как оно работает (ага, возникает феномен «обезьяны с гранатой»)
4) при выборе технологий руководствуются не критическим анализом всего спектра как проверенных, так и новых технологий, а выбирают по принципу «а вот я читал что нынче модно .....».
5) вместо того чтоб думать о стоящих бизнес-задачах, думают о том как бы всем показать «какой я крутой».

Извините, я совсем не понял как то, что вы пишите относится к моему комментарию. Я как раз и утверждал, что область применения C++ существенно уже, чем у более современных языков, на них писать просто дешевле, а заодно и приятней, и малое число конференций по нему более закономерно, чем кажется автору поста.
> область применения C++ существенно уже, чем у более современных языков

Нет, это вы пытаетесь приводить некорректные сравнения. Например, возьмем два утверждения «Assembler и Pure C это более 90% применений на микроконтроллерах» а «PHP это 90% вебсайтов». И что? Как по вашему, какая из «областей применения» языков «шире» а какая «уже»?

> писать просто дешевле, а заодно и приятней

Еще одно заблуждение (почитайте что означает термин «технический долг», а долги, батенька отдают с процентами). Да, дешево можно нахерачить мегабайты «индусского говнокода», но рано или поздно это сведется к болезненному рефакторингу.

> малое число конференций

Тоже не показатель. Язык программирования это инструмент. Отвертка тоже инструмент. Много вы видели конференций по пользованию отверткой? Нет? Но из этого не следует что отвертку никто не использует.

UFO just landed and posted this here
Не, скорее показывает рынок. Насколько я могу видеть у С++ нет такого мощного рынка с общими и похожими проблемами, как у дотнеты или джавы. C++ — это в основном тихий легаси и небольшие продуктовые компании. Ну и геймдев, да. Но в геймдеве с конференциями вроде все хорошо, не?
У GameDev своя тусовка. Обычно это направление выбирают рано в университете или ещё даже до поступления и с остальными программистами они редко пересекаются.

Мой друг детства пишет для PlayStation. У них своя среда, свои библиотеки. Свои алгоритмы и задачи. Когда мы с ним разговариваем на профессиональные темы, то такое ощущение, что он работает не с С++, а с чем-то совершено другим.
Да, полностью согласен.
У GameDev своя тусовка. Обычно это направление выбирают рано в университете или ещё даже до поступления...

А это обязательно? Или у тех, кто выбрал другую специальность, все-таки остается шанс к ним попасть?
Его популярность падает как раз из за сложности. C# гораздо более простой инструмент, а производительность C++ сейчас, действительно, разве что, в геймдеве по-настоящему требуется.
производительность C++ сейчас, действительно, разве что, в геймдеве по-настоящему требуется

Даже не знаю, с чего бы начать перечисление… Остаётся только улыбнуться. :)
Начните с чего угодно, все равно я вам скорее всего отвечу, что это все область для C, C++ тут ни к чему. Ну, то есть конечно может я и слегка преувеличиваю, но основное направление таково.
Вспоминать и искать, чтобы перечислить, мне не интересно. Логически можно осознать, что огромная база различных сложных библиотек написана на Си/Си++ (библиотеки для CAD и прочее, прочее). А это значит, что пользователи этих библиотек также будут использовать C/C++. Конечно, можно сделать прослойку и писать основную программу на C#. Но на практике мало кто будет заниматься подобной благоглупостью.
Вы меня неправильно поняли, я не говорил, что С++ мало используется. Я говорил, что во многих областях, где он используется лучше подошел бы другой инструмент. В том-то и печаль, что использовать C++ именно приходится, кстати, ваш пример это очень здорово иллюстрирует.
Вы сами показали статиску использования языков. Но ведь программисты изучают «новомодные» языки не в основном от интереса, а от необходимости и спроса.
Бизнес диктует правила, бизнес диктует сроки, бизнес диктует требования.
Как вы заметили, бизнесу необходимо сделать что-то быстро, что-то более-менее безопасно.
Нет, я не говорю о том, что на С++ нельзя писать быстро и безопасно.
Просто наверное «новомодные» языки для задач бизнеса подходят больше.
в ваш список компаний еще можно добавить:
— Kaspersky lab
— Acronis
— Parallels
Кстати, тоже думал на тему C++ User Group.
Почему-то не приживается тема в России?
Поясните зачем вообще мне как C++ программисту нужна такая группа? Что-то никак понять не могу…
Смотрю Александреску, Сартра, Семёнова и лапочку-Бьёрна; читаю новый стандарт.

Ну вот соберёмся мы группой и дальше что?.. Обсудить новый стандарт? Или в таких группах неформальное общение и говорят за жизнь?
Поясняю:

— Площадка для обмена опытом и информацией в своей специализации (например, по прочитанной Вами книге). Иногда, приглашаются люди из других стран или городов.
— Площадка для получения опыта публичных выступлений
— Возможность получить новую и интересную работу (рекрутеры или руководители направлений иногда посещают такие тусовки)
— Неформальное общение за жизнь так же немаловажный фактор — в кулуарах может возникнуть группа людей с общими взглядами на жизнь. А, иногда, и стартовать новая компания.

Если чего-то не учел, то можно еще глянуть здесь
> Согласно слухам, компания Intel гораздо больше зарабатывает на пользователях компиляторов Intel Fortran, чем на программистах использующих Intel C++.

Я не удивлюсь, если это связано с тем, что на рынке C++ гораздо больше серьёзных проработанных конкурентов (gcc, clang, MSVC), у которых есть серьёзная пользовательская база и поддержка, а некоторые из них — бесплатны или свободны. С Fortran'ом не знаю как, но если Intel давно выпускает этот компилятор, и делает это хорошо, то не вижу ничего странного в том, что они там хорошо живут.
но если Intel давно выпускает этот компилятор, и делает это хорошо, то не вижу ничего странного в том, что они там хорошо живут.
В том то и дело, что интеловский компилятор, во всяком случае, на моих задачах производит код, который работает гораздо быстрее других доступных мне компиляторов. А делается он это потому, что никто лучше Intel не знает архитектуры процессор Intel.
Два вопроса. Первый: в каких областях применяется C++? Второй: чем занимаются программисты в России?

Мне кажется, проблема в том, что у нас в принципе мало промышленности, где используют C++. Отсюда и низкий интерес.
Ладно вам, в самом деле.
80% программистов заняты тем, что пишут формочки к хранилищу (документу или базе данных). Ну да-да, 100500 формочек, из которых 100 достаточно сложные.
Я застал времена, когда почти все формочки писались на С++ (пресловутый MFC от VC6). Не, спасибо, больше не надо. Для формочек есть .net, java, javascript, язык 1С — модное подчеркнуть, на которых это делается банально быстрее.
Из оставшихся 20% примерно половина — это системщики, которым возможности плюсов просто не требуются (а скажем на микроконтроллерах часто и Си не до конца поддерживается). Они пишут на С.
Оставшиеся ~10% это как раз и есть тяжелый вычислительно-сложный софт. Это родная ниша С++, из которой его ни один другой язык не подвинет (как и Си из области системного софта).
Ну да, 10% по сравнению с 80% — не модно. Ну и что?
Я занимаюсь наукой и пишу тяжелый вычислительный софт на C и не пишу на C++. Вся моя кафедра прикладных математиков пишет на си и плюется на C++. Некоторые, правда, на фортране еще пишут.
Не очень это понятно. Есть же хорошие C++ библиотеки, такие как Armadillo, Eigen и т.д., которые позволяют писать вычислительный софт в естественной нотации, как в Matlab примерно. И по производительности C++ ничем не хуже C.
Не могли бы проянить, чем же им так не нравится C++?
Это с виду парадоксально, но есть причины и если их прочувствовать, то картина становится очевидной.
Я тоже не понимал, но потом всё на собственном опыте прочувствовал.

Причин 2:
1. Конечно, они в этом не признаются, но многие, очень многие просто не осилили C++; да чего уж там, многие даже C не осилили. Да, в глубине им бывает стыдно. Да, они могут приватно поговорить про привязку сишных программ в матлаб или математику. Но просто не осилили. Это со стороны выглядит дико: пятиэтажные интегралы и численные методы, а сишку не осилил.

2. Как ни странно: оказалось, что С++ не особо нужен при расчётах. При вычислительных задачах часто бывает даже инкапсулировать нечего. Т.е. классы и пр. не так уж нужны оказались, хотя когда я был существенно моложе я не понимал почему они не переходят с фортрана на нормальные языки.
Зачастую фортрана оказыается вполне достаточно для мелких или средних систем. Если пишут что-то гигантское: то там уже варианты.
Насчёт чистого C: ну да, есть причины на него перейти с фортрана. (но немного).
C ---> C++, причины перейти есть (но ещё меньше: RAII и namespace).

===
У меня годы на фортране, годы на чистом C, годы на C++, много лет в общем.
Ну, если кто-то поспорить хочет: скажи для начала какая самая полезная директива фортрана 90?
;-)
Про не осилили — это, конечно, глупость. Я же не про восьмидесятилетних дедушек говорю, которые может еще и могли бы, а про достаточно молодых специалистов, некоторые из которых и на фортране-то не писали, а другие писали только потому, что их учили эти самые дедушки.

А про второе — все так и есть. Вот делал я расчетные схемы для численного решения интегральных уравнений, и там особо нечего выделять в отдельные сущности, кроме, разве что, матриц, но матрицы достаточно простые обьекты, чтобы не надо было ничего инкапсулировать.
И еще момент есть: С++ компиллятор вставляет неявно слишком много кода. Все эти конструкторы, деструкторы, — это все код, который выполняется, но его не видно, а при простынях алгоритмов в кучу строк не очень хочется задумываться, не вызвался ли где-то, где не нужно, конструктор копирования.
И еще момент есть: С++ компиллятор вставляет неявно слишком много кода. Все эти конструкторы, деструкторы, — это все код, который выполняется, но его не видно, а при простынях алгоритмов в кучу строк не очень хочется задумываться, не вызвался ли где-то, где не нужно, конструктор копирования.


Видимо недоосилили. :)

Чего тут думать. Запретил конструктор копирования/создал другой правильный класс/не используешь строки/другое решение — и жизнь прекрасна.
Можно. Но это написание кода, который никак не относится к задаче. В этом и проблема, что когда пишешь чистый вычмат используя C++, пишешь тонну саппорт кода (чтобы все красивенько, или по стандарту, или вот чтобы компилер не шалил). А потом хочется написать матрицы шаблонные, а потом еще и чтобы в них только числа можно было класть, и так далее и тому подобное. Вы, конечно, можете сказать, что все это просто, и будете правы, но это неэффективная трата времени. Проще написать на C. Я вот лично пишу на С в ООП стиле, аккруатно разделяя на модули функции и все у меня замечательно.
А про неосилили — так вы все-таки не правы, люди же пишут и на C++, просто не математику. Всякие несложные ГУИ проще, например, на плюсах писать, особенно если Qt доступен.
пишешь тонну саппорт кода

На С этот код все равно придется писать, только явно. В итоге все тонет в malloc'ах.
Из функции даже матрицу вернуть нельзя, потому что память нужно выделять извне, отсюда куча временных переменных.
Матрицы шаблонные уже давно написаны, но конечно же проще написать свою бажную хрень, чем разбираться в чужих наработках в десяток человеко-лет.
Я не говорю про zero-overhead чудеса типа boost::units, которые избавляют от кучи ошибок. У меня код на С++ не сильно отличается от кода на каком-нибудь numpy, именно потому что вычислений много.
Я тоже пока зеленый в этом деле был, думал, что вот сейчас я сбацаю такой офигенный класс матриц и все старперы откусят, но вот прошло время, и теперь я изменил свое мнение :)
А мне казалось, в научных вычислениях такие вещи как std::vector или std::map просто напрашиваются. Не представляю, как без них жить.

Ну и всякие токенизаторы из буста — даже банальный csv файл разбирать самостоятельным кодом? (Хотя такие вещи уже наверняка вынесены в библиотеки). Или ввод-вывод строк — в C тоже морока.
Я честно говоря не понимаю что такое «расчёты». Если это набор формул, то такое все равно не «пишется», а генерируется из каких-то других источников. В таком случае можно и Фортран (77) использовать, тк люди этот код не будут трогать, а компилируется он быстрее.

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

ЗЫ А Фортран 90 вообще надо отменить, простоты 77го уже нет а до С++ не дотянул (и даже если и дотянул кому надо учить совершенно другой раздутый язык от которого Ф77 осталось пара ключевых слов)
Мы тоже в конце 80-х писали вычислительный софт на C — длинная арифметика, многочлены от многих переменных, модулярная арифметика, алгебраические числа… Когда появился С++ 1.0 («C с классами»), это было счастье — можно было не писать страшные конструкции из структур и unions и не придумывать невразумительные имена функций для арифметических операций. Особенно полезным был виртуальный деструктор :) Так что причин оставаться на С практически не было.
Фортран 90 не застал, но попробую угадать. ALLOCATE?
Не первый раз слышу, что на мат. кафедре используют С, а С++ люто ругают. Причём студенты учат С, а о С++ думают плохо со слов преподавателей. Как-то в голове не укладывается, тоже хочется пояснений.
Это с виду парадоксально, но есть причины и если их прочувствовать, то картина становится очевидной.
Я тоже не понимал, но потом всё на собственном опыте прочувствовал.
См. мой комент выше.
Вот код
f(a);

И вот не определишь, передается обьект a по ссылке или по значению, если не полезть и не посмотреть. В то время как в си всегда понятно, что и как передается и не надо над этим думать. Это один из тысячи мелких примеров, которые засоряют мозг во время написания на С++ и без того очень сложных вещей.
И студенты не ненавидят C++, они как раз-таки кричат о том, что C++, классы и шаблоны — это как раз то, чего не хватает, но потом приходит понимание того, что мудрые преподаватели были правы. Это я на своем опыте прошел :)
Не понимаю зачем для научных вычислений использовать чистый C, если современный фортран (95, 2003, 2008) куда удобнее, приятнее и понятнее.
Ну вот я например не люблю фортран. Просто не переношу его как язык, мне очень не нравится, Я понимаю, что это замечательная платформа для научных софтфарных комплексов, но ничего не могу с собой поделать.
Andrey2008, вашу мотивацию можно понять — вы зарабатываете на разработчиках С++. К сожалению ситуация с С++ лучше не станет.

Популярность языка определяется его всотребованностью. Как не крути, сейчас основное направление это веб и мобильные приложения. Если меня спросит начинающий разработчик, я посоветую ему изучать Javascript, Python, C# (как вариант Java или Ruby). Вариантов найти работу или замутить что-то свое со знанием только C++ явно меньше.

Мы пишем на С++ постоянно, основной доход идет от Windows софта, готорый генерит веб-приложения. Клиентское приложение написано на С++, найти толковых разработчиков тяжело, несмотря на зарплату значительно выше средней по региону. Тем не менее, если отправлять разработчиков на конференции, я скорее выберу что-то связанное с веб-технологиями или с процессом разработки в целом. Это принесет больше пользы нашему бизнесу.

С++ это Фортран нашего времени. Вы посоветуете школьнику изучать Фортран? Я тоже нет.
UFO just landed and posted this here
Ага, я тоже вот много пишу на С++ и на все эти конференции смотрю примерно, как портной с 20-летним стажем смотрит на показы мод от кутюр. Да, прикольно, много новых фишек и всё такое блестит и переливается. Но завтра ко мне придет клиент заказать костюм. И это будет обычный костюм, а не то, что вчера показали на дефиле. Я делал эти костюмы уже много лет и буду делать дальше. Я умею их делать хорошо. И от того, что где-то там на другом конце мира их придумали делать из красного полиэтилена с дыркой на спине я могу только поулыбаться — денег или знаний мне это не принесет.
Заранее прошу прощения за возможную некомпетентность (если я неправ — ткните меня в комменты окровавленным лицом), но разве фортран не живее всех живых потому, что осталась еще куча систем, которые переводить в какие то современные варианты настолько накладно, что проще их не трогать, и пользоваться, пока возможно? Такое, знаете ли, сборище посвященных некромантов? :)
Во много это именно так. Но и начиная новую исследовательскую задачу по моделированию и прочим расчетам, вполне есть смысл опять брать Fortran. Ибо быстрый.
В чем это Фортран быстрее C или C++? И тот и другой компилируется в машинный код. Единственное преимущество фортрана (а именно Фортрана 77) это его простота. Но это же и его недостаток, отлаживать или еще хуже модифицировать крупный проект Фортране не пожелаешь врагу.
Подробно описано тут. Я понимаю это следующим образом. В C и C++ любые два указателя на один и тот же тип могут указывать на одну и ту же переменную, это называется aliasing. В Фортране такой ситуации быть не может, поэтому компилятор может генерировать более эффективный машинный код.
В Си есть restricted, в С++ есть aliasing rules плюс никто не заставляет всё делать указателями. Но я согласен что если написать «просто код», то Фортран возможно его скомпилирует лучше (все-таки FORTRAN=FORmula TRANslator).

Если знать «как» то и на Си и на С++ можно писать ровно такой же по скорости код как и на Фортране. А для крупных и сложных проектов и более быстрый, тк легче реализуются сложные алгоритмы.
А для крупных и сложных проектов и более быстрый, тк легче реализуются сложные алгоритмы. если под крупными понимать проекты реализующие какие-либо сложный научные расчеты, то писать проще и потятнее на новых версиях фортрана. Чтобы не быть голословным, предлагаю посмотреть на чем написаны научные программы таких организаций как NASA, NOAA и т.д. практически все они написаны на фортране, а библиотеки доступа к базам данных на Си.
Все верно, то что было написано 40 лет назад написано на Фортране 77, потому что С++ под стол пешком ходил. Не понимаю что это доказывает.

На Fortran 90 что-то написали по инерции, но немного. Та же ошибка что и с С/С++, он похож на Fortran 77, но совершенно другой язык.

Я могу привести конкретные примеры. Вот CERNLIB уникальная библиотека функций (круче GSL во многом) написана на F77. На ней основан пакет анализа PAW и симулятор детектора GEANT3. Используют ли это в сейчас в ЦЕРНе? Разве что какие-то отсталые динозавры где-то на периферии. В самом ЦЕРНе используют ROOT и GEANT4 переписанные на С++ с нуля.

И это пример, когда не просто новый проект не начали на Фортране, а гигантский объем работающего кода пришлось переписать, потому что было уже совершенно невыносимо.
Денег для организации конференций практически не нужно. Это я так, к слову.
Это когда: 1) есть где, 2) есть много времени.
Объясните пожалуйста зачем нужна конференция пользователю C++? (разработчику на C++, которые уже совсем не читает книг для новичков, зато читает много профильных и глубоких сайтов)
Я вот как ни старался не могу понять.

И ещё эти группы пользователей МС: до сих пор не могу понять для чего они?

(Давайте только оставим за скобками рекламу. Хабр читают все и каждый первый знает вашу компанию, а МС и подавно)
Задача:
Есть продукт, который ищет ошибки в C++ коде. Нужно его продать. Как и кому? Опытным разработчикам он не слишком интересен.

Решение:

1. Повсюду пишем, как плохо себя чувствует C++, по возможности — промываем мозг на конференциях
2. Приходят тыщи студентов изучать «модный» C++, устраиваются в ООО «Рога и Копыта» на должность C++ девелоперов
3. Пишут говнокод с тоннами тривиальных ошибок
4. Чтобы хоть как-то запустить продукт (читай: исправить ошибки) ООО ищут пути решения проблем
5. Узнают, что есть крутой софт для статического анализа C++ кода
6. ????
7. PROFIT!!!
Ну мягко говоря мимо. :) Как раз наши пользователи весьма опытны. Это говнокодерам мы как раз неинтересны.
В этом и многих других комментариях высказались в духе, что Си/Си++ существуют с древних времён. На нем мы/вы/они давно и успешно программируем, решаем задачи. И учиться тут нечему. Как было 20 лет, так и сейчас тоже самое.

Так, да не так. Принимая такую позицию, очень легко через те самые 20 лет стать некомпетентным. Это происходит очень легко и незаметно. Даже ничего делать специально не надо. И при этом люди продолжают считать себя профессионалами.

А со стороны это выглядит так. Реальный случай на днях рассказали. Новый программист в старом коллективе предлагает Git. А в ответ: «зачем нам git? вот смотри, у меня всё в тетрадке записано».

Как результат постепенное и всё большее отставание от реальности, использование устаревшего, написание руками того, для чего появились библиотеки и прочая трата времени в пустую. Неэффективно. Вот для этого и надо бывать на конференциях.
некоторые и ассемблер используют местами. Если человек просто сидит на насиженном месте это одно(ох, как много делфистов потерялось...). Если же специалист использует аргументированные сильные стороны инструмента, то это неплохо. разве не является это одним из отличий инженера-программиста от кодера.

Обратно тоже можно построить ситуацию. К сожалению, в последние годы по оптимизациям вычислений, народ всё меньше и меньше интересуется(фраза, что компилятор умнее и пр., а так же куча отмазок, лишь бы просто не попытаться разобраться, хотя бы чуточку). Я понимаю, что для многих это лишнее, но когда заказчик хватает за яйца, какого черта память съедается, и выясняется, что утечки идут с использованием какой-то библиотеки, то начинаются писаться лавиной письма разработчикам библиотеки. Вот только яйца девелопера не будут болеть меньше. Иногда просто попробовать самим залезть в код, бывает очень полезным.
Извините, за большой коммент, просто неоднократно сталкивался с вышеописанными людьми =(.
Andrey2008, а вы не думали выпустить нечто аналогичное Visual Assist для C++? Заодно — интеграция с PVS Studio.

PS: Много лет использую Visual Assist, хотелось бы видеть нечто подобное, но с расширенными функциями рефакторинга/хинтами, чтобы по функциональности было ближе к Resharper.
К тому же, у Visual Assist'а множество хронических болезней, которые существуют годами :(
Напишу кратко. Использую плюсы вкупе с QT. Причина в соотношении => скорость работы|ресурсопотребление. Скорость разработки приемлемая(с qt).

Кстати, и ассемблер вспомнил. Так вот — не обламываюсь использовать небольшие ассемблерные вставки. Нет у меня доверия к оптимизации компиляторов, при очень достаточно муторных математических вычислениях.

Насчет кроссплатформенности только не стоит разгоняться. Этот вопрос при правильном проектировании и хорошем знании инструментария/сред/платформ, быстро решается.

К чему я это всё? Да к тому, чтобы не устраивали тут холивары, на тему актуальности C++.

Так что я согласен с автором — плюсы живее всех живых.
Не совсем по теме статьи. Это просто мысли вслух. Возможно неправильные.

Забыл упомянуть один момент, которые как мне кажется, упускают создатели конференций. Они постоянно стараются собрать энтузиастов, новаторов пытающихся на основе новой технологии построить свой стартап и т.п. А эта аудитория в большинстве собой состоит из голодранцев :). А им пытаются на конференции втюхать ферму от HP или собрать адреса чтобы потом рассылать информацию (спам) о чудосистемах с ценами во много нулей. А потом ещё наверно удивляются, почему такой эффект маленький.

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

А собирать суровых программистов можно только суровыми конференциями с суровыми темами докладов. :)
Мысли очень правильные.
1.
Уже много лет не хожу на конференции за некоторыми исключениями. И эти исключения: поехать встретить какого-то конкретного человека и задать конкретные вопросы.

2.
А зачем вообще конференция? Продвижение анализатора? Ну-ну. Ладно, вопрос поставим по-другому:

3. Зачем вообще конференция по C++ посетителю?

4.
Ну и объединяя эти два вопроса получаем: анализатор впаривать лучше таким бородатым дядечкам, которые могут заплатить за него и вообще понимают что это и зачем.

5.
Как их завлечь? Нужно что-то что их завлечёт.
Пример: Страуструп, Семёнов, Александреску, Сартр,…

Вот по мне: просмотрел записи Going Native хотя по сути они там говорили какую-то слабоинтелектуальную бесполезную муть. Ну, Сартр ничё. Выдал пару своих мыслей; Александреску там.

Ну, т.е. просто приятно их поcмотреть. Звёзды. И даже не в обиде. Пару глубоких мыслей и есть о чём подумать пару вечеров.

6.
Ну и вот:
Есть один такой пример: известные персоны C++ с гарантированным качеством, которых всем хочется посмотреть.
Что ищё? Ну, притащите архитектора амазона: на такси приеду.

7.
Как их затащить?
Хз.

8.
Но я даже отвечу:
Можно своего вырастить.

9.
Конкретнее: не знаю в чём именно заключается MVP,
но, думаю, «быть крутым» в него входит.

10.
Надо стать крутым.

11.
Пусть народ идёт на Карпова.

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

13.
Намёк: А чего бы не стать русским Меерсом?
55 ключевых ошибок в системах на C++
35 новых глупейших ошибок,…
Да, C++ очень даже жив. Но почему такая большая проблема, что нет конференций? Конференции — довольно старый формат, сейчас для «обмена опытом» есть много других альтернатив.

Например, можно пост в блог написать — можно потом удобно ссылаться на него, его смогут относительно легко найти другие, это не требует больших усилий и это можно сделать в любое время. Читатели, опять же, могут бегло на него посмотреть и решить, читать ли дальше.

Для сравнения, конференция — это «мероприятие», на него нужно куда-то ехать, тратить довольно много времени, неизвестно, насколько интересные будут доклады, докладчики обычно ограничены во времени и часто вынуждены свое выступление сокращать.

Так что я считаю, вы зря так цепляетесь за конференции. Нет конференций — и ладно, есть много других возможностей.
C++ замечательный язык, если ты очень хорошо пишешь, иначе всевозможные неявные выделения памяти, неявные копирования, неэффективная сериализация. В общем не для новичка язык.
Что касается MS Visual C++, то в версии 2010 становится ясно, что пора переходить на gcc g++. Жутко тормозит, долго компилирует, отсутствие нормального рефакторинга, тот же бесплатный эклипс в разы лучше нежели msvs 2010. Есть конечно вариант остаться на MSVC 2008, но хочется С++11.
Конференция по Visual C++, даже не знаю, я бы тоже не пошёл… что там нового я мог бы услышать?
Sign up to leave a comment.