LINUX.ORG.RU
Ответ на: комментарий от Legioner

> от этого по мере сил и возможностей избавляться, проводить сложный анализ, т.е. исскуственно типизировать. Имхо это значительно сложнее.

Тем CPython питон и хорош, что устроен на редкость просто, в его сорцах разберётся любой студент. А вот разберёшься ли ты в сорцах gcc или ghc или быдло-jvm? Сила питона - в простоте, удивительно, что до сих пор не все это поняли, то им выведение типов подавай, то "сопоставление с образцом", то ещё чего-нибудь. Кому надо, тот пускай на монстро-хаскеле пишет, зачем вам питон?

anonymous
()

(+ Pattern matching)
оптимизации хвостовой рекурсии
graph reduction
static typing
partial function application изкаропки
нормального синтаксиса для классов
операторных скобок опционально

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

>Кому надо, тот пускай на монстро-хаскеле пишет, зачем вам питон?

Так и приходится - не на недоделанном же питоне писать...

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

> (+ Pattern matching) оптимизации хвостовой рекурсии graph reduction static typing partial function application изкаропки нормального синтаксиса для классов операторных скобок опционально

in b4 "Кому надо, тот пускай на монстро-хаскеле пишет, зачем вам питон?"

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

> Так и приходится - не на недоделанном же питоне писать...

"Хочу язык как хаскель, но чтобы он назывался питоном." Михаил, нам положительно нравится ход ваших мыслей!

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

> Это не свойство языка, а свойство реализации.

Tail Recursion

Some implementations only implement tail recursion when a function is calling itself directly, or indirectly via other functions in the same file. This is a major restriction and such implementations should not even be called Scheme, let alone standards-compliant. For Scheme to work "as intended" it is crucial that full support for tail calls, as described in Section 3.5 of R5RS, is provided. An alternative route - one that preserves standards compliance - taken by some implementations is to make full tail recursion "optional" and achieving better performance when it is turned off. This is generally ok, but care has to be taken when comparing the performance of such implementations against implementations where full tail recursion is always enabled.

http://community.schemewiki.org/?scheme-faq-standards

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

Ну так и пиши на схеме, тебя что, насильно заставляют на питоне писать? Нельзя в одном языке собрать ФСИО, ёпта. Вдобавок, объясни мне, как ты в чисто динамическом языке собираешься оптимизировать хвостовую рекурсию. Рассказывай, я приготовил карандаш и бугагу.

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

> Ну так и пиши на схеме, тебя что, насильно заставляют на питоне писать?

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

> Нельзя в одном языке собрать ФСИО, ёпта. Вдобавок, объясни мне, как ты в чисто динамическом языке собираешься оптимизировать хвостовую рекурсию. Рассказывай, я приготовил карандаш и бугагу.

перечитайте, чёрт возьми, тред. я не ратую за расширение питона новыми мегафичами =)

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

И что? Явно признается, что оптимизация хвостовой рекурсии - это свойство реализации. "An alternative route - one that preserves standards compliance - taken by some implementations is to make full tail recursion "optional" and achieving better performance when it is turned off" - т.е. корректная программа на Схеме должна работать и с отключенной хвостовой рекурсией. Вот lazy evaluation в Хаскеле - это свойство языка.

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

> Ленивые вычисления всегда назывались "lazy evaluation", комчатка.

Чурко, иди букварь читай, каким образом происходят ленивые вычисления.

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

>> Ленивые вычисления всегда назывались "lazy evaluation", комчатка.

> Чурко, иди букварь читай, каким образом происходят ленивые вычисления.

Да мне без разницы :D речь шла о том, какой термин соответствует "ленивым вычислениям" :-P

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

> Явно признается, что оптимизация хвостовой рекурсии - это свойство реализации. "An alternative route - one that preserves standards compliance - taken by some implementations is to make full tail recursion "optional" and achieving better performance when it is turned off" - т.е. корректная программа на Схеме должна работать и с отключенной хвостовой рекурсией. Вот lazy evaluation в Хаскеле - это свойство языка.

верно, но вы пропустили главное:

"Some implementations only implement tail recursion when a function is calling itself directly, or indirectly via other functions in the same file. This is a major restriction and such implementations should not even be called Scheme, let alone standards-compliant."

т.е. хвостовая рекурсия *должна быть*, при чём обязательно. *но* хвостовая рекурсия может быть отключена. ни кем иным, как *пользователем*, а не автором компилятора.

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

> Да мне без разницы :D речь шла о том, какой термин соответствует "ленивым вычислениям" :-P

Да вы, Михаил, ещё и зануда. Иди мануал Clean покури, он с картинками, и больше так не подставляйся.

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

> т.е. хвостовая рекурсия *должна быть*, при чём обязательно. *но* хвостовая рекурсия может быть отключена

Да неважно это... наличие или отсуствие оптимизации хвостовой рекурсии не должно влиять на корректность программы на Схеме, с этим согласен? Вот это я и называю "не является частью языка". То, что комитет решил вписать это в стандарт, ничего не меняет.

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

> Да неважно это... наличие или отсуствие оптимизации хвостовой рекурсии не должно влиять на корректность программы на Схеме, с этим согласен?

несомненно.

> о, что комитет решил вписать это в стандарт, ничего не меняет.

