Очевидно, что Lisp является преимуществом для ИИ , но мне не кажется, что Lisp немного быстрее, чем Java, C # или даже C. Я не владелец Lisp, но мне невероятно трудно понять преимущество можно было бы написать при написании программного обеспечения для бизнеса на Лиспе.
И все же это считается языком хакера.
Почему Пол Грэм защищает Лисп? Почему ITA Software выбрала Lisp среди других языков высокого уровня? Какое значение это имеет по сравнению с этими языками?
Ответы:
Есть несколько причин, по которым я работаю над освоением Common Lisp.
Возможно, единственная реальная причина выбора против Common Lisp состоит в том, что стандартные библиотеки устарели.
Я выйду на передний план и скажу, что в общем случае синтаксис не должен быть проблемой для профессионального программиста.
источник
Мне нравится Лисп за его
Программирование - это боевая сложность. Абстракции - единственный эффективный инструмент для борьбы со все возрастающей сложностью (с нашим очень ограниченным и постоянным размером черепа). Управлять абстракциями с помощью Lisp - все равно что иметь джина с n + 1 желанием.
источник
(+ 1 n)
желаниями или даже лучшей практичностью(incf n)
?Я считаю, что правильный ответ на Лисп более гномичен. Что-то вроде: «Если вам нужно спросить, вы не готовы».
Тогда, если кто-то задает вопросы дальше, правильный ответ - «да», если это вопрос или « или », или «Вы не готовы».
источник
Я думаю, что преимущество Lisp в области искусственного интеллекта (ИИ), которое все упоминают, является исторической случайностью ... Lisp начал для / в AI, но это язык общего назначения.
Я полагаю, что скорость выполнения - не единственный важный аспект языка (хотя я сделал это однажды). Тем не менее, один из аспектов, которые мне нравятся в Lisp, заключается в том, что для меня он объединяет Python и C в одном. Я могу сразу и очень быстро начать кодировать без объявлений и прототипов ( для этого очень важны среда выполнения и REPL ). После того, как у меня что-то работает, я добавляю объявления типов и постепенно «оптимизирую» свой код. Удивительно нажимать клавишу в SLIME и смотреть машинный язык, сгенерированный для интересующей меня функции. В Python нет объявлений типов, поэтому я не могу получить большую скорость, но в C быстрое выполнение чего-либо - это гораздо болезненнее Лисп очень полезен в этом случае.
Сказав это, я люблю Лисп в основном из-за макросов . Когда вы, наконец, поймете, чего могут достичь макросы, я думаю, вы с легкостью смиритесь с скобками. Кроме того, редакторы, такие как Emacs, сами управляют скобками, поэтому вам не нужно. Я признаю, однако, что я не нашел в скобках ничего такого плохого в начале, и я знаю, что некоторые люди просто не могут их терпеть. Но поскольку основная цель макросов - генерировать код во время компиляции, код на Лиспе использует стандартную структуру данных, а круглые скобки просто представляют код в виде списков, что необходимо для упрощения написания макросов.
Я не знаю другого языка, на котором вы могли бы писать небольшие подъязыки, чтобы лучше описать вашу проблему с помощью Лисп. Это то преимущество, о котором говорит Пол Грэм в « Обыгрывании средних» . Это предельная модульность и лаконичность. В Java я должен написать много необработанного текста, чтобы выразить одну идею. В Лиспе я мог написать несколько макросов, которые генерируют этот код автоматически, а потом просто использовать их. Во всяком случае, вы должны понять некоторые примеры этого, а затем судить сами. Когда я «увидел» это, я был поражен, и я все еще думаю, что Лисп - лучший язык только по этой причине. Я всегда ищу макросы в основных языках, чтобы увидеть, соответствуют ли они мощности макросов Lisp, но на сегодняшний день я не нашел ни одного. Четвертая близкая секунда.
Я закончу с парой критических замечаний, касающихся программного обеспечения для бизнеса:
Деловому программному обеспечению нужны библиотеки, и хорошие, и Лисп не хорош в этом. Обычно они мне не нужны, но когда мне это нужно, мне приходится выбирать из небольшого выбора неполного программного обеспечения, которое используют несколько человек. Я должен внести свой вклад, чтобы исправить это, я думаю ...
Деловое программное обеспечение обычно создается большими группами людей, и я думаю, что общение может быть затруднено с помощью макросов, поскольку они в основном меняют язык. Многим программистам удобнее обнаруживать определенные шаблоны в коде, даже если текст программы длиннее и повторяется. Я предполагаю, что в ITA у них есть некоторые правила, касающиеся макросов, или у них есть огромная библиотека макросов, которая облегчает совместную работу (или, проще говоря, все программисты являются экспертами в Lisp).
источник
Мне не нравится Лисп.
(Мне действительно нравятся многие из концепций, которые он использует, как он делает мощные методы доступными изначально и так далее.
Но я никогда не был убежден в том, чтобы на самом деле использовать его ((хотя несколько человек пытались ), потому что преимущества языка могут быть достигнуты с другими языками программирования (некоторые напрямую, некоторые косвенно), поэтому не хватает преимуществ чтобы заставить меня тратить время на изучение и мириться с ужасным синтаксисом.)))
Но да, по причинам, которые нравятся некоторым людям, проверьте эти вопросы переполнения стека:
Наверное, есть еще несколько вопросов, связанных с ними.
источник
Я буду интерпретировать «Лисп» как « Общий Лисп »; Я не сомневаюсь, что другие ответы скажут " Схема ". (Подсказка: Лисп это семья языков.)
Что значит «быстрее»? С точки зрения времени, необходимого для запуска теста, нет, он не быстрее, чем C ( но это может быть ).
«Быстро» с точки зрения того, сколько времени потребуется Джо Рэндом Хакеру, чтобы написать работающую программу или исправить ошибку в большой программной системе? Почти наверняка.
Что касается этого хакера, я использую его, потому что я хочу писать код, а не шаблон. Я хочу написать что-то один раз , а не постоянно повторяться. И я хочу взаимодействовать с программой, пока я пишу ее.
источник
M-x eval-region
(илиeval-buffer
), но это все.C-j
(что морально эквивалентно вводу), и она вступит в силу немедленно.Мне нравится Лисп, потому что это отличная среда для выражения моих мыслей. Предикат для моего любимого языка: «Если бы я мог выбрать что-нибудь для выражения идей, что бы это было?». В настоящее время это Lisp * ( конкретная схема ), и я пишу в нем заметки по программированию. Как и в реале , бумага и ручка заметки. Даже когда я думаю о программах, мне нужно реализовать их на PHP, Ruby или Python.
Это не уловка, которой я учил себя, или что-то, что я делаю для надежности ботаника (в любом случае никто не видит внутри моего блокнота); просто для меня Lisp гораздо более естественен, чем любая из альтернатив, и любой язык, который резонирует с вами и глубоко ценит вас.
* Как сноска, Хаскелл довольно быстро сокращает разрыв, когда я узнаю больше о нем.
источник
Проблема в силе. Мощность = Работа (функциональность программы) / Время
Постройте некую кривую между C ++ и Java. Продолжайте, и в какой-то момент вдоль линии вы найдете Лисп.
источник
Пол Грэм как бы сам отвечает на этот вопрос в книге «Чем отличается Лисп» .
Имейте в виду, что он использовал его для своего стартапа в середине 1990-х годов, поэтому Python и Ruby не были действительно зрелыми (или, возможно, даже не родились).
В основном, Lisp обладает всеми преимуществами динамических языков, и я думаю, что для большинства современных веб-приложений Python и Ruby довольно хороши, и у них есть преимущество фреймворков, документации и динамичных сообществ.
Особенностью убийцы, вероятно, является то, что вся программа состоит из выражений. Это означает, что вы можете передавать блоки кода функциям (или макросам ...), потому что блок кода является не чем иным, как выражением.
Python точно не имеет этой функции; вам нужно определить функции и передать их. В Ruby, похоже, есть блоки, возможно, он несколько ограничен по сравнению с тем, что может делать Lisp (я не уверен).
источник
В прошлом у меня была коленная реакция на Схему , но теперь я готов дать Лиспу (на самом деле Clojure ) шанс.
Видите ли, за эти годы я выбрал немного языков, таких как Java, C #, C ++, Python, и все больше не вызывает проблем.
У Clojure много обещаний, он выглядит очень чистым и может решить многие реальные проблемы. Ярким аргументом в пользу чистого языка, такого как Clojure, является появление многоядерных компьютеров.
Yay LISP!
РЕДАКТИРОВАТЬ: ITA Software была основана выпускниками MIT, и Scheme / Lisp был единственным языком, который изучали многие выпускники MIT. Чтобы быть справедливым, можно использовать горячую замену алгоритмов Lisp на работающей производственной системе, что является огромным плюсом.
источник
INTERCAL
. Вызов не единственный критерий; он также должен уметь быстро решать реальные проблемы. По крайней мере, Haskell используется и любим многими.PLEASE
?Что мне нравится в Лиспе, так это то, что он выходит за рамки парадигм. Некоторые люди скажут, что Lisp функционален, другие скажут, что он декларативный, а другие скажут, что это мультипарадигма. Я думаю, что все они упускают суть. Когда вы используете Lisp, парадигма больше не является ограничением.
Хотите объекты? Вы можете иметь их. Хотите функциональное программирование? Ты можешь иметь это. Хотите Пролог -Style логического программирования? Напишите несколько макросов. Хотите декларативное программирование в стиле SQL? Действуй. Хотите использовать какую-то парадигму, которая еще не была изобретена? Я уверен, что это можно сделать в Лиспе.
Помимо Forth- подобных языков, мне еще предстоит увидеть другой язык, предлагающий такой уровень гибкости.
источник
«Быстрее» не просто измерить - это действительно зависит от того, какой аспект вы сравниваете. В зависимости от задачи и реализации Lisp, скорости могут приближаться к C. Посмотрите на Великий сравнительный тестовый перестрелку, чтобы погрузиться в детали. Реализация Lisp в SBCL наравне с Java 6 Server и значительно быстрее, чем Ruby или Python.
Но чистая скорость - не главная причина выбора языка программирования - если бы это было так, мы бы все еще программировали на ассемблере , верно? Для меня ежедневная радость Lisp заключается в том, что код компилируется, но мне не нужно закрывать приложение, перекомпилировать все, а затем начинать работать с нуля. Вместо этого я могу изменить одну функцию, и это изменение вступит в силу везде, и я сразу же смогу увидеть эффект в своем приложении. Более того, этот очень быстрый подход «пиши, тестируй, пиши больше, тестируй больше» значительно упрощает немедленное тестирование во время написания кода (а затем вы можете превратить эти интерактивные тесты в модульные тесты позже).
Представьте себе, что вы пишете электронную почту, где после каждой строки вам нужно было нажать кнопку, чтобы скомпилировать вывод электронной почты на экран, прежде чем продолжить свою мысль. Это то, что я пишу на Java или другом подобном языке. Иногда есть причина сделать это, и мне нравится Java, но Lisp более отзывчив, и легче выполнять работу.
источник
Я изучаю Lisp ( newLisp ) по нескольким причинам.
Причина первая: Lisp заставляет меня думать иначе, что делает меня лучшим Ruby-кодером.
Кажется очень неловким делать что-то определенным образом в Лиспе, например, вложенные итерации для просмотра нескольких списков. Так что это заставляет меня использовать другие вещи, как
map
. У моего любимого языка, Ruby, есть тот же метод карт, но я не всегда использую его, потому что он незнаком: я научился делать вещи, используя плохую технику, и когда язык поддерживает эту технику, я продолжаю использовать ее.Причина вторая: Lisp практичен и имеет хорошие современные библиотеки.
Для newLisp есть очень приятный и легкий веб-фреймворк, называемый dragonfly . Это позволяет мне использовать код newLisp вместо PHP для некоторых задач. Я не очень люблю PHP, и newLisp кажется более увлекательным для этой конкретной задачи, чем Ruby.
Причина третья: Lisp синтаксически и концептуально согласован.
Для меня это большая разница между Ruby и Python, согласованность.
источник
Можете ли вы сказать «лояльность к бренду»?
Я начал в Фортране. Я люблю это.
Я перешел на Лисп. Сначала я ненавидел это. Тогда я научился любить его и ненавидеть Фортран.
Позже Паскаль, C, C ++, различные ассемблеры, C #. (На самом деле я не люблю C #.)
Я думаю, я ненадежен?
источник
Когда был создан Lisp, они начали с математики, а не с компьютерных наук (которых на самом деле еще не было). И команда Lisp поняла некоторые вещи действительно правильно. У Лиспа была сборка мусора в 1960 году или около того! Они действительно проделали отличную работу.
Я думаю, что песня The Eternal Flame охватывает ее.
источник
Большая ничья - это сообщество. С момента изобретения языка Lisp привлекал самых амбициозных и ярких разработчиков. Везде, где исследователи пытаются решить проблемы, которые никогда не были решены, вы, вероятно, найдете Лисп, например, в исследованиях искусственного интеллекта (ИИ), компьютерном зрении, планировании, представлении знаний и сложной эвристической оптимизации. Язык поддается решению проблем как снизу вверх, так и сверху вниз одновременно, что, похоже, помогает в решении самых сложных задач.
Расширяемый синтаксис с помощью макросов означает, что редко требуется расширять определение языка. Многое из того, что потребует расширения языка в более ограниченном языке, - это просто макрос с Лиспом. Таким образом, программисты на Лиспе могут свободно использовать заново изобретенные концепции языка без нового языкового стандарта и без необходимости реального снижения скорости. На базовом уровне, запечатывание стандартного кода становится ненужным из-за небольших расширений. Совершенно новые идеи в потоке управления, такие как унификация в стиле Prolog, реализуются эффективно и компактно в качестве расширений.
Система ООП, CLOS , находится в своем классе с точки зрения гибкости. Очень сложно вернуться к зачаточному C ++ / Java / C # OOP после того, как почувствуешь вкус. Шаблоны дизайна GoF 5 становятся ненужными, поскольку они могут быть выражены просто и прямо.
У языка не было единого корпоративного владельца и единой окончательной реализации, хотя он имеет стандарт ANSI со многими соответствующими реализациями. Крупные новые реализации появляются каждые десять лет, а старые все еще довольно активны. Специалисты могут планировать использовать свои специализированные знания еще долго. Это действительно вызывает некоторое анархистское трение и фрагментацию сообщества, но это также означает, что ковер не может быть вырван, и язык не может стать умирающим по корпоративным или проектным политическим причинам. Всегда есть несколько коммерческих реализаций и реализация с открытым исходным кодом. Те, кто больше ориентирован на производительность, регулярно сравнивают с 2-кратным коэффициентом самых быстрых, хорошо финансируемых императивных языковых реализаций.
Ахиллесова пята ранней коммерциализации Lisp - это занимаемая памятью область, в которой учитывались как функции безопасности типов языка, так и расширенные среды разработки программного обеспечения, которые они включали, с невероятными функциями, такими как полная онлайн-документация, включая графику. Машина Symbolics Lisp объемом 64 МБ оказалась недешевой по сравнению с рабочей станцией Sun объемом 8 МБ. Сегодня цены на оперативную память упали, и существует огромный интерес к языкам Lisp, особенно с учетом того, что основные языки Java, C #, PHP сегодня продвинулись лишь минимально по сравнению с языками 30 лет назад.
В настоящее время есть современные языки, конкурирующие с Lisp за умную совместную работу с интеллектуальными разработчиками: Python, Lua , Erlang , Haskell и OCaml . Но ни один из них не предлагает такое же сочетание зрелости, адаптивности, множественных реализаций, соответствующих стандартам, и скорости.
источник
Я на самом деле не делаю Лисп. Но место, где я работаю, имеет конечные элементы с миллионами линий, в основном из Фортрана. Парень, которого я больше всего уважаю в вычислительных ресурсах ( вычислительная гидродинамика кодов ), считает, что идеальная комбинация - это Lisp снаружи (в основном потому, что вы избегаете беспорядочных проблем с управлением памятью) и Fortran для алгоритмов низкого уровня (Fortran лучше всего подходит для эксплуатации). векторные возможности SSE / AVX , и мы считаем, что это лидерство вряд ли будет закрыто).
источник