Fork me on GitHub
#clojure-russia
<
2015-12-20
>
artemyarulin05:12:23

оффтоп: http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/ Грусть печаль. Вся эта функциональщина, все эти сайд эффекты, иммутабильности, code reuse, code compisition, нормальная система типов даже не важны в итоге - куда идет индустрия, хнык-хнык 😢

rm06:12:51

в итоге "кококо скала сложная", всего-то. Ну могли бы вместо го и кложу взять, заодно необязательно было бы все переписывать

pacman06:12:29

Как-то второй после Одерского разработчик скалы, Пауль кажись обрушился на нее с критикой и собирался уходить из проекта, дал какбы понять что компилятор скалы большой кусок гавна, что в нем куча проблем и некоторые из них не будут решены никогда уже... https://www.youtube.com/watch?v=TS1lpKBMkgg

pacman06:12:02

а тут про отвратительный дизайн scala https://www.youtube.com/watch?v=uiJycy6dFSQ

artemyarulin06:12:36

ну я это кинул не сколько про сложность скалы (наслышан), но про убогость го на самом деле. Идеальный язык для аутсорса - никакого code reuse нету, думать не надо, разбираться не надо - взял и пиши. Вчерашний студент, позавчерашний с++ сеньор - пофегу, все пишут одинаково с одинаковой скоростью. Го обречен на успех 😞

ul06:12:40

> в итоге "кококо скала сложная" но всё-таки, это важный фактор, как бы мы не смотрели с высока. вот здесь http://www.shenlanguage.org/lambdassociates/htdocs/blog/bipolar.htm хорошо подмечено, что программирование на C стимулировало более дисциплинированный подход, но при этом основы языка были доступны любому. А дисциплина бьёт класс на больших проектах

pacman06:12:42

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

ul06:12:54

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

ul06:12:05

будет недоделанный, но красивый, конечно, кусок говна

ul06:12:37

концептуальный, я бы сказал

artemyarulin06:12:49

@ul: Но… но… генерики… фп.. иммутябильность… язык же говно??

ul06:12:02

в элме, кстати, вон тайплассов нет

ul06:12:15

проблема того же уровня, что и отсутствие генериков в го

ul06:12:31

так на нём напили уже толкового больше, чем на пурескрипте

ul06:12:45

в котором есть несколько прекрасных концептуально библиотек для уи

pacman06:12:55

Лиспы (кложа в том числе), самая главная их фишка после ФП и иммутабельности (больше отнотися конечно к кложе) для будущего это как мне кажется это гомоиконность. Которая дает офигенные возможности для метапрограммирования... Почему бы не развивать и не раскачивать именно эту тему... По сути это же следующий этап эволюции программирования. Кто подскажет, каковы возможности GO в часноти на этот счет, что есть в нем для метапрограммирования??

ul06:12:57

но с которыми я уже волосы повырывал

artemyarulin06:12:30

го это не лисп, и эта гомоиконность на скок я знаю тока в лиспах то и возможна кажись

ul06:12:59

в машинных кодах офигенная гомоиконность

rm06:12:11

в го ни хрена нет. Там есть какая-то адовая кодогенерация чуть ли не из комментов

artemyarulin06:12:29

>в го ни хрена нет вот. это про го да

pacman06:12:44

ну вот и получается, что без гомоиконности метапрограмминг будет сводиться к старому дремучему способу оперирования со строками для генерации кода.. так что в пекло GO

pacman07:12:07

шучу конечно..

pacman07:12:41

но всеже.. Метапрограмминг, мало что-то материала по нему

artemyarulin07:12:07

да он и не нужен в 95% случаев же

pacman07:12:32

ну как-бы может и не нужен. потому что все привыкли еще мыслить и работать по старому

rm07:12:17

нет, не поэтому

artemyarulin07:12:21

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

rm07:12:22

никакие мифические более лучшие программисты не придут. Если посмотреть издалека, то со временем разработка должна становиться проще. Макросы -- способ принести в язык фичу, которой нет. Это неочевидно и не очень-то поддерживаемо, но очень мощно

artemyarulin07:12:14

вот, я об этом да. В итоге побеждает (по популярности) язык в котором этого всего нет

pacman07:12:21

ну вообще ))) программирование со временем сведется к обучению ))

pacman07:12:54

потому как обучение кажись - есть тоже способ программирования

ul07:12:30

там очень консервативная среда относительно методик программирования

ul07:12:36

но зонды на кометы сажают

ul07:12:03

