Size: a a a

Compiler Development

2020 March 31

Т8

Т-34 85 in Compiler Development
Alex
А если функция принимает указатель и заранее не знает с каким указателем она будет работать? А если компилятор переложит с кучи на стек?
так в её сигнатуре должен быть указан конкретный тип указателя. Программист пускай передаёт соответствующий или кастует к нему

>А если компилятор переложит с кучи на стек?
либо запретить такое делать, либо научить компилятор определять, когда это не нужно делать
источник

Т8

Т-34 85 in Compiler Development
Alex
Вы тут смеётесь, а меж тем в gcc есть __builtin_expect_with_probability, в котором указывается вероятность перейти на ветвь.
*а вот указаний для кэширования иногда как раз в языке действительно не хватает
unlikely и likely теперь в стандарте. Правда, не слишком гибко, но хоть что-то
источник

p

polunin.ai in Compiler Development
Gymmasssorla
Я бы ещё добавил квалификатор ^ - означает закешированное значение, а ^N% - с некоторой вероятностью закешированное значение. Такие образом, ^15%#string - с вероятностью 15% закешированное значение из стека типа данных string.
я бы еще добавил обозначение в каком кеше должно хранится значение
^L3#string - это значение будет хранится в L3-кеше
источник

AZ

Alexander Zaitsev in Compiler Development
ой ну хорош - не пятница же
источник

PS

Peter Sovietov in Compiler Development
Между прочим, в стандартном Си действительно не хватает указания на тип памяти. В DSP- и прочих спецпроцессорах вполне может быть ситуация, когда в одном блоке SPM-памяти содержится адрес другого блока памяти, а в нем — адрес из глобальной памяти.
источник

Т8

Т-34 85 in Compiler Development
polunin.ai
я бы еще добавил обозначение в каком кеше должно хранится значение
^L3#string - это значение будет хранится в L3-кеше
блин, столько классных предложений посыпалось! Надо бы все собрать, продумать и сделать супер-перформансный язык
источник
2020 April 01

A

Alex in Compiler Development
Т-34 85
так в её сигнатуре должен быть указан конкретный тип указателя. Программист пускай передаёт соответствующий или кастует к нему

>А если компилятор переложит с кучи на стек?
либо запретить такое делать, либо научить компилятор определять, когда это не нужно делать
Представим ситуацию что у нас есть в отдельном модуле функция incr(int * a). Она должна корректно работать независимо от места расположения `a'. Т.е. нужно либо засорять всё приведениями, либо делать перегрузку функции. Я не знаю на сколько это соответствует целям автора, но эффект будет примерно такой
источник

VK

Val Krylov in Compiler Development
Peter Sovietov
Это слишком по-хакерски. Респектабельный корпоративный вариант использовал бы стандарт URI.
Совсем респектабельно - если описывать отношения между каждой переменной и её темпоральными частями через ISO 15926. Но боюсь, что это слишком прогрессивные технологии для сегодняшнего железа.
источник

G

Gymmasssorla in Compiler Development
Т-34 85
блин, столько классных предложений посыпалось! Надо бы все собрать, продумать и сделать супер-перформансный язык
Советую посмотреть на ATS - там, кажется, сделали кложуры на стеке, в куче, кортежи на стеке/куче, типы, равные размеру указателя и много другого интересного
источник

G

Gymmasssorla in Compiler Development
Возможно переборщили, но интересно
источник

Т8

Т-34 85 in Compiler Development
Alex
Представим ситуацию что у нас есть в отдельном модуле функция incr(int * a). Она должна корректно работать независимо от места расположения `a'. Т.е. нужно либо засорять всё приведениями, либо делать перегрузку функции. Я не знаю на сколько это соответствует целям автора, но эффект будет примерно такой
ну да, как-то так
источник

Т8

Т-34 85 in Compiler Development
Gymmasssorla
Возможно переборщили, но интересно
ладно, так и быть, уговорил, посмотрю. Но что-то мне подсказывает, что для системного программирования не оcобо удобный
источник

PS

Peter Sovietov in Compiler Development
Val Krylov
Совсем респектабельно - если описывать отношения между каждой переменной и её темпоральными частями через ISO 15926. Но боюсь, что это слишком прогрессивные технологии для сегодняшнего железа.
К слову сказать, существует ЯП, где модули импортируются только через URI: import mymodule at 'file:///home/work/mymodule.ozf'
источник

VK

Val Krylov in Compiler Development
Peter Sovietov
К слову сказать, существует ЯП, где модули импортируются только через URI: import mymodule at 'file:///home/work/mymodule.ozf'
Ну, для системных там это не обязательно. :)
источник

p

polunin.ai in Compiler Development
а еще можно ввести адресацию для битов памяти, а то бывают случаи когда нужно хранить много битов, и в байтах это будет слишком много
источник

VK

Val Krylov in Compiler Development
А вообще (без шуток), при импорте желательно использовать человекочитаемые идентификаторы в файлах, но переводить их в криптохэши конкретных версий в конфигурации приложения/библиотеки.
источник

PS

Peter Sovietov in Compiler Development
Кстати, вот это вполне штатный код тоже "в одном из ЯП": __global char * __local data[128];
Однажды я реализовал простой Си-подобный язык для аппаратного ускорителя и допустил синтаксический просчет: у меня тип памяти указывался _перед_ звездочкой :)
источник

EM

Evgenii Moiseenko in Compiler Development
Alex
Представим ситуацию что у нас есть в отдельном модуле функция incr(int * a). Она должна корректно работать независимо от места расположения `a'. Т.е. нужно либо засорять всё приведениями, либо делать перегрузку функции. Я не знаю на сколько это соответствует целям автора, но эффект будет примерно такой
Достаточно полиморфизма по типу указателя. Надо только аккуратно систему типов расписать.
источник

A

Alex Ф-ф-фэils!🌠︙ in Compiler Development
void*
источник

DP

Dmitry Ponyatov in Compiler Development
Val Krylov
Выглядит слишком hardcoded. Надо ввести пользовательские типы указателей - (OMG#)(WTF?)(LOL!).
так недалеко и до Python в компиляторе докатиться, на котором скрипты по модификации структур компилятора в compile time
источник