
Denis
17.08.2018
09:06:00
кстати в книге beginning haskell очень информативно про thunks в схемах и все такое

Алексей
17.08.2018
09:06:45
Хм, интересно, а если функциональный язык без ленивости (и без thunk), то там как-то можно будет сделать циклические ссылки?

Denis
17.08.2018
09:07:44

A64m
17.08.2018
09:07:45
> функциональный язык без ленивости

Google

Denis
17.08.2018
09:09:22
@A64m_qb0 видел кстати их попытки?)
https://github.com/natefaubion/purescript-call-by-name

A64m
17.08.2018
09:10:23
видел только ссылку в твиттере, в код не заглядывал еще

Евгений
17.08.2018
09:12:30
Кстати зацикливание данных ещё не означает, что нельзя без GC работать. Для такой невозможности нужна именно тьюринг-полнота зацикливания, то есть возможность построения термов, не имеющих даже слабой нормальной формы.
То есть убрать GC из какой-нибудь агды в теории можно

Ilya
17.08.2018
09:13:45

Denis
17.08.2018
09:14:22

Abbath
17.08.2018
09:14:27
В ATS есть GC?

Евгений
17.08.2018
09:14:28

Алексей
17.08.2018
09:15:09

Denis
17.08.2018
09:15:30

A64m
17.08.2018
09:15:46
ну это замена для части юзкейсов мутабельности
а без ленивости и мутабельности да, можно однонаправленный хип делать, только на таком языке ничего особо не написать

Алексей
17.08.2018
09:16:58

Ilya
17.08.2018
09:17:08
Вопрос понятий
надо переписать эти числа фибоначчи рекурсивно, тогда и будет видна разница

Google

Ilya
17.08.2018
09:17:17
(с сохранением эффективности)

Евгений
17.08.2018
09:17:26

Алексей
17.08.2018
09:17:45
вот кстати готова идея для нового эзотерического языка программирования

Denis
17.08.2018
09:17:57
лямбда это уже отложенные данные

Евгений
17.08.2018
09:18:39
Ну без возможности функции писать в ADT это уже не рекурсивные типы данных

A64m
17.08.2018
09:18:57

Denis
17.08.2018
09:19:25

Евгений
17.08.2018
09:20:39

Denis
17.08.2018
09:21:07
можно вообще взять X базис и все будет строиться вокруг всего одной HOF

Евгений
17.08.2018
09:22:04

Denis
17.08.2018
09:22:24
Категорно-Комбинаторная машина

Abbath
17.08.2018
09:22:35
Мне кажется что ванесса из твитора - трап

Denis
17.08.2018
09:23:00

Abbath
17.08.2018
09:23:17

Denis
17.08.2018
09:23:28

Abbath
17.08.2018
09:23:43
Ясно понятно

Евгений
17.08.2018
09:24:59

Denis
17.08.2018
09:25:08
ох ман

Евгений
17.08.2018
09:25:28
Звучит как неологизм

Google

Denis
17.08.2018
09:26:19
Звучит как неологизм
вроде это
https://wiki2.org/ru/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%B0%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0

Dmitry
17.08.2018
09:31:21

A64m
17.08.2018
09:31:47
не знаю

Dmitry
17.08.2018
09:32:49
Ну ладно

Евгений
17.08.2018
09:32:56

Dmitry
17.08.2018
09:34:11
Можно ж просто файл в память отмапить в массив, или что там в Go, да посчитать \r. GC тогда вообще не затронется. То же самое в Haskell

A64m
17.08.2018
09:35:24
речь то про программу, которая LOC считает, у нее посложнее логика
но, конечно, и ее можно без особой нагрузки на гц написать

Dmitry
17.08.2018
09:35:54
С учётом комментариев?

A64m
17.08.2018
09:36:41
https://github.com/boyter/scc

Dmitry
17.08.2018
09:36:42
В смысле, loc - только значимые линии кода?
Да уж. Каждый раз, когда смотрю на Go, кажется, что это заговор производителей клавиатур. При таком объёме... ммм... кода клавиатуры надо очень часто менять

Евгений
17.08.2018
09:39:09
Я думаю всё проще — просто авторы го пишут в акме

Denis
17.08.2018
09:41:03

Danil
17.08.2018
09:50:04
Точно такой же как и в любом с подобном

Алексей
17.08.2018
09:50:40

Danil
17.08.2018
09:51:10
Ну да
Куда легче все трай кэтч блок завернуть
И забить на ошибки

Google

