This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-12-20
Channels
- # aatree (257)
- # admin-announcements (13)
- # beginners (3)
- # boot (327)
- # cider (2)
- # cljs-dev (1)
- # clojure (127)
- # clojure-art (72)
- # clojure-russia (273)
- # clojure-sg (1)
- # clojurescript (39)
- # cursive (8)
- # datomic (6)
- # editors (2)
- # emacs (4)
- # hoplon (261)
- # immutant (2)
- # ldnclj (15)
- # liberator (10)
- # luminus (1)
- # off-topic (8)
- # om (9)
- # parinfer (1)
- # re-frame (11)
- # reagent (2)
- # yada (9)
оффтоп: http://jimplush.com/talk/2015/12/19/moving-a-team-from-scala-to-golang/ Грусть печаль. Вся эта функциональщина, все эти сайд эффекты, иммутабильности, code reuse, code compisition, нормальная система типов даже не важны в итоге - куда идет индустрия, хнык-хнык 😢
в итоге "кококо скала сложная", всего-то. Ну могли бы вместо го и кложу взять, заодно необязательно было бы все переписывать
Как-то второй после Одерского разработчик скалы, Пауль кажись обрушился на нее с критикой и собирался уходить из проекта, дал какбы понять что компилятор скалы большой кусок гавна, что в нем куча проблем и некоторые из них не будут решены никогда уже... https://www.youtube.com/watch?v=TS1lpKBMkgg
а тут про отвратительный дизайн scala https://www.youtube.com/watch?v=uiJycy6dFSQ
ну я это кинул не сколько про сложность скалы (наслышан), но про убогость го на самом деле. Идеальный язык для аутсорса - никакого code reuse нету, думать не надо, разбираться не надо - взял и пиши. Вчерашний студент, позавчерашний с++ сеньор - пофегу, все пишут одинаково с одинаковой скоростью. Го обречен на успех 😞
> в итоге "кококо скала сложная" но всё-таки, это важный фактор, как бы мы не смотрели с высока. вот здесь http://www.shenlanguage.org/lambdassociates/htdocs/blog/bipolar.htm хорошо подмечено, что программирование на C стимулировало более дисциплинированный подход, но при этом основы языка были доступны любому. А дисциплина бьёт класс на больших проектах
Наверное как всегда, все будет в большей степени зависеть от сложности задачи и архитектуры, а уж потом от языка. , будь это go или чтото еще
о том и речь, если дать го шарящему в доменной области человеку с правильным подходом к архитектуре, то ни на какой кложе, хаскеле и скале не сделаешь продукт лучше
@ul: Но… но… генерики… фп.. иммутябильность… язык же говно??
Лиспы (кложа в том числе), самая главная их фишка после ФП и иммутабельности (больше отнотися конечно к кложе) для будущего это как мне кажется это гомоиконность. Которая дает офигенные возможности для метапрограммирования... Почему бы не развивать и не раскачивать именно эту тему... По сути это же следующий этап эволюции программирования. Кто подскажет, каковы возможности GO в часноти на этот счет, что есть в нем для метапрограммирования??
го это не лисп, и эта гомоиконность на скок я знаю тока в лиспах то и возможна кажись
>в го ни хрена нет вот. это про го да
ну вот и получается, что без гомоиконности метапрограмминг будет сводиться к старому дремучему способу оперирования со строками для генерации кода.. так что в пекло GO
да он и не нужен в 95% случаев же
как я понял в го чуваки строчат по паре тыщ строк в день и не парятся. Разбираться что пере-использовать не надо, ибо хер чо там переиспользуешь, мета вашего нету - взял задачу, в процедурном стиле отработал, сдал задачу
никакие мифические более лучшие программисты не придут. Если посмотреть издалека, то со временем разработка должна становиться проще. Макросы -- способ принести в язык фичу, которой нет. Это неочевидно и не очень-то поддерживаемо, но очень мощно
вот, я об этом да. В итоге побеждает (по популярности) язык в котором этого всего нет
а с другой стороны, посмотрите, что здесь пишут https://www.quora.com/What-skills-does-a-software-engineer-need-to-work-on-the-safety-critical-mission-critical-software-industry
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).
ну слава всем богам мы вроде не в этой среде работает, нам можно новомодных течений, хипстерских функций
да у них в промышленности все старое и дремучее, потому что у них там первое требование это надежность
> Идеальный язык для аутсорса - никакого code reuse нету, думать не надо, разбираться не надо - взял и пиши.
А что, там реально ничего нельзя переиспользовать? @artemyarulin
https://www.youtube.com/watch?v=G7Z_g2fnEDg глянул -- это же восхитительно.
о да, дев карты это круто, я вроде кидал вот пример туториала для ом-некст на них https://awkay.github.io/om-tutorial/
@abtv: Ну после функционального программирования го выглядит конечно никак. Но мое мнение тут не особо в кассу - я неделю его помучал всего, типо безопасных map, redure, filter нет и быть не может в языке ибо генерики да. sort-by тоже не возможен. Сделал свой тайп Person, и решил канонично реализовать возможность сортировки по всем полями этого типа, сделал https://gist.github.com/artemyarulin/6e9aa157c81f082285ec, спросил у чуваков в го прально ли, они ответили ага. Поблевал, забыл как страшный сон.
@artemyarulin: если у них столько кода нужно написать просто для сортировки, то что же говорить о больших приложениях? Опять же, вроде все понятно, но читать это становится сложно тупо из-за объема кода - даже в этом маленьком примере. А проверка типов на этапе компиляции есть? Т.е. вот как ты написал, так оно чекает? Дженериков нет, макросов нет, а как тогда быть если хочешь, например, сделать то же для какого-то определенного типа Person? Там, кстати, есть наследование?
@abtv: дада, он тайп сейф, компиляция ага. На самом деле можно переписать короче если забить на тайп сейфти и юзать рефлексию. Макросы через комментарии ага там есть еще
На самом деле это все (много повторяющегося кода by design) - Роб Пайк (создатель го вроде) гдет упомянал что пере-использование не всегда и хорошо, мол гораздо гибче еще раз по быстрому написать
т.е. в этом примере с сортировкой - это не проблема. Рефлексия - скорость ага. Но на самом деле 2-5-10 раз такое написать не проблема, взял и сделал
проблема только написать это. Когда ушло в прод - проблем никаких нет
но после кложуры меня выворачивает от этого ага
поэтому почитав в инете можно увидеть что го девы генерируют кучу похожего говно-кода везде и всюду, но это плата за простоту языка и за низкий порог вхождения и прочии фичи его
т.е. помнить о том, где и что менять, а не о задаче => ниже скорость сопровождения и внесения изменений
он идеально подходит для сетевых сервисов да
если уж упомянули Си - то отлично смотрится Rust, прям перформанс Си + сложно отстрелить себе ногу + нормальная система типов + функциональщина
ну и про го - ну 10 раз поменял чо. Идеальный язык для индусов
ну и да - там плохо но не ТАК плохо. Функцию передать параметром можно и указать ее тип ага
но ессно не map(<T>) -> <T>
можно тока f(Person) -> String, генериков нема. И кстати не будет - тоже считается не проблемой
func plusTwo() (func(v int) (int)) {
return func(v int) (int) {
return v+2
}
}
ну ага. Проблема то что нельзя сделать генерик функцию, т.е. вот раст тотже
fn map<B, F>(self, f: F) -> Map<Self, F> where Self: Sized, F: FnMut(Self::Item) -> B
а кста обработка ошибок там ппц - 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
сорри за оффтоп, у меня пукан рвет при упоминании го. Затыкаюсь
Я Rust пару дней как-то ковырял, когда еще по-моему 1.0 не было. Но как-то сравнения performance меня в то время не особо впечатлили, если честно, он был заметно медленнее си. Ну и документации было мало, как и community.
си прошел мимо меня, но в теории перформанс не должен отличатся почти как мне кажется. Я тока сравнивал libxml на сях написанный и xml парсер написанный на расте - в итоге скорость таже. С доками - ну не ахти ага, но есть пара книжек вроде уже, народ работает над либами, вон недавно читал про в дропбоксе зарелизили сервис на расте, коммьюнити растет потихоньку, статьи пишутся
для веба пока не готов
о, даже на русский язык книгу перевели https://www.gitbook.com/book/kgv/rust_book_ru/details
ага, надеюсь что взлетит. Макросы там есть, вырвиглазные конечно после аст кложуры но жить можно, мета можно делать
Ну если они хоть каким-то боком еще асинхронщину цепляют (та, что target goal у go), то должен
> That’s where Go enters the picture. One of Go’s reasons for existence is to make developers more productive после этой фразы возникают сомнения в дееспособности автора, конечно
хм, у меня есть N асинхронных запросов, я хочу их дернуть все одновременно но обработать ответы в изначальном порядке (без кор.асинк, не охота тащить ради тока этого). Простой способ создать атом/очередь, положить туда все запросы, обрабатывать ответы по одному сверяясь с атомом, мутируя его с отработанными запросами и прочее некрасиво ни разу.
у меня кложураскрипт
забыл сказать сразу, сори да
но я б притащил коре асинк, всё равно ж ещё понадобится — как аяксы всякие обрабатывать?
ага, массив должен быть мутирующим, флажок еще. А как-нить красво без стейта такое не?
да неа, у меня одноразовый скрипт тут
ну кста и да - сделали бы бекэнд для LLVM вааще ништяк бы было
There is one version that compiles Clojure to scheme, which can be compiled to C which can be compiled to binary code
да, мир си. это сразу мир железа и драйверов. контроллеры там всякие... а также вычисления на видеокартах и прочие вкусности.. - там следующим этапом останется clojuere по верх VERILOG или VHDL)))
вот так нормально искать количество разных элементов в двух векторах?
(count (filter #(false? %) (map = [1 2 3] [1 2 4])))
а они отсортированы?
мож лучше множество
codebattle?
просто попарно сравнить? длина одинаковая?
у меня есть некоторый эксперимент. Известно правильное разбиение, есть структурный параметр, который надо подстраивать. Ищу количество ошибок для каждого посчитанного разбиения
а стандартный diff кста не умеет вектора? он тока с мапами?
а неа, умеет
(diff [1 2 3] [5 9 3 2 3 7]) ;;=> [[1 2] [5 9 nil 2 3 7] [nil nil 3]]
дак Recursively compares a and b, returning a tuple of [things-only-in-a things-only-in-b things-in-both].
не, трансдьюсеры не покатят, погорячился, мэп в такой форме принимает только один аргумент, если я не ошибаюсь
https://clojurians.slack.com/archives/clojure-russia/p1450603186003977 1.5 недавно вышел
а вы видели, какой в clojuredocs 404? http://clojuredocs.org/clojure_contrib/clojure.contrib.seq-utils/indexed
для простого есть встроенный time
, а так https://github.com/hugoduncan/criterium/
Странно что никто не попробовал clojure на racket портировать - там наверно половину можно ридермакросами сделать ;)
@nicola: А какие плюсы от этого? Я ракет плохо знаю. Он по перформансу быстрей?
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...
название что-то не ахти - в энтерпрайз тяжело такое притащить
не сказал бы - мне сказали что нужно быть ментально больным чтоб на нем писать :))
у меня получилось через cljs :) Я притворился дурачком и сказал, что не знаю джаваскрипт и буду писать на cljs. А потом, что хочу писать клиент и сервер на одном языке.
я вот тайком кложу с ерлангом пропихнул ))) всем пока говорим политкорректно - платформа java
@pacman: ерланг или экиксир?
незнаю, удивляет ступор многих разработчиков при виде лиспа.. ну и кложи в частности.. неужели люди обладают таким когнитивным торможением, и низкой нейропластичностью что боятся кложи... ладно там если бы их хаскелем пугали
ugh I can't stand lisp, all those parentheses
https://pbs.twimg.com/media/CWcOxD7UAAEFMe1.png
> Как минимум запускаться наверно будет быстрее ;) http://blog.ndk.io/2014/02/11/jvm-slow-startup.html
@artemyarulin: не пока просто erlang. я в нем начинающий. я решил его взять по нескольким причинам, вопервых подходит под часть проекта. там работа с протоколами на уровне битов и байтов . низкий уровень. ну к примеру ICMP пакеты или telnet , во вторых хочу обрести опыт за пределами jvm, так скать расширить кругозор и ощутить другую сторону жизни. хотя раньше кодил на си и си++... ну и самому чертовски интересно))) До Элексира я позже добирусь если надо будет.. главное что мне необходимо это ФП и иммутабильность. это есть в erlang
дада, читал про отличные возможности работы с бинарными данными из коробки прям
в продакшен чонить выпустили уже на нем?
ооо даа)) У меня друган скалист - все уши им прожужжал с ними, офигенная концепция. Под жвм есть реализация
да у нас закрытый проект. технический. ну оно все изначально в продакшене и работает посути. за оборудованием следит и опрашивает. а учет всякий и прочую логику на clojure
Да, в свое время когда только начал постигать ФП, друг надоумил меня непременно прочитать sicp. Ну читать то одно а решать задачи от туда совсем другое.. прорешал 2 первые главы.. на Racket. дальше духу нехватило... позже уже вдарисля в 4clojure... Так вот, что я хочу сказать - SICP отличный повод поковырять racket
я до сих пор думал что racket это сугубо академическая штука в основном для студентов... чесно не знал.. Так на нем уже кровавый интерпрайз пишут вовсю???
@nicola: то что вы прочитали SICP это я в курсе. смотрел много ваших призентаций... я имел ввиду что например неплохо было бы как раз токи упоминать ракет как отличную штуку для старта начинающим
ctm очень хвалили, ага ( http://michaelrbernste.in вот тут чувак про неё писал серию блог постов)
core.typed вроде калька typed racket
хз, ну гдето читал что украден, тьфу inspired by typed racket
Начал играть с racket - к емаксу такой плагин - http://www.nongnu.org/geiser/
Добрый вечер Очередной раз скачал LightTable, вроде нет жёстких глюков, которые были год назад.
Каковы у него вообще возможности по работе с Clojure? Есть ли в нём что-то типа того же CIDER?
Это все вроде есть, ребята которые внутрь год назад заглядывали - возмущались - непонятностью кода, может стало лучше. Его всетаки на коленке за год налабали
а чем он лучше чем емакс? емакс чем то плох? с сидером он вроде очень даже ах
я просто первый год с емаксом - эйфория от возможностей пока не прошла
вариантов как я понимаю для кложуры то емакс, вим, ligthTable да курсив
ой тока счас заметил ошибку, канонично ы:)
ну в будущем почему бы и нет. http://DOT.NET же теперь на Linux портируют да и clojure под него уже есть
о кста, никто не знает - он живой? клоужера для нета?
буду спамить про racket: зато есть инфиксная нотация и какието @-expressions http://pkg-build.racket-lang.org/doc/infix-manual/index.html :+0.5
тока строки? Остальное все иммутабл?
а по дефолту иммутабл хоть все?
как в расте например
хотя может зря я гоню, у нас в clojure есть java мутабельная под копотом и мы можем к ней прибегнуть если что
http://leksah.org/screenshots.html ( + http://chris.printf.net/pretty-unicode-haskell.png )
всмысле? чо за стрелочки?
о вау, а можно такое для емакса и для кложуры?:)
ну картинки он умеет же вроде https://www.gnu.org/software/emacs/tour/images/splash.png
https://github.com/s-mage/k-means-clj хотите поругать мой код? :) Правда, там бардак местами, есть куда ругать
@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? %)
Классная презентация: https://www.youtube.com/watch?v=EMv_8dxSqdE Никто не смотрел акку? Ну и вообще модель акторов на кложуре? Можно ж микросервисы реализовать как акторы, запустить сегодня на одной машине, завтра на 10 серваках - но вызываемый код останется тем же. Или не?