LINUX.ORG.RU

[Python][Функциональщина] Медленный не пайтон, а функциональщина

 


0

0

Разгребаю код на пайтоне, джанго. Писал один интересный человек, который верил в функциональщину. Почти тру лиспотролль.
Что хочу сказать. Его функциональные фишки отжирают овер 90% времени обработки запроса и рендера.
Оптимизировал самое очевидное и получил не хилый профит.
Опыт кодинга на C и D помог не мало.
Пайтон не медленный(а даже если и медленный, то не так уж как говорят), его замедляют люди, юзающие функциональщину без раздумий о том что «находится за сценой».
Когда код, в котором 7 раз создаются новые лиспы с помощью генераторов и вызывается 5+N раз конструкторы, можно написать не менее элегантно не используя принципы и функционал функциональщины.
Вообще, конечно, важно умение использовать инструменты, но с функциональщиной оно наиболее опасно и менее всего очевидно. Увы.
Вот такой вот возгляд с другой стороны на вашу функицональщину. А я пошёл спать.


Ответ на: комментарий от SV0L0CH

>Разница только в том что на inline я могу получить указатель и использовать в дальнецшем, а на макрос нет.
Научите как это сделать, очень нужно. ^)

Booster ★★
()
Ответ на: комментарий от Booster

>>Разница только в том что на inline я могу получить указатель и использовать в дальнецшем, а на макрос нет.

Научите как это сделать, очень нужно. ^)

А разве реализации языка такое не позволяют? (сам таким не пользовался)

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

>А разве реализации языка такое не позволяют? (сам таким не пользовался)
А как вы представляете inline и указатель не него?

Booster ★★
()
Ответ на: комментарий от archimag

>Но при желании можно добиться такого же эффекта с помощью последовательного вызова eval для каждого элемента списка параметров AND.

И вызов будет выглядеть как (AND '(arg1 arg2 .. argn))?

linuxfan
()
Ответ на: комментарий от SV0L0CH

>>> неотличимость в синтаксисе вызаовов функций от подстановок макросов, собственно как и в C/C++

еще один повод пользоваться нормальными IDE с нормальной подсветкой


А можно список таких IDE?


emacs, vim, drScheme.

naryl ★★★★★
()
Ответ на: комментарий от Booster

> А как вы представляете inline и указатель не него?

http://paste.lisp.org/display/93783
f1 - inline функция.
pointer - «указатель» на неё.
f2 - функция с успешно заinlineеным вызовом f1.

naryl ★★★★★
()
Ответ на: комментарий от archimag

> Не понятно, как трактовать данное утверждение. В реализации SBCL все возможности языка используются по полной, ведь для его компиляции уже нужно иметь полноценный Common Lisp.

Ну да, в этом смысле, что можно написать свой лисп на лиспе :) Сижу вот и думаю, наверное, defmacro как-то жестко связан с потрохами compile-file, load и eval. Полностью подменить эту конструкцию чем-то своим не получится. Еще думаю, что как-нибудь надо будет взяться мне за чтение On Lisp.

dave ★★★★★
()
Ответ на: комментарий от SV0L0CH

> Если бы это было C/C++ то такую задачу тоже можно было бы решить через макросы, а можно и через inline. Разница только в том что на inline я могу получить указатель и использовать в дальнецшем, а на макрос нет.

Ты что-то путаешь. У них только название общее с CL-ными макросами.

dave ★★★★★
()
Ответ на: комментарий от SV0L0CH

> Речь о том что eval и макросы это средсва создания костылей и они вполне взаимозаменяемы.

Опять ты про «костыли»? LINQ - это костыль?

anonymous
()
Ответ на: комментарий от archimag

>основным инструментом для создания лексических переменных является let

лямбда лист.

Ключевой вопрос: какова природа лексического биндинга.

Это не вопрос - в конце предложения отсутствует вопросительный знак. нужно

(f1 (f2 (f3)))

f1 создаёт лексические биндинги. f2 - форма, которая генерируется макросом и создает контекст для вычисления f3, f2 макросом определена в другом месте и нечего не знает о f1. уже из «природы лексического биндинга» видно, что eval в f2 на f3 изменит окружение f3, и прямым аналогом макросов не является. это же всё в любом тутоариле о лиспе описано.

ничего подобного я не говорил.

вынос eval на уровень вверх - это оно и есть. абстракция разрушена.

anonymous
()
Ответ на: комментарий от anonymous

>LINQ - это костыль?

Судя по тому что написано в википедии, таки костыль.

PS только не надо говорить «костыль» как будто это чтото плохое. Костыли это всё что не KISS.

SV0L0CH
()
Ответ на: комментарий от SV0L0CH

>Костыли это всё что не KISS.

Дооо... KISS - это километровые простыни на фоксе. Что «проще» - 100 строк кода, содержащих 100 лексем, или 1000 строк кода, содержащих 10 лексем?

Для меня - первое =)

yyk ★★★★★
()
Ответ на: комментарий от yyk

>KISS - это километровые простыни на фоксе. Что «проще» - 100 строк кода, содержащих 100 лексем, или 1000 строк кода, содержащих 10 лексем?

Всётаки как хорошо что я не знаю фокса :)

SV0L0CH
()
Ответ на: комментарий от tailgunner

>20 лет назад не было FoxPro :) Только FoxBase.

да, виноват - за давностью лет всё псмешалось

yyk ★★★★★
()
Ответ на: комментарий от yyk

>Остался как страшилка для детей =)

Причем буквально. У меня несколько лет назад работа заключалась в адаптации древних бухучетовских легаси к visual foxpro. Но зато какие цветные и фантасмагоричные сны были после трудового дня..

volh ★★
()
Ответ на: комментарий от volh

А старшие коллеги пугали легендой о Черном ДБА. Вот бы ее целиком вспомнить, эх.

volh ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.