@dlangru

Страница 682 из 719
Toha
13.09.2018
11:57:10
Когда мне нужно передать какую то структуру в канал, я пишу chan <- myStructInstance

Pavel
13.09.2018
11:58:24
Там есть вообще immutable ?

Toha
13.09.2018
11:58:55
а я не знаю :)

https://github.com/nolka/gooffroadmaster/blob/master/mvc/controllers/track_converter.go#L97

Google
Toha
13.09.2018
11:59:52
вот пример как я на каналах делал отправку ответов ботом в террограм)

Karbin
13.09.2018
12:01:19
immutable тоже tls. может ограничение связано с этим?

в go есть tls? если нет, то логично что в каналах можно передавать переменные любых потоков

Pavel
13.09.2018
12:18:51
Karbin
13.09.2018
12:20:19
да

Dmitry
13.09.2018
12:20:25
оффтоп: Vue Element рулят! Я в полном восторге от них!

Karbin
13.09.2018
12:20:38
и не похоже на проблему. скорее так специально сделали

Dmitry
13.09.2018
12:23:53
сейчас исходник кину. Краткая суть. Там шина Vuex, кастомный компонент и в нем уже используется Vue Element

В хроме нужно захостить все через плагин http сервера

Pavel
13.09.2018
12:25:01
и не похоже на проблему. скорее так специально сделали
Я смотрел исходники receiveOnly(T...)(T args) и там как раз похоже на проблему. Сначала создается Tuple!(T) t а потом присваиваются поля t = T.fields как-то так. Но поскольку T уже есть иммтуабельная структура то ничего нельзя ей присвоить.

Пусть даже они и TLS, ведь очень логично же копировать структуру в новую чтобы передавать между тредами, а старую структуру не менять. Я собственно этого и добивался.

Karbin
13.09.2018
12:28:19
tls то просто так их не скопировать между потоками

Google
Pavel
13.09.2018
12:28:48
Технически может и да, не знаю, но иммутабельность ровно для этого и придумана )

Karbin
13.09.2018
12:30:17
да, но immatable всё равно живёт в своём tls блоке

похоже баг. есть подобное с AA https://issues.dlang.org/show_bug.cgi?id=13930

пиши в багзиллу. может поправят

Pavel
13.09.2018
12:41:10
Reported: 2015-01-04 02:44 UTC by Martin Nowak Status: NEW может поправят БЕЗЫСХОДНОСТЬ

Более реалистично - я сяду и напишу свою реализацию receiveOnly )

Karbin
13.09.2018
12:42:41
ну или так

Pavel
13.09.2018
12:44:01
Но там все очень низкоуровнево, я не знаю как исхитриться и работать с иммутабельным как с мутабельным. Может можно всякие фокусы в compile time сделать, навроде сначала снять атрибут immutable, заполнить структуру, одеть атрибут обратно.

А кто-то знает как работает cast(immutable) ?Что вообще происходит внутри

Karbin
13.09.2018
12:47:57
надо в компилятор лезть

Oleg
13.09.2018
13:23:20
А кто-то знает как работает cast(immutable) ?Что вообще происходит внутри
мне кажется immutable это не низкоуровневая фича, просто обещание компилятора, что он не даст менять данные и сам будет распоряжаться копированием между потоками

просто кастуешь и меняешь

Pavel
13.09.2018
13:24:00
Да походу проще всего скастовать после получения и не париться

Oleg
13.09.2018
13:36:24
так надёжней)

Pavel
13.09.2018
13:43:49
Ну структура по-любому скопируется

Но передавать указатель на immutable shared структуру тоже надежно, не надо беспокоиться что кто-то может поменять.

Karbin
13.09.2018
15:08:52
на офф. форуме тоже писали что для передачи immutable shared не нужен

Oleg
13.09.2018
15:09:50
кстати, с днём программиста всех)

Google
Karbin
13.09.2018
15:10:18
с днём программиста

Ackeard
13.09.2018
15:56:28
https://sun1-14.userapi.com/c635106/v635106857/5657b/OrfxGEMJRzk.jpg

Karbin
13.09.2018
16:13:29
это точно

Ievgenii
13.09.2018
16:28:58
Нет идеала, везде будут исключения и какие-то компромиссы. Не нужно все делить на чёрное и белое, всегда было, есть и будет серое. Так что будет код, который компромиссный, и это не всегда костыли, а просто необходимость на тот момент. Лично мне Ди нравится тем, что эти компромиссы ярко выражены и их не скрывают, а честно пытаются исправлять и избавляться от от них. Да, из-за этого страдает обратная совместимость, но одни кричат, что это плохо, другие же кричат, что неконсистеннтно, потому, что устарело или "не верно". Разработчики Ди не боятся улучшать и развивать язык и компилятор! И, имхо, это круто! Если не нравится, никто не мешает зафиксировать версию компилятора и это указать в ридми. Так что хватит ныть и сопли по лицу размазывать, а берите яйца в кулак и вперёд писать проекты!

