All streams
Search
Write a publication
Pull to refresh
227
0
Илья Струков @iley

Программист

Send message
dynamic a = random.Next(10) < 5? new A(): new B();
Интересно, не знал о таком. А диспетчеризацию сразу по нескольким параметрам можно сделать?
В C# от него отказались в силу идеологии(оно вносит неочевидность в объектную модель). В питоне оно есть, в С++ тоже. В любом случае явно не экслюзивное преимущество лиспа.
Никто же не говорил, что множественное наследование — это уникальная фишка лиспа. Дело в том, что в лиспе одновременно сочетаются многие интересные возможности. Скажем, множественное наследование в Питоне есть, а вот мультиметодов и макросов нет. А в C++ нет многого другого.
Это является большой головной болью в С
Вот только не надо в одну кучу совать макросы C и лиспа. Это совершенно разные вещи.
Понять откуда взялось такое поведение и как один кусок превращается в другой в большом проекте с макросами зачастую очень сложно.
Эта проблема порождается не макросами самими по себе, а плохим дизайном в принципе. Скажем, точно так же можно реализовать неудачные функции или классы и при их использовании непонятно будет, откуда взялось такое поведение. Что же, надо поэтому от функций и классов отказаться?
Рестарт же спорен потому, что как правило возникновение исключения означает, что есть какая-то проблема в данной точке вычленения программы, причем она не предусмотрена разработчиком.
Рестарты не надо рассматривать исключительно как механизм обработки ошибок. Это обобщённый способ передачи сигналов, и не стоит о нём судить только на основе вашего опыта работы с исключениями в других языках. Есть примеры удачного применения рестартов, можете посмотреть в том же Practical Common Lisp.
Топик — это в оригинале письмо из рассылки busybox, и David Collier — просто автор предыдущего письма.
В хаб поместил и тег добавил, спасибо, что указали на это. В интерфейсе хабра действительно не очень заметно выделяются переводы.
Мне кажется, аналогия с самого начала была не вполне удачной, а тут мы уж совсем уклонились от темы.

Я не большой знаток иностранных языков, но вот по поводу лиспа вполне определённо могу сказать, что на его примере хорошо изучать концепции, которые применяются повсеместно. Примером тому может служить хотя бы знаменитый курс Structure and Interpretation of Computer Programs, который на примере диалекта лиспа преподносит студентам многие важные идеи, которые лежат в основе программирования.
Примеры можно найти в том же Practical Common Lisp (ссылка есть выше), там для иллюстрации работы с макросами автор рассматривает построение нескольких DSL. Очень рекомендую эту книгу, она построена как раз на практических примерах и довольно хорошо освещает ключевые моменты языка.

Есть ещё замечательная On Lisp, но она рассчитана на читателя, уже знакомого с языком. В качестве примеров добавления в язык нового функционала там приводится реализация целого логического языка программирования на макросах (к слову, вся реализация занимает около 200 строк, если я не путаю). Там же рассматривается реализация континуаций (continuation), это интересный механизм, который я вообще кроме диалектов лиспа ни в одном языке не встречал.
Вы не вполне правы. Например, в широкоиспользуемых языках нет маросов, мультиметодов, системы сигналов и ничего даже близко похожего на MOP. И эти вещи действительно меняют подход к программированию.

Если вам нужны конкретные примеры, то с лиспом очень хорошо изучать построение DSL-ей, функциональное программирование, можно совершенно с другого ракурса увидеть ООП. Да что там говорить, даже разные способы применения рекурсии многие люди толком не понимают, пока не познакомятся с лиспом, я это сам неоднократно видел.
На всякий случай напомню, что это перевод. Я и настоящий автор письма — разные люди.
Увы, такие проблемы действительно есть. Грустно это признавать, но сообщество у лиспа сейчас сравнительно небольшое и не очень активное, оттого и стандарт не обновляется и с библиотеками бывают проблемы.

Тем не менее, язык явно не стоит закапывать, надо развивать по мере сил и надеяться на лучшее :)
Из известных проектов, использующих лисп, с ходу могу вспомнить AutoCAD и Maxima. Если говорить про все диалекты лиспа, то в последнее время особенно активно развивается Clojure. Много появляется новых проектов на нём, например Storm от твиттера или Datomic.

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

Интересующиеся могут обратиться за подробностями, например, к Practical Common Lisp, благо есть перевод, или к какой-нибудь ещё книге.
Не слышал, чтобы кто-то специальным образом биндил клавиши для лиспа. Быстро привыкаешь к такому синтаксису и перестаёшь замечать какие-либо неудобства. К тому же, при нужном подходе код на лиспе получается очень кратким и руки устают куда меньше, чем с некоторыми другими языками.
Чем пользуется автор — не знаю, можете у него спросить, на сайте есть контактная информация. Сам я из подобных систем знаю только Jekyll
А что не так с сайтом, чего там не хватает? Можно, конечно, и покрасивее было оформить, но я бы не сказал, что сайт сейчас «убогое г***».
Смена дизайна, архитектурты и еще чего нить, означает очень большой геморой или не?
Никто же не говорит, что страницы надо полностью вручную писать. Можно генерировать статические страницы при помощи специального движка так же, как обычно генерируются динамические.
читатель у которого замедляется на 0,01 секунды время генерации и загрузки страницы
Тут вы правы, в крайности впадать не надо, и лишать пользователя удобства ради доли секунды — это не круто. Основная мысль статьи по-моему не в том, что надо сразу все кнопки убрать, а в том, что добавляя каждую подобную фишку, надо задуматься. А то получится как на многих современных сайтах — на странице тысяча свистелок и каждая замедляет на долю секунды, и в итоге всё тормозит.
На мой взгляд, автор немного перегибает палку, но общая мысль очень правильная.
Всё верно, каждый должен заниматься своим делом. Вот автор и объясняет, почему он счёл одно дело для себя более подходящим, чем другое, и сменил профессию.
Когда мне понадобилось решить эту же задачу, я использовал открытую библиотеку ArUco. Качество и скорость распознования были вполне приемлимы для той задачи (игра с доп. реальностью для iPhone).
Похоже, там и нет floating point operations.
Это полные исходники, из которых можно собрать работающую прошивку, или, как в случае с предыдущими киндлами, просто набор отдельных компонентов (и так изначально открытых), которые были использованы? Сдаётся мне, что второе.
Большое спасибо за интересный пост. Очень интересно было бы почитать про поступление.

Information

Rating
Does not participate
Location
Dublin, Dublin, Ирландия
Date of birth
Registered
Activity