
Dmitry
06.06.2018
20:11:52
какая разница как реализована чистая функция если она действительно чистая ?

?
06.06.2018
20:12:08

Dmitry
06.06.2018
20:12:57
разве a - это не свободная переменная ? я чего то недопонимаю

?
06.06.2018
20:15:01
a => (b => a * b) -- первая функция не имеет свободных переменных, а вторая имеет -- a

Google

Jentry
06.06.2018
20:16:20

Aliaksandr
06.06.2018
20:19:05
ничего не понятно. В этом весь смысл функциональщины - запутать простую задачу до такой степени, что ее не решить без трех высших по матану

Dmitry
06.06.2018
20:19:09

Jentry
06.06.2018
20:20:34
как раз функциональщина-то понятна, максимально декларавтивна и незапутанна, поэтому часто используется для написания лексеров-парсеров и прочей подобной вычислительной вещи


Aliaksandr
06.06.2018
20:21:22
вот классический пример подсчета факториала с помощью комбинаторов:
Consider the factorial function F(n) recursively defined by
F(n) = 1, if n = 0; else n × F(n − 1).
In the lambda expression which is to represent this function, a parameter (typically the first one) will be assumed to receive the lambda expression itself as its value, so that calling it – applying it to an argument – will amount to recursion. Thus to achieve recursion, the intended-as-self-referencing argument (called r here) must always be passed to itself within the function body, at a call point:
G := λr. λn.(1, if n = 0; else n × (r r (n−1)))
with r r x = F x = G r x to hold, so r = G and
F := G G = (λx.x x) G
The self-application achieves replication here, passing the function's lambda expression on to the next invocation as an argument value, making it available to be referenced and called there.
This solves it but requires re-writing each recursive call as self-application. We would like to have a generic solution, without a need for any re-writes:
G := λr. λn.(1, if n = 0; else n × (r (n−1)))
with r x = F x = G r x to hold, so r = G r =: FIX G and
F := FIX G where FIX g := (r where r = g r) = g (FIX g)
so that FIX G = G (FIX G) = (λn.(1, if n = 0; else n × ((FIX G) (n−1))))
Given a lambda term with first argument representing recursive call (e.g. G here), the fixed-point combinator FIX will return a self-replicating lambda expression representing the recursive function (here, F). The function does not need to be explicitly passed to itself at any point, for the self-replication is arranged in advance, when it is created, to be done each time it is called. Thus the original lambda expression (FIX G) is re-created inside itself, at call-point, achieving self-reference.
In fact, there are many possible definitions for this FIX operator, the simplest of them being:
Y := λg.(λx.g (x x)) (λx.g (x x))
In the lambda calculus, Y g is a fixed-point of g, as it expands to:
Y g
(λh.(λx.h (x x)) (λx.h (x x))) g
(λx.g (x x)) (λx.g (x x))
g ((λx.g (x x)) (λx.g (x x)))
g (Y g)
Now, to perform our recursive call to the factorial function, we would simply call (Y G) n, where n is the number we are calculating the factorial of.


Jentry
06.06.2018
20:22:13
fixed-point да, я ждал этого!)
только это запись в альфа, не в комбинаторах, в комбинаторах SKI же

Dmitry
06.06.2018
20:24:38

Aliaksandr
06.06.2018
20:24:48

?
06.06.2018
20:25:49

Jentry
06.06.2018
20:27:04

Google

Aliaksandr
06.06.2018
20:27:43
функциональное программирование - оно такое - у каждого свое представление о базовых понятиях :) Наверное, потому что они элементарны и просты в понимании

Sergey
06.06.2018
20:27:50

Dmitry
06.06.2018
20:27:57

Jentry
06.06.2018
20:28:36
а че это такое ?
это когда при рекурсивном вызове и return в конце функции не происходит погружение в стек, а результат накапливается в некотором аккумуляторе

Aliaksandr
06.06.2018
20:28:51

Sergey
06.06.2018
20:29:22

Dmitry
06.06.2018
20:29:30

Aliaksandr
06.06.2018
20:29:35
т.к. если сделают оптимизацию хвостовой рекурсии, в го набегут функциональщики и загадят код переписыванием циклов на хвостовую рекурсию

Jentry
06.06.2018
20:29:43

Никита
06.06.2018
20:30:22
Такой вопрос. Если бы перед вами стояла задача написать API для высокорагруженного сервиса, похожего на социальную сеть (группы, сообщения, посты, все вот это), вы бы все равно использовали Го или что то другое?

Aliaksandr
06.06.2018
20:30:28

Sergey
06.06.2018
20:30:40

Jentry
06.06.2018
20:31:31

Aliaksandr
06.06.2018
20:31:53

Никита
06.06.2018
20:32:31

Sergey
06.06.2018
20:32:56

Aliaksandr
06.06.2018
20:33:05

Sergey
06.06.2018
20:33:22

?
06.06.2018
20:34:16

Google

Aliaksandr
06.06.2018
20:34:54

Jentry
06.06.2018
20:35:29

Sergey
06.06.2018
20:35:29

Dmitry
06.06.2018
20:38:49

Sergey
06.06.2018
20:39:08

Jentry
06.06.2018
20:39:22

