Выражение простой геометрии манипуляции вычислительного графа - PullRequest
1 голос
/ 04 мая 2019

Я пишу простую библиотеку геометрических композиций / манипуляций. Библиотека должна позволять клиентам выражать высокоуровневую логику, как показано ниже:

table_base = Cylinder(r=..., h=..., anchor=None)
table_stem = Cylinder(r=..., h=..., anchor=None)
table_top = Cylinder(r=..., h=..., anchor=None)

# Build an abstract entity 'table' by specifying relationships
# between its components. No concrete locations specified yet. 
table = Geometry()
table.add(table_base)
table.stack(table_stem, table_base)
table.stack(table_top, table_stem)

# Provide concrete location for the base
# Assume 'table_base' is accessible via its name
table['table_base'].anchor = (0, 0, 0)  

# At this point we have information to populate 
# 'anchor' locations for other components
table.build()

Как показано выше, мы сначала строим примитивы (предположим, у меня есть представления для этого). Затем мы строим table как объект абстрактной геометрии. Наконец, мы предоставляем местоположение якоря для базы. Когда я нажимаю build(), я хочу, чтобы эта информация каскадно располагалась в дереве зависимостей и заполняла anchor местоположения для других компонентов. По общему признанию, я могу требовать, чтобы клиенты обновляли свои собственные якорные местоположения, но со сложными объектами это становится утомительным. Что является подходящим представлением для хранения абстрактных связей между компонентами до шага build?

Как вы, вероятно, можете сказать, у меня нет опыта в компиляторах или написании DSL. Так что даже название того, что я ищу, было бы отличной отправной точкой. Языковые предпочтения Python, но меня больше интересует концептуальное понимание.

...