Pavel
13.09.2018
16:37:39
В ди столько компромиссов что писать проекты просто нереально

Тратишь все время на борьбу с компромиссами

И фиксировать версию компилятора тоже не вариант т.к. тогда компромиссов будет еще больше чем в новых версиях

Igor
13.09.2018
16:40:05
Я думаю что если приходится прикладывать много борьбы значит логика языка не совпадает с логикой выбранного решения. У меня такое бывает часто, я просто переписываю тогда большими кусками

Ievgenii
13.09.2018
16:41:20
Желательно несколько

Pavel
13.09.2018
16:41:52
Желательно несколько
Я же сюда регулярно пишу у меня бомбит )

А мне предлагают костыли обычно )

Ievgenii
13.09.2018
16:42:11
Давай сейчас

Пример

Pavel
13.09.2018
16:42:20
Я сегодня только вот кидал

Ievgenii
13.09.2018
16:42:31
Про неизменяемую структуру?

Pavel
13.09.2018
16:42:36
Причем когда я не пишу - это не значит что у меня все гладко разрабатывается, это значит что я пишу на C# :D

Ievgenii
13.09.2018
16:43:03
Да.
Ну так зачем тебе не изменяемая структура?

Pavel
13.09.2018
16:43:42
Блин, ну чтобы ее не изменяли :)

Google
Ievgenii
13.09.2018
16:43:48
Я вот, на пример, на С# не могу сделать так: Class class {}

Может и можно, честно говоря не знаю наверняка, но думаю не могу

Тут вопрос: зачем?

Тебе тоже не мешает объявить неизменяемой именно переменную, а не сам тип

Но это лирика

Pavel
13.09.2018
16:45:09
Тут вопрос: зачем?
Ответ в моем случае очевиден, все значют что такое иммтуабельность и зачем она нужна. И почему именно из-за нее набрал популярность функциональный подход в программировании.

Pavel
13.09.2018
16:47:22
Чтобы всегда в любом месте программы знать что эта структура иммутабельна и не париться из-за этого

Admin
ERROR: S client not available

Pavel
13.09.2018
16:47:53
В этом же и состоит увеличение эффективности разработки. Мне нужно держать в голове меньше особенностей и я могу сконцентрироваться на бизнес логике.

Это же абсолютно очевидная штука - обмен иммутабельными сообщениями. Не знаю как это можно ставить под вопрос :)

Igor
13.09.2018
16:48:45
А можешь в run.dkang.io написать полный пример который не работает?

Pavel
13.09.2018
16:49:39
https://run.dlang.io/is/9o3ebQ вот такое вот супердно )

Буду помечать такие сообщения тегом #dsuxx

Ievgenii
13.09.2018
16:50:35
Честно, не понимаю необходимости такого подхода

Это же блокирующее общение между потоками

В чем тогда смысл это делать в отдельном потоке?

Pavel
13.09.2018
16:51:07
В каком месте оно блокирующее?

Ievgenii
13.09.2018
16:51:20
Чисто для тогобы отделить от общих данных?

Google
Pavel
13.09.2018
16:51:29
структура кладется в очередь треда, ничего не блокируется.

Ievgenii
13.09.2018
16:51:36
Пока не получишь ответ, поток не работает дальше

Я о потоке, который принимает

Pavel
13.09.2018
16:52:28
Пока не получишь ответ, поток не работает дальше
Да. Но я упростил, тут нет никакой проблемы. В vibed я обмениваюсь этими структурами в рамках работающей Task поэтому тред на самом деле не блокируется.

Pavel
13.09.2018
16:52:50
А блокируется Task, ну она и должна ждать пока ей придет сообщение.

Pavel
13.09.2018
16:53:13
Task это не тред

Ievgenii
13.09.2018
16:53:17
Просто это пул тредов, наверное

Pavel
13.09.2018
16:53:31
Это враппер на Fiber

Много Task могут выполняться в одном треде и ничего не блокировать, в этом и есть суть vibe-core

Ievgenii
13.09.2018
16:54:13
https://dlang.org/phobos/std_parallelism.html#.Task Это?

Pavel
13.09.2018
16:54:54
https://dlang.org/phobos/std_parallelism.html#.Task Это?
Нет, я имел в виду это http://vibed.org/api/vibe.core.task/Task

Ievgenii
13.09.2018
16:55:11
И тогда явно там используется не нативная функция ресив

Igor
13.09.2018
16:55:49
Не за нотиуом, посмотрю позже

Pavel
13.09.2018
16:56:15
Ну Людвиг где то писал что встроенные функции std.concurrency.receiveOnly нормально работают с его тасками

Раньше он делал какие то костыли, а потом переписал так что все из коробки работает

Ievgenii
13.09.2018
16:56:44
Хм...

Мало мне в это верится, но ладно

https://dlang.org/library/std/concurrency/receive.html

Receive a message from another thread, or block if no messages of the specified types are available.

А ресивОнли, мне кажется, всего обёртка над простым ресивом

Страница 682 из 719