LINUX.ORG.RU

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

Мне всегда казалось, что ООП (инкапсуляция, наследование, пролиморфизЪм - так кажется?) не особо связано с императивщиной/ФП

Если излагать в таком виде - не особо. А если излагать в другом, что объект - это «identity + mutable state», то противоречие вполне очевидно.

Я не прав?

История вопроса - это первые несколько абзацев статьи вики, ссылка на которую выше.

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

На сях прототипы пишешь:
прототипы
логика
функции

по-человечески пишется так: философия -> методология -> методика -> модель -> алгоритм -> программа -> код

pacify ★★★★★
()

Ойая, какие еще прототипы на? Динамическая типизация жеже. Поделитесь наркотиками.

anonymous
()

+++[вещества]

Deleted
()

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

true_admin ★★★★★
()
Ответ на: комментарий от nokachi
$ python
Python 3.2.3 (default, Dec 29 2012, 18:01:32) 
[GCC 4.5.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo(): pass
... 
>>> type(foo)
<class 'function'>
anonymous
()
Ответ на: комментарий от Deleted

блин реГилия какаято у вас

это даже не схоластика(предтеча науки) а то что науку замещает (карго)

есть прозрачность по ссылкам и регулярность ( в смысле Степанова) так вот

функциональное прог - это прозрачность по ссылкам и следовательно возможность замены эквивалентных значений

императивное - есть некий обьект( в классике память компа и его окружение как длинная битовая строка) - которую процесс меняет.

ооп - вообще религия когда после 1968 постепенно стали сворачивать матфиз во всём мире и замещать известными по тексту 5тое правило арифметки Доса шаманами - отсюда и букет парадигм от лиц их практикующих которые и умножения без калькулятора не допускают.

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

Ничего не понял. Приведите в порядок сообщение.

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

третий раз повторяю вопрос: в питоне у всех функций один и тот же тип? Если да то это то же самое что у функций типа нет — известно только что это функция.

nokachi
()

Тред полон тяжелых веществ. Мне начинает казаться, что ТС не МД, а злостная троллина.

По теме: запихивай свою ненаглядную логику в функцию main() и будет тебе щастье.

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

в питоне у всех функций один и тот же тип?

Ты не путаешь тип функции-объекта и с типом значения возвращаемого функцией?

anonymous
()

Прототипы не нужны. Ну правда же. Это костылище, говорящий о том, что компилятору си влом пробежаться по файлу, чтоб увидеть, какие в нём доступны функции. И не надо этот костылище в другие языки тащить.

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

Если да то это то же самое что у функций типа нет — известно только что это функция.

Нет.

hint: функции в питоне это first class objects.

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

что нет? У функций

def f(a, b, c): return 2
def g(): return (2,)

разные типы? Не надо мне тут подсказок, отвечайте на мой вопрос!1111

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

отвечайте на мой вопрос!1111

Вернемся к истокам, что ты хотел узнать о питонячьих функциях, но боялся спросить. Не ходи вокруг да около. Руби правду матку.

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

я ж спросил уже пять раз. У эф и джи тип одинаковый или нет? Почему тип 'объекта' отделен в тайп систем от type signature? What is the rationale behind it? Ведь какая мне помощь от того что питон позволит передать мне функцию куда-то а потом она окажется не та что нужно и все упадет? С моей точки зрения как программиста это считай что типа нет — тайп чекер пропускает его а потом внезапно бах и ошибка! Почему современный язык питон не автоматизирует то что мне приходится держать в голове?

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

С моей конской точки зрения это считай что типа нет

fixed

Почему современный язык питон не автоматизирует то что мне приходится держать в голове?

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

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

окей, если до вас не доходит вопрос, попробую еще раз: почему динамически типизированному языку так положено себя вести?

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

если до вас не доходит вопрос

...то ты его неправильно задаешь.

почему динамически типизированному языку так положено себя вести?

Потому что он проверяет типы только в рантайме.

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

ты его неправильно задаешь

так я еще раз спрошу. Почему кому-то пришло в голову что проверять типы только в рантайме — is a good design decision?

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

Почему кому-то пришло в голову что проверять типы только в рантайме — is a good design decision?

А, вот ты о чем... не знаю. Как по мне, так это очень херовое design decision. Я даже думаю, что это не design decision, а просто punt.

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

Почему современный язык питон не автоматизирует то что мне приходится держать в голове?

О! Я тут перед НГ составил список кому позвонить... почему питон это за меня не сделал?!

Если Вы предложите свою парадигму типизации, я с удовольствием выслушаю. Но боюсь tailgunner будет глумиться, он не толерантный нифига;-)

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

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

