Если вы не используете какой-либо фреймворк, поддерживающий связывание, вам следует прослушивать входные события и обновлять скрытый входной сигнал на основе этого.
Это функция, которая может дать вам идею:
let realInput = document.getElementById('real-input');
let userInput = document.getElementById('user-input');
userInput.addEventListener('input', function(value) {
const inputValue = value.target.value;
realInput.value = inputValue; // update the hidden input
const userInputResult = inputValue.match(/\[[^\[]*\]/); // the regex for [numberic_id]
if (userInputResult) {
userInput.value = inputValue.substring(0, [userInputResult.index - 1]); // -1 is to remove the space between the 'string' and the '[numeric_id]'
}
});
Короткий ответ: нет.
Однако я не знаю ни о какой ситуации, в которой консервативный подход компилятора изменит количество чтений или записей, если Вы будете следовать за этим подходом:
При чтении перекрестного потока видимое местоположение сохраните его значение к локальному прежде, чем сделать дальнейшее управление; точно так же ограничьте записи однократным присвоением.
Компилятор Delphi не выполняет общее устранение подвыражения (CSE) по нелокальным выражениям местоположения, когда существуют вызовы к невстроенным методам между выражениями, поскольку компилятор не делает межпроцедурной оптимизации, и таким образом это не было бы корректно даже для однопоточного кода.
Так, можно хотеть использовать InterlockedExchange (), чтобы сделать чтения и записи для принуждения этого; дополнительно, это вызовет полный барьер памяти, таким образом, процессор не переупорядочит чтения и пишет также.
Я не знаю ни о каком эквиваленте, и при этом я не думаю, что абсолютная директива поможет Вам. абсолютный позволяет Вам иметь две переменные, которые используют тот же адрес, но я не думаю, что он будет препятствовать тому, чтобы компилятор оптимизировал ссылки на ту память.
Я предполагаю, что Вы могли использовать указатель и управлять им сами. Тот путь вообще компилятор делает до оптимизации retrival значения указателя, это не должно предполагать, что значение, сохраненное в адресе, совпадает с в прошлый раз, когда это считало его, но это - чистое предположение.
Delphi для .NET не имеет ключевого слова также, но платформа .NET имеет функции util для него. Посмотрите Поток. VolatileRead и Поток. VolatileWrite.
Использование динамично выделило указатели?
var
MyVarPtr: ^integer;
begin
New(MyVarPtr);
MyVarPtr^ := 5;
...
Это должно помешать компилятору использовать регистр для целочисленного значения (но это могло бы все еще использовать один для адреса). Я не уверен, как это выдерживает сравнение с энергозависимым, все же.