LINUX.ORG.RU

[C++?] Серьезный вопрос.


3

2

Просьба ответит серьезно, желательно с аргументами за или против.

Предистория:
Когда то давным давно (я тогда еще только закончил 9-ый класс) я увидел в газете объявление о наборе в летнюю группу по изучению классического программирования. В тот момент я был с компьютером на ты и "очень" хорошо в них разбирался (переустанавливал Windows каждый месяц, хаял Microsoft просто потому, что после моих настроек W приходилось постоянно переустанавливать). Группа по классическому программированию так и не набралась, но набралось 1 человек на Visual Basik for Applications. Я соглсился быть вторым и начались занятия.
Все, что мне там объясняли я схватывал быстро. Меня пригласили продолжить обучение в сентябре на курсе "моделирование".
Там уже был Pascal, который я тогда совсем не знал. Сам курс был очень разношорстный: мы изучали и использование мыши через прерывание, готовились к различным олимпиадам. Параллельно я изучил Pascal.
Потом был Delphi. К концу 10-го класса я уже неплохо владел приемами программирования и вовсю клепал бесполезные программулины. Потом поступил в универ на программиста. Там тоже был Delphi, и я особо не напрягаясь писал все лабы (к моменту поступления я уже был знаком с логикой указателей, самописные стеки и графы, etc).
На 2-ом курсе в гостях у знакомого я разобщался с человеком, который уже насколько лет работал в нерезиновой программистом. Он мне и открыл глаза на мир: "Delphi здох. Его уже похоронили и забыли. Сейчас необходимо знание C++, C#. Необходимо занание паттернов проектирование". Вобщем много чего он мне наговорил. Книжек умных насоветовал, подкинул MSVS 2008, кучу электронных книжек. Я изучил C# по книжке Шилдта. Читал "Идеальный кол" (автора уже не помню). Потом купил(!) себе книжку Шилдта про С++. Мне понравился язык. Тем более что мне казалось, что именно он и есть общепринятый стандарт. Наиболее удобный язык для программиста.

А недавно в соседней теме за упоминание это С++ меня чуть было не съели со всем чем можно. Так-то.

Собственно вопрос: Так стоит ли изучать дальше С++ (а я уже достаточно углубился в книжку Страуструпа, подробно изучая все подводные течения)? Какой язык стоит изучать? Какие из них более востребованны?

Спасибо всем, кто осилил это многобукаф.

★★★★★

Ответ на: комментарий от www_linux_org_ru

>хорошей системы типов

А что такое "хорошая система типов" и чем она отличается от "плохой системы типов"?

linuxfan
()
Ответ на: комментарий от Waterlaz

>А подробнее?

типы, параметризованные значениями

jtootf ★★★★★
()
Ответ на: комментарий от Waterlaz

>> template<int kg, int m, int s> class Value { ... }

> А подробнее? Я честно не понял, к чему это.

Это значение с размерностью кг^kg*м^m*с^s, при умножении значений показатели складываются, складывать значения можно только с одинаковыми показателями.

Реализуй такое в хаскеле, выразительность которого мы тут недооцениванием :-)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от jtootf

> http://okmij.org/ftp/Haskell/number-parameterized-types.html как-то вы странно жуёте, право слово

Речь идет о выразительности:

We review several encodings of the numeric parameter but concentrate on the phantom type representation of a sequence of decimal digits.

Уважаемой публике не кажется, что такое представление арабских чисел фантомным типом очень напоминает по выразительности представление арабского числа в виде LXXVII? гы-гы-гы

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>Уважаемой публике не кажется, что такое представление арабских чисел фантомным типом очень напоминает по выразительности представление арабского числа в виде LXXVII? гы-гы-гы

Нет. Считай вместо 77 использовать "семь семь". Как-бы от замены символа ничего не изменится.

Waterlaz ★★★★★
()
Ответ на: комментарий от jtootf

> уважаемой публике кажется что ты либо клоун, либо идиот

отучаемся говорить за всю публику сразу :-)

операцию сложения своих фантомных типов он там сделал, но я не нашел в статье отрицательных целых чисел и операции вычитания

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

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от Waterlaz

> Нет. Считай вместо 77 использовать "семь семь". Как-бы от замены символа ничего не изменится.