меняет это то, что хвоставая рекурсия в стандарте языка => реализация не поддерживаящая хвостовую рекурсию *не является* схемой.

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

> Да вы, Михаил, ещё и зануда. Иди мануал Clean покури

Ну кто бы уж говорил о занудстве :D ты ведь тот же анонимус, который любит говорить, кому куда идти? :)

Насчет курения мануалов и чтении букварей - у этих достойных занятий есть один недостаток: начитанные и обкуренные дети теряют связь с реальностью ;)

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

> все и так поняли, что о ФП ты никакого представления не имеешь.

Дык я это много раз сам говорил :D не в этом треде, правда.

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

> реализация не поддерживаящая хвостовую рекурсию *не является* схемой.

о том и речь :D _реализация_ не является :)

А входной язык этой реализации неотличим от Схемы ;)

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

> А входной язык этой реализации неотличим от Схемы ;)

но формально это не схема. это значит, что если мы говорим о язвке схема, мы *100%* можем утверждать, что данная рекурсия будет развёрнута в хвостовую, и посему мы можем не беспокоится о стеке. это утверждения *не* справедливо для языков синтаксически идентичных схеме, но не являющихся схемой.

asgard
()

Никаких приличных слов не находится, чтобы высказать моё отношение к юникодным строкам в версии <3.

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

> из опыта написания юниттестов для джавы могу предположить, что обычные юниттесты практически все опечатки отловят, потому что обычно опечатка сильно влияет на логику работы. Исключения разве что - редко выполняющиеся куски (вроде обработки ошибок).

Именно так, но нужно еще добавить правило 80/20.

> Почему?

Попробуй реализовать язык с динамической типизацией, потом - со статической, и всё поймешь :)

tailgunner ★★★★★
()

Отступы это скорее преимущество а не недостаток так как приучает сразу аккуратно писать код

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

А я сразу говорил, что весь PEP-8 надо было включить в синтаксис языка.

ero-sennin ★★
()

небольшой итог (промежуточный):

Недостатки:
 1) Python != Haskell

Достоинства:
 1) Быстро осваивается
 2) Много всякой всячины "искаропки" (хотя часть сочла это за недостаток)
 3) Приучает к нормальному форматированию кода (опять-же, часть сочла недостаком)


Что ещё?

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

Я на питоне строк 50 от силы написал, take into account.

Читал в какой-то книжке, что когда код копипастят в интерпретатор, то во всех местах, где есть табы, срабатывает автодополнение. Только что попробовал у себя -- не сработало :)

Просто было интересно, как *принято у питонистов* оформлять код, учитывая его 2-мерную специфику.

В C лично придерживаюсь стиля Linux kernel :)

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

> Читал в какой-то книжке, что когда код копипастят в интерпретатор, то во всех местах, где есть табы, срабатывает автодополнение.

а... для этого автокомплит и интерпретаторе должен быть как минимум включен :)

> Просто было интересно, как *принято у питонистов* оформлять код

Ну, самое близкое к "официальной рекомендации" - PEP 008

> В C лично придерживаюсь стиля Linux kernel :)

Я его и в Питоне придерживаюсь

tailgunner ★★★★★
()

Не умеет tail call optimization.

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

> Я сказал "_тотальная_ динамическая типизация". Плохо именно то, что от нее невозможно отказаться, нет никакой статической проверки

Что курим? Всегда можно узнать тип переменной или указать тип явно.

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

не знаю у меня автокомплит по ctrl+n (а там да с копипастом свои ньюансы;) но штука в том что не все йогурты читают из файла настройки /** vim: **/ и если кото-не заметит и начнет править твой код с другими настройками, он может просто перестать работать, и надо редактор умел исправлять эти вещи для всего файла (и тут может накорежить) либо подыматься в начала блока и исправлять, отвлекает и надоедает ..

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

>3) отсутвие switch/case (вполне обходимое, но не приятное)

switch/case вообще не объектно-ориентированно ни разу. Из какой это парадигмы вообще? Из процедурной?

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

> не знаю у меня автокомплит по ctrl+n (а там да с копипастом свои ньюансы;) но штука в том что не все йогурты читают из файла настройки /** vim: **/

Речь шла вообще о другом

>если кото-не заметит и начнет править твой код с другими настройками, он может просто перестать работать

Единственная проблема с отступами, которую я видел в питоне, была сообщена здесь, на LOR :)

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

>> Я сказал "_тотальная_ динамическая типизация". Плохо именно то, что от нее невозможно отказаться, нет никакой статической проверки

> Что курим? Всегда можно узнать тип переменной или указать тип явно.

Ыыыы... и где здесь _статическая_ проверка?

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

>Рассказывай, я приготовил карандаш и бугагу.

Бугагу не надо готовить, она должна быть наготове всегда!

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

> 1) Python != Haskell ... считал недостатком только 1 человек :)

Не менее 2х, и я подозреваю, что большинство таковых сюда не писало, т.к. всё уже достаточно точно сформулировано. Правда, монады ещё не упомянули, кажтся, но их уже почти научились имитировать посредством yield-а.

На самом деле Хаскель настолько близок к идеалу, что для каждого свойства Ф языка Я, т.ч. в хаскеле есть Ф а в Я есть её(Ф) отсутствие, последнее является недостатком Я. Ну или почти.

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