Евгений
17.08.2018
09:51:24
Вот реальный кусок моего кода, который я сейчас пишу
conn, err := sonarqube.NewConnectionByToken(sonarURL, sonarToken)
if err != nil {
return err
}
searchProject := project
if branch != "" {
searchProject = fmt.Sprintf("%s:%s", project, branch)
}
projects, err := conn.ProjectSearch(sonarqube.ProjectSearchRequest{Projects: []string{ searchProject }})
if err != nil {
return err
} else if len(projects) > 0 {
fmt.Printf("project '%s' with branch '%s' already registered\n", project, branch)
return nil
}
_, err = conn.ProjectCreate(sonarqube.ProjectCreateRequest{Name: project, Project: project, Visibility: visibility, Branch: branch})
if err != nil {
return err
}
Сколько здесь значащих строк?

Алексей
17.08.2018
09:51:50

Denis
17.08.2018
09:52:27
Даже в rust лучше сделали чем в го :)

Алексей
17.08.2018
09:52:32
то есть в блоке try может быть суммарно просто дофига кода, который об ошибках вообще не парится

Denis
17.08.2018
09:52:39
Вот реальный кусок моего кода, который я сейчас пишу
conn, err := sonarqube.NewConnectionByToken(sonarURL, sonarToken)
if err != nil {
return err
}
searchProject := project
if branch != "" {
searchProject = fmt.Sprintf("%s:%s", project, branch)
}
projects, err := conn.ProjectSearch(sonarqube.ProjectSearchRequest{Projects: []string{ searchProject }})
if err != nil {
return err
} else if len(projects) > 0 {
fmt.Printf("project '%s' with branch '%s' already registered\n", project, branch)
return nil
}
_, err = conn.ProjectCreate(sonarqube.ProjectCreateRequest{Name: project, Project: project, Visibility: visibility, Branch: branch})
if err != nil {
return err
}
Сколько здесь значащих строк?
выглядит правдиподобно, я в это верю

Алексей
17.08.2018
09:52:42

Danil
17.08.2018
09:52:51
Если работаете с сетевым по
То нужно чекать каждый опасный участок кода

Евгений
17.08.2018
09:53:09

Danil
17.08.2018
09:53:16
А не завернуть все в один трай кэтч и положить большой и толстый

Admin
ERROR: S client not available

Denis
17.08.2018
09:53:36
А это уже от задачи зависит

Алексей
17.08.2018
09:53:47
если в Go так не нужны исключения, то зачем там panic/recover?
шах и мат, голангисты

Евгений
17.08.2018
09:53:56

Denis
17.08.2018
09:54:19
Иногда надо чекать отдельные операции, а иногда проще перезапустить целиком не разбираясь

Евгений
17.08.2018
09:54:30

Danil
17.08.2018
09:54:41
К тому же эту конструкцию можно сократить до одной строчки
Написав функцию

Алексей
17.08.2018
09:55:15

Google

Алексей
17.08.2018
09:55:36

Евгений
17.08.2018
09:56:09

Danil
17.08.2018
09:57:11
func errobr(err){
if err!=nil{
...
return
}
}

Евгений
17.08.2018
09:57:40
И чо?
Это не поможет
Перепиши мой код выше

Алексей
17.08.2018
09:58:05
более того, насколько я знаю, даже создатели стандартной либы go не смогли без исключений прожить и таки заюзали panic/recover в json библиотеке, даже в доке хвалились этим фактом

Denis
17.08.2018
10:00:49
Ну тут либо макросы нужны, либо монадки, но их без сахара читать тяжко :)

Алексей
17.08.2018
10:01:06
либо нормальные исключения
тоже вариант, вполне нормальный для подобных языков

Евгений
17.08.2018
10:01:27
Исключения это убогая разновидность call/cc

Denis
17.08.2018
10:02:23
хм, а чего тут про го так оживленно говорят? я думал о нем вообще не надо говорить, а тут в хаскел чатике наспамили про этот го

Алексей
17.08.2018
10:02:58

Евгений
17.08.2018
10:03:17
call/cc это не монада

Denis
17.08.2018
10:03:26
Ну кто то расстроился что его лапшу из return err назвали бесполезным кодом

Евгений
17.08.2018
10:04:39

Dmitry
17.08.2018
10:04:49

Алексей
17.08.2018
10:04:58
call/cc это не монада
ну это же CPS вроде, который в том же хаскеле удобно будет завернуть в монаду, чтобы руками не писать

Denis
17.08.2018
10:05:31

Алексей
17.08.2018
10:05:46
ну так то да
но я ещё больше про всякие maybe/either говорил (которые кстати тоже не обязаны быть монадами)