Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456 Yannis's Web Page
Yannis Smaragdakis
Assistant Professor,
College of Computing, Georgia Tech
My research interests are on the systems and languages side of
software engineering:
object-oriented language design and implementation (esp.
multiparadigm programming, OO components, distributed programming in OO
languages)
advanced tools to facilitate program construction (esp. program
generators, domain-specific languages, component-based systems,
extensible language tools, automatic testing)
J-Orchestra, NRMI, and GOTECH are language
tools for distributed computing. J-Orchestra
is an automatic partitioning system for Java programs. It is unique
because you can put any regular application object on any machine, but
guarantee that the semantics of the original program will be preserved.
NRMI is Java middleware that makes distributed computing more like local
computing. The GOTECH framework uses generative and Aspect-Oriented
techniques to add distributed capabilities to existing programs.
The J-Orchestra Web page
contains more documentation and a downloadable version.
Meta-AspectJ (MAJ)
is a state-of-the-art meta-programming tool for Java and AspectJ. In
the area of software generators and transformation systems, I have also
worked on domain-specific languages (such as DiSTiL, for high-level data
structure programming) and on program transformation systems (JTS at
UTexas and Intentional
Programming (IP) at Microsoft).
FC++ is a
really cool library for programming functionally in C++. It is the first
library to fully combine higher-order and polymorphic functions, by
neatly exploiting C++ type inference:
"FC++:
Functional Tools for OO Tasks" is a pre-print of a paper that
appeared in Software Practice & Experience. It shows how some common
OO programming tasks benefit from FC++.
The FC++
Web page contains pointers to more FC++ publications and information.
In Object-Oriented design, I have proposed the concept of a
"mixin layer". A mixin layer is a static component encapsulating
fragments of several different classes (mixins) so that all fragments
are composed consistently. Mixin layers are a good implementation
technique for layered designs.
In the area of virtual memory management, I have proposed the
EELRU replacement algorithm for virtual memory systems, which
consistently outperforms LRU and offers good theoretical guarantees.
Additionally, I have worked on techniques for compressed virtual memory
and for the reduction (i.e., simulation-specific compression) of program
reference traces.