Массив из Tuples


#21

Проблема в том что ссылочные типы продолжают себя вести как ссылочные типы, индус в статье ожидал что класс положенные в структуру станет структурой, или будет вести себя как структура, этого не произошло, по этому не используйте структуры :slight_smile: Ещё в Go ссылочные типы ведут себя точно так же, и там кроме структур ничего нет, не знаю как теперь жить :frowning:


#22

Ну так вот и я про то же: хоть я и нуб, но эти опасения явно какие-то нелогичные… Весь Swift из структур, но их не используйте. Тогда зачем тебе вообще swift-то? )))


#24

Вы лучше попробуйте понять что написано в статье, чтобы не писать здесь ерунды. Если в примере индуса поменять структуру на класс (структуру User сделать классом), будет всё тоже самое (без структур вообще).


#25

я это и понял. :thinking: (…)


#27

Структуры не потокобезопасны. Лишь передача между границами потоков безопаснее классов.

Int, String в Свифте самые обычные структуры. И вовсе не «простые типы» как в C/C++.


#28

В статье по ссылке выше такое пишут:

Thread safety

As I mentioned above, Swift value types are kept in the stack. In a process, each thread has its own stack space, so no other thread will be able to access your value type directly. Hence no race conditions, locks, deadlocks or any related thread synchronization complexity.

В свифте память для структур выделяется в стеке (как в c/c++ для простых типов и структур), у каждого потока свой стек, то есть переменные в стеке локальны для каждого потока, то есть им сложно в рейс кондишн или ещё как то там пересечься.

Границы потоков это как, как чертоги разума? Можно ссылку какую-то или пример для тех кто не в теме?


#29

Массивы при этом же значатся потоконебезопасными в Swift даже при обычной реализации, когда хранилище не использует Foundation.

По второй части - thread boundaries используется во многих местах:

  • Realm - документация про использование объектов из разных потоков и необходимость их переизвлечерия в каждом и книга рея.
  • RxSwift в варианте книг рея.

#30

Так какие массивы, разговор же про структуры был?

Фразы выдернутые из контекста как то не то и гуглить мне не интересно, вы ссылку дайте где описано “передача между границами потоков безопаснее классов” или пример :slight_smile:

P.S. Больше всего конечно интересуют “границы потоков” и их описане, то есть передача переменной не просто из потока в поток, а именно через (или между) границы.


#31

Массивы в Swift - структуры. Отличаются встроенным хранилищем. Изнутри могут быть классом, конечно же.

Ок. Книг в свободном доступе нет, если дадите почту, скину их.


#32

Кажется я понял

По этому

Логично, не поспоришь :thinking:

Похоже уже не надо


#33

Дайте ссылку на оригинал, я куплю, ничего скидывать не надо. Меня тоже теперь жутко мучают границы этих самых окаянных потоков. Как я жил раньше? Вы точно не про передачу значения из одного потока в другой?

Все, после границ потоков, бросаю Swift, возвращаюсь обратно на ObjC

О да, на медиум в последнее время толпа индусов привалила. Как будто одной помойки в виде Хабра им мало, теперь и медиум решили в помойку превратить. Перестану наверное на медиум подписку оплачивать после этой статьи :joy:


#34

Swift также предусматривает беззнаковый тип целого числа - UInt

UInt тоже структура, значит структура не может быть меньше нуля :see_no_evil: