Pull to refresh

Comments 7

Не уловил, каким образом proxy_on_memory_allocate "превращается" для AssemblyScript
в:


/// Allow host to allocate memory.
export function malloc(size: i32): usize {
  let buffer = new ArrayBuffer(size);
  let ptr = changetype<usize>(buffer);
  return __pin(ptr);
}

?
PS: Видимо, так:


На стороне хоста выполняется поиск malloc, если нет, то ищется proxy_on_memory_allocate

Спасибо, упустил этот момент.

НО разработчики используют TinyGo, в котором сборщик мусора попроще и запускается когда недостаточно места в куче. Если между вызовом proxy_on_memory_allocate и моментом возврата владения в Go нет выделения памяти, то это условно безопасно.

Можно пример, как конкретно выглядит опасный сценарий при использовании go-pointer?

Опасный сценарий при НЕ использования чего-то подобного go-pointer'у. Количество ссылок на buf равно 0.

func proxyOnMemoryAllocate(size uint) *byte {
	buf := make([]byte, size)
	return &buf[0]
}

В общем случае GC может переиспользовать эту память, тогда хост при копировании данных что-то перетрет. Например стандартный компилятор вставляет преамбулу(Руководство по ассемблеру Go) в каждую функцию, в которой делает возврат в гошный рантайм, где может переключить горутину или сделать stack-split. Stack-split это когда текущего стека горутине не хватает, тогда идет увеличения стека. По хорошему нужно wasm2wat сделать и посмотреть на сгенеренный код TinyGo.

Тема интересная, что делать с языками с GC. Кто-то захотел SDK для C#.

Одно время, для расширения функциональности, использовали perl модули, экспортируя разные переменные, можно было выполнять какую-то работу на perl и запускать одну из функций из "бакенда" в конце, или просто возвращать какое-то значение, как фильтр.

Потом perl стал менее популярным, и запускать какой-то внешний python стало стильно/модно/молодёжно. Параллельно с этим некоторые проекты включали V8 для выполнения какой-то кастомной логики.

И получается, что следующее развитие - это WASM платформа, ведь в неё можно накомпилировать из чего угодно? Так можно было бы и просто джава-машину запускать, там бы и Jython работал.

WASM-модули относительно легко контролировать по использованию CPU и памяти, чего не скажешь про Java. Варианты есть, но они, будем так говорить, не для всех и experimental.

Sign up to leave a comment.

Articles