Size: a a a

Programming Offtop

2020 October 01

VP

Vladimir Petrakovich in Programming Offtop
Andrew Mikhaylov
Если через сигналы — хочешь, не хочешь, а будет вызван обработчик сигнала.
Так этот обработчик, если верить статье на хабре, проверяет, находится ли код в safepoint
источник

VP

Vladimir Petrakovich in Programming Offtop
Вызван-то он будет. Но может ли он взять и прервать выполнение - не факт. Так можно всё сломать.
источник

AM

Andrew Mikhaylov in Programming Offtop
Я понял, речь шла про "не всегда можно безопасно вытеснить выполняющийся код" :)
источник

VP

Vladimir Petrakovich in Programming Offtop
Andrew Mikhaylov
Я понял, речь шла про "не всегда можно безопасно вытеснить выполняющийся код" :)
Ну да, так-то можно просто тред дропнуть, но какой ценой))
источник

D

Dmitry in Programming Offtop
Andrew Mikhaylov
Если вызов функции очистки памяти не относить к рантайму, тогда и диспетчеризацию вызовов по таблице виртуальных функций тоже нет смысла рантаймом обзывать.
Я бы рантаймом называл работающий в фоне процесс, который работает независимо от написанного мной кода и параллельно. А статический вызов функций для типов моей программы - не стал. Но я не силен в этой терминологии.
источник

AM

Andrew Mikhaylov in Programming Offtop
Dmitry
Я бы рантаймом называл работающий в фоне процесс, который работает независимо от написанного мной кода и параллельно. А статический вызов функций для типов моей программы - не стал. Но я не силен в этой терминологии.
То есть GC, планировщик корутин, встроенный в стандартную библиотеку event loop -- рантайм, ARC, динамическая диспетчеризация -- нет?
Окей, мне нравится такой разрез.
В таком случае раст в отличие от голанга и правда без рантайма по идее.
источник

VP

Vladimir Petrakovich in Programming Offtop
А если код из stdlib ещё до main() запускает фоновый поток - это уже рантайм?)
источник

A

Aleksandr Khristenko in Programming Offtop
Vladimir Petrakovich
Я так понял, "preemtive" в Go - это как safepoint в Hotspot: заранее определённые компилятором точки, в которых код спрашивает рантайм, а надо ли ему прерваться
Я к тому что код сам не спрашивает, надо ли прерваться а работает. А потом прителетает сигнал и шедулер, если это возможно, прерывает работу.
источник

AK

Anton Korotkikh in Programming Offtop
Vladimir Petrakovich
Ну да, так-то можно просто тред дропнуть, но какой ценой))
ну главное чтобы разрабы знали это цену - тогда это фича. как у эрланга с его вытеснением и девизом  let it crash
источник

VP

Vladimir Petrakovich in Programming Offtop
Aleksandr Khristenko
Я к тому что код сам не спрашивает, надо ли прерваться а работает. А потом прителетает сигнал и шедулер, если это возможно, прерывает работу.
Да, верно. Но в итоге вытеснение всё равно не гарантировано. Особенно если играться с сишным кодом.
источник

D

Dmitry in Programming Offtop
Можно с другой стороны зайти. Мой программа линкается с какой-нибудь гну стд библиотекой для аллокации и деаллокации памяти, скажем. Вот это уже можно назвать рантаймом и это есть в любой бинарной программе -)
источник

AM

Andrew Mikhaylov in Programming Offtop
Vladimir Petrakovich
Да, верно. Но в итоге вытеснение всё равно не гарантировано. Особенно если играться с сишным кодом.
Не гарантировано. Но при этом попытка вытесниться будет происходить не в контрольных точках, а где угодно вне сейфпоинтов.
источник

D

Dmitry in Programming Offtop
Кто-то же должен заниматься дефрагментацией выделенной моему процессу памяти.
источник

A

Aleksandr Khristenko in Programming Offtop
Vladimir Petrakovich
Да, верно. Но в итоге вытеснение всё равно не гарантировано. Особенно если играться с сишным кодом.
Но в отличии от кооперативной нам уже не надо явно указывать места, в которых мы хотим отдать управление. И в бесконечном цикле мы уже переключимся, например.
источник

VP

Vladimir Petrakovich in Programming Offtop
Anton Korotkikh
ну главное чтобы разрабы знали это цену - тогда это фича. как у эрланга с его вытеснением и девизом  let it crash
У эрланга (BEAM), насколько я знаю, вытеснение работает через счётчик "тактов", который считается выполняемым кодом, и если достигает определённого значения, происходит опрос планировщика. То есть это ещё менее "preemtive", чем в го.
источник

VP

Vladimir Petrakovich in Programming Offtop
Aleksandr Khristenko
Но в отличии от кооперативной нам уже не надо явно указывать места, в которых мы хотим отдать управление. И в бесконечном цикле мы уже переключимся, например.
Ну размечать безопасные участки по-прежнему надо
источник

AM

Artem Molotov in Programming Offtop
Aleksandr Khristenko
А вообще, есть какое-то определение рантайма, которое принято больниством?
Если ты не плюёшься от вики, то вот https://en.wikipedia.org/wiki/Runtime_system

иначе можешь глянуть UD или CD, но там обычно ещё более..  кхм... неоднозначно.
источник

VP

Vladimir Petrakovich in Programming Offtop
Но если while(true) в го не вешает планировщик - это хорошо и, наверное, достаточно, чтобы жить с такой многозадачностью.
источник

AM

Artem Molotov in Programming Offtop
Vladimir Petrakovich
Раст можно на голом железе без аллокатора памяти гонять, какой там рантайм.
Но stdlib конечно многое предоставляет.
Вот такой вот там рантайм https://docs.rs/rtti/0.4.0/rtti/
источник

AM

Artem Molotov in Programming Offtop
Aleksandr Khristenko
Ну просто тогда вообще нет ничего без рантайма, если мы смотрим не на микроконтроллеры.
Везде линкуется glibc/musl.
Учитывая наличие RTTI почти в любом языке — да, именно так. Правда это можно отключить при компиляции, если я не ошибаюсь. И тогда в некоторых случаях рантайма, вероятно, не будет.
источник