
Vasiliy
01.09.2017
17:12:27

Alexander
01.09.2017
17:20:31
это про Алана Кея, альтернативный вариант
это как доказывать что синглетоны это такая штука у которой есть взаимнооднозначное соотвествие между значением и типом
это определение ещё из 60х =)

Google

Евгений
01.09.2017
17:33:52

Alexander
01.09.2017
17:44:05
ООП по Клею это про pi
ООП в меинстриме ничего про calculus нижележащий не говорит

Vasiliy
01.09.2017
17:49:53
так называемые три кита мейнстрима - инкапсуляция, наследование, полиморфизм - настолько, мне кажется, абстрактны, что адепты понимают их как хотят
из самого близлежащего - геттеры-сеттеры по мнению одних нарушают инкапсуляцию, по мнению других настолько важны, что для них делают хоткеи в IDE

Aragaer
01.09.2017
17:52:04
"А расскажите своими словами, что такое полиморфизм" - "Я конечно могу рассказать, но честно говоря за те пять лет, что я работаю программистом, я еще ни разу не сталкивался с необходимостью пользоваться полиморфизмом." - ".... наверно на этом нам стоит прекратить собеседование. До свидания."
хотя сейчас, еще через 6 лет, я могу сказать, что таки да, кое-где мне полиморфизм тогда все-таки попадался, просто я его не узнал

Alexander
01.09.2017
17:56:52
полиморфизм это когда один метод может работать с данными разного типа
т.е. написал один раз и потом применяешь к разному не меняя код
хм.. не совсем точно, но ладно

Aleksey
01.09.2017
17:57:20
Точнее, когда разные данные подходят для одного метода

Alexander
01.09.2017
17:57:24
и его полиморфизма много видов

Aleksey
01.09.2017
17:57:40
Если просто с разными типами работает метод, то это перегрузка

Google

Alexander
01.09.2017
17:57:40
параметрический - когда в одну функцию можно пихать разные данные
ад-хок - когда функция с одним именем по разному работает с разными данными (не точное определение, но мне лень думать или доставать пирса)
subtype - когда метод может работать со вмести подтипами (наследниками) данного типа
dynamic - то что в динамических языках, и там несколько подклассов
можно открыть книжку пирса и посмотреть, там доступно
parametric это то что в меинстриме называют Generic

Aleksey
01.09.2017
18:03:22
Вон в смолтолке нет перегрузки по типам. Просто те объекты, которые принимают некое сообщение - "утки"

Denis
01.09.2017
18:04:56

Aragaer
01.09.2017
18:05:17
так вот да, я к тому моменту сталкивался с полиморфизмом в том же ядре линукса - когда драйвер это структура с 5 указателями на функции
но это наверно единственный пример, который я к тому моменту видел в реальной жизни

Aleksey
01.09.2017
18:05:41
Где тут полиморфизм?

Aragaer
01.09.2017
18:06:19
что не важно, что за драйвер, у него есть open, read, write, close и ioctl

Aleksey
01.09.2017
18:07:13
Полиморфизм, это возможность взять некий признак (поведение), присущий разным объектам и сгруппировать эти разные объекты по данному принзаку: "плавают и лодки и рыбы - плавание полиморфно"

kana
01.09.2017
18:07:18

Aleksey
01.09.2017
18:07:32
Но как подход, а не конкретику типа "состояние+поведение и классы в придачу"

Aragaer
01.09.2017
18:08:30
соответственно все character device drivers с точки зрения операционки выглядят одинаково

Denis
01.09.2017
18:08:41
вопросик если койонеда дает бесплатный функтор, то что делает йонеда?

Aleksey
01.09.2017
18:09:46

Google

Andrew
01.09.2017
18:10:06

Aleksey
01.09.2017
18:10:45
Не, "заднеприводных", это не в этот чятик, это к Платову

Андрей
01.09.2017
18:16:29
Объекты - это замыкания для бедных. Поэтому ООП есть и в Схеме и даже у меня в языке.
А искаропки они в Скале и Фшарпе из-за платформ реализации и интеропом с жвм и нетом

Alexander
01.09.2017
18:18:25

Misha
01.09.2017
18:19:29
Скала согласно одерскому- ООП язык
"С элементами"

Андрей
01.09.2017
18:19:52
примерно так-же искусственно, как С++ впитал в себя чисто сишные вещи типа указателей - ради полной обратной совместимости.

Andrew
01.09.2017
18:23:40
А можно ли назвать тип допустим
data Person = Person String
Person "Lisa Hacker"
, объектом типа Person?

Андрей
01.09.2017
18:26:26
иммутабельный дто ака структура

