Pull to refresh
3
Павел Добряк@pauldobriak

User

1
Subscribers
Send message

Мне очень хочется своей библиотекой подтолкнуть процесс развития языка пайтона. Пока я не думал о быстродействии, а хотел убедиться, что в принципе можно соединить три вида декларативного программирования вместе, сделать рекурсивные запросы, добавить логическое программирование. И главное при этом остаться в рамках обычных пайтоновских операторов. Я был счастлив, когда у меня получилось! А вот далее трудная и долгая работа - то ли делать низкоуровневую реализацию с привлечением С++, набирая коллектив разработчиков. То ли как-то пиарить библиотеку, показывая всем - смотрите, какая забавная языковая игрушка получилась! Так сделайте то же самое в штатных библиотеках. Я рад, что вам понравилась моя разработка!

Для изменения поведения языковых конструкций пайтона я не использовал никаких хакерских способов, а писал библиотеку исключительно на самом же пайтоне с использованием ООП (перегрузки операторов), декораторов и лямбды. Кроме того, поведение операторов не "съехало в сторону", а расширилось. То есть по-прежнему квадратные скобки можно использовать также, как и раньше, а при желании - кучей других способов. Но я согласен с вами, что с моей библиотекой пайтон стал уже не совсем пайтоном. Произошла эволюция языка. Поэтому стоит обсуждать, насколько это уместно, красиво и полезно. На мой взгляд, то, что я сделал, вполне соответствует духу пайтона. В мультипарадигменный язык встроились три новых стиля, проверенных временем. Тем более что один из них в некоторой форме уже присутствует в нумпай. Я обошелся без новых операторов и каких-либо тяжеловесных языковых конструкций. Рекурсивные запросы в прологовском стиле очень элегантны. Ну и рекурсии в запросах - это серьезное достижение.

Представьте, я замучился студентам объяснять разницу между каррингом и частичным применением функции! Когда-то делал её на С# - там разница в коде - буквально в пару пустых скобок. Кстати, автор книги "C# для профессионалов", кажется, не делает разницы между этими приемами программирования. На Python теперь рассказываю о частичном применении функции и карринге на разных лекциях.

Я подумаю, как можно поменять терминологию, прочитав SICP. Это, действительно, классика. Там правда LISP. Я его когда-то немного преподавал и сейчас, по правде говоря, вспоминаю как страшный сон. Например, карринг на Lisp и карринг на C# или Python для студенческого восприятия - это совершенно разные вещи. Насчет терминологии - это вообще большая проблема. Что, например, выбрать в качестве терминологии - кортежи или факты? В одном случае обидятся поклонники Prolog, в другом - SQL. А если эти языки назвать dsl, то обидятся и те и другие. Причем обзовут меня дилетантом, сказав, что их языки полные по Тьюрингу, и на них можно написать любой алгоритм. Из терминологических неточностей даже в самом пайтоне, например, большая проблема, как перевести list comprehension. Генератор списков? А если генерируется множество или словарь? И как тогда различить с конструкцией yield? В общем, с единой терминологией - проблема. Но со своей стороны, обязуюсь не порождать дополнительную путаницу.

В том-то и дело, что это - декларативное программирование! Когда я познакомился с этой языковой конструкцией, я тоже думал, что это просто синтаксический сахар - короткая удобная запись в одну строчку. И так её почти все и воспринимают - это совершенно нормально. Очень уж она не похожа на SQL. Но сделаем мысленную замену на аналогичные операторы: if заменим на where, in на from, а for на select - и вы получите код, очень похожий на SQL

Спасибо за поправки к датам. Я торопился и искал их в гугл. Возможно, он мне неверно даты посоветовал. В 1979 началась разработка «C with Classes» Бьярном Страуструпом. В 1983 язык получает название С++. Что касается Си и С++. Структуры Си - это уже начало объектного-ориентированного программирования, но изначально наследования между структурами не было. Так что это ООП в урезанном виде. Добавление в Си классов порождает новый язык - С++. Считать ли его совсем новым? Знаю людей, которые писали код Си, но на С++.

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

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

Information

Rating
Does not participate
Registered
Activity

Specialization

Разработчик игр, Разработчик приложений
Ведущий
Python
SQL
C++