As a simple example, the safety standard (DO-178C) for US aircraft software only recently recognized the existance of object oriented methods and it still does not recognize multi-core processors (too many ways for unexpected problems to pop up).

artemyarulin07:12:35

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

pacman07:12:23

да у них в промышленности все старое и дремучее, потому что у них там первое требование это надежность

abtv08:12:03

> Идеальный язык для аутсорса - никакого code reuse нету, думать не надо, разбираться не надо - взял и пиши.

abtv08:12:24

Там же читать устанешь => медленная разработка

abtv08:12:19

А что, там реально ничего нельзя переиспользовать? @artemyarulin

abtv08:12:54

Я вот думал это Go поковырять: для консольных утилиток оно вроде самое то

rm08:12:28

https://www.youtube.com/watch?v=G7Z_g2fnEDg глянул -- это же восхитительно.

artemyarulin08:12:17

о да, дев карты это круто, я вроде кидал вот пример туториала для ом-некст на них https://awkay.github.io/om-tutorial/

artemyarulin08:12:27

@abtv: Ну после функционального программирования го выглядит конечно никак. Но мое мнение тут не особо в кассу - я неделю его помучал всего, типо безопасных map, redure, filter нет и быть не может в языке ибо генерики да. sort-by тоже не возможен. Сделал свой тайп Person, и решил канонично реализовать возможность сортировки по всем полями этого типа, сделал https://gist.github.com/artemyarulin/6e9aa157c81f082285ec, спросил у чуваков в го прально ли, они ответили ага. Поблевал, забыл как страшный сон.

abtv08:12:05

@artemyarulin: если у них столько кода нужно написать просто для сортировки, то что же говорить о больших приложениях? Опять же, вроде все понятно, но читать это становится сложно тупо из-за объема кода - даже в этом маленьком примере. А проверка типов на этапе компиляции есть? Т.е. вот как ты написал, так оно чекает? Дженериков нет, макросов нет, а как тогда быть если хочешь, например, сделать то же для какого-то определенного типа Person? Там, кстати, есть наследование?

abtv08:12:59

Типа есть специфичный тип Person, например, Manager с парой новых полей

abtv08:12:17

Как его сортировать и как это реализуется идиоматично?

rm08:12:38

там интерфейсы

rm08:12:57

примерно как протоколы, только расширять нельзя

rm08:12:09

чота я не знаю, а протоколы расширять можно?

rm08:12:05

прикольно, в слаке работает /s/a/b -- команда замены

abtv08:12:11

а хз, я протоколы редко использую

artemyarulin08:12:01

@abtv: дада, он тайп сейф, компиляция ага. На самом деле можно переписать короче если забить на тайп сейфти и юзать рефлексию. Макросы через комментарии ага там есть еще

abtv08:12:26

reflection => потеря в скорости же?

artemyarulin08:12:41

На самом деле это все (много повторяющегося кода by design) - Роб Пайк (создатель го вроде) гдет упомянал что пере-использование не всегда и хорошо, мол гораздо гибче еще раз по быстрому написать

artemyarulin08:12:43

т.е. в этом примере с сортировкой - это не проблема. Рефлексия - скорость ага. Но на самом деле 2-5-10 раз такое написать не проблема, взял и сделал

artemyarulin08:12:58

проблема только написать это. Когда ушло в прод - проблем никаких нет

artemyarulin08:12:16

но после кложуры меня выворачивает от этого ага

artemyarulin08:12:55

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

abtv08:12:11

> Но на самом деле 2-5-10 раз такое написать не проблема, взял и сделал

abtv08:12:31

а если потом нужно изменить одинаково в 10 местах?

abtv08:12:44

тесты, конечно, должны спасать

abtv08:12:58

но все равно нужно помнить о многом

abtv08:12:38

т.е. помнить о том, где и что менять, а не о задаче => ниже скорость сопровождения и внесения изменений

abtv08:12:11

кстати, а чем Си плох по сравнению с Го?

rm08:12:37

нет gc

abtv08:12:47

зато performance

abtv08:12:04

а ну там распределенщина всякая

abtv08:12:17

А что пишут на Го? Какого рода системы? Например, веб-сервера это для Го или нет?

rm08:12:42

насколько я знаю, на них всякие сетевые приложения очень хорошо пишутся

artemyarulin08:12:49

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

artemyarulin08:12:49

если уж упомянули Си - то отлично смотрится Rust, прям перформанс Си + сложно отстрелить себе ногу + нормальная система типов + функциональщина

