Abstract
Factor is a new dynamic object-oriented programming language. It began as an embedded scripting language and evolved to a mature application development language. The language has a simple execution model and is based on the manipulation of data on a stack. An advanced metaprogramming system provides means for easily extending the language. Thus, Factor allows programmers to use the right features for their problem domain. The Factor implementation is self-hosting, featuring an interactive development environment and an optimizing compiler. In this paper, the language and its implementation are presented.
- }}Dave Beazley and et al. Simplified wrapper and interface generator. http://www.swig.org/, 2010.Google Scholar
- }}Stephan Becher. StrongForth homepage. http://home.vrweb.de/stephan.becher/forth/, 2008.Google Scholar
- }}Marc Berndl, Benjamin Vitale, Mathew Zaleski, and Angela Demke Brown. Context Threading: A Flexible and Efficient Dispatch Technique for Virtual Machine Interpreters. In In CGO '05: Proceedings of the international symposium on Code generation and optimization, pages 15--26. IEEE Computer Society, 2005. Google ScholarDigital Library
- }}James Bielman and Lu´1s Oliveira. CFFI - The Common Foreign Function Interface. http://common-lisp.net/project/cffi/, 2010.Google Scholar
- }}Daniel G. Bobrow and Gregor Kiczales. The Common Lisp Object System metaobject kernel: a status report. In LFP '88: Proceedings of the 1988 ACM conference on LISP and functional programming, pages 309--315, New York, NY, USA, 1988. ACM. Google ScholarDigital Library
- }}Benoit Boissinot, Alain Darte, Fabrice Rastello, Benoit Dupont de Dinechin, and Christophe Guillon. Revisiting Out-of-SSA Translation for Correctness, Code Quality and Efficiency. In CGO '09: Proceedings of the 7th annual IEEE/ACM International Symposium on Code Generation and Optimization, pages 114--125, Washington, DC, USA, 2009. IEEE Computer Society. Google ScholarDigital Library
- }}Gilad Bracha, Peter Ahe, Vassili Bykov, Yaron Kashai, and Eliot Miranda. The newspeak programming platform. http://bracha.org/newspeak.pdf, 2008.Google Scholar
- }}Preston Briggs, Keith D. Cooper, Timothy J. Harvey, and L. Taylor Simpson. Practical improvements to the construction and destruction of static single assignment form. Softw. Pract. Exper., 28(8):859--881, 1998. Google ScholarDigital Library
- }}Preston Briggs, Keith D. Cooper, and L. Taylor Simpson. Value numbering. Softw. Pract. Exper., 27(6):701--724, 1997. Google ScholarDigital Library
- }}Robert Cartwright and Mike Fagan. Soft typing. In PLDI '91: Proceedings of the ACM SIGPLAN 1991 conference on Programming language design and implementation, pages 278--292, New York, NY, USA, 1991. ACM. Google ScholarDigital Library
- }}Craig Chambers. The Cecil language: Specification and rationale. Technical report, University of Washington, 1993.Google Scholar
- }}Ron Cytron, Jeanne Ferrante, Barry K. Rosen, Mark N. Wegman, and F. Kenneth Zadeck. Efficiently computing static single assignment form and the control dependence graph. ACM Transactions on Programming Languages and Systems, 13:451--490, 1991. Google ScholarDigital Library
- }}Dibyendu Das and U. Ramakrishna. A practical and fast iterative algorithm for Æ-function computation using DJ graphs. ACM Trans. Program. Lang. Syst., 27(3):426--440, 2005. Google ScholarDigital Library
- }}Christopher Diggins. The Cat Programming Language. http://www.cat-language.com/, 2007.Google Scholar
- }}ECMA. ECMAScript for XML (E4X) Specification, 2005.Google Scholar
- }}Daniel Ehrenberg. Closure elimination as constant propagation. Programming Language Design and Implementation, Student Research Contest, 2010.Google Scholar
- }}Michael Ernst, Craig Kaplan, and Craig Chambers. Predicate Dispatching: A Unified Theory of Dispatch. In ECCOP '98: Proceedings of the 12th European Conference on Object- Oriented Programming, pages 186--211, London, UK, 1998. Springer-Verlag. Google ScholarDigital Library
- }}M. Anton Ertl. State-smartness -- Why it is Evil and How to Exorcise it. In EuroForth '98, 1998.Google Scholar
- }}Martin Odersky et. al. The Scala Language Specification. Technical report, EPFL Lausanne, Switzerland, 2004.Google Scholar
- }}Tim Bray et. al. Extensible Markup Language (XML) 1.0 (fifth edition). World Wide Web Consortium, 2008.Google Scholar
- }}Python Software Foundation. ctypes - A foreign function library for Python. http://docs.python.org/library/ctypes.html, 2010.Google Scholar
- }}Python Software Foundation. Python/C API Reference Manual. http://docs.python.org/library/ctypes.html, 2010.Google Scholar
- }}Python Software Foundation. struct - Interpret strings as packed binary data. http://docs.python.org/library/struct.html, 2010.Google Scholar
- }}Michael Franz. Compiler Optimizations Should Pay for Themselves. In P. Schulthess, editor, Advances in Modular Languages: Proceedings of the Joint Modular Languages Conference, 1994.Google Scholar
- }}Brent Fulgham. Computer Language Benchmarks Game. http://shootout.alioth.debian.org/, 2010.Google Scholar
- }}Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional, 1994. Google ScholarDigital Library
- }}James Gosling, Bill Joy, Guy Steele, and Gilad Bracha. Java Language Specification. Addison Wesley, 3rd edition, 2005. Google ScholarDigital Library
- }}Paul Graham. On Lisp. Prentice Hall, 1993.Google Scholar
- }}David Gudeman. Representing Type Information in Dynamically Typed Languages, 1993.Google Scholar
- }}Dominikus Herzberg and Tim Reichert. Concatenative Programming: An Overlooked Paradigm in Functional Programming. In Proceedings of ICSOFT 2009, 2009.Google Scholar
- }}Rich Hickey. Clojure. http://clojure.org/, 2010.Google Scholar
- }}Urs H¨olzle, Craig Chambers, and David Ungar. Optimizing Dynamically-Typed Object-Oriented Languages With Polymorphic Inline Caches. In ECOOP '91: Proceedings of the European Conference on Object-Oriented Programming, pages 21--38, London, UK, 1991. Springer-Verlag. Google ScholarDigital Library
- }}American National Standards Institute. X3.215-1994, Programming Language Forth, 1996.Google Scholar
- }}Ecma International. Standard ECMA-334: C# Language Specification. 4 edition, 2006.Google Scholar
- }}Gregor Kiczales, Jim des Rivieres, and Daniel G. Bobrow. The Art of the Metaobject Protocol, 1991. Google ScholarDigital Library
- }}Xavier Leroy. The Objective Caml system - Documentation and user's manual. http://caml.inria.fr/pub/docs/manual-ocaml/.Google Scholar
- }}Tim Lindholm and Frank Yellin. Java Virtual Machine Specification. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 1999. Google ScholarDigital Library
- }}Christophe Rhodes. SBCL: A Sanely-Bootstrappable Common Lisp. In Self-Sustaining Systems: First Workshop, S3 2008 Potsdam, Germany, May 15--16, 2008 Revised Selected Papers, pages 74--86, Berlin, Heidelberg, 2008. Springer- Verlag. Google ScholarDigital Library
- }}Vivek Sarkar, Mauricio J. Serrano, and Barbara B. Simons. Register-sensitive selection, duplication, and sequencing of instructions. In ICS '01: Proceedings of the 15th international conference on Supercomputing, pages 277--288, New York, NY, USA, 2001. ACM. Google ScholarDigital Library
- }}Andrew Shalit. The Dylan reference manual: the definitive guide to the new object-oriented dynamic language. Addison Wesley Longman Publishing Co., Inc., Redwood City, CA, USA, 1996. Google ScholarDigital Library
- }}Bjarne Stroustrup. The C++ Programming Language. Addison-Wesley, 2000. Google ScholarDigital Library
- }}Dave Thomas, Chad Fowler, and Andy Hunt. Programming Ruby: The Pragmatic Programmers' Guide, 2004.Google Scholar
- }}Omri Traub. Quality and Speed in Linear-Scan Register Allocation. In SIGPLAN Conference on Programming Language Design and Implementation, pages 142--151. ACM Press, 1998. Google ScholarDigital Library
- }}Manfred von Thun. Rationale for Joy, a functional language, 2000.Google Scholar
- }}Mark N. Wegman and F. Kenneth Zadeck. Constant propagation with conditional branches. ACM Transactions on Programming Languages and Systems, 13:291--299, 1991. Google ScholarDigital Library
- }}Paul R. Wilson. Uniprocessor Garbage Collection Techniques. In IWMM '92: Proceedings of the International Workshop on Memory Management, pages 1--42, London, UK, 1992. Springer-Verlag. Google ScholarDigital Library
- }}Christian Wimmer. Linear Scan Register Allocation for the Java HotSpotTMClient Compiler. Master's thesis, Institute for System Software, Johannes Kepler University Linz, 2004.Google Scholar
Index Terms
- Factor: a dynamic stack-based programming language
Recommendations
Factor: a dynamic stack-based programming language
DLS '10: Proceedings of the 6th symposium on Dynamic languagesFactor is a new dynamic object-oriented programming language. It began as an embedded scripting language and evolved to a mature application development language. The language has a simple execution model and is based on the manipulation of data on a ...
A domain-specific language for building self-optimizing AST interpreters
GPCE '14Self-optimizing AST interpreters dynamically adapt to the provided input for faster execution. This adaptation includes initial tests of the input, changes to AST nodes, and insertion of guards that ensure assumptions still hold. Such specialization ...
A Surprisingly Simple Lua Compiler
SBLP '21: Proceedings of the 25th Brazilian Symposium on Programming LanguagesDynamically-typed programming languages are often implemented using interpreters, which offer several advantages in terms of portability and flexibility of the implementation. However, as a language matures and its programs get bigger, programmers may ...
Comments