Ага, щас

const int n = 77;

и потом где-то далеко

Value<n,n*n,n-1> v(0);

и как ты такое сделаешь на хаскеле?

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>отучаемся говорить за всю публику сразу

понимаешь ли, ты говоришь: "нельзя", я тебе показываю, что можно - даже без применения шаблонов, сугубо на системе типов стандартного хаскеля; ты в ответ выдаёшь "гы-гы-гы". ты выбирай - или клоуна отыгрывать, или делать умное лицо, одновременно зреново получается

>считающие такой подход выразительным могут попытаться сделать это самостоятельно

радетель выразительности ты наш, а ничего что эта система выполнена в виде библиотеки, а не вшита в стандарт, как у "выразительного и гибкого" C++? ты можешь добавить в C++ библиотечными средствами, скажем, возможность параметризовать типы значениями произвольного типа?

твоя критика в данном случае выглядит несколько беспомощно и отпотолочно - естественно не проблема сделать и вычитание, и отрицательные целые; а с помощью квазиквотации при желании можно это дело причесать к произвольному удобочитаемому синтаксису. у тебя _по существу_ возражения есть, или будешь продолжать шланговать на уровне "гы-гы-гы"?

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> понимаешь ли, ты говоришь: "нельзя", я тебе показываю, что можно - даже без применения шаблонов, сугубо на системе типов стандартного хаскеля; ты в ответ выдаёшь "гы-гы-гы". ты выбирай - или клоуна отыгрывать, или делать умное лицо, одновременно зреново получается

речь шла __именно__ о выразительности

и все началось с того, что Waterlaz написал:

Теперь вы не понимаете выразительности языков таких как хаскель и лисп защищая нелепицу под названием с++. Точно так-же, как противились арабским цифрам.

я продемонстрировал, что в данном случае все наоборот -- с арабскими цифрами нужно сравнивать с++, а с римскими -- хаскель.

и не более того.

> радетель выразительности ты наш, а ничего что эта система выполнена в виде библиотеки, а не вшита в стандарт, как у "выразительного и гибкого" C++?

на выразительности хаскеля это сказывается только отрицательно (BTW, это не значит, что все надо зашивать всегда в стандарт)

> ты можешь добавить в C++ библиотечными средствами, скажем, возможность параметризовать типы значениями произвольного типа?

да, т.к. шаблоны полны по тьюрингу (но выразительность будет на уровне хаскеля)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>да, т.к. шаблоны полны по тьюрингу (но выразительность будет на уровне хаскеля)

Полнота по Тьюрингу тут немного боком. Это необходимое условие, но недостаточное.

Waterlaz ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>я продемонстрировал, что в данном случае все наоборот -- с арабскими цифрами нужно сравнивать с++, а с римскими -- хаскель.

Почему наоборот, если таки всё реализуется? То есть берешь библиотеку(ну или пишешь) и делаешь точно так, как в с++.

Waterlaz ★★★★★
()
Ответ на: комментарий от jtootf

> твоя критика в данном случае выглядит несколько беспомощно и отпотолочно - естественно не проблема сделать и вычитание, и отрицательные целые; а с помощью квазиквотации при желании можно это дело причесать к произвольному удобочитаемому синтаксису. у тебя _по существу_ возражения есть, или будешь продолжать шланговать на уровне "гы-гы-гы"?

мне кажется, что эту твою цитату можно использовать для защиты плюсов например

да и вообще, от нападающих на с++ не было продемонстрировано хоть сколько-то интересной его критики, разве что dave указал, что в плюсах много рутины -- это правда, но эту тему он к сожалению не развил

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>мне кажется, что эту твою цитату можно использовать для защиты плюсов например

её следует использовать для борьбы с головопятством

>от нападающих на с++ не было продемонстрировано хоть сколько-то интересной его критики

после того же хаскеля писать неприятно - от мысли до кода расстояние субъективно куда больше, слишком много мелочей по пути (в случае того же Tcl аналогичного не наблюдается). anyway, это так - личное наблюдение

jtootf ★★★★★
()
Ответ на: комментарий от Waterlaz

> Почему наоборот, если таки всё реализуется? То есть берешь библиотеку(ну или пишешь) и делаешь точно так, как в с++.