artemyarulin08:12:30

ну и про го - ну 10 раз поменял чо. Идеальный язык для индусов trollface

rm08:12:19

bangalor-friendly

artemyarulin08:12:35

ну и да - там плохо но не ТАК плохо. Функцию передать параметром можно и указать ее тип ага

abtv08:12:49

это в го?

rm08:12:08

в си тоже можно

artemyarulin08:12:10

но ессно не map(<T>) -> <T>

rm08:12:13

указатель на функцию

artemyarulin08:12:03

можно тока f(Person) -> String, генериков нема. И кстати не будет - тоже считается не проблемой

abtv08:12:03

Не пойму, указатель на функцию какой тип имеет?

artemyarulin08:12:48

func plusTwo() (func(v int) (int)) {
        return func(v int) (int) {
            return v+2
        }
    }

abtv09:12:36

Ну хоть что-то

artemyarulin09:12:59

ну ага. Проблема то что нельзя сделать генерик функцию, т.е. вот раст тотже

fn map<B, F>(self, f: F) -> Map<Self, F> where Self: Sized, F: FnMut(Self::Item) -> B

artemyarulin09:12:58

а кста обработка ошибок там ппц - errors as values завезли, а типы Either<A,B>, Result<T,Err>, Optional<T> нет, поэтом хренс два var res = opMayFail(a).map(op2MayFail).map(op3MayFail) заместо этого тока хадркор!

var res,err = opMayFail(a)
if (!err)
   var rest,err = op2MayFaul(res)
  if (!err)
     var res,err = op3MayFail(res))
else
  return nil, err
else 
return nil, err

artemyarulin09:12:52

сорри за оффтоп, у меня пукан рвет при упоминании го. Затыкаюсь simple_smile

abtv09:12:55

Я Rust пару дней как-то ковырял, когда еще по-моему 1.0 не было. Но как-то сравнения performance меня в то время не особо впечатлили, если честно, он был заметно медленнее си. Ну и документации было мало, как и community.

abtv09:12:11

Сейчас же лучше уже с этим?

artemyarulin09:12:24

си прошел мимо меня, но в теории перформанс не должен отличатся почти как мне кажется. Я тока сравнивал libxml на сях написанный и xml парсер написанный на расте - в итоге скорость таже. С доками - ну не ахти ага, но есть пара книжек вроде уже, народ работает над либами, вон недавно читал про в дропбоксе зарелизили сервис на расте, коммьюнити растет потихоньку, статьи пишутся

artemyarulin09:12:15

для веба пока не готов

abtv09:12:39

о, даже на русский язык книгу перевели https://www.gitbook.com/book/kgv/rust_book_ru/details

abtv09:12:46

А язык уже версии 1.2, обалдеть!

artemyarulin09:12:55

ага, надеюсь что взлетит. Макросы там есть, вырвиглазные конечно после аст кложуры но жить можно, мета можно делать

abtv09:12:46

Ну если они хоть каким-то боком еще асинхронщину цепляют (та, что target goal у go), то должен

larhat09:12:40

нет, не цепляют

larhat09:12:56

треды, либо mio (библиотека)

larhat09:12:08

быстрее async/await в плюсах появится %)

larhat09:12:38

> That’s where Go enters the picture. One of Go’s reasons for existence is to make developers more productive после этой фразы возникают сомнения в дееспособности автора, конечно

rm09:12:49

каждый переезд сопровождается разговорами о продуктивити

artemyarulin09:12:46

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

larhat09:12:31

приорити кью и (идтреда, результат)

larhat09:12:38

функция сравнения по идтреда

artemyarulin09:12:41

у меня кложураскрипт simple_smile

artemyarulin09:12:14

забыл сказать сразу, сори да

larhat09:12:30

ну тогда массив и индексы + флажок, что всё кончилось

larhat09:12:21

но я б притащил коре асинк, всё равно ж ещё понадобится — как аяксы всякие обрабатывать?

artemyarulin09:12:27

ага, массив должен быть мутирующим, флажок еще. А как-нить красво без стейта такое не?

artemyarulin09:12:43

да неа, у меня одноразовый скрипт тут

pacman10:12:19

Вот бы кложу запилили по верх cи ))))

pacman10:12:50

да еще со статической типизацией

artemyarulin10:12:51

ну кста и да - сделали бы бекэнд для LLVM вааще ништяк бы было

artemyarulin10:12:06

There is one version that compiles Clojure to scheme, which can be compiled to C which can be compiled to binary code parrot

