А что еще никто не написал? Или опять на лиспе так не пишут?
На лиспе пишут, но по-другому. Если плюсовику надо построить дом с окнами, а язык не позволяет сделать это одним махом, то он строит дом, потом выламывает отверстия в стенах, вставляет рамы и стеклит. Пишет отчёт на хабре о количестве использованных паттернов. На лиспе тоже нельзя одним махом построить дом с окнами, поэтому лиспер меняет язык, чтобы стало можно. И потом, почесав бороду, ещё чтобы и ров с водой одновременно выкапывался и трёхметровый забор возводился. А то шарятся тут всякие, окна бьют. Идёт пить пиво с другими бородатыми корешами, где ему объясняют, что настоящий лиспер вместо рва с забором делает так, чтобы при попадении кирпичём в окно время отматывалось немного обратно, и окно перед самым ударом сдвигалось в сторону, а потом возвращалось на место.
Касаемо твоей проблемы: ты ещё подумай, что раз функции не принадлежат классам, то в какую ситуацию ты можешь попасть, если два класса экспортируют функцию с одним именем, но с разными сигнатурами?
Вроде обычная ситуация определем класс в одном пакете, а используем в других.
У тебя сейчас подход: «Мне надо - я и делаю.». В лиспе правильно будет: «Мне надо, пусть он делает.»
Если плюсовику или джависту надо разработать систему, он собирает требования, пишет ТЗ (или нанимает аналитика), проектирует, моделирует, дизайнит, разрабатывает, тестирует, внедряет систему, получает деньги.
Лиспер же вместо этого брызжет слюной на форуме, не скупясь на сравнения, про то, какие плюсовики/жабщики быдлокодеры, про то, что им недоступна Священная Суть Лиспа™, про то, что на лиспе МОЖНОЗДЕЛОТЬ. Потом идёт обсуждать с бородатыми корешами анафорические лямбды и пандоричиские захваты. Работа, деньги? Зачем? Лисперу это не нужно. Ведь у него есть лисп.
Чувак, ты уверен, что тут есть хоть какая-то зависимость от языка? МГе кажется, что брызгатели слюной могут писать и на джаве, а профессиональные разработчики могут выбрать лисп для какой-то задачи. Не?
Если чисто по логике — то да, зависимости от языка быть не должно. Но практика показывает обратное. Джавщики обычно спокойный и адекватный народец, а вот лисперы в основном буйные неадекваты. Я даже не знаю, это лисп изначально привлекает нестабильных личностей, или он настолько сильно расшатывает психику адептов.
Я определил обычный template <typename T> struct Tree тут — нода типа T и два указателя влево и вправо. Дальше, выше по теме было про то что при передаче такой Tree<T> по значению в функцию она будет копироваться побитно (нода и два указателя), либо так как предполагает конструктор копирования. Можно ли подмешать в Tree<T> несколько конструкторов копирования с возможностью выбора между ними при передаче в функции по значению — один будет делать то же что и дефолтный, другой будет копировать всё дерево рекурсивно? Если использовать traits, то есть по Александресковски и по «стратегии» вообще, то можно поднять два таких наследника — TreeI<T, DeepCopy> и TreeI<T, ShallowCopy> — делаем static_cast в один из них и кидаем в void f(TreeI<T, CopyStrategy> tr) по значению — та или иная стратегия копирования будет выбираться в зависимости от CopyStrategy == DeepCopy или CopyStrategy == ShallowCopy. В стандартной библиотеке много такого кода (тот же char_traits).
Лиспер же вместо этого брызжет слюной на форуме, не скупясь на сравнения, про то, какие плюсовики/жабщики быдлокодеры, про то, что им недоступна Священная Суть Лиспа™, про то, что на лиспе МОЖНОЗДЕЛОТЬ. Потом идёт обсуждать с бородатыми корешами анафорические лямбды и пандоричиские захваты.
А что ему остаётся ещё делать, если он уже получил деньги, а плюсовик или джавист всё ещё проектируют?
Работа, деньги? Зачем? Лисперу это не нужно. Ведь у него есть лисп.
... несут из топика в топик анонимные плюсовики и джависты, с завистью глядя на прохлаждающихся лисперов, у которых уже всё давно сделано и продано.
Что-то я не допонял. Конструктор копий должен быть один. Хочешь разные - делай методы. Ты же усложнил на ровном месте. По умолчанию для С++ логично реализовать глубинное копирование дерева. И сделать метод для «поверхностного»(хотя я бы не стал). Сорри, если я влез не разобравшись, у меня какая-то мания пьяным на лор ходить - трезвым и не появляюсь почти.
А что ему остаётся ещё делать, если он уже получил деньги, а плюсовик или джавист всё ещё проектируют?
Сказки пошли. Единственный язык, который дает подобные преимущества на некотором классе задач - пролог. Но они сейчас в еще более унылом состоянии, чем лиспы. Ну и в принципе на питоне можно решить не сильно медленнее. У лиспа же нет никаких преимуществ - обычный язык.
Но ведь это влажные лисперские фантазии. Успешно сделанный и проданный лисп-проект только один - QPX от ITA Software. И успех его - не благодаря лиспу, а вопреки.
А в это время сотни тысяч успешных проектов разрабатываются на «мейнстримных» языках. Все эти проекты работают в физике, химии, медицине, энергетике, аэрокосмосе, инженерии, телекоме, оборонке, логистике, банкинге, финансах. И лиспом там даже не пахнет. Успех лиспа и безоговорочная победа, ничего не скажешь!
Если только о светлом и прекрасном будущем. Я писал на лиспе за деньги, и авторитетно заявляю, что это просто отличный инженерный язык: код пишется легко, баги ловятся на раз, развесистая байда развивается наживую без проблем. Согласись, что «я на лиспе зарабатывал, и поэтому...» звучит авторитетней, чем: «я на лиспе не только не писал, но даже его толком не знаю, и поэтому...»?
Но ведь это влажные лисперские фантазии. Успешно сделанный и проданный лисп-проект только один - QPX от ITA Software. И успех его - не благодаря лиспу, а вопреки.
Таки благодаря. К ним потянулись толковые люди, когда узнали, что они софт на лиспе пишут. Из разговора с иташниками, кстати.
Я писал на лиспе за деньги, и авторитетно заявляю, что это просто отличный инженерный язык: код пишется легко, баги ловятся на раз, развесистая байда развивается наживую без проблем.
Я писал на Java+Scala за деньги, и авторитетно заявляю, что это просто отличный инженерный язык: код пишется легко, баги ловятся на раз, развесистая байда развивается наживую без проблем. А ты просто не осилил эти языки. И?
Я писал на лиспе за деньги, и авторитетно заявляю, что это просто отличный инженерный язык: код пишется легко, баги ловятся на раз, развесистая байда развивается наживую без проблем.
Я могу сказать тоже самое про С++, C#, Java и Python. Ну и как писал выше, про пролог(если бы он совсем не скатился - я писал еще в конце 90х кажется или не сильно позднее, на 5ом vip'е, если понимаешь, о чем я). Нет у лиспа преимуществ перед мейнстримом.
Ну так я в Java подсуну свой classloader - изменится поведение оператора new. Навешу аннотацию - изменится поведение сеттера. Переопределю методы интерфейса Iterator - изменится поведение конструкции for. И?
Он такой же, в принципе. Но в сочетании с маргинальностью смотрится гораздо хуже. Мейнстримность языка означает не только кучу быдлокодеров, но и наличие хороших и поддерживаемых библиотек, развитие стандартов/спецификаций, возможность применения в относительно новых технологиях(возьми тот же андроид - ява была из коробки, NDK для си и плюсов тоже добавили), хорошую и актуальную литературу, активные сообщества, большое количество проектов, в том числе и открытых, большую кодовую базу и пр. и пр.
Ну, это если из основных. А так вообще: скорость, синтаксис (на любителя), потенциальная возможность (и готовые реализации) вводить в язык с помощью библиотек / dsl изначально не заложенную в него функциональность, декларация типов, tro, коммерческие реализации итд итп.