чем python лучше чем lisp
Лисп или Питон
питон же
лисп чудесен и хорош, да только привязок к гуйни у него вроде кроме страшного tk и древнего gtk нету и не будет никогда
Python, конечно. Вообще он для таких задач подходит очень хорошо.
Думаю python, так как Qt, моё мнение.
Лисп 1.5 тебе сейчас врядли пригодится. Учи лучше Common Lisp
Боюсь, оно не очень подойдёт в категорию «для легких поделок» =)
>быстро делать мелкие поделки, небольшая гуйня, работа с субд типа скулайта, мускула, постгреса.
> Боюсь, оно не очень подойдёт в категорию «для легких поделок» =)
Как раз таки для легких поделок clojure просто идеальна.
Common Lisp. Это круто. +20 к элитности, и сможешь троллить на ЛОРе вайтспейс-быдлокодеров.
Ага, подумаешь, для работы нужна всего-навсего jvm.
вот вот, вот оно такое комьюнити лиспа
есть привязки к gtk, tk, qt, motif, wxwidgets, clim
работа с субд типа скулайта, мускула, постгреса.
> Ага, подумаешь, для работы нужна всего-навсего jvm.
мм, а в чем проблема?
> вот вот, вот оно такое комьюнити лиспа
Кхм. Во-первых, я скорее из комьюнити Питона; во-вторых, это была шутка.
>лисперы унылые снобы, а питонисты тебе все подскажут (если что я про местное комьюнити рашкоговорящее)
если ты видел/работал с bash/c/pascal/c++/java etc то наименьшее удивление у тебя вызовет скорее всего питон
Python vs Lisp. Расстановка точек
а теперь докажите, что лисп не тормознутое УГ
феерическая расстановка точек над лиспом?
Какой ужас! Вы хотите новую тему на несколько тысяч комментариев?
Что ж ты тормозной такой питон используешь, надо cpython или unladden swallow. Тогда лисп еще смешнее покажется.
На сколько помню, там модули входящие в сам питоновский скрипт компилируются в байткод. Это наверное может дать +% к выполнению скрипта?
> а теперь докажите, что лисп не тормознутое УГ
Ну вы даете. такой кривой код, да еще и на одном из самых медленных лиспов. Сейчас проведу бенчмарк и отпишусь.
На Питоне пример даёт
На моей машине SBCL решает эту задачу примерно в 20 раз быстрее, чем Python
А пыхапэ смотрит на вас на на Г
На моей машине (с теми же файлами, без изменений): [code=bash] dvk@localhost
real 0m31.934s user 0m29.036s sys 0m0.047s dvk@localhost
SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. ; loading system definition from ; /usr/share/common-lisp/systems/asdf-binary-locations.asd into ; #
; registering # as ; ASDF-BINARY-LOCATIONS
; in: LAMBDA NIL ; (SETQ R 0) ; ; caught WARNING: ; undefined variable: R ; ; compilation unit finished ; Undefined variable: ; R ; caught 1 WARNING condition 39 real 1m16.391s user 1m16.010s sys 0m0.176s [/code]
С минимальными изменениями, обеспечивающими корректность программы (r надо объявлять локальной переменной, это ж надо додуматься до использования UB в программе):
SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. ; loading system definition from ; /usr/share/common-lisp/systems/asdf-binary-locations.asd into ; #
; registering # as ; ASDF-BINARY-LOCATIONS 39 real 0m8.747s user 0m8.659s sys 0m0.060s [/code]
Теперь немного «подсластим» код: [code=bash] dvk@localhost
SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. ; loading system definition from ; /usr/share/common-lisp/systems/asdf-binary-locations.asd into ; #
; registering # as ; ASDF-BINARY-LOCATIONS 39 real 0m6.549s user 0m6.286s sys 0m0.061s [/code]
Дальше оптимизировать просто лень.
test2.lisp: [code=lisp] (defun test () (let ((r 0)) (dotimes (i 10000 r) (dotimes (j 10000 r) (setf r (mod (+ r (mod (* i j) 100)) 47)))) r)) (write (test)) [/code]
test3.lisp: [code=lisp] (defun test () (declare (optimize (speed 3) (debug 0) (safety 0))) (let ((r 0)) (declare (type fixnum r)) (dotimes (i 10000 r) (declare (type fixnum i)) (dotimes (j 10000 r) (declare (type fixnum j)) (setf r (mod (+ r (mod (* i j) 100)) 47)))) r)) (write (test)) [/code]
На моей машине (с теми же файлами, без изменений):
С минимальными изменениями, обеспечивающими корректность программы (r надо объявлять локальной переменной, это ж надо додуматься до использования UB в программе):
Lisp vs Python-статическая компиляция
Почему Lisp со всеми его динамическими функциями может быть статически скомпилирован, но Python не может (без потери всех своих динамических функций)?
4 ответов
нет ничего, что мешает статической компиляции Python. Это немного менее эффективно, потому что Python показывает более изменяемую локальную область, также, чтобы сохранить некоторые динамические свойства (например, eval), вам нужно включить компилятор с скомпилированной программой, но ничто не мешает этому тоже.
тем не менее, исследования показывают, что большинство программ Python, в то время как динамические при статическом анализе, довольно статичны и мономорфны во время выполнения. Это означает, что подходы к компиляции JIT во время выполнения работа намного лучше на программах Python. См.unladen-swallow, PyPy, Psyco для подходов, которые компилируют Python в машинный код. Но также IronPython и Jython, которые используют виртуальные машины, первоначально предназначенные для статических языков для компиляции Python в machinecode.
вы также можете использовать такой инструмент, как py2exe для компиляции программы Python в исполняемый файл.
на самом деле нет ничего, что мешает вам статически компилировать программу Python, просто до сих пор никто не написал такой компилятор (я лично считаю, что среда выполнения Python очень проста по сравнению с CL).
вы можете сказать, что разница заключается в деталях, таких как «сколько времени было потрачено на написание компиляторов и имеет ли язык формальную спецификацию того, как писать».
давайте рассмотрим эти моменты:
Что касается возможности-Python использует довольно простую структуру для работы с символами и т. д., а именно его словари. Вы можете рассматривать их как таблицу символов программы. Вы можете пометить типы данных, чтобы распознать примитивные и получить остальные на основе сохраненных имен и внутренняя структура. остальная часть языка также довольно проста. Единственный бит отсутствует фактическая работа по его реализации и заставить его работать правильно.
Python может быть «скомпилирован», где компиляция рассматривается как перевод с одного полного языка Тьюринга (исходный код) на другой (объектный код). Однако в Lisp объектом является сборка, что теоретически возможно с Python (доказано), но не возможно.
истинная причина менее уплощение. Lisp во многих отношениях революционный язык, который впервые в своих диалектах много функций на языках программирования, к которым мы привыкли сегодня. В шепелявит однако они просто «следовать» логическим основам языка. Язык, который вдохновлен необработанными выразительными способностями lisps, такими как JavaScript, Ruby, Perl и Python, обязательно интерпретируется, потому что получить эти функции на языке с «Алгол-подобным синтаксисом» просто сложно.
Lisp получает эти функции от «homo-iconic» нет существенной разницы между программой lisp и структурой данных lisp. Программы Lisp-это структуры данных, они структурные описания программы в таком s-выражении, если хотите, поэтому скомпилированная программа lisp эффективно «интерпретирует себя» без необходимости лексера и всего этого, программа lisp может рассматриваться как ручной ввод дерева синтаксического анализа. Что требует синтаксиса, с которым многие люди считают контр-интуитивным для работы, поэтому было много попыток перенести необработанную выразительную силу парадигмы на более читаемый синтаксис, что означает, что он неосуществим, но не невозможно, скомпилировать его к сборке.
кроме того, компиляция Python в сборку, возможно, будет медленнее и больше, чем «половина интерпретации» на виртуальной машине, многие функции в python зависят от синтаксического анализа.
выше, хотя написано огромным поклонником lisp, имейте в виду этот конфликт интересов.
Python и другие языки программирования: сходство и отличия
Хочешь знать больше о Python?
Подпишись на наш канал о Python в Telegram!
Гвидо ван Россум, создатель высокоуровневого языка программирования Python, написал в статью, в которой кратко очертил сходство и различие своего детища и других интерпретируемых языков. Статья была написана им еще в 1997 году, поэтому он заранее предупреждает о вероятных изменениях и публикует свою статью «Comparing Python to Other Languages» на сайте python.org «скорее в качестве исторического артефакта».
Говоря о преимуществах и недостатках языков, Гвидо рассуждает о языках как таковых, не затрагивая важные жизненные моменты вроде стоимости и доступности, сложности обучения и первоначальных вложений. А ведь именно эти вещи плюс эмоциональная привязанность влияют на выбор языка программистами.
Предполагается, что программы, написанные на Python, в целом работают медленнее, чем программы на Java, но при этом их разработка занимает гораздо меньше времени.
Программы на Python обычно в 3-5 раз короче, чем их аналоги на Java. Эта разница может быть приписана встроенным в Python на высоком уровне типов данных и их динамической типизации.
Например, программист, пишущий на Python, не тратит время на объявление типов аргументов или переменных, а многочисленные виды полиморфных списков и словарей, синтаксическая поддержка которых встроена в сам язык, находят применение практически в каждой программе на Python.
Из-за динамической типизации выполнение программы на Python идет тяжелее, чем в случае с Java. Например, вычисляя выражение a+b, программа должна сначала определить тип объектов a и b, ведь он неизвестен при компилляции. Затем она запрашивает подходящую операцию сложения, которая может быть перезагружена методом, определенным пользователем.
Java, в свою очередь, может осуществлять эффективное сложение целых чисел или чисел с плавающей запятой, но требует декларирования переменных a и b и не позволяет перезагрузку оператора +, например, определенными пользователем классами.
Исходя из этого, Python гораздо лучше подходит в качестве интегрирующего языка, в то время как Java скорее характеризуется как язык низкоуровневого исполнения. По факту, вместе они представляют собой прекрасную комбинацию. Компоненты могут разрабатываться на Java и комбинироваться для формирования приложения в Python. Python также может быть использован для прототипирования компонентов, пока их модель не будет закреплена в реализации на Java.
JavaScript
Частично Python совпадает JavaScript, преимущественно в том, что касается объектов. Как и в случае с JS, создание программ на Python предполагает использование простых функций и переменных, не занимаясь определениями классов. JS на этом и останавливается. Что же касается Python, он позволяет писать гораздо более крупные программы и повторно использовать код. Для этого он задействует объекто-ориентированный стиль программирования, где велика роль классов и наследования.
Python и Perl происходят из скриптов Unix. У них много сходных черт, но философия различна.
Perl делает упор на поддержку общих задач с ориентацией на приложение. Например, в Perl есть встроенные регулярные выражения и функционал для сканирования файлов и генерации отчетов. Python в большей степени поддерживает общие методологии, например структурирование данных и объектно-ориентированное программирование.
Предоставляя программистам элегантную и не чрезмерно запутанную систему обозначений, Python побуждает их писать код, легкий для чтения (и таким образом для обслуживания тоже).
Несмотря на близость этих двух языков, они не конкурируют друг с другом. Perl имеет явное преимущество на «своей территории» — в приложениях. А Python находит применение далеко за пределами ниши Perl.
Как и Python, TcL используется как язык для расширения приложений, а также как самостоятельный язык программирования. Тем не менее, типовой код на Python выполняется гораздо быстрее, чем на TcL. Это связано с тем, что последний обычно сохраняет данные в строках и не силен в структурировании данных. Кроме того, TcL не хватает функционала для создания больших программ, такого как модульные пространства имен.
В «типовых» больших приложениях на TcL обычно можно найти расширения на C или C++ (для них это характерно). Но аналогичные приложения можно создать с использованием одного только Python. Конечно, такая разработка гораздо выгоднее по времени, ведь нет необходимости возиться с частями на C или C++.
Считается, что подкупающая черта TcL – инструмент Tk. Python перенял его интерфейс в качестве своей стандартной библиотеки GUI-компонентов.
Восьмая версия TcL решает проблему скорости оснащением байт-код компиллятором с ограниченной поддержкой типов данных и добавлением пространств имен. Но против TcL по-прежнему говорит его громоздкость.
Smalltalk
Возможно, самая большая разница между Python и Smalltalk заключается в более «распространенном» синтаксисе Python, который является значительным подспорьем при обучении программированию. Как и у Smalltalk, в Python типизация и связывание осуществляются динамически, а всё в Python является объектом. Но Python различает встроенные типы объектов и классы, определяемые пользователем, и зачастую не разрешает наследование от объектов встроенного типа.
Стандартная библиотека типов данных в Smalltalk более «рафинирована», в то время как библиотека Python имеет лучшие возможности для взаимодействия с Интернет- и www- реалиями, такими как email, HTML, FTP.
Python имеет отличия в философии касательно разработки окружения и распространения кода. Там где Smalltalk имеет монолитный «образ системы», который включает в себя как окружение, так и пользовательскую программу, Python хранит оба стандартных модуля в отдельных файлах, которые легко могут быть изменены или вынесены за пределы системы. Одним из последствий этого является существование более чем одной опции для приложения графического интерфейса пользователя (GUI) к программе на Python, поскольку GUI не встроен в систему.
Почти все сказанное о Java относится также и к C++, но с оговоркой: если код на Python в 3-5 раз короче, чем его эквивалент на Java, то в случае с С++ он короче в 5-10 раз! Не связанные между собой случайные примеры свидетельствуют, что один программист на Python может сделать за два месяца то, что два программиста на С++ не могут завершить за год.
Python великолепен в качестве языка интегрирования, когда используется для сборки компонентов, написанных на С++.
Common Lisp и Scheme
Эти языки близки к Python своей динамической семантикой, но настолько различаются своим подходом к синтаксису, что их сравнение превращается почти в религиозный спор: является ли скудость синтаксиса Lisp преимуществом или недостатком? Следует заметить, что Python имеет интроспективную совместимость подобную к аналогичной у Lisp, а программы на Python могут конструировать и исполнять элементы программ на лету.
Обычно практичность является решающим фактором: Common Lisp большой (во всех смыслах), а мир Scheme разделяется на множество несовместимых версий, тогда как Python имеет единую, свободную, компактную реализацию.
Lisp vs Python
Difference Between Lisp vs Python
The following article provides an outline for Lisp vs Python. An interpreted, object-oriented, and high-level programming language with dynamic semantics is called Python programming language and the second high-level programming language created by John McCarthy is called Lisp programming language. Symbolic computation is very much easier in the Lisp Programming language when compared to the Python programming language. Domain-specific languages are trivial in Lisp when compared to a python programming language. Lisp programming language’s performance is better when compared to Python programming language, and writing macros in Lisp programming language is easier than in Python programming language.
Head to Head Comparison Between Lisp vs Python (Infographics)
Below are the top 18 differences between Lisp vs Python:
Web development, programming languages, Software testing & others
Key Difference
Let us discuss some of the major key differences between Lisp vs Python:
Lisp vs Python Comparison Table
Let’s discuss the top comparison between Lisp vs Python:
Python Programming Language
Lisp Programming Language | |
Symbolic computation is easy in the Lisp Programming language. | Symbolic computation is difficult in the Python Programming language. |
Symbolic computation is natural in the Lisp Programming language. | Symbolic computation is artificial in Lisp Programming language. |
A domain-specific language is trivial in Lisp Programming language. | Domain-specific language takes a longer time in Python Programming language. |
Lisp programming language provides good performance when compared to Python programming language. | The performance of the Python programming language is less when compared to the Lisp programming language. |
There are macros in the Lisp Programming language. | There are no macros in the Python programming language. |
Own syntaxes can be written in Lisp Programming language. | Pre-defined syntaxes must be used in the Python Programming language. |
There are no limitations on using only the pre available features in Lisp Programming language. | Since only pre-defined syntaxes can be used, using only the available features is a limitation in the Python programming language. |
Lisp Programming language is a customizable language. | Python Programming language is non-customizable. |
Multiline anonymous functions are present in the Lisp Programming language. | Multiline anonymous functions are not present in the Python Programming language. |
Metaprogramming is better in the Lisp Programming language when compared to the Python Programming language. | Python Programming language is not suitable for metaprogramming in Lisp Programming language. |
Lisp programming language can only be written in EMacs Integrated Development Environment. | Python Programming language can be written in several integrated Development Environment. |
There is flexibility in the Lisp programming language to run only a part of the function that consists of error and not the entire program in case the program consists of error. | The entire program must be compiled and run in Python programming language to fix the error in case the program consists of an error. |
No testing or no continuous integration is required in the Lisp Programming language. | Testing and integration are required in the Python Programming language. |
There are no predefined patterns in the Lisp Programming language. | There are predefined patterns in the Python Programming language. |
Processing is slower in the Lisp Programming language when compared to the Python programming language. | Processing is faster in Python programming language when compared to Lisp Programming language. |
Lisp Programming language is not preferred much to work on Artificial Intelligence. | Python programming language is much preferred to work on Artificial Intelligence. |
There is no community or support for Lisp Programming language users. | There is a community to provide support to Python programming language users. |
Several other programming languages adopt the lisp programming language. | Python programming language is an orphan language. |
Recommended Articles
This is a guide to Lisp vs Python. Here we discuss Lisp vs Python key differences with infographics and comparison table, respectively. You may also have a look at the following articles to learn more –
All in One Software Development Bundle (600+ Courses, 50+ projects)