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# по книжке Шилдта. Читал "Идеальный кол" (автора уже не помню). Потом купил(!) себе книжку Шилдта про С++. Мне понравился язык. Тем более что мне казалось, что именно он и есть общепринятый стандарт. Наиболее удобный язык для программиста.

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

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

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

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

> ANSI-стандарт языка не менялся. [...] В остальном, жизнь кипит [...]

Спасибо, интересно рассказываешь. Просто у меня есть один проект (можно посмотреть в истории тем) на .NET... Иногда возникают странные мысли переписать на чем-нибудь другом. Там берется система обыкновенных диффуров (точнее, динамическая система) и по ней строится алгоритм симуляции (Эйлера / Рунге-Кутта). Затем симуляция запускается. Такой компилятор. Получается быстро.

Здесь Лисп интересен тем, что можно строить код и запускать его на-лету. Это же самое делается и в .NET, то там есть проблема с выгрузкой отработанного кода (домена).

Вопрос состоит в том, сколько у меня свободного времени, а так же в том, есть ли какой-либо смысл у самой затеи. Пока смысла большого не нахожу :)

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

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

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

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

> Профит, еще какой.

У меня на моей работе тоже Java, но профит от знания ФП тоже есть. :)

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

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

> Здесь Лисп интересен тем, что можно строить код и запускать его на-лету. Это же самое делается и в .NET, то там есть проблема с выгрузкой отработанного кода (домена).

У вас есть уникальная возможность стать clojure-clr альфа-тестером :)

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

Хотя со мной происходит нечто похожее на описанное в этой статье: http://lukeplant.me.uk/blog.php?id=1107301645 :)

Писать на жабе в функциональном стиле можно, но получается жутко громоздко. Поэтому чаще всего приходится использовать "обычные" средства. Удовольствия от написания такого кода не испытываешь, потому что понимаешь, как бы это выразительно выглядело на той же Scala.

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

> то есть МП лиспа не способно на практике изменить этого?

У меня ощущение, что ты не понимаешь, про что говоришь.

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

>Когда тебя преподаватель "пиарит" свой предмет

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

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

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

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

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

То есть ни преподов ни ВУЗов нормальных ты не видел?

>привед ботанам-первокурсникам.

Очень уж у тебя искаженное представление об образовании. мб вот поэтому:

>а я вообще образование после девятого класса бросил, ибо даже корочка нинужна.

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

> привед ботанам-первокурсникам. а я вообще образование после девятого класса бросил, ибо даже корочка нинужна.

тогда все понятно.

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

>Лисп интересен тем, что можно строить код и запускать его на-лету.

Тебя обманули: код строится во время компиляции. Просто во время оной ты можешь генерировать код в динамическом окружении компилятора, и этот код будет подан на вход компилятору.

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

Ну тогда system("g++ -shared metacode.cpp") и dlopen + dlsym тоже никто не отменял.

linuxfan
()

ИМХО, Си и С++ сейчас стали стандартом и их необходимо учить и знать! Да Питон, да Java, да .NET, никто не спорит, что языки хороши и удобны для МЕЛКИХ и не требующий большого быстродействия задач. Все же системные вещи писались, пишутся и будут писатьсся преимущественно на Си. Ну, естественно, местами и на асме и С++. Достаточно взять в пример само ядро линуха, кеды,... Основное преимкщество С/С++ - это то, что программист полностью понимает, как что будет устроено в его программе на низком уровне, что ИМХО, необходимо для разработки нормальной архитектуры, а также для приемлимой реализации каждой из функций в отдельности. А функциональные языки (Питон, лисп, хаскель), безусловно, удобны для узкоспециализированных программ, например для математических/физических рассчётов, да и даже в них все time-critical вещи пишутся на сиподобных языках. Также, стоит отметить, что та же жаба, тот же С#, питон ничего принципиально нового в С_++ не добавляют, а лишь урезают его возможномсти, поэтому они и более легки в изучении, но накладывают много ограничений на программиста, которые далеко не всегда разумны. Конечно, можно возразить, ведь, например в ту же жабу добавили сборщик мусора и сделали все массивы динамическими. С одной стороны это удобно, но с другой стороны программист лишается возможности самостоятельно управлять памятью, а ведь очень часто это необходимо. Ну и естественно, по себе знаю, что и жаба, и питон, и С# и все томуподобные языки после С++ изучаются за 2-3 дня (ну за неделю уж точно), но если с них начинать, то потом очень сложно постигнуть С++. Так что делайте свой выбор))

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

> Все же системные вещи... Достаточно взять в пример само ядро линуха, кеды

системные кеды такие системные

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

> тот же С#, питон ничего принципиально нового в С_++ не добавляют, а лишь урезают его возможномсти, поэтому они и более легки в изучении, но накладывают много ограничений на программиста, которые далеко не всегда разумны