pacman11:12:00

да, мир си. это сразу мир железа и драйверов. контроллеры там всякие... а также вычисления на видеокартах и прочие вкусности.. - там следующим этапом останется clojuere по верх VERILOG или VHDL)))

rm11:12:34

вот так нормально искать количество разных элементов в двух векторах?

(count (filter #(false? %) (map = [1 2 3] [1 2 4])))

kronos_vano11:12:03

а они отсортированы?

kronos_vano11:12:11

мож лучше множество

rm11:12:16

не лучше

rm11:12:44

там вектор типа такого [0 0 0 1 2 1 1 1 2 3 3 4 3 3]

rm11:12:12

магистерская диссертация :)

kronos_vano11:12:11

просто попарно сравнить? длина одинаковая?

rm11:12:49

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

ul11:12:33

трансдьюсеры иду на помощь

ul11:12:46

можно скомбинировать фильтр и мэп

ul11:12:56

да и подсчёт тоже

ul11:12:59

сча напишу

artemyarulin11:12:37

а стандартный diff кста не умеет вектора? он тока с мапами?

artemyarulin11:12:56

а неа, умеет (diff [1 2 3] [5 9 3 2 3 7]) ;;=> [[1 2] [5 9 nil 2 3 7] [nil nil 3]]

rm11:12:50

только вывод какой-то странный

artemyarulin11:12:13

дак Recursively compares a and b, returning a tuple of [things-only-in-a things-only-in-b things-in-both].

ul11:12:26

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

ul11:12:52

можно так извратиться ((frequencies (mapv = [1 2 3] [3 2 1])) true)

ul11:12:14

mapv чтобы не делать зря ленивую последовательность, всё равно её сразу вычисляем

ul11:12:45

а frequences с надеждой, что имплементация у неё хорошая)

rm11:12:28

спасибо

rm11:12:11

не думаю, что (count (filter ...)) хуже, чем frequences

ul11:12:46

в большинстве случаев пофиг

ul11:12:54

а что быстрее надо мерять, на глаз не скажешь

rm11:12:21

ну и да, эта штука -- очень маленькая часть от вычислений

ul11:12:29

в моём тупом бенчмарке твой вариант быстрее

ul11:12:47

причём с map быстрее, чем с mapv

abtv12:12:37

ыыы 😄 это я в книжке на русском увидел. Ни фига себе они релизятся simple_smile

rm13:12:44

а есть какая-нибудь штука, которая замерит время выполнения?

ul13:12:43

для простого есть встроенный time, а так https://github.com/hugoduncan/criterium/

rm13:12:23

спасибо

rm13:12:06

pmap классный, кстати. Бесплатное ускорение в почти два раза на моем компе

ul13:12:50

я смотрю сегодня только наш канал активный

ul13:12:01

все Рождество уже празднуют, что ли?

larhat13:12:43

воскресенье же? вообще тут в шотландии у многих в пятницу был посл день в этом году

rm14:12:53

> europe and usa are 23-26 and 31-2

niquola15:12:00

Странно что никто не попробовал clojure на racket портировать - там наверно половину можно ридермакросами сделать ;)

artemyarulin15:12:38

@nicola: А какие плюсы от этого? Я ракет плохо знаю. Он по перформансу быстрей?

niquola15:12:41

Как минимум запускаться наверно будет быстрее ;)

pacman16:12:48

В свое время мой друг кложурист в DOO работал, вот эту штуку пропагандировал

pacman16:12:08

CHICKEN is a compiler for the Scheme programming language. It produces portable and efficient C and supports the R5RS and R7RS (work in progress) standards, and many extensions. It runs on Linux, OS X, Windows, many Unix flavours, and aims to be...

artemyarulin16:12:50

название что-то не ахти - в энтерпрайз тяжело такое притащить simple_smile

pacman16:12:26

да. название так сказать вышло из отрасли народного хозяйства

pacman16:12:49

эдакий лисп для колхозников или фермеров

pacman16:12:56

а в ынтерпрайз и кложу тяжко проталкивать.

rm16:12:26

ну кложу уже почти просто

artemyarulin16:12:07

не сказал бы - мне сказали что нужно быть ментально больным чтоб на нем писать :))

rm16:12:23

у меня получилось через cljs :) Я притворился дурачком и сказал, что не знаю джаваскрипт и буду писать на cljs. А потом, что хочу писать клиент и сервер на одном языке.

rm16:12:44

и даже не соврал при этом

pacman16:12:01

