Most large-scale applications integrate remote services and/ or transactional databases. Yet building software that efficiently invokes distributed service or accesses relational databases is still quite difficult. Existing approaches to these problems are based on the Remote Procedure Call (RPC), Object-Relational Mapping (ORM), or Web Services (WS). RPCs have been generalized to support distributed object systems. ORM tools generally support a form of query sublanguage for efficient object selection, but it is not well-integrated with the host language. Web Services may seems to be a step backwards, yet document-oriented services and REST are gaining popularity. The last 20 years have produced a long litany of technologies based on these concepts, including ODBC, CORBA, DCE, DCOM, RMI, DAO, OLEDB, SQLJ, JDBC, EJB, JDO, Hibernate, XML-RPC, WSDL, Axis and LINQ. Even with these technologies, complex design patterns for service facades and/or bulk data transfers must be followed to optimize communication between client and server or client and database, leading to programs that are difficult to modify and maintain.
While significant progress has been made, there is no widely accepted solution or even agreement about what the solution should look like. In this talk I present a new unified approach to invocation of distributed services and data access. The solution involves a novel control flow construct that partitions a program block into remote and local computations, while efficiently managing the communication between them. The solution does not require proxies, an embedded query language, or constructions/decoding of service requests. The end result is a natural unified interface to distributed services and data, which can be added to any programming language.