бугага. где в си++ удодбные pattern matching, high-order-functions, list comprehansion, lazy evaluations, multimethods, closures, lambda-functions, ADT, continuations, macros, metaclasses.

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

вот это я понимаю - вброс

>Си и С++ сейчас стали стандартом

в '89 и '98 годах соответственно. C повторно ещё в '99

>функциональные языки (Питон, лисп, хаскель)

походу карма у меня быть питонщиком, ну что такое

>та же жаба, тот же С#, питон ничего принципиально нового в С_++ не добавляют

все слышали? не добавляют. и всё, и баста

>накладывают много ограничений на программиста, которые далеко не всегда разумны

bondage programming же!

>Ну и естественно, по себе знаю, что и жаба, и питон, и С# и все томуподобные языки после С++ изучаются за 2-3 дня (ну за неделю уж точно)

не, если по себе - ты уж точно говори,- 2-3 дня или неделя, неделя или 2-3 дня. тут тебе не здесь, мы тут все серьёзные люди!

>делайте свой выбор))

да, господа, делайте свой выбор! :)

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

>ID: 56666

>Nick: the_best_goose

6

66

666

6666

кто больше?

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

> Ну и естественно, по себе знаю, что и жаба, и питон, и С# и все томуподобные языки после С++ изучаются за 2-3 дня (ну за неделю уж точно)

C++ ты тоже за 2-3 дня/неделю "выучил", похоже? 8))

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

>Ложь.

нет. под дебиан ленни и sbcl: полный экран в ООо роняет вм, gmplayer при попытке перетащить окно падает, evince, если отрывать файл через гкт диалог для выбора файла из окна с открытым документом, то это намертво завешивает хоткеи вм до закрытия окна, флоатинг режим не доделан, даже ресайза окон нет. и это только за пару дней использования.

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

>системные кеды такие системные

Системные имелось ввиду скорее серьёзные и большие проекты.

>бугага. где в си++ удодбные pattern matching, high-order-functions, list comprehansion, lazy evaluations, multimethods, closures, lambda-functions, ADT, continuations, macros, metaclasses.

Что-то из перечисленных вещей входит в boost, что-то появится в С++0х, а это уже скоро. Многое из перечисленного в языке уже присутствует, но, удобство - понятие относительное.

>все слышали? не добавляют. и всё, и баста

Ничего ПРИНЦИПИАЛЬНО новго не добавляют. Приведите пример чего-либо, например, в жабе, чего нельзя реализовать на С++ удобными методами.

>не, если по себе - ты уж точно говори,- 2-3 дня или неделя, неделя или 2-3 дня. тут тебе не здесь, мы тут все серьёзные люди!

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

>C++ ты тоже за 2-3 дня/неделю "выучил", похоже? 8))

С++ был моим первым языком программирования, поэтому сложно сказать, сколько времени я его изучал. Формально больше 2-х лет, но это с учётом библиотек, без которых С++ не полон (boost, AspectC, MPICH...), а также методик построения архитектуры и написания программ в целом. МОжет быть я не совсем корректно выразился. Переформулирую главную мысль так: главное - понимание культуры программирования, знания основных методик и принципов, понимание их предназначения и логики и не принципиально, на примере какого языка ты будешь их осваивать. Но, по-моему, С++ здесь очень удобен, так как на нём (с учётом расширений) можно реализовать и понять очень много концепций, без которых не жить программисту. (Ну и опять самый банальный пример. Вы же согласитесь, что если человек начал прогать на языке, где не надо руками управлять памятью, то ему потом будет очень тяжко учится это делать.) Кстати, полезно также представлять себе, как конструкции языка будут выражаться на асме, ведь это способствует полному пониманию собственного кода.

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

> нет. под дебиан ленни и sbcl: полный экран в ООо роняет вм, gmplayer при попытке перетащить окно падает, evince, если отрывать файл через гкт диалог для выбора файла из окна с открытым документом, то это намертво завешивает хоткеи вм до закрытия окна, флоатинг режим не доделан, даже ресайза окон нет. и это только за пару дней использования.

x86-64, StumpWM git, SBCL 1.0.30, Fedora 9/10/11 - полёт нормальный. OOo, mplayer пользую.

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

>>bind/function - это слёзы крестофилов по поводу отсутствия в языке функций, как объектов.

> ...которые нужны только, если нам захотелось операций навроде map, reduce, получения новых функций путем композиции существующих.

Ты уже не раз это говорил, так что я отвечу. Подумай о таких вещах, например, как:

g(t)=integral( 0, 1, f(x,t) )

или еще лучше

g(t)=min(integral(0,1,f(x,y,t)))

