← All posts tagged programming

SannySanoff
programming q продуктивность Я норкоман, я хочу научиться писать интерпретаторы (на самом деле хотя бы парсеры) языка k в Whitney-style, и написать конпелятор из k в julia, это будет реальная бомба. Ибо щас k похож на python+numpy, и в нем лупзы тормозят. А так будет натуральный jit с цлангом, шаблонами (жулиа тайп-базед диспатч) и шлюхами. Улёт, не так ли?
SannySanoff
programming q вброс Дофига пишут софта "который делает kdb+ по перфомансу".
Clickhouse, LocustDB, QuestDB, всякие columnar движки к postgres, тысячи их.

Только нафига они, если там в них нету APL-like language, а писать простыни SQL ... да я бы и писал, если бы он был хоть выразительный (как oracle/postgres, correlated subqueries, неодномерные типы итп), а то кроме select ..where.. ничего и не предлагается по большому счёту.

Да и простыни SQL, зачем мне SQL, клиент-сервер, петоно-жабо-клиенты , зачем мне ходить куда-то по протоколу и запускать какие-то запросы (в цыкле. одного запроса мало)? Зачем это всё, если (1) есть kdb ? Что они пытаются достичь, не начав с языка который рядом с данными и не вписывается в SQL семантику? Какой нафиг SQL? Движки фигня..

(1) для ниши анализа numerical big data
SannySanoff
жизнь programming продуктивность Собрал себе девайс на Ryzen 3900x (как писал раньше, 3950х не досталось).
Карту Radeon туда воткнул.

Погонял: венду, clear linux, ubuntu 19.10.

Clear Linux сырой, и какой-то атипичный. В /etc/environment (грубо говоря) лежат CFLAGS которые портят мой билд, например. Кучи дефолтных файлов нету или хрен найдешь (например sysctl.conf), ставится всё чересчур неприятно, половины софта нету. Хотя по бенчмаркам на AMD — он самый быстрый. Ну, наверное.

С++ билд моего проекта ускоряется до 12 потоков, далее 24 он остается таким же. НО на это влияет, естественно, самый большой С++ файл, который компилится один, в конце списка, но может и не он 8). Как в cmake переордерить — яхез, ну и нафиг.

AMD для линукса по ощущениям лучше, чем NVIDIA, т.к. последняя где-то по ощущениям течет (открытая сессия через несколько часов чуток тормозит в отрисовке — субъективно, с Radeon такого нету). Всякие webgl вертятся на ура.

Предыдущий основной девайс — Lenovo + Intel 8550H. По ощущениям разница весьма заметна.

Вердикт: ничо так, всё не зря.
SannySanoff
C++ programming Я перевел свой проект на асинхронные корутины, с асинхронных promises/futures/callbacks (всяких .then)

Теперь можно потихоньку выкидывать шаред пойнтеры КОЕ ГДЕ, а вместо них старое доброе RAII, потому что код по структуре теперь как синхронный, и не нужно ничего передавать в continuations, референсы каунтить итп.

Процентов на 15 медленнее стало, разве. Но шаред пойнтеры тормозят все 30.

Цифры приблизительные.
SannySanoff
programming политота тоталитаризм интеллектуальное_гопничество Становлюсь старее и наблюдаю хождение людей по кругу.

Вот язык Go, в котором чуваки типа анализируют всё хорошее и выкидывают всё плохое — я например заглянул в их документ "Summary of Go Generics Discussions" — там ссылки от Ады до Хаскеля, т.е. чуваки в курсах. Я внутренне симпатизирую этому языку, хотя еще не писал. Не проникся духом этого языка и, стало быть, могу критиковать, навлекая на себя гнев "ты сначала это, а потом уже!" Ну, поэтому я еще и читаю что бог пошлет, например "Go's features of last resort". Там ссылки на несколько статей. Все статьи гуглибельны по названию.

Вот одна статья "Exception Handling Considered Harmful", в которой пишут, что эксепшны
— это плохо, потому что неочевидный для читателя control flow и полу-мутировавший глобальный стейт, прерванный на середине исключением, что 99% С++ кода не являются exception-safe и прочая ересь. Очевидно же, человек заучился, щас расскажу почему.

Вторая статья под первой называется "A theory of modern Go" там чувак рассказывает школьникам, что мутабельный стейт это плохо, говорит, что нужно передавать в функцию всё параметрами, а глобалы это оцтой, потому что из плохой сигнатуры функции не видно как данные ходят, и где они прячутся.

То есть они что-то знают, но еще не увязывают это всё.

Вероятно, они не в курсе, что уже давно уже не кошерно перемежать чистый код и код с сайд-эффектами. Что нужно сначала думать, а потом в файлы писать и глобалы менять. Тогда и эксепшны зайдут вполне норм, и в Go тоже, потому что эксепшны в pure functions это есть гут. У меня вот чистого кода на плюсцах 80%, и RAII в полный рост, а они меня записали в 99% exception unsafe, и на go я теперь писать не буду, потому что "if err\n { return err; }" увеличит мой код в 2 раза. Мне обидно, но я понимаю теперь, что это просто школьники ходят по кругу, и что это просто очередные миллениалы изобретают очередной велосипед под задачи перемешанного кода.

Теперь Саша Коэн наехал ( businessinsider.com ) на Цукерберга, что тот заменил свободу для всех слова свободой пропаганды для определенных лиц. Цукерберг оправдывается и строит из себя школьника, изобретающего как ему распорядиться той силой, которую он себе неожиданно построил — послушайте только его речи — он в самом пути деланного хождения по граблям. То есть он сначала строил, а теперь только думает как распорядиться. Типа он школьник, и не читал философских трудов где всё расписано, как обустроить хорошо. Многие верят. Они вынуждены ходить кругами под Цукербрином, и впереди цифровая диктатура, потому что сами они ничего не читали, не знают, и знать не хотят. Поэтому и будут жить при диктатуре, полагая что это демократия.

Скучно тут.
SannySanoff
Juick programming beta.juick.com. Всегда использую свободное место справа и слева от контента чтобы уехать туда мышой и скроллить, чтобы не закрывать мышой контент случайно. Или ткнуть туда мышой чтобы скроллить стрелками (особенности работы с клавой некоторых бровзеров — требуют клика).

Not anymore.

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

Алсо, после нажатия на next, скроллящийся див остается в самом низу, предлагая нажать снова next, а надо бы прыгать наверх. Ну, наверняка это уже зарепортили, мож я слоупок.
SannySanoff
programming тоталитаризм аморальное Гребаные активизмусы уже тянут руки к моей тихой пристани, gitlab, который просто работает.

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

NB активизмус (негативн.) = личность, производящая activism разнообразной природы.

via reddit.com
SannySanoff
programming С++ Самая привередливая из всех dependencies для текущего проекта — это плюсовая либа GRPC, с ней постоянно что-то не так, она резко выделяется из остального зоопарка. Из гита скрипт ее сборки идет с "treat warnings как errors", и это означает, что изначально есть настрой на победу — она наверняка не будет работать с твоим компилятором или дистром. Приходится патчить отключать эту опцию, варнинги потом норм, совершенно безобидные, все собирается, работает.

Из последнего: текущий релиз (1.23.0) не собирается на убунте 19.10, потому что переопределяет функцию из системных инклудов, в ранних убунтах, арчах итд этого не было.

Поэтому фиксировать в билд скриптах версию в GRPC и подобных СТРАННО написанных пакетов — бессмысленно, потому что через год все равно не соберется.

И самое жеж удивительно, все эти глюки со сборкой — НЕ оттого, что там, в GRPC, они выжимают последний миллиметр оптимизации ради, задействуя недокументированные или нестабильные фичи — это бы я понял. В совершенно тупых местах нежданчики. То ли горе от ума, то ли еще какой-то фактор.
SannySanoff
C++ programming продуктивность В CLion мейк и gdb отладчик делают программу компиляться-запускаться 23 секунд до выполнения кода (1 c++ файл поменялся). Хочется открыть reddit и читать туда, покуда оно чухается.

