Size: a a a

Compiler Development

2020 November 08

PS

Peter Sovietov in Compiler Development
Val Krylov
Первая же ссылка гугла по "sea of nodes": https://darksi.de/d.sea-of-nodes/ Видно, как диаграммы моментально теряют какое-либо подобие читаемости, хотя рассматривается простейшая передача контекста, на символьном уровне наглядно отображаемая как передача World в Clean, например.
Опять же, SoN это только частный случай графовых IR. Которые, в свою очередь, родом из dataflow-подхода: https://course.ece.cmu.edu/~ece740/f13/lib/exe/fetch.php?media=onur-740-fall13-module5.2.1-dataflow-part1.pdf
У того же Филда&Харрисона целая глава посвящена "потоковым реализациям". Так что классическому функциональному программированию это все не чуждо.
источник

PS

Peter Sovietov in Compiler Development
Если под "символьным подходом" считать обычное переписывание термов, которые, как известно, являются деревьями, то да, для графовых IR нужна несколько большая гибкость.
источник

VK

Val Krylov in Compiler Development
Peter Sovietov
Если под "символьным подходом" считать обычное переписывание термов, которые, как известно, являются деревьями, то да, для графовых IR нужна несколько большая гибкость.
Раз уж вспомнился Clean, у его авторов была хорошая книжка на эту тему: Plasmeijer R., van Eckelen M. - Functional programming and parallel graph rewriting (1993). Там рассматриваются и различия между работой с термами и работой с графами.
источник

TS

Timur Safin in Compiler Development
MaxGraey
Кстати почему SoN вот так не рисуют? Было бы намного назляднее чем облако из нод
Поиск Яндекса по картинкам говорит, что это "Modeling and Discovering Vulnerabilities with Code Property Graphs", Fabian Yamaguchi, Nico Goldey, Daniel Arp and Konrad Rieck
источник

M

MaxGraey in Compiler Development
Timur Safin
Поиск Яндекса по картинкам говорит, что это "Modeling and Discovering Vulnerabilities with Code Property Graphs", Fabian Yamaguchi, Nico Goldey, Daniel Arp and Konrad Rieck
Да это было описание ПО по анализу уязвимостей
источник

TS

Timur Safin in Compiler Development
источник

AD

Alex Denisov in Compiler Development
MaxGraey
Уже не помню, я только график сохранил. Это самое интерестное тым было, т к приблуда проприаторная и материал больше маркетинговый был
есть опенсорц часть https://joern.io
отличие от проприетарной версии (https://ocular.shiftleft.io) в более слабом dataflow трэкере
источник

AD

Alex Denisov in Compiler Development
ну и ограниченная поддержка языков
источник

h

hazer_hazer in Compiler Development
Привет.
Правильно ли я понимаю, что с compile-time чекингом, например, в java, на рантайме не проверяется тип константы, когда она берется из пула?
В этом же смысл компайл-тайм чекинга. Но если, предположим будет статический каст или что-то такое, то будет SegFault и всё полетит.
Если подсунуть байт-код, где в констант пуле будет int вместо double, а в коде написать double, то все сломается?
источник

а

а это кто in Compiler Development
hazer_hazer
Привет.
Правильно ли я понимаю, что с compile-time чекингом, например, в java, на рантайме не проверяется тип константы, когда она берется из пула?
В этом же смысл компайл-тайм чекинга. Но если, предположим будет статический каст или что-то такое, то будет SegFault и всё полетит.
Если подсунуть байт-код, где в констант пуле будет int вместо double, а в коде написать double, то все сломается?
Будет UB
источник

а

а это кто in Compiler Development
всё сломается, да
источник

h

hazer_hazer in Compiler Development
Но UB будет, потому что они прочекали, или потому-что они кэтчат segfault и пишут UB?
источник

а

а это кто in Compiler Development
hazer_hazer
Привет.
Правильно ли я понимаю, что с compile-time чекингом, например, в java, на рантайме не проверяется тип константы, когда она берется из пула?
В этом же смысл компайл-тайм чекинга. Но если, предположим будет статический каст или что-то такое, то будет SegFault и всё полетит.
Если подсунуть байт-код, где в констант пуле будет int вместо double, а в коде написать double, то все сломается?
Ты JVM пишешь ? :>
источник

h

hazer_hazer in Compiler Development
а это кто
Ты JVM пишешь ? :>
Ну. Не совсем. Я думал сначала, насчет интерпретатора, потому что просто, но очень хотел type-checking, поэтому решил компилируемый, но с LLVM у меня не пошло, и я решил реализовать что-то подобное java
источник

а

а это кто in Compiler Development
Я тоже JVM пробовал писать, сделал парсер .class файлов, дошёл до реализации опкодов
источник

h

hazer_hazer in Compiler Development
а это кто
Я тоже JVM пробовал писать, сделал парсер .class файлов, дошёл до реализации опкодов
Вот я и компилятор и ВМ пытаюсь написать
источник

а

а это кто in Compiler Development
hazer_hazer
Привет.
Правильно ли я понимаю, что с compile-time чекингом, например, в java, на рантайме не проверяется тип константы, когда она берется из пула?
В этом же смысл компайл-тайм чекинга. Но если, предположим будет статический каст или что-то такое, то будет SegFault и всё полетит.
Если подсунуть байт-код, где в констант пуле будет int вместо double, а в коде написать double, то все сломается?
UB значит undefined behaviour, поведение неопределённое стандартом языка

Если в памяти записано число типа double а программа считывает int, поведение не определно, не понятно какое int число будет
источник

AS

Aleksey Shipilev in Compiler Development
hazer_hazer
Привет.
Правильно ли я понимаю, что с compile-time чекингом, например, в java, на рантайме не проверяется тип константы, когда она берется из пула?
В этом же смысл компайл-тайм чекинга. Но если, предположим будет статический каст или что-то такое, то будет SegFault и всё полетит.
Если подсунуть байт-код, где в констант пуле будет int вместо double, а в коде написать double, то все сломается?
Я бы предположил, что скорее это вызовет ошибку верификации при загрузке класса, и привет. Плохой байткод верификатор не должен пропустить к исполнению в VM, что освобождает остальную реализацию VM от необходимости проверок на каждый чих. Не всегда и не везде, но в подавляющем большинстве случаев.
источник

а

а это кто in Compiler Development
hazer_hazer
Но UB будет, потому что они прочекали, или потому-что они кэтчат segfault и пишут UB?
segfault это ошибка памяти, она тут ни при чём
источник

E

EgorBo in Compiler Development
Aleksey Shipilev
Я бы предположил, что скорее это вызовет ошибку верификации при загрузке класса, и привет. Плохой байткод верификатор не должен пропустить к исполнению в VM, что освобождает остальную реализацию VM от необходимости проверок на каждый чих. Не всегда и не везде, но в подавляющем большинстве случаев.
а у вас прям суровый верификатор в джите? на перф джита не влияет?
источник