Почему наоборот арабские цифр, если таки всё реализуется? То есть берешь библиотеку умножения римских чисел (ну или пишешь) и делаешь точно так, как в арабских.

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от jtootf

> после того же хаскеля писать неприятно - от мысли до кода расстояние субъективно куда больше, слишком много мелочей по пути (в случае того же Tcl аналогичного не наблюдается). anyway, это так - личное наблюдение

и тут желательно продемонстрировать пример (а без примера -- я и так это знаю)

www_linux_org_ru ★★★★★
()
Ответ на: комментарий от www_linux_org_ru

>и тут желательно продемонстрировать пример (а без примера -- я и так это знаю)

ну вот тебе пример (не мой) из одного треда в Devel:

main = print . fact . read . head =<< getArgs

считать первый аргумент приложения, распарсить, вычислить функцию от него (как от Integer'а), вывести в stdout. лаконично, корректно, читаемо (при том, что код идиоматически не функциональный - IO всё-таки)

jtootf ★★★★★
()
Ответ на: комментарий от jtootf

> main = print . fact . read . head =<< getArgs

> лаконично, корректно, читаемо

Да уж читаемей не бывает - справа налево читать программу ну просто очень "удобно". Функциональщики такие функциональщики.

paranonymous
()
Ответ на: комментарий от paranonymous

Функция (.) - это композиция, которая действительно читается справа налево: f . g = \x -> f (g x). Для ценителей математики должно быть привычно и естественно.

dave ★★★★★
()
Ответ на: комментарий от paranonymous

> Да уж читаемей не бывает - справа налево читать программу ну просто очень "удобно". Функциональщики такие функциональщики.

"Напечатать факториал прочитанного первого аргумента" -- очень нечитаемо, да. Плюсофилы такие плюсофилы...

kemm
()
Ответ на: комментарий от dave

> Для ценителей математики должно быть привычно и естественно.

Хрен с ней, с математикой даже. Оно привычно и понятно с точки зрения естественного языка.

kemm
()
Ответ на: комментарий от eao197

> А чем это принципиально отличается, например, от:
> cout << fact( parse( get_first(argc, argv) ) );


Очевидно же, много скобок! ;)

mv ★★★★★
()
Ответ на: комментарий от eao197

> По-моему, наличие или отсутствие GC не влияет на качество программ настолько серьезно, чтобы ставить его отсутствие в вину C++.

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

pitekantrop ★★★
()
Ответ на: комментарий от eao197

> Индустрии, как показывает практика, нужны Java и IDEA под Unix-ом и C# с VS под виндой.

Глобальный и надёжный пыхпых забыл.

> Поскольку нефиг микроскопами гвозди забивать.

Ну тогда и нефиг молотком часы ремонтировать.

pitekantrop ★★★
()
Ответ на: комментарий от pitekantrop

Он хотел сказать:

#include <iostream>
#include <cassert>
#include <boost/lexical_cast.hpp>

int main(int argc, char *argv[])
{
	assert(argc > 1);
	std::cout << fact(boost::lexical_cast<int>(argv[1]));
}
mv ★★★★★
()
Ответ на: комментарий от pitekantrop

> По-моему, определение количества багов "на глазок" в каком-то проекте на далеко не лучшем языке с GC не позволяет делать такие выводы.

1. Никто здесь еще не предоставил каких-то отличающихся от "на глазок" данных.

2. Я хотел бы посмотреть, как средней руки программисты начнут на Haskell-е делать корпоративные порталы. Чтобы увидить размеры тамошних списков багов. Но, боюсь, не доживу.

eao197 ★★★★★
()
Ответ на: комментарий от pitekantrop

>>> Индустрии, как показывает практика, нужны Java и IDEA под Unix-ом и C# с VS под виндой.

> Глобальный и надёжный пыхпых забыл.

Кстати, интересно было бы узнать, за счет чего Haskell с OCaml-ом будет конкурировать с PHP (RoR и Django) в области создания home pages за $400 за штуку.

eao197 ★★★★★
()
Ответ на: комментарий от mv

> Он хотел сказать:

Ну это не совсем честно. :) В хаскелловской версии импорты и проверка количества аргументов поскипаны.

pitekantrop ★★★
()
Ответ на: комментарий от eao197