я вот тайком кложу с ерлангом пропихнул ))) всем пока говорим политкорректно - платформа java

artemyarulin16:12:23

@pacman: ерланг или экиксир?

pacman16:12:33

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

artemyarulin16:12:13

ugh I can't stand lisp, all those parentheses https://pbs.twimg.com/media/CWcOxD7UAAEFMe1.png

larhat16:12:08

> Как минимум запускаться наверно будет быстрее ;) http://blog.ndk.io/2014/02/11/jvm-slow-startup.html

pacman16:12:36

@artemyarulin: не пока просто erlang. я в нем начинающий. я решил его взять по нескольким причинам, вопервых подходит под часть проекта. там работа с протоколами на уровне битов и байтов . низкий уровень. ну к примеру ICMP пакеты или telnet , во вторых хочу обрести опыт за пределами jvm, так скать расширить кругозор и ощутить другую сторону жизни. хотя раньше кодил на си и си++... ну и самому чертовски интересно))) До Элексира я позже добирусь если надо будет.. главное что мне необходимо это ФП и иммутабильность. это есть в erlang

artemyarulin16:12:12

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

artemyarulin16:12:26

в продакшен чонить выпустили уже на нем?

pacman16:12:36

ну еще дао акторов постигнуть охота

artemyarulin16:12:18

ооо даа)) У меня друган скалист - все уши им прожужжал с ними, офигенная концепция. Под жвм есть реализация

pacman16:12:30

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

pacman16:12:44

вообще начиналось все просто. А накидайка нам быстро базу данных.. за недельку)))

pacman16:12:20

ну взял clojure + clojurescript и накидал

niquola17:12:39

@larhat читал, все равно, надо же придумать повод ракет поковырять ;)

pacman17:12:43

Да, в свое время когда только начал постигать ФП, друг надоумил меня непременно прочитать sicp. Ну читать то одно а решать задачи от туда совсем другое.. прорешал 2 первые главы.. на Racket. дальше духу нехватило... позже уже вдарисля в 4clojure... Так вот, что я хочу сказать - SICP отличный повод поковырять racket

niquola17:12:53

Sicp прочтен трижды ;) ракет уже вперёд ускакал от схемы

pacman17:12:25

я до сих пор думал что racket это сугубо академическая штука в основном для студентов... чесно не знал.. Так на нем уже кровавый интерпрайз пишут вовсю???

pacman17:12:22

@nicola: то что вы прочитали SICP это я в курсе. смотрел много ваших призентаций... я имел ввиду что например неплохо было бы как раз токи упоминать ракет как отличную штуку для старта начинающим

larhat17:12:10

htdp впрочем её обычно сокращают

niquola17:12:46

Htdp не читал. Хорошая штука?

niquola17:12:13

Читал и смотрел курс ctm ;)

pacman17:12:40

а можно ссылки на эти курсы

niquola17:12:20

@larhat отзыв давай! ;)

niquola17:12:05

ctm не плох, там про все, вплоть до конкурентности

larhat17:12:47

ctm очень хвалили, ага ( http://michaelrbernste.in вот тут чувак про неё писал серию блог постов)

niquola17:12:11

racket поговаривают достаточно зрелый уже, там даже типизация статическая есть

artemyarulin17:12:41

core.typed вроде калька typed racket

niquola17:12:59

Полная?

pacman17:12:19

SICP on clojure

artemyarulin17:12:22

хз, ну гдето читал что украден, тьфу inspired by typed racket simple_smile

niquola17:12:11

Начал играть с racket - к емаксу такой плагин - http://www.nongnu.org/geiser/

niquola17:12:23

кстати chicken тоже поддерживает simple_smile

linuccio17:12:44

Добрый вечер simple_smile Очередной раз скачал LightTable, вроде нет жёстких глюков, которые были год назад.

linuccio17:12:58

Сам в основном в работе использую Emacs

linuccio17:12:19

Как думаете, LightTable стоит того, что бы в нём разобраться?

niquola17:12:37

как пример большого проекта на clojurescript?

linuccio17:12:04

Emacs копать приходится для него самого только...

linuccio17:12:06

Это грустно

linuccio17:12:33

А LightTable, вроде как браузерный, вроде как на "родном" языке

linuccio17:12:39

Звучит заманчиво

niquola17:12:31

спроси @tonsky он вроде в нем работает

linuccio17:12:34

Каковы у него вообще возможности по работе с Clojure? Есть ли в нём что-то типа того же CIDER?

niquola17:12:16

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

artemyarulin18:12:27

а чем он лучше чем емакс? емакс чем то плох? с сидером он вроде очень даже ах

artemyarulin18:12:01

я просто первый год с емаксом - эйфория от возможностей пока не прошла simple_smile

linuccio18:12:38

У меня эйфория была месяца два, после просто ни на что не смог уже перейти

linuccio18:12:53

По тому, что Emacs реально крут

linuccio18:12:09

Но он меня убивает порою) Хочется чего-то более простого.

