diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:07:58 +0200 |
| commit | 967be9e750221ab2ab783f95df79bb26d290a45e (patch) | |
| tree | 6802900a5e975f9f68b169f0f503f040056d6952 /tiger-compiler/NEWS.txt | |
Diffstat (limited to 'tiger-compiler/NEWS.txt')
| -rw-r--r-- | tiger-compiler/NEWS.txt | 2332 |
1 files changed, 2332 insertions, 0 deletions
diff --git a/tiger-compiler/NEWS.txt b/tiger-compiler/NEWS.txt new file mode 100644 index 0000000..19dd463 --- /dev/null +++ b/tiger-compiler/NEWS.txt @@ -0,0 +1,2332 @@ +Bump 1.94.e, 2025-04-14 for tc-EXTS + +Bump 1.94.d, 2025-04-07 for tc-L + +Bump 1.94.c, 2025-03-25 for tc-4 + +Bump 1.94.b, 2025-03-19 for tc-3 + +Bump 1.94.a, 2025-03-10 for tc-1/2 + +* General + - TC-1 and TC-2 are now shipped as one single step + - switch to llvm-18 for LLVM-IR codegen + - multiple small fixes to objects, translate, escapes and liveness + - various updates to nix flake + +Bump 1.93.k, 2024-06-11 for tc-9 + +Bump 1.93.j, 2024-06-10 for tc-8 + +Bump 1.93.i, 2024-06-03 for tc-7 + +Bump 1.93.h, 2024-05-27 for tc-6 + +Bump 1.93.g, 2024-05-13 for tc-5 + +Bump 1.93.f, 2024-04-15 for tc-EXTS + +Bump 1.93.e, 2024-04-08 for tc-L + +Bump 1.93.d, 2024-03-28 for tc-4 + +Bump 1.93.c, 2024-03-21 for tc-3 + +Bump 1.93.b, 2024-03-18 for tc-2 + +Bump 1.93.a, 2024-03-05 for tc-1 + +* General + - rework the escaper to be useful for both the llvm and tree IR + - save if the escaper is enabled in order to perform it again after cloning + - rename TigerParser to TigerDriver and TigerDriver to TigerFactory + - fix bugs regarding the inliner and mutually recursive nested functions + - switch from shared ptrs to raw ptrs in back-end variants + +* Distribution + - distribute the implementation of all AST nodes + - distribute extensions separately from TC-4 and TC-L + +* Internal + - migrate the internal testsuite from perl to python + +Bump 1.92.k, 2023-06-17 for tc-9 + +Bump 1.92.i, 2023-06-11 for tc-8 + +Bump 1.92.h, 2023-06-05 for tc-7 + +Bump 1.92.g, 2023-05-30 for tc-6 + +Bump 1.92.f, 2023-05-15 for tc-5 + +Bump 1.92.e, 2023-04-16 for tc-L + +Bump 1.92.d, 2023-04-01 for tc-4 + +Bump 1.92.c, 2023-03-26 for tc-3 + +Bump 1.92.b, 2023-03-18 for tc-2 + +Bump 1.92.a, 2023-03-02 for tc-1 + +* General + - switch from range-v3 to C++20 ranges + - extend misc::contract to use it as a stream + - improve tweasts and metavar errors + - add dumping of types to dumper-dot + - use C++ raw literal strings + - ship given tests directly with tc-base + +* Lexer + - change lexer generator to RE-flex + - remove obsolete wrappers and headers + +* Build + - split runtime generation scripts from buildsystem + - bump to llvm15 + - silence bison warnings + - update deprecated llvm overloads + - replace obsolete autoconf macros + +Bump 1.91.i, 2022-06-15 for tc-9 + +Bump 1.91.i, 2022-06-13 for tc-8 + +* General + + - Add support for swig / python + +Bump 1.91.h, 2022-05-25 for tc-7 + +Bump 1.91.g, 2022-05-16 for tc-6 + + - Fix canon-matchers + +Bump 1.91.f, 2022-05-05 for tc-5 + +Bump 1.91.e, 2022-03-31 for tc-L + +Bump 1.91.d, 2022-03-21 for tc-4 + +Bump 1.91.c, 2022-03-10 for tc-3 + +Bump 1.91.b, 2022-03-03 for tc-2 + +Bump 1.91.a, 2022-02-18 for tc-1 + +* General + - silent LLVM warning + - remove misc/pair + - Nolimips is mandatory to compile TC-7 + - use pure functions in libcombine.cc + - symbol: always pass by copy + - ast: use misc::symbol as value type + +* Builfarm + - add support for nix + - fix update-Changelog + - fix caches for docker + - remove distcheck on TC-0 + - fix gawk regexp escape sequences for arm + +* Parser + - rework precedences and nonassocs + - enable warnings + - move to stable bison + - clarify for students + +* Dev + - rewritte stagize script in python + +Bump 1.90.h, 2021-06-07 + +Bump 1.90.g, 2021-05-31 + +Bump 1.90.f, 2021-05-20 + +* Register allocator: + - Fix infinite loop + +Bump 1.90.e, 2021-05-17 + +Bump 1.90.d, 2021-03-28 + +Bump 1.90.c, 2021-03-08 + +Bump 1.90.b, 2021-03-01 + +Bump 1.90.a, 2021-02-22 + +New in 1.90, 2021-02-12 + +* Parser + - Remove expect 2, the GLR is now determinist (so you can + also use LALR1) + - add driver to ensure sepration between paser and AST + - remove obsolete generated files + - do not track location files + +* Object + - Rework overfun + - Rework task mechanim for overfun + - add combine task combine in order to properly compute + function calls, depending on whether we activated overloading. + - reword binding of `self' + +* Monoburg + - Remove dependency on monoburg + - Use now tree variant style + - Remove get_kind + +* AST + - rename Decs to Chunk for clarity + - generate ast node destructors with override instead of virtual + +* Buildfarm + - pre-commit: add pre-commit hooks + +* Languages + - C++ + - add a *lot* of concepts + - pass by const reference + - singleton: implement generic crtp singletons + - more explicit constructor + + - Python + - respect several PEP recommendations + +* Bug fixes + - bounds-checking: fix expected output of bounds checking tests + containing a segfault + - Fix comparison of Void expressions resulted in 1 + +Bump 1.88, 2020-06-15 for tc-9 +Bump 1.87, 2020-06-08 for tc-8 + +New in 1.86, 2020-05-25 + +* General Maintainance + - Use python3 rather than python2 + - Inliner: bug fixes + +New in 1.85, 2020-04-11 + +* General Maintainance + - object: (type-checker) fix binding spurious members + - enable static linking with LLVM + +Bump 1.84, 2020-03-23 for tc-4 +Bump 1.83, 2020-02-24 for tc-3 +Bump 1.82, 2020-02-17 for tc-2 + +New in 1.81, 2020-02-09 + +* General Maintainance + - gitlab-ci: produce static binary + - reformat code + - move to C++20 + +Bump 1.80, 2019-06-24 for tc-9 +Bump 1.79, 2019-06-03 for tc-8 +Bump 1.78, 2019-05-27 for tc-7 + +New in 1.77, 2019-05-06 + +* General Maintainance + - gitlab-ci: split different phases + +New in 1.76.1, 2019-04-29 + +* General Maintainance + - TypeBuilder has been removed (see https://reviews.llvm.org/D56573) + +New in 1.76, 2019-04-19 + +* General Maintainance + - configure: fix compiler version check + +New in 1.75, 2019-03-01 + +* General Maintainance + - gitlab-ci: build pdf for assignment + +* IA31 + - rewrite_program: ia32: handle simultaneous use and def + +Bump 1.74, 2019-02-15 for tc-3 + +New in 1.73, 2019-02-09 + +* General Maintainance + - buildfarm: fix minors details + +New in 1.72, 2019-02-03 + +* General Maintainance + - style: + - unordered_map is preferred when sorting is not required + - remove useless virtual destructors + - add static const qualifiers + - no virtual with override + - more nested namespaces + - prefer std::numeric to INT_MAX + - reserve vectors size when known beforehand + - fix memory leak in tc.cc + - Boost: cleanup legacy and replace by c++17 features + - parse: + - upgrade bison requirements + - remove deprecated elements + - regen parser + - gitlab-ci: + - require LLVM 7 + - triggers for building assignments website. + +* Object + - Handle corner case for binding + - fix dispatched method call and upcasted return type + - add meth_find method + +New in 1.71, 2018-06-25 + +* Fix Maintenance + - fix broken make dist + - add gitlab-ci support + +New in 1.70, 2018-05-31 + +* General Maintenance + +New in 1.69, 2018-05-20 + +* General Maintenance + +New in 1.68, 2018-05-14 + +* General Maintenance + - fix style + +New in 1.67, 2018-04-16 + +* General Maintenance + +New in 1.66, 2018-03-09 + +* General Maintenance + - remove useless misc::set + +New in 1.65, 2018-02-12 + +* General Maintenance + +New in 1.64, 2018-02-01 + +* General Maintenance + +New in 1.63, 2018-01-25 + +* More C++17 features + - use structured bindings + - use std::variant instead of boost::variant + - use class template argument deduction + - use if(init; condition) + +* General Maintenance + - swap callee-save and caller-save order + - add desugar implementation for ArrayExp during TC-O + - replace enums with enum classes + - ensure _main existence and correct prototype in the AST + - remove MetavarExp and Metavariable AST nodes + - use nested namespaces + - replace some raw pointers with unique_ptr or shared_ptr + - add alternative rewrite_program implementation + +New in 1.62, 2017-06-26 + +* General Maintenance + - fix typos + +New in 1.61, 2017-06-05 + +* General Maintenance + +New in 1.60, 2017-05-19 + +* General Maintenance + - regenerate backends + - clean code + +New in 1.59, 2017-05-12 + +* General Maintenance + - tests: remove duplicate tests + - fix typos + - fix function call conventions + - generalize registers to multiple targets + - clean code + +New in 1.58, 2017-04-12 + +* General Maintenance + - style: put tree constructors in .cc + - fix typos + - cleanify code + +New in 1.57, 2017-03-03 + +* General Maintenance + +New in 1.56, 2017-02-13 + +* Fix documentation + +New in 1.55, 2017-02-02 + +* General Maintenance + - Remove unnecessary/deprecated Fixmes + - Clean code + - use more c++11 features + +New in 1.54, 2017-01-24 + +* Style and General maintenance + - Add maintainers + - Propagate use of pragma once + - Add missing override + - Remove comnination between override and virtual + - Use more STL algorithms + - Add useful warning + - Modernize tc-a + - Fix typos + - Propagate use of vector rather than lists + - Add more tests + - Add namespace indication at the end of scope + - Prefer nullptr to NULL + - Remove useless implementations thanks to =default + - Don't repeat the same access qualifier + - Tools to replace Fixmes by warnings + +* Inline + - More verification about return type + +* Object + - Clarify comments + - Fix use of self inside of functions + +* LLVM + - Improve escape-collector + - Do not construct type when no record is set + - Don't include runtime in the distribution + - Use native types + - Remove useless return values + - More explanation about the translator + - Fix compatibility issues with 3.9 + +* Type + - Do not provide files to student before needed + - Simplify record-exp + - Improve type_set + - Move constructor and destructor in implementation files + +* Binder + - Fix displays + - Adjust bindings for vardecs + - Update definition for self + +* C++1z + - Add comments to suggest how to use new features + +New in 1.53, 2016-06-24 + +* General maintenance + +New in 1.52, 2016-06-06 + +* General maintenance + +New in 1.51, 2016-05-30 + +* Remove useless typedef + +New in 1.50, 2016-05-19 + +* General maintenance + - Simplify code + - Updates according to coding-style + - Remove useless hidden block + - Simplify type checker for classes + - Update llvm dependencies to please gcc + +New in 1.49, 2016-05-03 + +* General maintenance of LLVM + +New in 1.48, 2016-04-18 + +* General maintenance + - replace list by vector int type/class + - Ajust given code + - Remove nested annotations + +New in 1.47, 2016-04-08: + +* Add support for LLVM + - add llvm translate module + - replace the dump method with a visitor + - add a record_type to the Nil type + - add --llvm-runtime-display and --llvm-display + +* General Maintenance + - arm: fix dependencies and use correct cross compiler + - llvm: require llvm-3.8 + + +New in 1.46, 2016-03-07: + +* General Maintenance + + - Add missing FIXMEs + +New in 1.45, 2016-02-18: + +* General Maintenance + + - Propagate changes for new version of Havm and Monoburg + - Remove useless FIXME + +New in 1.44, 2016-02-05: + +* General Maintenance + + - Generalize use of pragma once + - Support for boost 1.58 + - Use `unique_ptr` instead of `auto_ptr` + - Adjust compatibility with gcc 5 + - Adjust compatibility with flex 2.6 + - Fix typos + - Remove useless declarations + - Start to promote C++14 + +* Use type alias template in all the visitors + + - End the work started at 1.39 before the new + release for students. + +* Finalize integration with ARM + +* Compatibility with overload and object + + - Support for bindings + - Support for type checking + - Support for desugar and renamer + - Tests + +New in 1.43, 2015-06-26: + +* Fix error when computing object type inside ifexp + +* Update comments to fit iplemntation + +New in 1.42, 2015-06-05: + +* Fix pruning of unused function declarations + +* Add tests for bounds-checking + +New in 1.41, 2015-05-27: + +* Maintenance for arm backend + +New in 1.40, 2015-05-25: + +* No significant changes + +New in 1.39, 2015-04-30: + +* Start upgrading visitor + + Use a type alias template to shorten type names. Nonetheless + since it may lead to conflicts with students codes, it's just + an introduction. + +* Fix check routines + + - Fix marks for studistcheck + - Fix distcheck + +New in 1.38, 2015-03-19: + +* Support Python 3 + + Fix compatibility with python 3. + +* Update pretty printer + + Print attributes bindings. + +New in 1.37, 2015-02-26: + +* More targets + + - Clean ia32, mips target files + - Add arm backend files + - Initializer lits for cpu class + +New in 1.36, 2015-02-12: + +* More C++17 features + + - More uses of Boost.FileSystem's path. + +New in 1.35, 2015-02-04: + +* More C++11/14 features + + - type aliases with 'using'; + - moving away from std::list to promote std::vector; + - misc::variant is now always variadic, implemented with variadic + templates instead of dark magic incantations with Boost.Preprocessor. + +* Bounds Checking + + The official name is 'bounds checking', not 'bound checking'. So + everything was renamed to include that plural. + +* Simpler Build System + + The build system was simplified to be both simpler and faster: we no + longer build local libraries for the modules, rather object files + are directly linked together into libtc. + +* Safer and Faster Build System + + We also have reduced the number of Makefiles to... one. This is by + far the best approach to development. Have a look at this: + <http://aegis.sourceforge.net/auug97.pdf>. + +* Compilable Code with Gaps + + The code delivered to students now compiles cleanly. + +* More C++17 features + + Some libraries, such as Boost.Optional, Boost.ProgramOptions, and + Boost.FileSystem, are expected to be adopted by the forthcoming C++ + standard. As a consequence, we started to use them liberally, + instead of alternative implementations (e.g., argp is no longer used + at all for command line option processing). + + + +New in 1.34, 2014-02-17: + +* Even more C++ 2011 features + + The Tiger compiler uses some more features from the C++ 2011 + ISO/IEC standard: + + - (standard) smart pointers (std::unique_ptr, std::shared_ptr); + - general-purpose initializer lists; + - lambda expressions; + - explicit overrides; + - template aliases; + - new function declarator syntax; + - delegating constructors; + - non-static data member initializers; + - inherited constructors. + + These changes require at least g++ 4.8 or clang++ 3.3. + +* Moved to using Bison 3 + + A special version of Bison 3 is required to build the parser. + +* C++ scanner + + The scanner has been turned into a C++ class, still generated by + Flex. + +* ast::ObjectVisitor + + A visitor performing default traversal of object nodes, + ast::ObjectVisitor, has been introduced. + +* Allow `nil' as valid value for objects + + Objects (class instances) can now be initialized to `nil' or + assigned `nil', like records. + +* Repaired TCSH + + TCSH was broken due to SWIG 2 not understanding C++ 2011 constructs. + These constructions have been hidden to SWIG so that TCSH can be + built again. + +* Style + + Many stylistics changes have been performed, mainly to match the + EPITA Coding Style. + + + +New in 1.33, 2013-02-11: + +* Maintenance release + + More test cases, more documentation and tools to manage the test + suite, some bug fixes, some updates to catch up with recent versions + of tools, minor improvements, and various stylistic changes + (especially with respect to spacing). + +* More C++ 2011 features + + Explicit template instantiation declarations are introduced to + replace the ad hoc mechanism used so far, based on *.hcc files + that were included once. + + + +New in 1.32, 2012-01-27: + +* Text files renamed as *.txt. + + This enables more features from tools (such as Mac OS X's Finder and + so forth). + +* Fixed location handling in the scanner/parser. + + The new scheme (make_SYMBOL) broke the transmission of the current + location from the parser to the scanner (via yylloc). We actually + had two "current" locations: the scanner's and the parser's. Only + the latter was properly initialized (with the current file name). + "Fortunately" the standard default constructor also made the + scanner's location work properly wrt lines and columns, but, of + course, had an empty file name. + + The TigerParser featured a useless location_ member. We now use it + to exchange the current location betwenn the parser and the scanner. + + To summarize: + + - TigerParser::location_ is now the current (scanner and parser) + location; + + - TigerParser::parse_ initializes this location with the right file + name; + + - the parser no longer needs to initialize its $@; + + - the scanner no longer uses a (static) variable loc, but + tp.location_, tp being the TigerParser, provided to it via %param. + +* Better support for x86-64 architectures + +* Improved support for clang + + The clang C and C++ front ends to the LLVM infrastructure are better + supported. The only real limitation is now the Argp library, which + is not compatible with the C99 standard and must be compiled using a + C89 compiler (using option `-std=c89' or `-std=gnu89'). + +* C++ 2011 features + + The Tiger compiler uses some new features from the latest C++ + ISO/IEC standard, including: + + - explicitly defaulted and deleted functions; + - consecutive right angle brackets allowed in templates; + - auto-typed variables; + - template metaprogramming traits provided by the standard library; + - the `nullptr' literal constant; + - range-based for-loops (``for (type val : container) ...''). + + The current changes are compatible with g++ 4.6 and clang 3.0. + + + +New in 1.31, 2011-01-30: + +* Style changes for inheritance and constructors. + + Instead of + + class Foo + : public Bar, + public Baz + { + Foo() + : Bar(), + Baz() + { } + }; + + write + + class Foo + : public Bar + , public Baz + { + Foo() + : Bar() + , Baz() + {} + }; + +* Style change in #include. + + When used with double-quotes, the included header is looked-up for + relatively to the including file. This is not how we use #include, + since we all qualify our included files. Hence, for consistency with + the semantics and for safety, convert to using <>. + + + +New in 1.30, 2011-01-13: + +* Moved to using Bison's api.tokens.prefix + + Instead of: + + %token TOK_STRING "string" + + and using TOK_STRING in the grammar, we now use: + + %define api.tokens.prefix "TOK_" + %token STRING "string" + + and use STRING in the grammar, but still TOK_STRING elsewhere (i.e., + the token enumeration generated in the header still defines + TOK_STRING, not STRING). + +* Moved to using Bison's %param + + Instead of: + + %parse-param { ::parse::TigerParser& tp } + %lex-param { ::parse::TigerParser& tp } + + we now use: + + %param { ::parse::TigerParser& tp } + +* Moved to using Bison's named references + + Instead of: + + "for" escaping ID ":=" exp "to" exp "do" exp + { + $$ = new ast::ForExp (@$, + new ast::VarDec (@3, $3, $2, 0, $5), + $7, $9); + } + + we now use: + + "for" escaping ID[var] ":=" exp[lo] "to" exp[hi] "do" exp[body] + { + $$ = new ast::ForExp (@$, + new ast::VarDec (@var, $var, $escaping, 0, $lo), + $hi, $body); + } + +* Moved to using Bison's make_SYMBOL functions + + By specifying "%define lex_symbol", we can change the scanner to use + a type-safe interface: instead of handling the tokens in three parts + (the return value is the type, the incoming arguments yylval and + yylloc for the semantic value and the location), return an object of + the type symbol_type with aggregates these three components) + . + + Instead of: + + {number} { + yylval->ival = strtol (yytext, 0, 0); + return parse::parser::token::INT; + } + + we now use: + + {number} return parse::parser::make_INT(strtol (yytext, 0, 0), loc); + + It is now impossible to return a INT, and yet assign the wrong + semantic value. Using some macro, the scanner can be reduced to: + + {number} return TOKEN_VAL(INT, strtol (yytext, 0, 0)); + +* Moved to using Bison's variant interface + + Instead of: + + %union { + int ival; + std::string* sval; + }; + %token <str> STRING "string" + %token <ival> INT "integer" + + we now use: + + %token <std::string> STRING "string" + %token <int> INT "integer" + + and use genuine objects, instead of pointers to objects. Change the + scanner accordingly. + +* Moved to using Automake 1.11's silent-rules + + By default, running "make" no longer displays the (longish) + compilation commands. Rather, it displays: + + CXXLD transform/libtransform.la + CXX astclone/tasks.o + CXX overload/tasks.o + CXX desugar/tasks.o + CXX inlining/tasks.o + CXXLD tc + + Errors and warnings are therefore much easier to see. If you need a + verbose run, use "make V=1". See "Silent rules" in the Automake + documentation for more. + +* Avoid recursive Makefile.am's + + Since "Recursive Makefiles are considered harmful" (they hide + dependencies, they hinder performances by preventing concurrent + compilation in nested directories, they force Make to read large + repetitive files instead of a larger but unique one), nested + Makefiles have been replaced by "local.mk" files. These are + included by the parent Makefile, which therefore yield to a single + Makefile in the end. + + + +New in 1.29, 2010-01-15: + +* Fix a bug in unique objects' pretty-printer + +* More developer documentation on the distribution process + + + +New in 1.28, 2010-01-11: + +* Maintenance release + + Bug fixes, updates to catch up with modern tools, minor + improvements, aesthetic changes. + + The repository has also been converted to Git. + + + +New in 1.27, 2009-02-27: + +* Support for the Boehm-Demers-Weiser Garbage Collector on IA-32 + + On IA-32, option `--garbage-collection' generates code relying on + the Boehm-Demers-Weiser garbage collector for memory management + (see http://www.hpl.hp.com/personal/Hans_Boehm/gc/). Such code is + to be linked against the garbage collector's library + (gcc -lgc out.s). + + + +New in 1.26, 2009-01-16: + +* Tiger Interpreter in C++ + + In addition to the TCSH-based Tiger Interpreter in Python, an + interpreter written in C++ is available. It uses either HAVM, the + MIPS back end (and Nolimips) or the IA-32 back end (and GCC). + +* The Bistromatig + + The project features a large example of code written in Tiger, the + Bistromatig, an arbitrary-radix infinite-precision calculator. + + + +New in 1.25, 2008-05-19: + +* All escape sequences in literal strings are compatible with the GNU Assembler + + + +New in 1.24, 2008-03-10: + +* No significant change. + + + +New in 1.23, 2008-02-25: + +* misc::unique<T, C>, a generalization of misc::symbol + +* Use a new set of Autoconf macros for the Boost libraries by Benoît Sigoure + +* Merge more code with Gostai's code base w.r.t. code generators + + + +New in 1.22, 2007-12-10: + +* Concrete-syntax run-time program transformations + + A new module, namely `transform', provides rewriting services to the + compiler. Rewrite rules are expressed using concrete syntax. Most + of the current services are directly exposed through the language, + using the `rule' keyword. + +* Factor some code using BOOST_FOREACH and boost::lexical_cast + +* Miscellaneous renaming, mostly in lib/misc/. + + + +New in 1.21, 2007-07-04: + +* Object desugaring + + Object desugaring is working, though the implementation needs + some refactoring. + +* TWEASTs embedded in TWEASTs + + Allow a TWEAST to carry other TWEASTs as metavariables. Such a + structure is like a tree, which must be ``flattened'' before the + parsing. This feature is useful to build complex TWEASTs. For + instance, one can populate a TWEAST ``non linearly'' (reserving a + slot for a TWEAST that will be filled later). + + + +New in 1.20, 2007-06-12: + +* Some more (little) work on object desugaring, with no user-visible changes + + + +New in 1.19, 2007-06-06: + +* First step towards object desugaring + + The option --object-desugar can translate some object constructs + into plain Tiger. Method calls and accesses to attributes are not + handled yet, though. + + + +New in 1.18, 2007-05-15: + +* No significant change. + + + +New in 1.17, 2007-04-27: + +* Improve the type-checking of types and class definitions. + + object::TypeChecker now allows the use of every type defined in a + block of types from any location of this block (for instance, create + an object of a class defined later, in the same block). The + invariance of methods is checked. + + + +New in 1.16, 2007-04-23: + +* Object-aware type-checking. + + The visitor object::TypeChecker allows the computation of types on + an AST with objects. + +* Enforce STL coding style in lib/misc/. + +* Emacs major mode for Leopard + + The distribution comes with an Emacs major mode for the Leopard + language. The Tiger mode has been updated as well to highlight + Leopard's specific syntactic elements. + + + +New in 1.15, 2007-04-06: + +* Object-aware bindings. + + The visitor object::Binder allows the computation of bindings on an + AST with objects. + + + +New in 1.14, 2007-03-30: + +* Two forms of class declarations. + + Two forms of syntax for class declarations are allowed. The first + one, known as the ``canonical'' one, is similar to other type + declarations in Leopard (notably, array and records). The second + one, known as the ``alternative'' one (or ``Appel's'') was the + original syntax, described in Appel's ``Modern Compiler + Implementation'' books. + + + +New in 1.13, 2007-03-29: + +* No significant change. + + + +New in 1.12, 2007-03-28: + +* Introduce Leopard + + From now on, the Tiger project is known as the Leopard project. This + reflects the changes made to the language, which is also now called + Leopard (see below). + +* Add object-oriented syntactic constructions + + The language is extended with simple object-related constructions + (class and method declarations, inheritance, object construction, + method calls). This extension of the Tiger language gives birth to + a new dialect, called Leopard. + +* Visitor renaming + + Visitors are renamed with ``actor'' names (e.g., Binder, + TypeChecker, etc.). + + + +New in 1.11, 2007-03-23: + +* Tiger Interpreter + + A Tiger interpreter, written in Python and using TCSH, HAVM and + Nolimips, is available. It is installed along with the Tiger + compiler when TCSH is built. + + + +New in 1.10, 2006-09-04: + +* Ruby Tcsh + + The Tiger Compiler Shell is available for the Ruby language, in + addition to Python. + + + +New in 1.9, 2006-06-21: + +* Improve compatibility with NetBSD. + + +New in 1.8, 2006-06-15: + +* Fix the distribution about the target module. + + +New in 1.7, 2006-05-31: + +* Testing renamings and runtime errors + + The test suite is augmented to check the renaming pass and the + runtime errors. + + +New in 1.6, 2006-05-03: + +* Casts + + The keyword for casts is now "_cast" and no longer "cast". "_cast" + is valid only when syntactic extensions are enabled, and "cast" is + no longer special in any circumstance. + +* Tcsh + + The instruction selection has been improved so that the register + allocation works again. + + +New in 1.5, 2006-04-13: + +* Literal integers + + The semantics for literal is clarified, and the compiler matches + this definition. + + +New in 1.4, 2006-04-05: + +* Tcsh is functional again. + + + +New in 1.3, 2006-03-31: + +* No significant change. + + + +New in 1.2, 2006-03-21: + +* Tcsh is fixed (almost) + + The liveness analysis inside the register allocation is broken, but + the other stages work fine in tcsh. + +* The codegen module is merged into the target module + +* Mac OS X 10.3 (Panther) compatibility + + Have the project distcheck on Panther (in particular, be nice to + g++ 3.3 and work around missing utilities). + + + +New in 1.1, 2006-03-17: + +* Desugaring in concrete syntax within the parser + + The parser desugars some constructions (logic ``and'', logic ``or'', + unary minus) in concrete syntax. + +* misc::variant + + A simple wrapper around boost::variant is provided. It only support + two parameters, but it has conversion operators to these types. + Hence, misc::variant can be assigned to one of its ``real'' type + without using boost::get (an exception is thrown when there is + a conversion to a bad type). + +* libparse interface + + Thanks to variants, the interface of libparse is simpler. The main + parse function returns an ast_type -- a misc::variant holding either + an ast::Exp* or a ast::DecsList* + + + +New in 1.0, 2006-03-10: + +* Desugaring of the implicit Main function + + When the user types in + + <body> + + as an input program, this is desugared as + + primitive print (string : string) + ... + function _main () = (<body>; ()) + +* Overload and desugar + + Formerly, desugar::desugar used to call bind::bind and + type::types_check after it cloned the AST and removed the syntactic + sugar. It was thus impossible to go further in the compiler chain + with OverTiger programs, since the bindings computation and the + type-checking triggered errors on programs with overloaded + functions. + + The task system now allows the user to desugar a program with + overloaded functions and to proceed to the translation and the next + steps, thanks to a new task, overfun-desugar. The translation no + longer depends on desugar, but on a disjunctive task, + desugar-default. + +* Dynamic array bound checking and BoundCheckingVisitor + + The desugar step can perform a new program transformation that add + checks on the bounds of an array subscript at runtime, when reading + from (de-referencing) or writing to (assignment) the cell of an + array. + + When a subscript is out of bounds, an error message is written on + the standard error output and the program exits with error code 120. + + This transformation is done by a new visitor, BoundCheckingVisitor, + and triggered by the --bound-checks-add and --overfun-bound-checks-add + options. + +* TigerInput and parser metavariables + + Rather than using plain strings, chunks of concrete syntax are + stored in a dedicated container, TigerInput. + + Program transformations from the desugar module using concrete + syntax can save some time thanks to metavariables. A metavariable + is a named abstract syntax subtree stored in an instance of + TigerInput. Formerly, to use an AST node within a piece of concrete + syntax, one had to pretty-print this node and re-parse it. Now, the + parser can accept nodes as actual subtrees, and ``re-attach'' them + at the right place in the produced AST. + +* TigerParser + + The interface of TigerParser is refactored and uses template `parse' + methods. + +* Casts + + The extended Tiger language supports casts. This feature is not + meant to be used in program written by humans, but by the compiler + within program transformations. For instance, BoundCheckingVisitor + uses it to simulate generic arrays in the _check_bounds builtin. + +* Conversion to Boost's shared_ptr + + The implementation of misc::ref uses boost::shared_ptr. + +* GLR Parser + + tc uses a GLR Parser instead of the previous LALR(1) parser. Bison + 2.2 is required to generate this parser. + +* Renaming + + As soon as the bindings are computed, every identifier can be + renamed with a unique name thanks to RenameVisitor. + + For instance, the renaming facility is used to turn a Tiger program + with overloaded functions into a program with no overloaded + functions. This simplifies post-type-checking tasks such as + desugaring or inlining. + +* Inlining + + The compiler supports the inline expansion of functions as a program + transformation. Identifiers must have been renamed to unique names to + avoid name capture (RenameVisitor); then the bodies of non recursive + user functions are expanded (InlineVisitor); finally, unused + functions are optionally removed (PruneVisitor). + +* Containers refactoring + + Syntactic sugar for misc::Map is refactored and misc::Endomap is a + renaming mapping defaulting to identity. + + misc::ScopedMap is a generalization of the previous symbol::Table, + used in InliningVisitor. The former is used to refactor the latter. + + Symbols are no longer constructed with a `create' class (static) + member; the constructor is used instead, which is much more natural. + An automatic conversion to `const std::string&' is introduced. + +* CppGen + + This module has been in a broken state for a long time, and is + removed from the project. + +* IA32 back-end + + The IA32 back-end has been rewritten and uses MonoBURG to generate + its code generator (as does the Mips back-end). + +* Runtime errors + + The runtime errors are reported on the standard error ouput. + tc-check is aware of this new convention, and checks the standard + error ouput messages too. + +* TC-1 distribution + + The distribution machinery can now generate valid teacher tarballs. + + + +New in 0.92, 2005-06-27: + +* Use MonoBURG's named subtrees + + Since MonoBURG 1.0.2, subtrees in the right-hand side of a rule can + be named so that the user can refer to them in the corresponding + action block. The MIPS code generator uses this feature to simplify + its actions. + + + +New in 0.91, 2005-06-20: + +* Conversion of graphs to Boost Graphs + + Graphs (CallGraph, ParentGraph, InterferenceGraph, FlowGraph, + Liveness) are now implemented with the Boost Graph Library (BGL). + The graph::Graph abstraction inherits from boost::adjacency_list, + and all its subclasses handle graphs à la Boost. + +* First attempts in MIPS code generator refactoring + + The grammar of the code emitter is smaller, thanks to MonoBURG's + multiple rules feature. + + + +New in 0.90, 2005-06-14: + +* Task name normalization + + Tasks can be named like-this or like_this, but their real names only + use dashes (foo_bar is just an alias for foo-bar). + +* Computing cycles executed in Nolimips + + Tc-check's --profile option computes cycles of execution on Nolimips + tests (thanks to its --profile option). + +* misc::list + + The temp::List class, used to store temps and labels, becomes a more + general container, misc::list. + +* Better integration of MonoBURG + + The build system is more robust w.r.t MonoBURG. + + + +New in 0.89, 2005-06-07: + +* Generation of the code generator + + The code generator for Mips is now generated, thanks to MonoBURG. + Grammar files (src/codegen/mips/*.brg) describe the tree rewriting + patterns used in the translation from LIR (expressed in the Tree + language) to Assem. + + An extended version of MonoBURG is required to produce this Mips + code generator. + +* Argument passing registers + + Their number can now be bounded using --argument=LIMIT. + +* Raw desugaring + + To ease the development of DesugarVisitor, the desugar module + provides a new task, raw-desugar, which performs just desugaring, + without recomputing the bindings nor checking the types of the AST. + Thus, a desugared tree which has bind- or type-related errors can + still be pretty-printed for debugging purpose. + +* Profiling in tc-check + + Tc-check supports a --profile option which reports the number of + cycles of execution of the tested compiler. + + +New in 0.88, 2005-05-11: + +* Desugaring before translating + + configure supports the option --enable-desugar that makes the task + hir-compute depend on the task desugar, rather than just type. + +* temp::Temp and temp::Label use boost::variant + + temp::Identifier are implemented using boost::variant instead of + inclusion polymorphism. Factories are no longer needed to build and + manage these objects. + + The path to the headers of the Boost C++ Libraries can be given at + configuration time using the option --with-boost. + +* Symbols + + Due to the new implementation of temp::Identifier, symbols need to + be assignable. Thus symbol::Symbol no longer carries a reference to + the string representation of a symbol, but a pointer. + +* Timers + + Module objects (in liveness and regalloc) have their own timers, and + tasks merge them to the global timer. + + +New in 0.87, 2005-04-26: + +* TempMap + + TempMap are independent of Temp, they have moved to misc/. + +* Driver options and tasks + + Catch up with the TLRM: -B/--bindings-display does not imply + -b/--bind; -O is a shortcut for --overfun-types-compute. + + New option: --no-prelude (same as --prelude=""). + +* Symbols and strings + + A symbol::Symbol can be compared to a std::string directly, without + Symbol::create(). + +* Tcsh and studentize + + Tcsh files are no longer stripped at dist time by + stagize/studentize. Python's introspection mechanisms are used + instead to check tc's available modules. + +* Astclone and desugar are delivered + + These modules are now part of TC-4, and are shipped in student + tarballs. + + +New in 0.86, 2005-04-14: + +* Binding of formals + + The formals are bound by the BindVisitor. Binding record fields + remains a task for the TypeVisitor. + + +New in 0.85, 2005-04-14: + +* Builtin prelude + + To make tc self contained, the TigerParser now includes a hard copy + of the standard prelude. + +* Type checking options + + The disjunctive option --types-check-default is now -T/--type. + Former -T/--types-check is now --types-compute. + + +New in 0.84, 2005-04-08: + +* String parsing + + TigerParser::parse_string allows to parse a string instead of a + file. + +* Concrete syntax desugaring + + Early experiments have started. + +* Error handlers + + They now also support member manipulator. This is the first use of + member function pointers in the Tiger Project. + + +New in 0.83, 2005-04-01: + +* Visitors are functors + + The visitors now really have a top level operator() for Ast, and + derive from unary_function. This also simplifies/clarifies the + calling conventions. + +* Error handling + + The former global exit_status and free functions working on it are + replaced by the Error class, implementing error handlers. Not only + this is better OO programming, but this also improves the pureness + of the library: they no longer make side effects on cerr and + exit_status, they have there own error handler into which error are + logs, and the top level retrieves these errors, and merge them + within the top level error handler. + + More specifically, instead of writing + + if (!yyin) + { + std::cerr + << program_name + << ": cannot open `" << name << "': " + << strerror (errno) << std::endl; + misc::exit_set (misc::exit_failure); + misc::exit_on_error (); + } + + now write + + if (!yyin) + error << misc::Error::failure + << program_name << ": cannot open `" << name << "': " + << strerror (errno) << std::endl; + error.exit_on_error (); + + or even + + if (!yyin) + error << misc::Error::failure + << program_name << ": cannot open `" << name << "': " + << strerror (errno) << std::endl + << exit; + + where error is your local error handler. + +* The scanner is purer + + The TigerParser is now passed to yylex. The static variables from + the scanner and its free functions are now members of the + TigerParser. + +* Overloaded Tiger + + Support for overloaded Tiger is back, using overload aware + subclasses from the BindVisitor and the TypeVisitor. + + +New in 0.82, 2005-03-22: + +* AST file names + + The file names in the AST follow the coding style: var-dec.hh + instead of vardec.hh, etc. + +* Function overloading + + A visitor computing the bindings of OverTiger programs has been set + up. This OverfunBindVisitor does the same job as BindVisitor, but + doesn't compute function's bindings, since some type-checking is + needed to resolve function calls. These function's bindings are now + handled by OverfunTypeVisitor, which has been repaired (it uses the + same interface as the TypeVisitor). + + +New in 0.81, 2005-03-16: + +* Boolean + + Boolean operators & and | now return only 1 or 0. + +* Tasks + + It is now possible to define a task which requires only one of its + dependencies, allowing alternatives. This is done thanks to a new + task, DisjunctiveTask. + +* Symbols + + Symbols are now handled by a factory. Before one unique of the + string value was stored, now one Symbol suffice. Many + allocations/deallocations are saved. + +* Swig 1.3.24 + + Dependency tracking is enabled. We no longer use the obsoleted + -runtime. + +* misc::separator + + This auxiliary function provides sugar to print separated lists. + For convenience, it dereferences list of pointers. It replaces the + functions print_with_separator. + +* Parsing module + + The parsing module has been completely overhauled. The handling of + "import" directive is now performed when found: the scanner and + parser are recursively called. The new class TigerParser + coordinates the scanner and parser, and caries the results. The + debatable "using namespace ast" has been removed. + +* tcsh + + Libtool is now used to compile a top level dynamic library, libtc, + containing all the modules. The tc executable is linked statically + against this dynamic library on platforms that support it. This + considerably simplifies tcsh which only needs to be linked against + the dynamic libtc. + + More natural translations are provided, especially thanks to __str__ + methods. + + The Python bindings are moved in tcsh/python. + +* break checks + + The BindVisitor now also binds the break's to their loop construct. + Hence incorrect breaks now trigger a bind-error instead of a + type-error. + +* Clone Visitor + + This new visitor makes a deep copy of an AST. It also serves as a + basis for the construction of the following visitor. + +* Desugar Visitor + + A new visitor, removing syntactic sugar from an AST while cloning it. + It currently handles the following sugar: + + - String operators (<, <=, >, >=, =, !=) + Using strcmp and streq (new primitives), change these operators + into integer operators: + + ... a < b ... + + where a and b are strings + + ... strcmp (a, b) < 0 ... + + and so forth. + + - ForExp + For's can be desugared as while's, as the former is a particular + case of the latter. + + +New in 0.80, 2004-11-10: + +* Swig files + + The handling of Swig files has changed again: they are no longer + shipped, hence Swig is required to build tcsh. This release was + tested with Swig 1.3.22. + + This change was prompted by the fact that some of tc's sources are + generated (version.cc). Since Swig input is tc's sources, even if + one shipped Swig output files, they had a missing dependency + (version.cc) which `make' tried to satisfy. Hence Swig was + relaunched, trying to overwrite shipped files. + +* Call and parent graphs + + The call graph (what functions are called by a function), and the + parent graph (what functions are nested in another) have moved into + the callgraph module. + +* Type Checking + + Type checking is vastly simplified using a better set of auxiliary + functions. The handling of types themselves, especially + comparisons, is also simplified. For loop indexes processing is + simplified using a misc::set. + + +New in 0.79, 2004-10-26: + +* Typable + + The ``typable'' nodes of the AST inherit from a new abstract base + class, ast::Typable, which holds a pointer to the type (type::Type) + of the node. + +* TypeVisitor and type labelling + + Typable AST nodes are labelled with their type by the TypeVisitor, + as well as type declaration holders (ast::Dec nodes). Type + environments have become useless, as type definitions are retrieved + directly from the AST nodes using their type labels and their + definition sites (set by the BindVisitor). + +* Function overloading + + Since the new TypeVisitor no longer uses environments to store the + type information, the old interface used by the OverfunTypeVisitor + is broken. Hence, function overloading has been disabled, waiting + for a future repair. + +* AST display + + The display of the AST has changed: the options --bindings-display, + --escapes-display etc. no longer display the AST, rather they enable + features from -A. Hence, when one used to run -E, now run -EA. + +* Type and Translate Visitors + + They are vastly simplified thanks to (i) the BindVisitor, and (ii) + the type annotations. The so-called "Entries" and "Env" have + disappeared, replaced by much simpler std::maps. Kinds have + disappeared: type annotations suffice. + + +New in 0.78, 2004-10-13: + +* Prelude + + Full prelude support is implemented, and activated. New options + --library-append and --library-prepend, and new envvar, + TC_PKGDATADIR. + +* Memory leaks + + Many leaks are solved. There remains memory that STL does not free + when there are many xallocs. + +* PrintVisitor + + The PrintVisitor is revamped and uses operator<< internally, instead + of accept. This was done thanks to misc::xalloc to pass flags to the + PrintVisitor. + + +New in 0.77, 2004-10-06: + +* Coding Style + + The coding style for type is finally defined, and the code was + normalized. + +* Streams extentions + + misc::xalloc provides a convenient wrappers around xalloc and pword. + +* Prelude + + Preliminary support for a prelude is implemented: + + - import "FILE" + Inclusion a library file from a Tiger source file is enabled. + The syntax of the FILE is + + let + DECS + end + + To support the two different syntaxes with a single parser, we use + a "seed": an initial fake token that branches the start symbol on + one of the two "sub-grammars" (declaration file, or source file). + + - primitive + The new keyword "primitive", similar to "function" allows for the + introduction of function signatures, without bodies. + + - --prelude=PRELUDE + The definitions included in the file PRELUDE are automatically put + "around" the source file. Technically, when PRELUDE is not null, + it is equivalent to parsing + + let + import "PRELUDE" + in + FILE + end + + where FILE is the source file to compile. + + Support for a library search path will soon be included. This will + enable the definition of a standard Tiger prelude defining (via + "primitive") the Tiger primitives (builtins). + +* LetExp + + Second change in the handling of declarations: "let" are no longer + de-sugared into homogeneous nested "let"s. Rather, a "let" is an + heterogeneous list of homogeneous lists of declarations. + +* FieldInit + + Replaces the FieldExp, which no longer derives from Exp. + +* Default Visitor + + The machinery to select a const or non const iterator is fixed, and + spread on the whole Visitor hierarchy. The selection of const/non + const Visitor is also cleaner, using a template template argument. + + Also, the former Defaultvisitor class template is renamed + GenDefaultvisitor for consistency with the Visitor hierarchy itself. + DefaultVisitor and DefaultConstVisitor are now classes. + +* Bind Visitor + + This new visitor is in charge of binding names, i.e., linking every + identifier use (function call, type name, variable name) to its + definition. As a result, no other Visitor now uses a scoped symbol + table: using the address of the definition site is enough (it plays + the role of a unique global name, free from scopes). + +* Escapable + + Multiple inheritance is used to factor the possibility of being + escaped. + +* Cpu + + They own a TempMap that contains the needed magic to change fp into + $fp etc. In addition, MipsCpu becomes (more or less) a NolimipsCpu + that also knows how to map t4 into $x4. This allows to transform + local hacks into a general feature. + +* Levels + + Andrew W. Appel suggests the use of two system levels: the "outer" + level, the one containing the primitives and the main function, and + of course the "main" level, that of the "main" function. We now + only have a single level, that of "main". + +* Parser adjustments + + %destructor and %printer are used: the parser is more verbose, and + no longer leaks. + +* PrintVisitor + + It nows uses misc::indent instead of local code. + +New in 0.76, 2004-07-07: + +* New option: --target-default + + This task was introduced to work around a design issue: + interdependent global variables initialization. Some architectures + failed at launching because of this issue. + + +New in 0.75, 2004-07-06: + +* Debian package + + A package for Debian GNU/Linux can be automatically generated using + `make deb'. The package version is deduced from the version of TC and + the repository revision. + +* Interference Graph + + The move related nodes are now reported. + +* Graph output + + Empty labels are no longer produced. This improves rendering with, + e.g., OmniGrafle. + + +New in 0.74, 2004-06-25: + +* Identifiers Mapping + + The old class TempMap was recycled into Map <Identifier>. The + Identifier<> class template is now equipped with means to + store/retrieve one such Map on a stream, using xalloc and pword. It + also now enjoys a magical operator<< which uses such a Map to format + Identifiers during the output. + +* Code Pessimization + + Some code pessimization was identified and fixed. + +* Callee/caller save registers + + 0 now stands for 0 such registers, whereas before it meant "the + default number". Use 99 or whatever to revert. + +* Testing framework + + tc-check now distinguishes unsupported features from broken + implementations. + + Test files are properly shipped, thereby freeing the user from the + formerly mandatory available... tc compiler. + +* Stream modifiers + + misc/escape and misc/indent now properly save/restore the state of + the stream. + +* Assem + + The printing is assem instructions is simplified thanks to using + TempMap in ostream, together with the debugging flag. + + +New in 0.73, 2004-06-10: + +* Fixes + + Distcheck, now properly works. Errors in comments/documentation + were fixed. + +* Memory leaks + + Memory leaks from T6 to T9 were handled and removed. + +* Targets: Nolimips + + Mipsy is now replaced with Nolimips. + +* Targets: Overhaul + + The overhaul of the target modules has started to let code generator + enjoys the specific features of the target processor. In a + forthcoming version, Nolimips will considered as an architecture, + and there will be TempMap derived classes to cope with architecture + register name specificities. + +New in 0.72, 2004-05-10: + +* Fragments and Visitors. + + Tree and Assem fragments now support Visitors to provide a cleaner + alternative to dynamic_cast. Assem Visitors are clarified: + MapVisitor is removed, and Visitor is extended (to parallel with + a GenDefaultVisitor for the ast module). + +* Inner classes + + Function Inner classes are now demonstrated to call single use + Fragment visitors. + +* Less dependencies. + + More fwd.hh files were introduced. + + +New in 0.71, 2004-04-30: + +* Tasks. + + They are finally moved into their own namespace, task. + Printing functions are standardized. + +* Identifier redesign. + + The implementation of temp::Identifier was simplified by merging the + parameter and the parameter's traits. As a result, the Identifier, + TaggedIdentifier, and Factory class templates are now parameterized + by a class template (the traits). + +* Compilation warning flags. + + They are no longer used to compile SWIG output files. + +* Less dependencies. + + More fwd.hh files were introduced. Newly introduced *.hcc files + help reducing compilation dependencies. + +* Memory leaks. + + Intermediate code leaks were fixed. The test suite now checks for + memory leaks at every stage of the compiler (except when recovering + from parse errors). + +* More unit tests. + + More independent library files are checked, and existing tests have + been improved, in order to help independent development of these + auxiliary (but fundamental) files. + +* Indenting ostream. + + (Intermediate) fragments now use misc::indent. + +* Wrapping sliced tarballs. + + Studentize check that its input has balanced student marks: + it should now be impossible to produce student tarballs with + missing files. + + Stagize is smarter, and allows to distcheck sliced tarballs. + +* Tree code. + + The class tree::Node was renamed as tree::Tree which is more + meaningful, since that's how this intermediate representation is + called (Tree code). + + The fragments are finally part of tree::, instead of translate:: as + Andrew Appel suggests. The clarity of this layout seems to + outweigh the benefits of sticking to Appel's design. + +* Independence from target. + + The target module is not needed in T5: the frame module is truly + independent from the name of the real target fp and rv register + names. There remains a dependency on the word size. It is + considered to always be 4 bytes. + + +New in 0.70, 2004-04-05: + +* Memory is properly reclaimed when reporting an error. + This required getting rid of all `std::exit' invocations, since they + exit immediately, without stack unwinding. The functions from + common.cc that used to call `std::exit' are replaced by the functions + from misc/fail.* that throw exceptions. + + Then, the driver is changed to catch exceptions. Without `catch' + clauses, the standard specifies that performing or not performing + stack unwinding is undefined. + + Note that *there must not be any invocation of `exit'*, as it skips + stack unwinding, i.e., it skips memory reclaiming. Every explicit + call to `exit' must be replaced by a `throw', either direct, or via + a call to `error_on_exit'. + +* Wider use of misc::indent. + Indented output is extremely convenient if most routines use it. + Its use was generalized in symbol tables, type checking, and + intermediate code. + +* tc-check. + + - Recent changes in tc-check caused it to be insensitive to some + failures, this is fixed. Now, it is also checking memory leaks in + type checking (including when there are type errors). + + - Diffs are less verbose, in order to keep some privacy over the + test suite. + + - Standard error output is checked when auditing escape computation. + +* Translation to intermediate code is cleaned up. + +* `if then' is finally implemented as syntactic sugar. + +New in 0.69, 2004-03-26: + +* ios::xalloc is used to control the depth of record type pretty printing. + +* New indentation relative functions added. + Two new files: src/misc/indent.hh and src/misc/indent.cc. + +* No memory leaks in T4. + +* More traits available. + misc::traits provides some information about types. + +* The Type module was revised. + Many simplifications are introduced such as: + + - use of the method `type' as a sort of `accept' with a return + value. + + - use of the overloaded template methods `error' to factor error + reporting and recovery. + +* Similarly in the Translate and Overload modules. + +* Tcsh is repaired. + Tcsh was broken in the latest releases. It is up and running + again. + + +New in 0.68, 2004-03-19: + +* The function misc::for_each allows for pseudo functional programming + using function objects. For instance, instead of + + for (list_t::const_iterator i = l.begin (); i != l.end (); ++i) + f (*i); + + one may write + + misc::for_each (l, f); + + The difference with std::for_each is that `f' is not copied, it is + passed by reference, so it is not sliced. + +* The DefaultVisitor has a template method for arbitrary pointer + types, so that + + i->accept (visitor); + + can now be replaced with + + visitor (*i); + + Combined with misc::for_each, one may now replace + + for (list_t::const_iterator i = l.begin (); i != l.end (); ++i) + i->accept (v); + + with + + misc::for_each (l, v); + +* The attributes `name' from FunctionDec, VarDec, and TypeDec are now + factored into a single attribute `name' in Dec. As a result, more + code can be factored (e.g., checking that a name is defined only + once). + +* The documentation is undergoing a full overhaul to be more + effective. + +* The configuration of Swig is softened: + - --with-swig mandates Swig, i.e., if Swig is not available, it is a + hard error. + - without-swig disables it completely. + - If not specified (or --with=swig=auto), Swig support is built if + available. + +* The files parse/location.hh and parse/position.hh are built if + missing when building src/ast (which requires them). + +* The file misc/select_const.hh provides support for const vs. non + const iterators. This is most useful in the DefaultVisitor + template. + + +New in 0.67, 2004-03-03: + +* The Singleton idiom used for Symbols is more robust to dependencies. + That solves a portability problem on Mac OS X, where the module + Target tried to create a Symbol before its class member `set_' was + constructed. + +* The AST module is cleaned up. + - The outdated file src/ast/README is removed. + - A trailing, unused, misleading definition of decs_type is removed. + +* CppGen is somewhat repaired (23 passes over 128 tests as compared + to... 0), but a lot remains to be done. + +* The argp library is updated to its latest release, to improve + Mac OS X compatibility. + +* Many Doxygen warnings are removed. + +New in 0.66, 2004-02-18: +* All the visitors now use `operator()' instead of `visit' as method + name. This is more compliant with other C++ programming groups, such + as Boost (e.g., http://www.boost.org/libs/graph/doc/visitor_concepts.html). + +New in 0.65, 2004-02-17: +* Declarations in "let" are reduced to a single kind (function, + type, or variable). Only one variable can be introduced at a time. + Mixed "let" are de-sugared as nested "let"s. +* Constructors of AST nodes are moved in the implementation file, + as for the destructors. +* Hooks for escapes, kinds etc. are no longer delivered during T2. + +New in 0.64, 2004-02-06: +* Symbols are sorted lexicographically. +* temp::Temp and Label share the same implementation, based upon + (natural) dynamic polymorphism instead of an ad hoc implementation. +* Traits are (finally) demonstrated: they help implement the common + framework for temp::Temp and Label. +* "print" functions always return an ostream. +* tcsh: The Tiger Compiler Shell... + Swig is used to import the Tiger libraries into a Python shell. + Thanks to Nicolas Burrus. +* The compilation of Bison files is safer and lazy. +* Autoconf 2.58. +* Automake 1.8.2. +* Gzip archives are no longer built by default. +* The Tiger Emacs mode is now shipped (config/tiger.el). + +New in 0.63, 2003-11-17: +* The test suite is no longer a sub package, it is a regular sub + directory. +* Fix tc-check file location. +* Fix escape checks. +* Automake 1.7.9. + +New in 0.62, 2003-10-29: +* Tree memory management is handled by reference counting. +* --callee-save and --caller-save allow to address fake limited + architectures. +* BooleanTasks and IntTasks. +* foo/foo-tasks.* are renamed as foo/tasks.*. +* Compute escaping static link. +* Compute and dump call and parent graphs. +* More code moved out of the headers. +* Use NameTy instead of Symbol for RecordExp, ArrayExp, ArrayTy, + Field. +* The transformation from HIR to LIR is performed by objects + instead of stand-alone functions. +* The AST is rewritten to use pointers instead of reference: "*new" + has disappeared from the parser. +* Rebox is provided to build nice boxed comments. +* Temp now uses a factory, which is also in charge of memory deallocation. +* Coding style is standardized. For instance private members are + "foo_"-like, no longer "_foo". +* temp::Label and temp::Temp are factored into the class template + temp::Identifier. +* Heavy use of forward declarations as compiler firewalls. +* The ast is generated. +* Automake 1.7.8, Havm 0.21 are required. + +New in 0.61, 2003-08-14: +* The Cpu class no longer includes a "color register" category. +* Register allocation is improved. +* The runtime functions are fixed and tested for failures. +* Calls to the "exit" syscall set the status. +* Ia32 back-end is improved, but still fails on some cases. + +New in 0.60, 2003-07-22: +* List of temporaries are sorted. This should help regression tests. +* misc::set have properly working version of set_union, operator+ etc. +* --target-display describes the current target. +* --inst-debug enables verbose output of the instructions, i.e., + with the "use", "def", and "jump" lists. +* The register allocator was rewritten from scratch. The results + are much better, and the code is much closer to Appel's. + +New in 0.59, 2003-07-07: +* src/codegen/tiger-runtime presents the C source of the Tiger + runtime. +* The MIPS getchar implementation is fixed. +* Mipsy support (-Y/--mipsy-display). +* The C++ generation is now checked. + +New in 0.58, 2003-06-26: +* Compiler warnings are enabled during the build. +* Lots of these warnings are removed. +* Using Bison 1.875c is recommended (to neutralize some warnings). +* Function overload added. +* This file. +* Count of removed lines in README. +* Refixed escape checks. +* Register allocation speed up. +* No longer wastes frame slots when spilling. + +New in 0.57, 2003-05-23: +* Escape checks fixed. +* Handling of for loop upper bounds fixed. +* Error messages normalized. +* Support for --liveness/-V +* Ix is enabled by default, use --hir-naive to disable. +* tc-check works on NetBSD as is. + +New in 0.56, 2003-05-12: +* --task-graph. +* Translate, canon and codegen clean up. + +New in 0.55, 2003-04-28: +* Simplified declaration of tasks. +* Extended tc-check, with tarball time stamp support. +* tc-check supports a configuration file. +* --target-ia32. +* misc/deref.hh provides a magic means to output the contents of + containers of pointers. +* Complete revamping of the back end. + +FIXME: Continue the extraction from the ChangeLog. +Be careful that "Bump to 0.54" means "Release 0.53". + + +New in 0.54, 2003-04-08: + +New in 0.52, 2003-03-19: + +New in 0.50, 2003-01-29: + +New in 0.20, 2003-01-10: + +New in 0.18, 2002-07-11: + +New in 0.17, 2002-05-31: + +New in 0.15, 2002-05-18: + +New in 0.14, 2002-03-05: + +New in 0.13, 2002-02-14: + +New in 0.12, 2001-09-13: + +New in 0.11, 2001-09-10: + +New in 0.8, 2001-07-05: + +New in 0.7, 2001-06-23: + +New in 0.5, 2001-06-08: + +Local Variables: +coding: utf-8 +mode: outline +ispell-local-dictionary: "american" +End: |
