Size: a a a

Compiler Development

2020 April 01

DP

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

DP

Dmitry Ponyatov in Compiler Development
Т-34 85
блин, столько классных предложений посыпалось! Надо бы все собрать, продумать и сделать супер-перформансный язык
кто мешает пользоваться метапрограммированием на OCaml + LLVM?
назвал бы Picat как хост-язык, но вроде нет там пока биндинга на LLVM
PS: работы по реализации компилятороной библиотеки там конечно море, но принципиально никто не мешает ни парсить (дельфятные?) исходники, ни писать трансформации для оптимизации
источник

МБ

Михаил Бахтерев in Compiler Development
Т-34 85
Хороша ли идея разделить в языке, подобном C++ и C, типы указателей на стековые и на хиповые?

например

string stackString;
string# stackStringPointer = &stackString;
string* heapStringPointer = new string;
Не понятно, зачем это делать. Какова цель разделения? В системном программировании на Си довольно часто приходится со стеком работать именно как с куском обычной памяти... Речь не о каких-нибудь там while (*p++) { ... }, а именно о том, что нам нужно взять какую-нибудь задачу и повешать указатель на её стек в какой-нибудь динамический список, который лежит в куче у другой задачи. Ну и всякие тому подобные сценарии. То есть, в системном программировании у нас есть состояние задачи: задача не исполняется. И в этом состоянии с её стеком можно делать всякое разное.

Тем, собственно, Си и хорош для таких системных дел.
источник

Т8

Т-34 85 in Compiler Development
Михаил Бахтерев
Не понятно, зачем это делать. Какова цель разделения? В системном программировании на Си довольно часто приходится со стеком работать именно как с куском обычной памяти... Речь не о каких-нибудь там while (*p++) { ... }, а именно о том, что нам нужно взять какую-нибудь задачу и повешать указатель на её стек в какой-нибудь динамический список, который лежит в куче у другой задачи. Ну и всякие тому подобные сценарии. То есть, в системном программировании у нас есть состояние задачи: задача не исполняется. И в этом состоянии с её стеком можно делать всякое разное.

Тем, собственно, Си и хорош для таких системных дел.
цель разделения - уберечься от получения висячего указателя при возврате из функции, когда очищается её стек. Если очень надо, будет возможность кастовать к нужному указателю
источник

G

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

G

Gymmasssorla in Compiler Development
Практика показывает, что частные, "инженерные" решения проблем в языках приводят к боли и кастрированным решениям (отсутствие функторов, монад во многих языках, как пример, вместо них частные случаи - async/.await, LINQ, etc)
источник

Т8

Т-34 85 in Compiler Development
Gymmasssorla
Практика показывает, что частные, "инженерные" решения проблем в языках приводят к боли и кастрированным решениям (отсутствие функторов, монад во многих языках, как пример, вместо них частные случаи - async/.await, LINQ, etc)
а перечисленное действительно нужно в системном языке? Вот возможность написать загрузчик ядра ОС, не прибегая к ассемблеру - вот это интересно было бы
источник

G

Gymmasssorla in Compiler Development
Т-34 85
а перечисленное действительно нужно в системном языке? Вот возможность написать загрузчик ядра ОС, не прибегая к ассемблеру - вот это интересно было бы
Можно посмотреть на Either, Option, Iterator, Result (и старую версию Future до кучи). Что видим? Десятки методов скопипастчены, причём некоторых пришлось и приходится ждать, другие разбросаны по отдельным крейтам, а если хотеть своё подобие монады (функтора, аппликатива, etc) - копипастить и тестировать уже самому. С монадами бы многие методы достались за бесплатно после реализации четырёх-пяти.

Нужны ли системному языку монады? Если брать пример с Rust - то да, нужны, но изначально я хотел показать на примере монад, что частных решений проблем лучше избегать, если есть более общее.
источник

Т8

Т-34 85 in Compiler Development
Gymmasssorla
Можно посмотреть на Either, Option, Iterator, Result (и старую версию Future до кучи). Что видим? Десятки методов скопипастчены, причём некоторых пришлось и приходится ждать, другие разбросаны по отдельным крейтам, а если хотеть своё подобие монады (функтора, аппликатива, etc) - копипастить и тестировать уже самому. С монадами бы многие методы достались за бесплатно после реализации четырёх-пяти.

Нужны ли системному языку монады? Если брать пример с Rust - то да, нужны, но изначально я хотел показать на примере монад, что частных решений проблем лучше избегать, если есть более общее.
по отзывам Rust как системный язык что-то не заходит, там по-прежнему пишут на Си
источник

G

Gymmasssorla in Compiler Development
Т-34 85
по отзывам Rust как системный язык что-то не заходит, там по-прежнему пишут на Си
Потому что Расту лет пять от роду, а Си сорокет с хвостом?
источник

