
Алексей
14.10.2018
11:48:52

Alexander
14.10.2018
11:52:04

Сергей
14.10.2018
11:54:21

Алексей
14.10.2018
11:55:27

Google

Сергей
14.10.2018
11:55:48
Да

Алексей
14.10.2018
11:56:02
хм

Сергей
14.10.2018
12:01:34
Ты инкрементишт регистр, причем конкурентно из нескольких потоков. Они заинкрементятся корректно, но может быть гонка данных. Если бы было не число, а структура, ты бы ее сделал некоррекьной без лока
Данные иногда бились

Евгений
14.10.2018
12:02:11

Алексей
14.10.2018
12:08:47

Сергей
14.10.2018
12:09:06
Я про память

Евгений
14.10.2018
12:10:03
отучаемся говорить за весь интернет
И заодно начинаем читать смайлы))
Кроме того, что понятие "дефолтный гошник" такое же абстрактное как "сферический конь" поэтому ни к кому конкретно относиться не может

Алексей
14.10.2018
12:10:11
Я про память
Тогда что значит "заинкрементятся корректно, но может быть гонка данных"? Как это понимать?

Сергей
14.10.2018
12:11:51
Заинкрементятся = данные не побьются. Со сложной структурой данные будут биться - часть полей будет из одного потока, часть из другого

Алексей
14.10.2018
12:15:46
Что значит данные не побьются? Если n потоков сделают обычный инкремент одного и того же значения памяти, может ли после этого оказаться в памяти число отличное от исходного + n?

Сергей
14.10.2018
12:18:56
Когда ты меняешь элементарную структуру, ты ее никогда не испортишь. Число останется числом. Может быть гонка, но данные будут кооректными. Сложную структуру можно наполовину одним потоком записать, наполовину другим. И это будет битая запись вообще

Google

Алексей
14.10.2018
12:20:04
Я что-то спрашивал про сложную структуру? То что число остаётся числом это и ежу понятно. Вопрос лишь в том, будет ли это корректное число?

Сергей
14.10.2018
12:21:20
Кароч почитай какую-нибудь книжку, статью про многопоточное прогрпммирование на си. Там все ньюнсы разжеваны

Алексей
14.10.2018
12:21:57
Просто инкремент значения в памяти - это чтение из памяти, сам инкремент, запись в память, то есть гипотетически это не атомарная операция, потому что другое ядро может между чтением и записью сделать своё чтение и запись и записать фактически неверное значение.

Alexander
14.10.2018
12:23:19

Сергей
14.10.2018
12:23:19
Именно ассемблерный inc

Alexander
14.10.2018
12:23:55

Сергей
14.10.2018
12:24:05
Просто переменная в твоем коде - уже нет

Алексей
14.10.2018
12:26:22
потому что команда одна, а фактически операций сразу три
насколько я знаю, процессор не будет прерывать на середине выполнение команды inc [eax], но это не особо гарантирует её атомарность, потому что у нас скорее всего есть другие ядра или процессоры, которые могут выполнить свой inc [eax] одновременно для той же ячейки памяти

Zver
14.10.2018
12:31:52

Алексей
14.10.2018
12:33:09

Alexander
14.10.2018
12:33:35
Мда, пздц, сколько же костылей надо поддерживать разработчикам x86 процессоров

Алексей
14.10.2018
12:34:28

Alexander
14.10.2018
12:36:16
> как мне кажется
Ну это совсем несерьёзный подход, у набора команд есть спека, в которой либо определено это поведение, либо это является UB.

Zver
14.10.2018
12:36:31

Алексей
14.10.2018
12:36:48

Google

Alexander
14.10.2018
12:37:27

Алексей
14.10.2018
12:39:18
Да и само наличие явного lock префикса как бы намекает.

Zver
14.10.2018
12:41:10
В общем используйте атомики и спите спокойно. )

Nikolay
14.10.2018
12:43:34

Zver
14.10.2018
12:48:54

Nikolay
14.10.2018
12:49:11

Zver
14.10.2018
12:50:26
Атомик в пул, пул в мютексы, а мютексы в уайтгруп. ?
Для надёжности.

Сергей
14.10.2018
12:51:10
Пишите однопоточный код и волосы будут послушными и шелковистыми

Алексей
14.10.2018
12:51:47

Maruf
14.10.2018
13:09:55
Всем привет! каким образом можно брать параметры query из url и формы без конфликтов
r.URL.Query().Get("date")
r.PostFormValue("date")
проблема в том, что они перекрывают друг друга, хотя мне нужно брать один и тот же параметр или через url или форму, чтобы сделать запрос в БД

