Daniel
на каком языке у вас есть задача для генериков? какая?
Pawel
на каком языке у вас есть задача для генериков? какая?
Например есть много алгоритмов из линейной алгебры, где одни и те же действия делаются с двумя похожими наборами данных (горизонтальные и вертикальные координаты), большую часть времени независимо. И хотелось бы вместо того, чтобы писать одинаковый код и следить, как бы не передать куда иксы вместо игреков, просто лифтануть имеющиеся функции, чтобы они работали сразу с парами значений. Для этого надо что-то вроде - описать, каким образом диагональный функтор (гомогенные туплы) является аппликативным. Тут бы конечно дженерики с тайпклассами сгодились. И контракты, которые они там прдлагали, зашли бы. Но задачка не слишком типичная для Го
Daniel
угу
Pawel
Другой пример - фин. и биржевые расчёты и аналитика, где реально возникает необходимость определять хитрые типы-суммы и каким образом они реализуют монадную bind, например. Иначе задолбаешься писать с ними однотипный код. Но опять таки - насколько это актуально для программ на Го, которые мы тут пишем - вопрос
Daniel
а вот биржевые расчеты я делал, и тут весьма уместа кодогенерация
Daniel
потому как формат описания этих расчетов хорошо бы использовать человекочитаемый
Pawel
да, я тоже по этому пути пошёл. Вот буквально недавно наловчился писать кодогенераторы
Roman
со всеми, надо сказать, вытекающими, вроде сдвига элементов массива при удалении первого
Я все понимаю. Но вот хочу я такой мап и чтобы его можно было подсунуть остальному коду без переписывания
Daniel
а тебе зачем?
Daniel
если не секрет
Roman
а тебе зачем?
Упорядоченный мап? Или вообще возможность подсунуть свой контейнер?
Daniel
упорядоченый подсунуть
Roman
упорядоченый подсунуть
Упорядоченный - как пример
Daniel
примеров я могу и сам придумать
Daniel
мне хочется с конкретной задачей познакомиться
.
Как вы делаете валидацию данных запроса? Например, есть запрос с такими данными: { "token": "11111111111111111111111111111111", "users": [{ "name": "Михайленко Денис", "phone": "0980000000" }] } Все это парсится в структуру, в которой тэгом обозначен паттерн, которому должно соответствовать поле: type UsersUpload struct { SessionToken string `json:"token" pattern:"^[a-zA-Z0-9]{32}$"` Users []struct { Name string `json:"name" pattern:"^[\\p{L}'-]+\\s[\\p{L}'-]+\\s[\\p{L}'-]+$"` Phone string `json:"phone" pattern:"^[0-9]{10}$"` } `json:"users"` } Каждое поле должно быть провалидировано. Сейчас у меня есть самописный валидатор, но я чувствую что он написан ужасно. Что посоветуте?
Stanislav
нет уж, не надо
да я согласен 🙂
Anonymous
Ребят, пишу микросервис авторизации Какую базу лучше взять для сохранения пользовательских данных (логин/пароль/еще несколько ключей) склоняюсь к Mongo, но может есть что-то более подходящее под эту задачу?
Roman
Roman
https://youtu.be/R2RJWLcfzwc?t=13m7s нам нужно что-то подобное в Go что-то что анализирует изменения в экспортируемых символах пакета и автоматически определяет новый version number
саша
мне вот не хочется :)
если вам чего-то не хочется, то вы можете продолжать использовать Go1 :)
саша
потому как формат описания этих расчетов хорошо бы использовать человекочитаемый
> кодогенерация > человекочитаемый код Вы дженериков за пределами джавы и плюсов совсем не видели, да?
Alexander
лол. тут женерикосрач с прошлого утра?
саша
в плюсах нет дженериков
Не придирайтесь к словам. Там есть темплейты, которые покрывают 99% кейсов, для которых нужны дженерики.
Мерль
упорядоченый подсунуть
Из того, с чем недавно столкнулся – у монги порядок полей в query имеет значение
.
Спасибо!
Nix
подскажите как нативно извлечь слово из текста, есть возможность ставить суфик с прфиксом $или % тримом?
Roman
Ладно, спрошу не про дженерики: что вы делаете, если ваш код медленный, а возможности по оптимизации уже исчерпаны?
Nix
Тексте есть слова экранированы "bla bla $slovo bla" нужно достать $slovo
L
Ладно, спрошу не про дженерики: что вы делаете, если ваш код медленный, а возможности по оптимизации уже исчерпаны?
если еще медленный остается, то либо другой алгоритм нужен, либо возможности по оптимизации еще не исчерпаны
L
Нельзя другой алгоритм, увы.
слишком абстрактный вопрос
Roman
слишком абстрактный вопрос
Окей, вот есть, допустим crc32c, как его ускорить?
L
что вы имеете ввиду под ускорить? по времени?
Alexander
Ладно, спрошу не про дженерики: что вы делаете, если ваш код медленный, а возможности по оптимизации уже исчерпаны?
Лол. Расширяю сознание. "Медленный код" это древний миф, если код написан нормально он не может тормозить сам по себе. Тормозят либо внешние компоненты, куда ваш код бегает (база, сетевые вызовы), либо не хватает ресурсов сервера. Крайний случай, когда вы действительно что-то специфическое пишете: HFT, число-дробилки, но это уже отдельная тема и скиллы разработчика должны соответствовать сложности задачи.
Alexander
Ну давайте сравним aes на sse/avx2 и без них
Зачем или вы сами их реализуете?
Roman
Могу перефразировать: что делать когда компилятор недостаточно хорош?
M
Ну давайте сравним aes на sse/avx2 и без них
aes уже лет 10 как в процессоры встроен.
Roman
Зачем или вы сами их реализуете?
Это не имеет значения, т.к. на том же arm64 или mips/mipsel все печально
Roman
Roman
Воспользоваться ассемблером?
Вы пробовали это делать?
Васильев Виктор
👍
Вот только проблема в том что на сколкьо ты умнее компилятора
Васильев Виктор
👍
Да вполне
Мерль
Окей, вот есть, допустим crc32c, как его ускорить?
зависит от обстоятельств если дешевле будет переписать на си или что-то подобное — то переписать на си если оптимизировать с помощью Go ASM — то использовать его я неправ?
Alexander
Могу перефразировать: что делать когда компилятор недостаточно хорош?
В такой формулировке - ок. Я не лазил в гошный компилятор, могу сказать по опыту жвм, чтобы ускорить надо точно знать что ваша задача специфична, и поэтому её можно ускорить какими-то unsafe хаками, при этом разбираться в кишках языка, компилятор и рантайма не хуже людей, которые его создали. Или, как крайний случай пилить своё, заточенное под вас, как например у Алибабы есть своя jvm
Alexander
Второй путь подразумевает огромные затраты
Васильев Виктор
Современные компиляторы достаточно умны чтобы покрывать 95% задач примерно по оптимизации низкоуровневых вещей. Все остальное это высокоуровневые оптимизации\
Васильев Виктор
так что чаще всего проблема в прослойке между креслом и клавиатурой
Roman
Вот только проблема в том что на сколкьо ты умнее компилятора
Гошного? Значительно. Банальный loop unrolling дал двух кратное ускорение
M
Гошного? Значительно. Банальный loop unrolling дал двух кратное ускорение
Так это возможно и не проблема комплятора, если я понял правильно loop unrolling
Васильев Виктор
Гошного? Значительно. Банальный loop unrolling дал двух кратное ускорение
loop unrolling это оптимизация которую сложно предсказать в больших случаях поэтому большинство компиляторов делают ее только в простых кейсах. Я ее делал даже в компиляторах на С++ типа ГЦЦ и тоже давало прирост производительности
Васильев Виктор
Так что это вполне себе оптимизация кода программистом
M
Так что это вполне себе оптимизация кода программистом
Это если знаешь платформу хорошо, при переносе на другую может и обратная ситуация случится
Васильев Виктор
Это если знаешь платформу хорошо, при переносе на другую может и обратная ситуация случится
Естественно. Поэтому я и говорю что это оптимизация кода программистом а не компилятором. Так как нужно учитывать вещи и тестировать
Alex
День добрый. Формирую запрос к бд в таком виде fmt.Sprintf("EXEC [dict].[User] @areaId=%d",request.AreaID) request.AreaID это *int. Как мне сделать чтоб текст запроса сформировался @areaId=null если AreaID=nil? %d - даёт 0 %v-<nil>
Васильев Виктор
Это как пример. Другое дело что если я разверну код руками, то в случае с gcc там будет simd, а как бы я не мучился с go, там такого не будет
для этого есть gccgo. Сам го компилятор молодой и впихнуть все эти оптимизации мелкие еще не успели. Не так часто нужен SIMD на самом деле. По факту - да оптимизаций таких пкоа нет без вопросов. Но кейсов таких важных оптимизаций для го программ я пока не встречал. вернее встречал но их было пара всего на кучу проектов. То что оптимизаций таких нет - безусловно плохо, но не критично, так как язык молодой то вполне себе скоро реализуют. А то чего нет можно сделать как раз на ассемблере если именно это вляется узким местом
Alex
Да эт понятно, Я подумал мб что-то у Sprintf есть
Alex
спасибо