EM

Evgenii Moiseenko in Compiler Development
Gymmasssorla
Можно посмотреть на Either, Option, Iterator, Result (и старую версию Future до кучи). Что видим? Десятки методов скопипастчены, причём некоторых пришлось и приходится ждать, другие разбросаны по отдельным крейтам, а если хотеть своё подобие монады (функтора, аппликатива, etc) - копипастить и тестировать уже самому. С монадами бы многие методы достались за бесплатно после реализации четырёх-пяти.

Нужны ли системному языку монады? Если брать пример с Rust - то да, нужны, но изначально я хотел показать на примере монад, что частных решений проблем лучше избегать, если есть более общее.
HKT в Rust не завезли по каким-то веским причинам, а не потому что разработчики языка были против и счастливы копипастить код. Насколько я помню, что-то связанное с мономорфизацией.
источник

EM

Evgenii Moiseenko in Compiler Development
У Нико была серия постов про HKT и все его подводные камни в rust
источник

DS

Doge Shibu in Compiler Development
Evgenii Moiseenko
HKT в Rust не завезли по каким-то веским причинам, а не потому что разработчики языка были против и счастливы копипастить код. Насколько я помню, что-то связанное с мономорфизацией.
Мономорфизация хкт не мешает.

Вон, в хаскеле можно specialize повесить на код с хкт, спокойно сделает версию под нужный тип
источник

EM

Evgenii Moiseenko in Compiler Development
Evgenii Moiseenko
У Нико была серия постов про HKT и все его подводные камни в rust
источник

p

polunin.ai in Compiler Development
Gymmasssorla
Можно посмотреть на Either, Option, Iterator, Result (и старую версию Future до кучи). Что видим? Десятки методов скопипастчены, причём некоторых пришлось и приходится ждать, другие разбросаны по отдельным крейтам, а если хотеть своё подобие монады (функтора, аппликатива, etc) - копипастить и тестировать уже самому. С монадами бы многие методы достались за бесплатно после реализации четырёх-пяти.

Нужны ли системному языку монады? Если брать пример с Rust - то да, нужны, но изначально я хотел показать на примере монад, что частных решений проблем лучше избегать, если есть более общее.
Это не подтверждает что это нужно в системных языках. Это подтверждает что ФП подход хорош. Но делать их системного языка фпшный не стоит.
источник

EM

Evgenii Moiseenko in Compiler Development
polunin.ai
Это не подтверждает что это нужно в системных языках. Это подтверждает что ФП подход хорош. Но делать их системного языка фпшный не стоит.
Что из вышеперечисленного не нужно в системном языке?  Option, Either или Future?
При условии что все реализованы эффективно.
Вместо  Option/Either лучше error код ручками везде прокидывать как в Go?)
источник

МБ

Михаил Бахтерев in Compiler Development
Gymmasssorla
Можно посмотреть на Either, Option, Iterator, Result (и старую версию Future до кучи). Что видим? Десятки методов скопипастчены, причём некоторых пришлось и приходится ждать, другие разбросаны по отдельным крейтам, а если хотеть своё подобие монады (функтора, аппликатива, etc) - копипастить и тестировать уже самому. С монадами бы многие методы достались за бесплатно после реализации четырёх-пяти.

Нужны ли системному языку монады? Если брать пример с Rust - то да, нужны, но изначально я хотел показать на примере монад, что частных решений проблем лучше избегать, если есть более общее.
Есть некая философская проблема. Системный язык нужен, чтобы писать не функции, а процессы, которые интерпретируют эти самые монады. Интерпретатор монады на монадах не написать. Нужна какая-то базовая вещь, типа IO. Но IO на чём-то надо кодить, и это что-то должно иметь семантику процессов (pi-исчисления, то есть).

Как-то так. Тут была недавно об этом презентация.
источник

G

Gymmasssorla in Compiler Development
Михаил Бахтерев
Есть некая философская проблема. Системный язык нужен, чтобы писать не функции, а процессы, которые интерпретируют эти самые монады. Интерпретатор монады на монадах не написать. Нужна какая-то базовая вещь, типа IO. Но IO на чём-то надо кодить, и это что-то должно иметь семантику процессов (pi-исчисления, то есть).

Как-то так. Тут была недавно об этом презентация.
Почему нужна базовая вещь IO? Монады ведь ещё не означают, что мы хотим делать язык чистым
источник

МБ

Михаил Бахтерев in Compiler Development
Gymmasssorla
Почему нужна базовая вещь IO? Монады ведь ещё не означают, что мы хотим делать язык чистым
Надо уточнить, что подразумевается в таком случае под наличием монад?
источник

G

Gymmasssorla in Compiler Development
Тайп-классы Functor, Applicative, Monad, и пучок отдельных функций над монадами?
источник