niquola18:12:30

сцуко в racket нет полиморфных функция над коллекциями 👎

niquola18:12:00

проще вима только nano simple_smile

linuccio18:12:32

С Vim тоже опыт был simple_smile

linuccio18:12:48

Я с Emacs`а регулярно пытаюсь уйти))

linuccio18:12:59

Но он крут... Но слишком для меня наверное...

artemyarulin18:12:35

вариантов как я понимаю для кложуры то емакс, вим, ligthTable да курсив

pacman18:12:46

Emacs - Крут да тормознут иногда

artemyarulin18:12:59

ой тока счас заметил ошибку, канонично ы:)

pacman18:12:59

ну в будущем почему бы и нет. http://DOT.NET же теперь на Linux портируют да и clojure под него уже есть

artemyarulin18:12:23

о кста, никто не знает - он живой? клоужера для нета?

niquola18:12:59

вроде считается, что да - но я пока ни одного человека не видел, кто на нем пишет

ul18:12:49

арканоилы пишут

ul18:12:54

аркадиевцы т.е.

ul18:12:03

пилят кложу в юнити

niquola18:12:03

буду спамить про racket: зато есть инфиксная нотация и какието @-expressions http://pkg-build.racket-lang.org/doc/infix-manual/index.html :+0.5

niquola18:12:40

или так

(i . < . 3)

linuccio18:12:15

У Racket замечательная документация simple_smile

linuccio18:12:02

Только за одно это я её почитывал когда-то

niquola18:12:12

Сцуко, стороки мутабельные как в ruby 👎

niquola18:12:39

Rich молодец, всетаки остальные лиспы никогда не были существенно функциональными

artemyarulin18:12:21

тока строки? Остальное все иммутабл?

larhat18:12:47

строки и те, и другие есть же?

niquola18:12:13

У нех все в двух вариантах му и нему

artemyarulin18:12:30

а по дефолту иммутабл хоть все?

artemyarulin18:12:39

как в расте например

niquola18:12:39

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

niquola18:12:51

хотя может зря я гоню, у нас в clojure есть java мутабельная под копотом и мы можем к ней прибегнуть если что

pacman19:12:05

Ну лиспы всю жизнь походу прямо заявляли что они мультипарадигменные

virvar19:12:52

у racket'а же вроде свой редактор. Стрелочки там прикольные, нигде такого не видел😊

ul20:12:24

не, не такие стрелочки

ul20:12:35

а которые показывают, что откуда используется

artemyarulin20:12:53

всмысле? чо за стрелочки?

ul20:12:48

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

artemyarulin20:12:48

о вау, а можно такое для емакса и для кложуры?:)

pacman20:12:38

емакс он какойто текстовый

artemyarulin20:12:06

ну картинки он умеет же вроде https://www.gnu.org/software/emacs/tour/images/splash.png

rm21:12:25

https://github.com/s-mage/k-means-clj хотите поругать мой код? :) Правда, там бардак местами, есть куда ругать

artemyarulin21:12:13

@rm:

fessguids-MacBook-Pro:k-means-clj fessguid$ lein kibit
At /private/tmp/k-means-clj/src/k_means/clustering.clj:73:
Consider using:
  (let [r (new-cluster-number id clustering w d p)]
    (swap! clustering assoc id r)
    r)
instead of:
  (let [r (new-cluster-number id clustering w d p)]
    (do (swap! clustering assoc id r) r))

At /private/tmp/k-means-clj/src/k_means/core.clj:28:
Consider using:
  (inc attempts)
instead of:
  (+ attempts 1)

At /private/tmp/k-means-clj/src/k_means/core.clj:null:
Consider using:
  false?
instead of:
  #(false? %)

artemyarulin22:12:31

Классная презентация: https://www.youtube.com/watch?v=EMv_8dxSqdE Никто не смотрел акку? Ну и вообще модель акторов на кложуре? Можно ж микросервисы реализовать как акторы, запустить сегодня на одной машине, завтра на 10 серваках - но вызываемый код останется тем же. Или не?