Aliaksandr
06.06.2018
20:39:30
а какими альтернативами владеете?
- всякие python, ruby, php не подойдут по скорости
- C, rust, C++, asm не подойдут по сложности написания кода
- java, c# не подойдут из-за любителей многослойных абстракций и паттернов проектирования
- node.js не подойдет, т.к. это верх дебилизма.
- остальные нишевые языки не подойдут, т.к. потом не найдете программистов на поддержку проекта

?
06.06.2018
20:40:17

Dmitry
06.06.2018
20:40:34
меня заманили обманом в эту секту !

Aliaksandr
06.06.2018
20:43:31
> так это странно, как тогда работает этот парсер? медленно и пожирая ресурсы?
наверное, поэтому программы на го компилируются в 100 раз быстрее, чем расово верный компилятор на rust c комбинаторами и лямдами

Aliaksandr
06.06.2018
20:45:36

Jentry
06.06.2018
20:46:28

Никита
06.06.2018
20:48:28
А к Erlang как относитесь?

Aliaksandr
06.06.2018
20:49:19
https://www.techempower.com/benchmarks/
вот последние результаты https://www.techempower.com/benchmarks/#section=test&runid=2c113b42-5dbb-4eea-a0b9-b4d6863f5cad . Они перешли на серваки от микрософта и все ускорилось.
А к Erlang как относитесь?
не знаком с ним. Но после вот таких топиков https://dou.ua/forums/topic/23644/ складывается не очень хорошее впечатление

Sergey
06.06.2018
20:51:52

Dmitry
06.06.2018
20:51:59

Google

Aliaksandr
06.06.2018
20:53:57

Jentry
06.06.2018
20:54:11

Sergey
06.06.2018
20:54:28

Dmitry
06.06.2018
20:54:44

Aliaksandr
06.06.2018
20:55:10

Jentry
06.06.2018
20:55:14
ну тогда тебе дорога в яву, только и всего, ничего плохого в этом нет

Dmitry
06.06.2018
20:55:15
хотя нет. лучше в c# уйду, там net.core призывно рукой машет

Антон
06.06.2018
20:56:16

Dmitry
06.06.2018
20:56:41

Admin
ERROR: S client not available

Aliaksandr
06.06.2018
20:57:45

Jentry
06.06.2018
20:58:14

Aliaksandr
06.06.2018
20:58:25

Dmitry
06.06.2018
20:59:16
вот последние результаты https://www.techempower.com/benchmarks/#section=test&runid=2c113b42-5dbb-4eea-a0b9-b4d6863f5cad . Они перешли на серваки от микрософта и все ускорилось.

Aliaksandr
06.06.2018
20:59:21

Dmitry
06.06.2018
20:59:48
multiple queries

Aliaksandr
06.06.2018
21:01:33
на multiple queries в java читят - они используют пайплайнинг для обращений к постгресу. Поэтому первых два результата можно не учитывать

Dmitry
06.06.2018
21:01:51

Google

Dmitry
06.06.2018
21:03:24
остаюсь в секте

Aliaksandr
06.06.2018
21:04:18
вот тут подробности насчет пайплайнинга к бд из жавы - https://groups.google.com/d/msg/framework-benchmarks/A78HrYsz4AQ/_cXoqhrPAwAJ

Jentry
06.06.2018
21:06:53
остаюсь в секте
моноязычник что ли? на этом недалеко уплывешь нынче, будь во всех сразу

Dmitry
06.06.2018
21:08:05
ах, 1с яще забыл
хотя лучше бы забыл
моноязычник что ли? на этом недалеко уплывешь нынче, будь во всех сразу
"там где хайп, туда с непосредственностью стада баранов тянется бизнес, бормоча мантру «нулевой порог..быстрый старт..(далее неразборчиво)». там, где бизнес, там деньги...на деньги слетаются кодерки-однодневки. через месяц-два, когда становиться очевидно, что очередной фреймворк-спаситель фуфло, вся эта коричневая масса перетекает к следующему фреймворку" из комментов
что то мне это напоминает :)

Jentry
06.06.2018
21:16:10
ну, это вчерашний день, сейчас в го в течение дня можно перебрать 10 либ по количеству звездочек, прежде чем остановиться на чем-то минимально-рабочем
так бывает нужно-то было всего-лишь ssh-тулзы по типу paramico в оффтопике, а уже к вечеру находишь себя за чтением крипто-папиров и рфц

Dmitry
06.06.2018
21:24:41
а что такое rest в нескольких словах?
это стандартизация и приведение логических запросов к типам http запросов ?
или это crud ?
я запутался в этом гавне

Michael
06.06.2018
21:28:39

Jentry
06.06.2018
21:29:04
ээ, попробуй с определения, в нем ключевым является первое слово - representation

Dmitry
06.06.2018
21:30:48

Jentry
06.06.2018
21:30:53
типа вот есть объект, с набором полей, rest это управление его состоянием через CRUD, это если совсем просто
но rest ща не в моде да, поцоны давно на grpc отъехали

Dmitry
06.06.2018
21:31:26
ну стало чуток ясней
rest это методика, crud это рализация - да ?

Zaur
06.06.2018
21:34:04