Savely
14.10.2018
13:11:08

Kolunchik
14.10.2018
13:15:04
Видимо имеются в виду, что данные могут поступать через body или query (post/get)

Maruf
14.10.2018
13:15:32
да
верно

Savely
14.10.2018
13:16:30
ну а проверять просто и то и другое нельзя?

Maruf
14.10.2018
13:16:58
то есть не пойму как фронт прописать так, чтобы можно было параметры прописать в url а потом через r.URL.Query().Get("date") получить параметры

Savely
14.10.2018
13:17:34
эээ

Google

Savely
14.10.2018
13:17:56
всё ещё не могу понять в чем вопрос
передаем в URL, ну ок, передавайте

Vladimir
14.10.2018
13:18:34

Vadim
14.10.2018
13:36:19
Кто знает каким образом так оптимизировали?
https://gist.github.com/311169ef04e27fe469ca91859af9cdff

Marlik
14.10.2018
14:14:41

Vadim
14.10.2018
14:15:15

Marlik
14.10.2018
14:16:06
Поэтому ваш вопрос видимо к разрабам языка.

Roman
14.10.2018
14:18:43

Алексей
14.10.2018
14:20:09

Zver
14.10.2018
14:21:45
Что-то в последнее время тут спор не о чем.

Roman
14.10.2018
14:21:51
Да нет, правильно.
они впилили генерики, встроенные и интерфейсные посчитав что этого вполне достаточно для решения их задач (Go во первых они делали для себя и для Google). Это решение было осознанным и обоснованным (ради уменьшения сложности языка)
хорошо ли это действительно или нет? это уже другой вопрос, на который у меня наверное только очень поверхностный ответ: я не знаю, ни в том, ни в обратном не уверен))
traits в Rust'е на самом деле выглядят очень интересно, гораздо лучше C++ шаблонов
а от C++ генериков у меня жилудочное наружу просится

Алексей
14.10.2018
14:21:55
Они собственно сами утверждают, что дженерики как бы нужны вообще-то, но только непонятно как их реализовать так, чтобы и компилятор не тормозил и сгенерированный код тоже норм был

Zver
14.10.2018
14:23:32

Roman
14.10.2018
14:24:26

Алексей
14.10.2018
14:24:26

Roman
14.10.2018
14:26:51
помню как-то в интервью Пайк сказал "зачастую в языке столько возможностей решения проблемы, что ты больше времени тратишь на размышление того какие инструменты применить, чем на написание кода. Go должен иметь только 1 путь решения проблемы для повышения продуктивности"
и в этих словах есть смысл учитывая что Go разрабатывался скорее не как "general purpose programming language" а скорее как "cloud infrastructure and application programming language"
мне кажется проблема в том, что люди слишком сильно хотят видить Go именно как "gen. purpose programming lang.", хотя он изначально для этого не изобретался

Google

Roman
14.10.2018
14:28:12
вобщем - классика)
но и это желание вполне оправдано. Ведь Go показал что способен на большее чем просто серверный ПО клепать

Zver
14.10.2018
14:31:04

Roman
14.10.2018
14:31:48

SkyCoffee
14.10.2018
14:33:52
RefCell и прочие техники GC уже есть в Rust, наверняка какая-нибудь #(feature) появится для GC. Врядли гибкость, многообразие функций и ругательств компилятора появятся в Go

Zver
14.10.2018
14:34:18

Roman
14.10.2018
14:34:19

SkyCoffee
14.10.2018
14:34:51
RefCell?
Box, RefCell... Там куча вариантов, я давно не ржавел)

Roman
14.10.2018
14:35:12

Zver
14.10.2018
14:35:35
Мне нравится наследование. ?

Roman
14.10.2018
14:36:05
выстроить систему типов с наследованием, чтоб потом понять, что требования изменились и всё к чертям нужно валить и заново выстраивать с другой иерархией..

SkyCoffee
14.10.2018
14:36:06
ООП позволяет неограниченно глубокие древовидные наследования, это делает его потенциально сложным

Daniel
14.10.2018
14:36:38
Потенциально?

SkyCoffee
14.10.2018
14:37:01
Да, ведь можно обойтись без построения слишком глубоких наследований на практике

Daniel
14.10.2018
14:37:13
Не видал

Zver
14.10.2018
14:37:20

Roman
14.10.2018
14:37:53
вот без encapsulation жить сложно, это значительная часть OOP, её бояться не стоит