Size: a a a

2019 January 21

ŹR

Źmićer Rubinštejn in pro.elixir
Иначе упадёт вм
источник

ŹR

Źmićer Rubinštejn in pro.elixir
С другой стороны, как можно в C сделать read-only я понять не могу
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Т.е. если у меня есть просто реф на кусок памяти, то в С я могу менять внутри и все. Все их must нифига не стоят
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Надо попробовать самому захуячить что-нибудь. Поломать иммутабельность
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Потому что ничего не понятно.
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Клонировать на каждом вызове функции кусок хипа должно быть медленно. Нужно ли это делать - а хз. Самое главное, что может и клонировать не сильно медленно ;)
источник

AG

Alex Golubov in pro.elixir
Źmićer Rubinštejn
Вот и фик пойми что это значит: Можно мутировать или нет
тот ErlNifBinary, который получил из  erlang - нельзя мутировать, тот который слепил сам в Си - можно, но потом его надо перекинуть в erlang-term, который уже иммутабельный
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Так а кто мне мешает мутировать Эрланговский?
источник

ŹR

Źmićer Rubinštejn in pro.elixir
С же не может помешать
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Разыменовал укзатель, засунул новое значение. Конец
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Или Beam в конце проверяет всю собственную память на изменения?
источник

AB

Alex Bubnov in pro.elixir
Хватит глумиться над вм.
источник

AB

Alex Bubnov in pro.elixir
Зачем, в конце концов?
источник

AB

Alex Bubnov in pro.elixir
Отдавайте референсы на свою память, в конце концов
источник

AB

Alex Bubnov in pro.elixir
Должны быть какие-то финализаторы для них
источник

AG

Alex Golubov in pro.elixir
Źmićer Rubinštejn
Так а кто мне мешает мутировать Эрланговский?
уже точно не помню, но помоему VM упадет с ошибкой: segmentation fault : 11
источник

AG

Alex Golubov in pro.elixir
Źmićer Rubinštejn
Клонировать на каждом вызове функции кусок хипа должно быть медленно. Нужно ли это делать - а хз. Самое главное, что может и клонировать не сильно медленно ;)
The use of resource objects is a safe way to return pointers to native data structures from a NIF. A resource object is only a block of memory allocated with enif_alloc_resource. A handle ("safe pointer") to this memory block can then be returned to Erlang by the use of enif_make_resource. The term returned by enif_make_resource is opaque in nature. It can be stored and passed between processes, but the only real end usage is to pass it back as an argument to a NIF. The NIF can then call enif_get_resource and get back a pointer to the memory block, which is guaranteed to still be valid. A resource object is not deallocated until the last handle term is garbage collected by the VM and the resource is released with enif_release_resource (not necessarily in that order).
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Golubov
The use of resource objects is a safe way to return pointers to native data structures from a NIF. A resource object is only a block of memory allocated with enif_alloc_resource. A handle ("safe pointer") to this memory block can then be returned to Erlang by the use of enif_make_resource. The term returned by enif_make_resource is opaque in nature. It can be stored and passed between processes, but the only real end usage is to pass it back as an argument to a NIF. The NIF can then call enif_get_resource and get back a pointer to the memory block, which is guaranteed to still be valid. A resource object is not deallocated until the last handle term is garbage collected by the VM and the resource is released with enif_release_resource (not necessarily in that order).
А что будет, если двое параллельно дёрнут ниф?
источник

AG

Alex Golubov in pro.elixir
Źmićer Rubinštejn
А что будет, если двое параллельно дёрнут ниф?
а все тоже самое что и в обычном СИ
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Жопа крч...
источник