(понятно, что это не С, но идея ясна). Подумай, почему на С наивный подход double integral( double a, double b, double f(double) ) проваливается и тогда может быть поймешь, что и в С нужны лямбды, не только в плюсах.

А то, что в твоих быдлозадачах такое не нужно, еще не повод делать глобальный вывод.

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

> Ничего ПРИНЦИПИАЛЬНО новго не добавляют. Приведите пример чего-либо, например, в жабе, чего нельзя реализовать на С++ удобными методами.

Ну да все полные по тьюрингу языки - одинаковые :), плавали - знаем. Только предоставляют различный уровень выразительности. У Си++ - этот уровень крайне невысокий, потому что в нем до этого перечисленных средств, а если даже есть, пользоваться ими крайне затруднительно. Сам язык излишне сложен, а выразительных средств - 0 на палке. ООП - недоделанный (нет мультиметодов, не полностью объективный), метапрограммирование, точнее пародия на него через ужасные темплейты, система типов убогая донельзя (алгебраическими типами даже и не пахнет), и так и далее.

> ADT, макросы, метаклассы

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

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

>>bind/function - это слёзы крестофилов по поводу отсутствия в языке функций, как объектов.

> ...которые нужны только, если нам захотелось операций навроде map, reduce, получения новых функций путем композиции существующих.

Без лямбд приходится лепить void* например в

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);

и не только.

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

> Ничего ПРИНЦИПИАЛЬНО новго не добавляют. Приведите пример чего-либо, например, в жабе, чего нельзя реализовать на С++ удобными методами.

В плюсах слишком хрупкие шаблоны. Точную формулировку пока не дам, сории.

С другой стороны, попробуй в яве написать T max(T a, T b) в виде шаблона, и при этом остатьтся typesafe и *не* требовать компаратора третьим аргументом.

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

>Что-то из перечисленных вещей входит в boost, что-то появится в С++0х, а это уже скоро. Многое из перечисленного в языке уже присутствует, но, удобство - понятие относительное.

>pattern matching

нет в boost, нет в C++0x

>high-order-functions

есть в boost в виде boost.function, в случае нарушения концепта есть риск получить рулон нечитаемых ошибок. поскольку сайд-эффекты не контролируются, использование ФВП чревато неожиданностями

>list comprehansion

нет в boost, нет в C++0x

>lazy evaluations

нет в boost, нет в C++0x. может быть реализовано (как, например, в Blitz++, емнип), но требует несколько, гм, sophisticated подхода

>multimethods

нет в boost, нет в C++0x (выбросили из драфта за излишней сложностью)

>closures

нет в boost, нет в C++0x (и не будет, поскольку без GC, который тоже выбросили из драфта, реализация затруднительна)

>lambda-functions

в boost есть в виде boost.lambda - с кучей ограничений; обещают в C++0x

>ADT

нет в boost, нет в C++0x. можно использовать внешние библиотеки, вроде Felix или Prop,- но это будет уже не C++

>continuations

нет в boost, нет в C++0x - хотя что-то отдалённо похожее есть в POSIX C

>macros

полноценных макр нет ни в boost, ни в C++0x. лучшее, что есть - boost.preprocessor, и он вызывает содырыгания. легче применять внешние средства кодогенерации, чем пользоваться тем, что есть в C++

>metaclasses

нет в boost, нет в C++0x. и никогда не будет

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

>Приведите пример чего-либо, например, в жабе, чего нельзя реализовать на С++ удобными методами

залёный поток? сериализацию потока? сериализацию процесса? код решения удобными методами на C++ в студию!

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

нет, не соглашусь. особенно если потом ему придётся работать с существенно разными моделями этой самой памяти

>выражаться на асме

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

впрочем, что касается понимания архитектуры, гм, ЭВМ, то тут я полностью согласен. вот только какое отношение это имеет в C++ - непонятно

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

>в С нужны лямбды, не только в плюсах

а вот на C с лямбдами я бы посмотрел, да. хотеть!

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

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

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

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

>closures нет в boost, нет в C++0x (и не будет, поскольку без GC, который тоже выбросили из драфта, реализация затруднительна)

не вижу прямой связи с GC, может объянишь?

имхо вполне возможно сделать замыкания в духе плюсовой семантики копирования/перемещения... только вот С++0х может для этого и не хватить.

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

>не вижу прямой связи с GC, может объянишь?

http://zabivator.livejournal.com/213178.html?thread=3076026#t3076026

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

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

не откажусь от proof of concept :)

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

> [...] та же жаба, тот же С#, питон ничего принципиально нового в С_++ не добавляют [...]

Зачем им что-то добавлять. Они сами по себе :)

Наличие GC меняет очень многое. Например, есть возможность использовать совершенно другие алгоритмы, которые было бы трудно реализовать на обычном C++. Это уже другой стиль мышления.

Видимо, у тебя просто не хватает опыта.

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

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

Куча народа начинала с ZX-бейсика, и ничаво.

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

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

Именно поэтому никогда не надо учить С++ одним из первых языков.

Правильной последовательностью будет что-то вроде:

Pascal (благо учится легко и быстро, забывается так же. Но именно оригинальный виртовский паскакаль, не надо никаких объектных расширений и прочей ереси) -> C -> какая-нибудь высокая функциональщина типа хаскелля -> какой-нибудь вменяемый ОО язык -> и вот только теперь C++

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

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

>Подумай, почему на С наивный подход double integral( double a, double b, double f(double) ) проваливается и тогда может быть поймешь, что и в С нужны лямбды, не только в плюсах.

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

>А то, что в твоих быдлозадачах такое не нужно

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

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

>Без лямбд приходится лепить void* например в

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

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

>>pattern matching

>нет в boost, нет в C++0x

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

>>high-order-functions

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

>>list comprehansion

template тебе в руки и сконструируешь.

>>multimethods

Я так и не дождался ни одного примера, где это реально необходимо. Классификация коллизий космического мусора не канает.

>>closures, lambda-functions

Одно без другого бесполезно. Скрепя сердце, придется действовать по старинке, зато эффективно.

>>ADT

Что, по петону соскучился?

>>continuations

Их нет даже в великом Common Lisp. В общем и целом, и без них неплохо живется.

>>macros

То, что есть, очень часто позволяет избежать операции copy'n'paste. Жить можно.

>>metaclasses

Я опять задам идиотский вопрос: "А зачем?"

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

>особенно если потом ему придётся работать с существенно разными моделями этой самой памяти

Это с какими же? Оперативная память со свойством склероза чтоли?

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

Хм, значит ты не осилил асм и затаил злобу на всех, кто овладел этим чудным инструментом. Давай, доставай свою лопату и иди мочить авторов ffmpeg и x264. Только учти, я буду с пулеметом на другой стороне и буду безжалостен к любителям скриптовых недоязыков.

>впрочем, что касается понимания архитектуры, гм, ЭВМ, то тут я полностью согласен

Что-то ты сам себе противоречишь: буквально недавно ты утверждал, что память бывает разная, а тут вдруг заговорил об архитектуре ЭВМ, знание которой позволяет разве что школьный экзамен по информатике сдать.

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

> Дарагой друх, а что такое есть частичная специализация шаблонов как не паттерн-матчинг?

Это что угодно, только не паттерн-матчинг.

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

бугага, а как ты generic алгоритмы пишешь? или копи-паста наш друг, товарищ и брат?

> template тебе в руки и сконструируешь.

нет.

> Я так и не дождался ни одного примера, где это реально необходимо. Классификация коллизий космического мусора не канает.

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

> Что, по петону соскучился?

Дурачок, ты знаешь, что такое ADT?

> Их нет даже в великом Common Lisp. В общем и целом, и без них неплохо живется.

они там даже есть :) в виде, - о боже, библиотеки ;) cl-cont

> То, что есть, очень часто позволяет избежать операции copy'n'paste. Жить можно.

И что очень облегчает рефакторинг.

> Я задам идиотский вопрос: "А зачем?"

Для создания кастомных классов и разных ООП моделей, вестимо.

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

>Я так и не дождался ни одного примера, где это реально необходимо. Классификация коллизий космического мусора не канает.

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

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

>>>high-order-functions

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

То, что без них живут люди это понятно, но вот что-бы нигде не нужны - это неправда.

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

>Это что угодно, только не паттерн-матчинг.

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

>бугага, а как ты generic алгоритмы пишешь? или копи-паста наш друг, товарищ и брат?

template<typename DataT>const DataT& min(const DataT &v1, const DataT &v2)

На этом разговор с тобой окончен, пухлик.

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

>Ты сконструировал? %)

Был бы боле функциональным программированием головного мозга, сконструировал бы, а так не нужно.

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

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

А можно понизить градус абстрактности, а то как-то не воспримается?

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

>Доо...

Я понимаю, что для тебя сама мысль о том, что find может быть вызван без аргумента :key, является дикой, но так бывает.

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

> Паттерн-матчинг в чистом виде, только во время компиляции, а не в рантайме как у мультиметодов.

Да что ты говоришь :) ты видимо вообще не понимаешь, что это такое.

> template<typename DataT>const DataT& min(const DataT &v1, const DataT &v2)

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

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

> Я понимаю, что для тебя сама мысль о том, что find может быть вызван без аргумента :key, является дикой

Я понимаю, ты привык разговаривать с вображаемыми друзьями, но поверь - это является диким.

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