> Никто здесь еще не предоставил каких-то отличающихся от "на глазок" данных.

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

> Я хотел бы посмотреть, как средней руки программисты начнут на Haskell-е делать корпоративные порталы. Чтобы увидить размеры тамошних списков багов. Но, боюсь, не доживу.

Макс Десятов делился опытом на LtU-Kiev 2 недели назад. Говорит, отлично получается.

pitekantrop ★★★
()
Ответ на: комментарий от pitekantrop

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

Низкоуровневых -- да, меньше. А вот общее количество почему-то остается таким же. И я бы не сказал, что функциональность Java проектов в разы больше функциональности С++ных.

> Макс Десятов делился опытом на LtU-Kiev 2 недели назад. Говорит, отлично получается.

Лет восемь-девять назад точно так же делились опытом в J2EE, тоже отлично получалось.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

> Кстати, интересно было бы узнать, за счет чего Haskell с OCaml-ом будет конкурировать с PHP (RoR и Django) в области создания home pages за $400 за штуку.

Отобрать еду у пыхпыхеров? Зачем? Может ещё в 1С хаскелл встроить, и в офис вместо бейсика?

pitekantrop ★★★
()
Ответ на: комментарий от pitekantrop

> Отобрать еду у пыхпыхеров? Зачем? Может ещё в 1С хаскелл встроить, и в офис вместо бейсика?

Тогда чего вы докапались до C++?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

>Тогда чего вы докапались до C++?

Мы уже выяснили выше по треду что самые значимые объектные иерархии были сделаны в обход плюсовой объектной модели - Qt и COM, например. Кроме того, ты сам порекоммендовал использовать скриптинг на Python/Ruby вместо метапрограммирования на шаблонах пару страниц назад. Тут возникает вопрос - а что же в С++ пригодно из коробки?

Absurd ★★★
()
Ответ на: комментарий от Absurd

Мы уже выяснили выше по треду что самые значимые объектные иерархии

После словосочетания «значимые объектные иерархии» уже можно ничего не говорить. Маразм окончательно победил.

Тут возникает вопрос - а что же в С++ пригодно из коробки?

Этот вопрос адресуйте любителям языков программирования как таковых. Это они любят измерять длинусравнивать реализацию паттерн-матчинга в языке и в макробиблиотеке.

Для меня C++ — это огромная экосистема, в которой есть масса всего готового. Начиная от компилятора и библиотек, заканчивая учебными курсами в самых захолустных университетах. Это все уже есть, этим можно(должно) пользоваться и это просто так не исчезнет.

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

> Не позорьтесь. Ваш код будет работать только в Debug версии и будет глючить в Release.

Чё это? Какой Debug, какой Release?

mv ★★★★★
()
Ответ на: комментарий от eao197

> Кстати, интересно было бы узнать, за счет чего Haskell с OCaml-ом будет конкурировать с PHP (RoR и Django) в области создания home pages за $400 за штуку.

Коммон Лисп?

mv ★★★★★
()
Ответ на: комментарий от Absurd

>Альбом 96-го года группы Slipknot называется mate . feed . kill . repeat

не впечатлился я коллективом певцов ртом под названием Slipknot. обещали невыразимую святость, а на деле какой-то ню-метал для подростков, слушать противно

да и композицию применять не умеют, стыдоба

jtootf ★★★★★
()
Ответ на: комментарий от eao197

>Не позорьтесь. Ваш код будет работать только в Debug версии и будет глючить в Release.

A programming language is low level when its programs require attention to the irrelevant (c) Alan Perlis

jtootf ★★★★★
()
Ответ на: комментарий от mv

> Чё это? Какой Debug, какой Release?

man assert

man NDEBUG

eao197 ★★★★★
()
Ответ на: комментарий от eao197

>>Мы уже выяснили выше по треду что самые значимые объектные иерархии

>После словосочетания "значимые объектные иерархии" уже можно ничего не говорить.

А какое прилагательное я должен был употребить по отношению к COM и Qt? "Практически значимые" ? Не вижу смысла изголяться, т.к и так понятно о чем речь. Практическим воплощениям ООП на С++ приходится обходить сам С++ при помощи препроцессора или MSVC++ - специфичных хаков.

Absurd ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.