“…On a more pragmatic side, supporting macroprogramming on top of existing development platforms (such as the JVM or .NET) may enable quick prototyping as well as reuse of features and tools from the host platform. This has fostered the emergence of internal DSLs (Voelter et al, 2013) for macroprogramming, which are embedded as expressive APIs on top of existing general-purpose languages: this is the case of PyoT (Python) (Azzara et al, 2014), Chronus (Ruby) (Wada et al, 2010), jDEECo (Java) (Bures et al, 2013), ScaFi for aggregate programming (Scala) (Casadei et al, 2020b), Dolphin (Groovy) (Lima et al, 2018), D'Artagnan (Haskell) (Mizzi et al, 2018), and AErlang (Erlang) (Nicola et al, 2018). However, this aspect of integration of paradigms poses architectural challenges, especially considering that macroprogramming tends to permeate various dimensions of the system-including structure, behaviour, and interaction.…”