CML: A higher concurrent language
PLDI '91 Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation
Compiling with continuations
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
System architecture directions for networked sensors
ASPLOS IX Proceedings of the ninth international conference on Architectural support for programming languages and operating systems
SEDA: an architecture for well-conditioned, scalable internet services
SOSP '01 Proceedings of the eighteenth ACM symposium on Operating systems principles
Featherweight Java: a minimal core calculus for Java and GJ
ACM Transactions on Programming Languages and Systems (TOPLAS)
Cooperative Task Management Without Manual Stack Management
ATEC '02 Proceedings of the General Track of the annual conference on USENIX Annual Technical Conference
The nesC language: A holistic approach to networked embedded systems
PLDI '03 Proceedings of the ACM SIGPLAN 2003 conference on Programming language design and implementation
Capriccio: scalable threads for internet services
SOSP '03 Proceedings of the nineteenth ACM symposium on Operating systems principles
Advanced control flow in Java card programming
Proceedings of the 2004 ACM SIGPLAN/SIGBED conference on Languages, compilers, and tools for embedded systems
Automatically Restructuring Programs for the Web
Automated Software Engineering
Continuations from generalized stack inspection
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Why events are a bad idea (for high-concurrency servers)
HOTOS'03 Proceedings of the 9th conference on Hot Topics in Operating Systems - Volume 9
Portable multithreading: the signal stack trick for user-space thread creation
ATEC '00 Proceedings of the annual conference on USENIX Annual Technical Conference
Flash: an efficient and portable web server
ATEC '99 Proceedings of the annual conference on USENIX Annual Technical Conference
Polyglot: an extensible compiler framework for Java
CC'03 Proceedings of the 12th international conference on Compiler construction
Verifying liveness for asynchronous programs
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A generic type-and-effect system
Proceedings of the 4th international workshop on Types in language design and implementation
Implicit invocation meets safe, implicit concurrency
GPCE '10 Proceedings of the ninth international conference on Generative programming and component engineering
Concurrency by modularity: design patterns, a case in point
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Building scalable software systems in the multicore era
Proceedings of the FSE/SDP workshop on Future of software engineering research
JCoBox: generalizing active objects to concurrent components
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
AC: composable asynchronous IO for native languages
Proceedings of the 2011 ACM international conference on Object oriented programming systems languages and applications
Dynamic adaptation through event reconfiguration
OTM'11 Proceedings of the 2011th Confederated international conference on On the move to meaningful internet systems
Pause 'n' play: formalizing asynchronous C#
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
Proceedings of the 2nd edition on Programming systems, languages and applications based on actors, agents, and decentralized control abstractions
Model-based, event-driven programming paradigm for interactive web applications
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
QEMU/CPC: static analysis and CPS conversion for safe, portable, and efficient coroutines
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Hi-index | 0.00 |
The event-driven programming style is pervasive as an efficient method for interacting with the environment. Unfortunately, the event-driven style severely complicates program maintenance and understanding, as it requires each logical flow of control to be fragmented across multiple independent callbacks. We propose tasks as a new programming model for organizing event-driven programs. Tasks are a variant of cooperative multi-threading and allow each logical control flow to be modularized in the traditional manner, including usage of standard control mechanisms like procedures and exceptions. At the same time, by using method annotations, task-based programs can be automatically and modularly translated into efficient event-based code, using a form of continuation passing style (CPS) translation. A linkable scheduler architecture permits tasks to be used in many different contexts. We have instantiated our model as a backward-compatible extension to Java, called TaskJava. We illustrate the benefits of our language through a formalization in an extension to Featherweight Java, and through a case study based on an open-source web server.