  Since the early days of the Web, web application developers have aspired to
develop much of their applications declaratively. However, one aspect of the
application, namely its business-logic is constantly left imperative. In this
work we present Application Embedding, a novel approach to application
development which allows all aspects of an application, including its
business-logic, to be programmed declaratively.
  We develop this approach in a two-step process. First, we draw a mapping
between web applications and Domain-Specific Languages (DSLs). Second, we note
that out of the two methods for implementing DSLs, namely as either internal or
external, most traditional web applications correspond to external DSLs, while
the the technique that corresponds to DSL embedding (implementing internal
DSLs) is left mostly unexplored.
  By projecting the well-known technique of DSL embedding onto web
applications, we derive a novel technique--Application Embedding. Application
embedding offers a separation of code assets that encourages reuse of
imperative code, while keeping all application-specific assets, including those
specifying its business- logic, declarative.
  As validation, we implemented a simple, though nontrivial web application
using the proposed separation of assets. This implementation includes an
application-agnostic imperative host application named FishTank, intended to be
applicable for a wide variety of web applications, and a declarative definition
of the different aspects of the specific application, intended to be loaded on
that host.
  Our method of separation of code assets facilitates a better separation of
work, in comparison to traditional methods. By this separation, host
application developers can focus mostly on the extra-functional aspects of a
web application, namely on improving performance, scalability, and
availability, while developers of an embedded application can focus on the
functional aspects of their application, without worrying about extra-
functional concerns. The reusability of the host application makes the effort
put into a better implementation cost-effective, since it can benefit all
applications built on top of it.
