LINUX.ORG.RU

Python деградирует?

 ,


1

1

Вылез я из криокамеры и вот, что обнаружил — из Python 3.x удаляют все, что является «сложным» (вопрос для кого?). Один из примеров — метод reduce().

Как пишет Гвидо:

I’m not killing reduce() because I hate functional programming;

I’m killing it because almost all code using reduce() is less readable

than the same thing written out using a for loop and an accumulator variable.

Иными словами — повышаем читаемость, чтобы очередному «индусу» даже знать не нужно было про функциональное программирование?

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

Там тоже есть свои системы билдинга, а софт развеян по сети; да, есть проблемы с назначением у языка - но это всё-таки не какой-нить руби, теорем прувинг для МЛ всегда будет жизненной полянкой. Вон руби вообще ожил только с приходом РоРа.

sanaris
()

удаляют все, что является «сложным»

берут пример с убунты.

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

В общем, все ML предоставляют в качестве вариантов извлечения, шелл. Который можно сделать шеллом, запускаемым при входе в ОС.

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

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

Да не, я не троллю. Вообще редко бываю в инете:)

sanaris
()

on topic

Обсуждение ушло от читаемости к мощности. Возвращаясь к теме, следует признать, что в большинстве случаев из реальной жизни и в питоновском синтаксисе reduce менее читабелен, чем аналогичный цикл. Сие продиктовано 1. синтаксисом, заточеным в известную сторону 2. преобладанием тривиальных задач, при решении которых мощные средства не дают существенного преимущества.

А если бы у питона был бы заточенный под функциональщину синтаксис, ситуация была бы другой, но это был бы уже не питон.

DonkeyHot ★★★★★
()
Ответ на: on topic от DonkeyHot

Наглое 4.2 же. Примеры можно в студию.

Ну хорошо, сумму кажется может подсчитать и вовсе функцией sum. Или max. А если более специфическую функцию? Чем reduce плох? В случае цикла надо заводить дополнительную переменную.

И, кстати, reduce проще распараллелить (только я сомневаюсь, что интерпретатор питона это делает).

Хотя лямбды в питоне тоже громоздкие, нужно писать lambda x,y: x+y, тогда как в некоторых других ЯП (не буду показывать пальцем) можно прямо таки «_+_». Иногда набирает каждый раз набирать это слово lambda :)

а ещё иногда хочется назвать переменную словом lambda (например, если это из физической формулы, где есть такая буква), а нельзя - специальная форма...

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

reduce проще распараллелить

Его вообщем нельзя распараллелить, вы спутали с map. Дело в том что элемент типа А, аккумулятор типа В (так как можно указать initializer). Если даже нельзя, то подразумевается что все вычисляется слева направо по списку.

А вот специальная функция для параллелизма может существовать. В ней нужно указать инициализатор, который бы правильно работал для любого куска, функцию B->A->B - для работы на куске и функцию B->B->B для комбинирования кусков.

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

И какие же широко распостраненные программы есть на МЛ и Хаскель?

Факториал и числа Фибоначчи.

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

Нет, свинья, без ленивости, на Педоне.

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

Его вообщем нельзя распараллелить, вы спутали с map

Каюсь, виноват. Не перепутал. Можно распараллелить, если операция коммутативная (то есть если порядок не имеет значения), то есть не всегда.

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

на sml написан sml/nj например.

Это отсылка к старой шутке «Основное применение ML - это написание компиляторов ML»?

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

Ну, если HOL - широко распространенная программа %)

Достаточно широко, почти все производители серьезного железа ее используют (Intel, IBM, ARM, ...)

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

Зачем тогда было вообще новый ЯП городить?

Я тоже этого не могу понять.

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

Чем reduce плох

reduce не плох. Особенности питонского синтаксиса делают его менее читаемым, чем могло бы быть и чем for. В твоём примере «reduce(operаtor.__plus__,данные)» выглядит не сильно лучше «for i in данные: s+=i» и это один из лучших случаев для reduce. Будь там более сложная ф-я, пришлось бы писать что-то типа:

def ненужноеИмя():
  много строк

результат=reduce(ненужноеИмя,данные)
#против
результат=что-то
for i in данные:
  много строк


В первом случае, при том же смысле,  мусора больше. Естественно, если ты хочешь написать что-то многоэтажное, цикл внутрь вставится с бОльшим трудом, чем reduce. Но многоэтажные выражения всегда читаются трудно, и редко нужны при решении тривиальных(коих >=95% в общей популяции) задач, т.ч. выигрыш сомнителен и редок.
DonkeyHot ★★★★★
()
Ответ на: Чем reduce плох от DonkeyHot

Это пример на то, что гвидово неосиляторство анонимных функций ведёт к использованию цыклов там, где это ненужно?

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

Достаточно широко, почти все производители серьезного железа ее используют (Intel, IBM, ARM, ...)

И зачем они используют HOL?
Можно, кстати, пруфлинки привести.

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

В общем-то, я хотел запросить пруфы, что Intel, ARM и IBM действительно используют Isabelle/HOL для чего-то кроме как писания в публикациях «мы доказали эту лемму с Isabelle, читайте подробности в technical report на сайте.»

metar ★★★
()
Ответ на: Чем reduce плох от DonkeyHot

мсье не знает про ключевое слово lambda? и никаких «ненужных имён»

конечно в контексте динамического языка вроде питона про «опасность» изменяемых переменных говорить смешно (неизменяемых констант в питоне по ходу вообще нет, ну или я не нашёл, переприсвоить можно всё что угодно)

А так я предпочту сделать вызов reduce, чем создавать переменную-аккумулятор в нормальном ЯП.

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

ключевое слово lambda?

Так будет ещё хуже. Мы же помним, что разговор про более-менее сложные ф-ии. В отсутствии всяких комбинаторов читабельность питонской лямбды не лучше -1.1Np.

Остальное без ответа, т.к. это таки да, но вопрос-то о читаемости в питонском синтаксисе.

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

пример на то, что гвидово неосиляторство анонимных функций ведёт к использованию цыклов

Точнее, решения, принятые Гвидо ранее. «теперь из этой колеи не выбраться».

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

HOL у них в больших количествах присутствует в системах сборки из RTL, так что это не просто экспериментальные разработки каких-то мутных подразделений, это официальная часть процесса. Пруфов не дам. Инсайд.

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

Про google никогда не слышал? Удобная штука.

Спасибо, уже из ответа tailgunner заметил, что я в конец упоролся и не способен первую ссылку в выдаче посмотреть (грустный смайлик).

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