ИМНО это была хорошая (потому что простая) идея, а все траблы лезут от того, что на питоне пытаются писать какие то масштабные вещи на 100500 строк. Но тут может спасти декоратор проверяющий типы в нужном месте, хотя бы будет понятно откуда пушной зверь приблудился...

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

Почему кому-то пришло в голову что проверять типы только в рантайме — is a good design decision?

Ну наконец-то, за этими экивоками всё таки скрывалась попытка срача static vs dynamic. Too fat.

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

удовольствием выслушаю

one obvious improvement: introduce function types capturing their parameters and the type of return value. This way some mistakes will be caught early.

I don't really care what your tailgunner says — he hasn't been helpful so far.

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

а все траблы лезут от того, что на питоне пытаются писать какие то масштабные вещи на 100500 строк

Основные траблы лезут от рефакторинга. Как передвинуть деталь в карточном домике.

А новый код пишется легко и просто, о типах даже не думаешь.

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

не совсем. Вопрос был в основном почему бы не отличать функции одного типа от функций другого типа. Никто не сказал мне почему это не сделано — например трудно реализовать эффективно, или тайп систем не позволяет такого расширения. Все сводят к знанию терминов, чем гордятся. Давайте представим что мы образованные люди и сюда приходим не учить детей, а предлагать что-то новое и выслушивать обоснованную критику?

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

introduce function types capturing their parameters and the type of return value

Какой смысл это делать в языки с *динамической* типизацией? Какая разница, если будет ломаться фреймом выше? Плюс дактайпинг не будет работать.

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

почему бы не отличать функции одного типа от функций другого типа

Тогда для начала почему бы не отличать аргументы одного типа от аргументов другого типа?

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

Наверное что бы понять что там будет за тип до рантайма, надо или запретить eval и прочие хитровыкрученные питоньи шняшки

http://thedeemon.livejournal.com/54732.html

«Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. <...> они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят».

все траблы лезут от того, что на питоне пытаются писать какие то масштабные вещи на 100500 строк

Это участь любого успешного языка.

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

Вопрос был в основном почему бы не отличать функции одного типа от функций другого типа.

Зачем? Какую пользу это даст питону, если остальная динамика останется?

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

ну дык true_admin предлагал заюзать декоратор проверяющий сигнатуру и строку документации, какие проблемы...

Питон очень свободный ЯП. Если там чего то не делается по умолчанию, это не значит что эого нельзя сделать руками легко и просто.

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

сделать сабтайпинг и будет работать дактайпинг. Разница в более тонком контроле. Ну и практически всегда лучше что что-то сломается сразу а не потом.

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

а, ну я как раз об этом и спрашивал.

Просто для протокола: декоратор - это тоже проверка в рантайме. И только в рантайме.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Дык может забацать статически-типизованный питон с выводимыми типами?;-)

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

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

Дык может забацать статически-типизованный питон с выводимыми типами?;-)

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

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

понятно что в рантайме, вопрос лишь в том, помогает ли он поймать ошибку раньше или просто выводит более точное сообщение

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

Я подозреваю, что что бы такое забацать надо как минимум не знать о том, что это требует знаний которых нет;-)

Лет 10 назад бы взялся. А сейчас... уже есть 100500 мертвых ЯП. Жалко времени и сил.

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

А как напишете декоратор, так и будет.

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

уже есть 100500 мертвых ЯП

Нужен же не новый язык, а чекер для (подмножества) Питона. Но, судя по аналогичной работе для Racket, дело это сильно нетривиальное.

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

Как оставаясь в синтаксисе питона указывать тип возвращаемого значения/типы аргументов ф-ии? Через doc/комменты это кривовато выглядит.

Как указывать тип результата выражения?

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

Как оставаясь в синтаксисе питона указывать тип возвращаемого значения/типы аргументов ф-ии? Через doc/комменты это кривовато выглядит.

В Python 2.x другого способа нет; в Python 3.x есть аннотации на аргументы и возвращаемое значение.

Но фишка в том, чтобы типы параметров и результата _выводились_.

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