Григорий
13.01.2018
14:54:18
Pavel
13.01.2018
14:54:29
нет вроде
A64m
13.01.2018
15:42:34
так это многопоточный бенчмарк
Google
A64m
13.01.2018
15:43:03
а речь была про "производительность однопоточных приложений"
но производительность у окамла не особо хорошая, конечно, но сносная
тем более ему теперь и оптимизатор сделали еще
n06rn
13.01.2018
15:52:05
подскажите пожалуйста. Вот есть библиотека создающая чарты: https://fslab.org/FSharp.Charting/index.html
Так указаны примеры различных графиков. Но не написано как и куда их выводить. Подскажите, как и куда это можно сделать?
и что будет проще? Быть может гуи как-то создать, или в .png файл как-то можно
Fill
13.01.2018
16:12:47
n06rn
13.01.2018
16:15:43
после этого появится окошко с графиком. Но это я если честно, просто по-наитию нашел.
все этой же библиотекой для графиков пользуются?
Klei
13.01.2018
16:30:27
Много кто пользуется http://muehlhaus.github.io/FSharp.Plotly .
Но в Charting можно графики реактивно генерить, если вдруг что-то в реальном времени делаешь. С Plotly если и можно, то надо повозиться.
Pavel
13.01.2018
16:33:25
в тех исходниках которые там есть обычно никаких наворотов нет
Google
A64m
13.01.2018
16:34:39
разница то какая?
странно в ответ на сообщение "в целом у OCaml производительность однопоточных приложений очень хорошая" давать многопоточный бенчмарк
Pavel
13.01.2018
16:36:14
кроме учеличения времени в 4 раза
A64m
13.01.2018
16:37:34
но понятно что в таком вот запотимизированном коде имплементация индустриального качества победит наколеночную окамловскую
n06rn
13.01.2018
16:39:38
A64m
13.01.2018
16:39:49
про то что у окамла хорошая производительность не я говорил, сам так не считаю
Dmitriy
13.01.2018
16:40:09
У нас на прошлой работе был окамл
Я бы не сказал, что там что-то сверхъестественное в плане производительности
Цифры, к сожалению, дать не могу
A64m
13.01.2018
16:40:51
но вот в сколько нибудь высокоуровневом коде не так вручную замученном уже может окамл победить, у него теперь оптимизатор есть, в отличие от F#
имеется в виду оптимизатор, который как-то оптимизирует ФП код, естественно коровский джит тут никак не поможет, если ему придется иметь дело со всем этим адским выхлопом F#-ного компилятора для неоптимизированного вручную кода
Pavel
13.01.2018
16:42:56
A64m
13.01.2018
16:43:59
в том и дело что указана, например окамл 0% 1% 0% 100% F# 98% 100% 99% 98%
Pavel
13.01.2018
16:45:03
мандельборт чтоли?
7 * 4 = 28 против 55
A64m
13.01.2018
16:46:01
это mandelbrot. некоторые там и для окамла распараллелены, но там разделяемой памяти нет, так что понятно что там не в 4 раза производительность упадет
Evgeniy
13.01.2018
18:02:43
A64m
13.01.2018
18:13:02
но рантайм и джит пилят не для ФЯ так что полагаться на него можно только если писать как на фортране, а не как на эмеле
Google
Pavel
13.01.2018
18:25:58
A64m
13.01.2018
18:27:17
ФЯ рантаймы, например имеют оптимизации под замыкания и карринг, как первое энкодилось в C# и F# а второе в F# думаю, объяснять не надо, это и так все декомпайлерами смотрели
в этом смысле JVM и то больше под ФЯ оптимизирована
Pavel
13.01.2018
18:32:13
Ivan
13.01.2018
18:38:32
F# рожает классы на каждое замыкание. C# на кадый метод, где есть замыкания. Результат - F# захватывает только нужные переменный, а C# все, которые в хоть одно замыкание входили. Отсюда и Resharper предупреждение о impicit capture. В принципе можно теперь оптимизировать при компиляции через таплы, но народу у нас этим мало занимаются.
Roman
13.01.2018
18:40:37
https://twitter.com/lenadroid/status/951982166946201601
Ivan
13.01.2018
18:40:45
А оптимизация ФП проводится именно на этапе компиляции, а не как не JIT. У последнего слишком мало времени и информации.
JVM оптимизирован под ФП от слова никак. Scala - да. Java - в некоторых местах. А JVM - никак. Хвостовая рекурсия, между прочим, разворачиваться должна компилятором. А у нас для ленивых - JIT разворачивает. Простите чья машина хоть что то умеет. (О дженериках я промолчу, пожалуй)
ФП рантаймы - они для конкретного языка. И оптимизация у них для конкретного языка. А VM типа JVM или .NET - они компьютер виртуализируют. Не среду исполнения языка. А операционку и железо. Так что ждать чудес от Runtime не приходится.
Vladimir
13.01.2018
19:11:12
a знает кто как правильно такое написать на фшарпе
use(dosmth())
{
//somecode
}
я просто боюсь что если написать
use unused = dosmth()
то это вообще джит соптимизирует и удалит, а этого допустить нельзя
Pavel
13.01.2018
19:20:51
не удалит
Ivan
13.01.2018
19:20:54
не соптимизит. все равно в try catch разворачивается с переменной
Vladimir
13.01.2018
19:21:51
ок, спасибо)
A64m
13.01.2018
21:29:13
JVM оптимизирован под ФП от слова никак. Scala - да. Java - в некоторых местах. А JVM - никак. Хвостовая рекурсия, между прочим, разворачиваться должна компилятором. А у нас для ленивых - JIT разворачивает. Простите чья машина хоть что то умеет. (О дженериках я промолчу, пожалуй)
в жвм с 1.8 поддержка для лямбд, там они не просто в классы энкодятся. Хвостовая рекурсия да, в JVM хуже поддерживается, чем в CLR но и там, когда я писал еще на F# она была тормозная из-за безопасности. Ну и хвостовой рекрусии мало, с рантаймах которые под ФЯ разрабатывались вроде sml/nj и ghc используется стек в куче, так что не только хвостовая рекурсия рабочая
Ну и CLR-ных дженериков для ФЯ мало, так что тут никакого преимущества у CLR перед JVM, если нормальный ФЯ делать все равно придется делать дженерики на универсальном представлении как в JVM окамле и гхц
Ivan
13.01.2018
22:43:11
В JVM дженериков нет вообще. Только метаданные, если я правильно помню. У CLR есть реально одна проблема - отсутствие поддержки HKT. Остальное можно решить компилятором. А сравнивать CLR с Глазго вообще нечестно. Они о т нас убежали лет на 10. От всех почти. Даже теория только только становится понятна хотя бы сколько нибудь определяющему количеству программистов, и то не до конца. А CLR - это прежде всего бизнес. Пока МЫ не переучимся, никто соломку бесплатно стелить не будет. А по моим соображениям - ФП уйдет в массы лет через 5, во всяком случае серьезный ФП, а не базовый.
Еще одна проблема - нет поддержки или типов
А преобразование монадного исчисления в конеяный автомат может сделать и компилятор, как и разрешение стека в кучу
Сейчас есть все инструменты, даже прямое защищенное обращение к памяти, вопрос в сложности компилятора
Google
A64m
13.01.2018
22:50:28
может-то может, но на выскокоуровневой ВМ особо с собственным стеком в куче не разгуляешься, тормозить будет
Ivan
13.01.2018
22:51:32
При прямом ремапе можно. В конце концов процессор все равно работает императивно.
A64m
13.01.2018
22:52:22
а сравнивать с ghc нормально, там просто полтора человека поработали над оптимизатором в свое время, ничего сверхестественного нет, никакого рокетсайенса, просто мало кто из имплементаторов ФЯ и старается. В том же окамле вон 20 лет доказывали что оптимизатор не нужен, а потом все-таки flambda стали делать
Ivan
13.01.2018
22:52:35
Если бы ФП ускоритель был реализован на железе - тогда да. Лисп машины к сожалению загнулись..
Здесь я не компетентен, не могу оценить уровень усилий. Для меня это все же пилотаж, возможный, но не тривиальный.
A64m
13.01.2018
22:54:07
да на существующем железе можно сносно работающее рантаймы для ФЯ делать, просто над ФЯ вообще мало людей работает, проще существующий рантайм использовать, но вот всякие клры и жвмы для ФЯ адский ад
Ivan
13.01.2018
22:54:49
А с OCAML: язык не поддерживает конкуренцию в много потоков (не берем Concurrent OCAML). Сейчас это смерть
A64m
13.01.2018
22:55:34
да, ну так там вообще рнтайм на коленке сделали в 90 со всеми этими ужасами с тегами и ограничением на длину массивов, о каком уж там SMP речь
рантаймы делать тяжело, когда над языком полтора человека фултайм работает
Ivan
13.01.2018
22:56:37
Однако я не знаю ничего более продвинутого в смыслке конкуренции, чем Concurrent OCAML/ По возможностям и проработке
У нас вон в телеграме больше 100 человек. Представим, что есть даже деньги. Возможно ли с этим нашим уровнем сделать что то значимое (средним уровнем)
A64m
13.01.2018
22:59:59
не так давно читал оценку Арлекина сколько они потратили на рантайм MPS для RIP/лиспворкс/млворкс/дилана - 30 человеколет
Ivan
13.01.2018
23:00:02
Надо расти самим и растить других. Иначе не получится. Или все упадут на уровень Go lang.
A64m
13.01.2018
23:00:27
рантайм делать это не компилятор по книжке по вечерам за полгода как пурскрипт какой-нибудь
для ghc рантайм новый в 98 году начали делать, до более менее юзабельного состояния с SMP, сносным ГЦ и ио менеджером его только году в 11 - 12 довели
Ivan
13.01.2018
23:03:54
Значимый компилятор написать то же не нетривиальная задача. Особенно оптимизирующий. Такой о каком мечтается (со Старым Новым годом всех кстати). С гигиеническими макросами, HKT, implicit suggestions + среда разработки + инструментарий отладки. Я бы наверное сдулся бы раньше результата в одиночку.
На 3 уровне оптимизации он не очень сильно уступает C++, а сколько людей пишет на Haskel? хотя синтаксически он в сотни раз проще
n06rn
14.01.2018
02:11:27
Подскажите, в VS в интерактивном режиме F# почему-то
> printf __SOURCE_DIRECTORY__ ;;
C:\Users\n06ri\AppData\Local\Tempval it : unit = ()
А должен быть, как я понимаю, адрес открытого проекта. Разве нет?
Pavel
14.01.2018
04:05:23
Friedrich
14.01.2018
05:00:18
Google
n06rn
14.01.2018
05:01:02
Сергей
14.01.2018
05:01:13
n06rn
14.01.2018
05:01:16
вообще в этом чате имеет смысл задавать вопросы по языку?
или лучше на stackoverflow?
Сергей
14.01.2018
05:01:37
Friedrich
14.01.2018
05:01:39
На SO я обычно спрашиваю что-то более комплексное, что в чате в двух словах не объяснишь :)
n06rn
14.01.2018
05:02:12
> gazp.Headers;;
val it : string [] option =
Some [|"<TICKER>"; "<PER>"; "<DATE>"; "<TIME>"; "<CLOSE>"|]
> match gazp.Headers with
| Some i -> i |> Array.map (fun x -> printfn "head %A"x)
| None -> printf "NONE!!!"
;;
| None -> printf "NONE!!!"
---------------------^^^^^^^^^
stdin(8,22): error FS0001: This expression was expected to have type
'unit []'
but here has type
'unit'
Friedrich
14.01.2018
05:03:35
Сергей
14.01.2018
05:04:34
кто нибудь вообще под линуксом сидит ?
я попробовал rider и чет как то после idea слабенько смотрится
Friedrich
14.01.2018
05:05:06
Я эпизодически сижу под линуксом, но там обычно не программирую на F#, а только запускаю F#-софт.
На винде лично мне Rider кажется вполне ок после IDEA и Visual Studio.
Сергей
14.01.2018
05:06:29
Friedrich
14.01.2018
05:06:50
А что он должен был «исправить»?
Сергей
14.01.2018
05:07:15
ну выравнивание как минимум я думаю это вполне та задача
n06rn
14.01.2018
05:07:16
Замени там Array.map на Array.iter
Ага, действительно полетело) Подскажи пожалуйста, дело в том что iter возвращает unit, который является аналогом Null в других языках, а map возвращает обработанный массив, да?