в Qt Creator ninja и gdb отладчик делают это за 11 секунд. Можно только почесать бок и поковыряться в носу, и снова работа.

Я знаю, что есть места, где пишут гамезы например, или деплоят на борды, там с меня будут ржать, но у меня просто лапки, мне нужно править и запускать.
SannySanoff
programming Haskell продуктивность Я вот думал раньше, что Java — она toolable, потому что у ей type-aware автокомплит можно легко сделать, ну типа

string.| // <- autocomplete here

показывает методы. А думал с хаскелями не прокатит, т.к. хрен ты методы найдешь.

А щас дотупил, что ведь у Хаскелей же то же можно делать, но хотя на женерик листах далеко не уедешь ибо тысячи их, так ведь и проблема-то не с ними, а с тем чтобы фильтровать все методы работыющие на определенных типах, а их-то сильно меньше..

data Point = Point Int Int deriving Show

let distance (Point x y ) (Point x1 y1) = sqrt $ fromIntegral $ abs(x-x1)+abs(y-y1)

let move (Point x y ) dx dy = Point (x+dx) (y + dy)

let somePoint = Point 10 20

Нажимаешь автокомплит, а оно тебе комплитит не после, а до:

move (Point 3 3) 4 5 | <-- this is cursor

autocomplete:

distance _ $ move (Point 3 3) 4 5 причем выражение твое покоцано, но ясно что оно.

show $ move (Point 3 3) 4 5

— ...... и посортировано значит с умом, по статистике, и позволяет стало быть

нажимаешь distance, и тебе тут же:

distance | $ move (Point 3 3) 4 5 и $ добавлен, и курсор поставлен.

нажимаешь потом еще раз автокомплит, а оно тебе:

somePoint

(Point )

Сложно форматировать псто, но чото легче стало, ибо будущее отчотливо (мне). Вон некий известный хаскельный крендель устроился в jetbrains, не иначе как они задумали что-то.
SannySanoff
C++ Windows programming Внезапно сообщаю, что грустная тема из псто #2944954 (как писать на плюсах под вендой если ты основательно сидишь на jetbrains IDE) имеет продолжение.

Clion + MS Compiler — нету отладчика
Во-первых в последней бете отладчик завезли, отлаживается через lldb, да вроде основные функции работают, всякие ушлые условные брекпойнты итп еще не допилили.

Во-вторых, нашел параллельный билд для CL (ms c++ compiler) (раньше не было), называется он jom, и притворяется nmake, и написан отчего-то на qt core, да пусть хоть на питоне.

Короче, проделал бенчмарки как конпелится мой проект, активный кусок который я пилю (36 compilation units, сильно не без templates), thirdparty и холодные куски не перекомпиляются, debug build:

28 sec = msvc 2019, jom instead of cmake, win
19.3 sec = cl /mp, visual studio 2019 (msbuild?), win
11.5 sec = zapcc(implements clang-7), linux
18.904 = clang8, linux
23.785 = gcc9, linux

такие дела. Говорят, clang умеет притворяться CL, осталось собрать zapcc под вендой и проверить его в этой роли.

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

А вся эта байда с вендой потому что линукс не вышел у меня из слипа однажды недавно, скотино. В этой области конечно против гейбуков слова не скажешь.
SannySanoff
Linux Windows programming icfpc А вот готовлюсь к ICFPC. А вот в этом году будем на плюсах. Готовлю заготовку CMake проекта, чтобы он запускался на трех платформах, тк участники будут разные. Qt у меня внутре, в Qt есть QOpenGLWidget, в нем рисую через QPainter (2d graphics). Взял с 2018 года модельку, налабал рендерер (на 2d canvas, сам делаю перспективные проекцыи и сортирую по z-index ерунда короче)

MSVC/Windows: Отрисовка 140мсек, математика 4 сек
Clang/Linux: Отрисовка 115мсек, математика 2.5 сек.

Оба — релиз билды на одном железе, время — на 1 frame в анимации. Знаю, шо отрисовка медленно, не в этом суть.

Главное беспокоящее, что что-то чахнет колосс.