Alexsey
01.09.2017
18:29:24
Что в общем-то слабо напоминает чистую функциональщину с функциями, которые группируются в модули

illiatshurotshka❄️
01.09.2017
18:31:43

Андрей
01.09.2017
18:32:21
ты еще ленивость приплети. чистота, группировка функций в модули и ленивость - это про сабж. а фп - оно не обязано, вообще говоря.

Alexsey
01.09.2017
18:32:24
Ну я скорее к тому, что аналогия с указателями не совсем корректная

Андрей
01.09.2017
18:33:43
аналогия не про указатели, а про вынужденную поддержку платформы - что нет в фшарпе, что жвм в скале, что сишные примитивы в плюсах
хаскель родился сам по себе, ему ни с чем вынужденно совмещаться не надо

Daniel
01.09.2017
18:37:04

Андрей
01.09.2017
18:39:21
так я не говорю что это плохо. именно поэтому скала с кложей едут на готовом наследии жвм. просто ради этого приходится впиливать поддержку концепций платформы - как получится
кстати, именно поэтому я в свое время начав с Фшарпа все равно смотрел на сабж - потому что он в этом смысле горд и не идет на подобные компромиссы )))

Google

Валерий
01.09.2017
19:22:27

Alexander
01.09.2017
19:27:22
можно для дураков, почему императивный не может быть чистым?
я не вижу ни одной причины для справедливости этого утверждения..

Евгений
01.09.2017
19:30:12

Alexander
01.09.2017
19:53:18
не понял

Валерий
01.09.2017
19:55:13
Смотри
Допустим, ты можешь объявлять переменные
var a = 4
print a
var a = 5
print a
Вот собственно значение а (и других переменных, а так же состояния вывода) и есть твой стейт, и у там сайд эффекты
Более простой пример
print 10
print 11
Собственно тут уже куча сайд эффектов в терминал

illiatshurotshka❄️
01.09.2017
20:00:24
main = main

Валерий
01.09.2017
20:01:34
Нельзя просто взять и мемоизировать значение print
Каждый раз print нужно исполнить, потому что сайд эффекты

Alexander
01.09.2017
20:03:01
@faerytea а могу не делать print
вроде меня никто делать его не обязывает

Мерлин
01.09.2017
20:03:44
ничто не мешает в императивном языке использовать чистые функции (кроме как для io, очевидно) и использовать изменяемое состояние по минимуму
Собственно это уже считается нормой

Alexander
01.09.2017
20:03:45
так же как императивность не обозначает, что я могу изменить значение a

illiatshurotshka❄️
01.09.2017
20:03:55
вообще-то ни императивный ни функциональный язык в практике не может быть чистым

Мерлин
01.09.2017
20:04:05

Alexander
01.09.2017
20:04:09
императивность обозначает что я пишу последовательность инструкций, которые компилятор исполнит

illiatshurotshka❄️
01.09.2017
20:04:21
хаскель только в хаскель репорте чистый

Google

Alexander
01.09.2017
20:04:35
в отличии от функционального, где я строю граф, который *как-то* будет редуцироваться

Евгений
01.09.2017
20:04:46
@faerytea а могу не делать print
У тебя есть программа, это тупо список A1, A2, A3 примитивных команд. Если ты не изменяешь значения, то не можешь даже условный цикл сделать. Разве непонятно?
Попробуй написать факториал на своём недоязыке

Alexander
01.09.2017
20:05:12
вот у меня программа на си, компилируется в SSA форму
у меня там есть циклы и нету изменений переменных
учитывая существование этой формы мне непонятно почему я не могу написать условный цикл
так же мне непонятно почему в императивной форме я не могу написать настолько же чистую функцию, как я могу написать на haskell
и почему у и меня не может быть ссылочной прозрачности

Евгений
01.09.2017
20:06:50
Ок, напиши сумму чисел от нуля до n

Alexander
01.09.2017
20:08:01
и?

Мерлин
01.09.2017
20:08:11

Alexander
01.09.2017
20:08:45
что мне мешает иметь функцию в императивном языке (специально сейчас не пишу лямбда чтобы не вдаваться в дальшейшие споры)?

Евгений
01.09.2017
20:08:47
Лямбда даёт возможность создать эффект

Daniel
01.09.2017
20:09:04
do + State монада это разве не императивно?

illiatshurotshka❄️
01.09.2017
20:09:09

Евгений
01.09.2017
20:09:14
Потому что это уже примесь фп. Императивщина эьо тьюринг-машин

Daniel
01.09.2017
20:09:59
фп убивает императивность?

Alexander
01.09.2017
20:10:05
учитывая что lambda calculus и MT выражаются друг через друга я не понимаю этот агрумент
если у тебя есть MT, то есть LC; если есть LC то есть MT