Theme-D

Version history

Changes in the release 3.1.0

  • Implemented friend modules.

Changes in the release 3.0.5

  • Closed bug #934469.
  • Added dependency to files.tci for file console-io.tci in theme-d-code/standard-library/Makefile.am.
  • Fixed the Racket runtime environment.
  • Fixed some bugs in the macro system.
  • Optimized gen-car and gen-cdr.
  • Fixed the documentation of generic procedure equal?.

Changes in the release 3.0.4

  • Fixed a bug with quasiquote.
  • Fixed procedure name introspection.

Changes in the release 3.0.3

  • Fixed a bug in the type system: <none> no longer inherits from <object>.
  • Fixed a bug with @.

Changes in the release 3.0.2

  • Added a missing = method.
  • Fixed some error messages.

Changes in the release 3.0.1

  • Fixed a bug in type deduction.

Changes in the release 3.0.0

  • Support for Guile 3.0.
  • Guile 2.0 support no longer maintained.
  • Allow splitting linker target.
  • Updated handling introspection data in the linker.
  • Redefined target platforms.
  • New macro iterate-list.
  • Compile th-scheme-utilities to Guile bytecode.

Changes in the release 2.1.1

  • Fixed a bug with forward declared classes.

Changes in the release 2.1.0

  • Fixed a bug with void generic procedures.
  • Inline constructors for classes whose superclass contains no fields.
  • Better support for using the software without installing it.
  • Implemented bytevectors and binary files in the standard library.

Changes in the release 2.0.0

  • New syntax for classes.
  • Improved constructors.
  • Created class <source-expr> for the values returned by procedure read.
  • Moved example program creators.thp to test769.thp and param-creators.thp to test770.thp.
  • Added example programs objects1.thp and objects2.thp.

Changes in the release 1.4.1

  • Fixed a bug in the Standard Library Reference.
  • Use the underlying Guile implementation for EOF objects.

Changes in the release 1.4.0

  • Moved call/cc, exec/cc, and guard to the standard library.
  • Split the core module.
  • Allow a nonreturning expression to be casted statically to any type.
  • Optimized the internal representation of nonatomic constants.
  • Fixed a bug with intermediate language scheme-no-opt.
  • Done some cleaning with the source code.

Changes in the release 1.3.1

  • Corrected bugs with generic procedures.

Changes in the release 1.3.0

  • Support for Racket as the target platform.
  • Fixed a bug with procedure string-match.
  • Allow field names to overlap with variable names.
  • New implementation for hash tables.
  • Changed the runtime environment to use modules.
  • Programs written in Theme-D can be run without the Theme-D configuration file.
  • Renamed a-list to alist in the standard library.

Changes in the release 1.2.0

  • Fixed and redesigned text file I/O
  • Fixed bugs with optimized equality predicates
  • Changed the implementation of static methods
  • Optimized predicate equal? for primitive types

Changes in the release 1.1.17

  • Fixed a bug with toplevel mutable variables
  • Fixed procedure class macro expansion
  • Fixed assertion error messages
  • Renamed <nil> to <null> in the runtime environment

Changes in the release 1.1.16

  • Fixed bugs with generic procedure dispatch.
  • Fixed module linkage order.
  • Fixed a bug with constructors.
  • Allowed list constants in interfaces.
  • Implemented procedure call stack output for intermediate language Scheme.
  • Removed vector constants from the core forms source code.

Changes in the release 1.1.15

  • Corrected a bug with let expressions.
  • Corrected bugs with special procedure type dispatch.
  • Improved some error messages.

Changes in the release 1.1.14

  • Changed Debian revision in the User Guide to a symbol.

Changes in the release 1.1.13

  • Corrected a bug with match-type-strong.

Changes in the release 1.1.12

  • Corrected bugs with Guile 2.2 Tree-IL.
  • Install custom1.scm and custom2.scm instead of the .go files.

Changes in the release 1.1.11

  • Updated the documentation.

Changes in the release 1.1.10

  • Corrected a bug with custom primitive classes.
  • Allowed logical types in mutable forward declarations.

Changes in the release 1.1.9

  • Updated the documentation.

Changes in the release 1.1.8

  • Updated the documentation.

Changes in the release 1.1.7

  • Changed the installation directories.
  • Implemented script get-theme-d-config-var.
  • Moved doc/copyright to COPYING and doc/ChangeLog to ChangeLog.

Changes in the release 1.1.6

  • Reorganized the code to be distributed in Debian.
  • Improved some error messages.

Changes in the release 1.1.5

  • Added generic procedure = for testing numerical equality.
  • Removed equal? predicates between different numerical classes.
  • Changed exception handling in the standard library and the runtime environment.
  • Added procedure raw-exit into the standard library.
  • Prevent inheriting Theme-D classes from GOOPS classes.
  • The program name is now the first command line argument.
  • Corrected a bug in the difference between a diagonal matrix and a matrix.
  • Changed the syntax of the guard-general form.
  • Added correct output of the test programs.
  • Optimized runtime GOOPS class handling.

Changes in the release 1.1.4

  • Corrected a bug with equality predicates and parametrized classes in the runtime environment.

Changes in the release 1.1.3

  • Corrected bugs with equality predicate optimization.
  • Corrected a bug with reexporting macros.
  • Corrected a bug with type-loop.
  • Added procedures member-values? and assoc-values into the standard library.
The Theme-D support library Debian package is now built for Guile 2.0.

Changes in the release 1.1.2

  • Corrected a bug with line numbering in error messages.

Changes in the release 1.1.1

  • Corrected a bug with letrec.
  • Updated doc/theme-d-translator-types.pdf.

Changes in the release 1.1.0

  • Support for both guile-2.2 and guile-2.0.
  • Optimized procedures is-integer?, is-real?, r-floor, r-truncate, r-floor, and r-ceiling.
  • Added procedure factorial to the core module.
  • Compute exact values for log2, log10, tgamma, and lgamma.
  • Prevent stripping of class <scheme-condition> in the core module.

Changes in the release 1.0.12

  • Implemented numeric tower and rational numbers in the standard library.
  • Rewrote the generic math procedures.
  • Optimized real math procedures.
  • Implemented interface for many standard C and POSIX C math functions.
  • Added dependency to library libthemedsupport.
  • Corrected a bug in procedure c-acos.
  • Implemented equal? as a generic procedure.
  • Corrected a bug with definition of declared methods.
  • Implemented bitwise arithmetic in the standard library.
  • Added procedures r-round, r-truncate, r-floor, r-ceiling, i-nonneg-expt, r-nonneg-int-expt, r-int-expt, gcd, i-sign, r-sign, make-numerical-overflow, raise-numerical-overflow, nan, inf, and neg-inf into the core module.
  • Optimized field references.
  • Load custom files from compiled files instead of source files.

Changes in the release 1.0.11

  • Added a missing type check for definitions of declared variables.

Changes in the release 1.0.10

  • Corrected a bug with cloning singletons.
  • Changed exception handling in i/o and math procedures.
  • Corrected expression output in compiler error messages.
  • Corrected line numbering in compiler error messages.
  • Changed macro syntax violation messages.
  • Check that prelink-body is not used in interfaces.
  • Delete the target .go file if linker fails.
  • Corrected a bug with force-pure-expr.
  • Optimized cast-x-vector procedures in case the original element type is a subtype of the new element-type.
  • Corrected a bug with opening output files in the translator.
  • Added procedures nan?, infinite?, and finite? into the standard library.
  • Added procedures hash-exists? and hash-remove! into the standard library.
  • Changed procedure hash-ref to take the default value as an argument.
  • Added procedure delete-file into the standard library.
  • Allow nonlist toplevel expressions.

Changes in the release 1.0.9

  • Corrected bugs with signatures as procedure call argument types.

Changes in the release 1.0.8

  • Implemented keyword static-cast.
  • Check the illegal use of keywords.
  • Corrected the error message with an unbound variable in set!.
  • Corrected a bug in library procedure or-map?.
  • Added library procedures and-map-nonpure?, and-map-nonpure1?, or-map-nonpure?, or-map-nonpure1?, a-list-delete, filter, distinct-elements?, and string-char-index-right.
  • Added declarations of procedures map-car and map-cdr into core.thi.
  • Added parametrized type :nonempty-a-list into core.thi.
  • Moved module singleton from examples into the standard library.

Changes in the release 1.0.7

  • Corrected a bug in the type system. Test program test612.thp works now.

Changes in the release 1.0.6

  • Allow toplevel statements and procedure calls in programs and module bodies.
  • New keyword prelink-body to allow calling procedures in toplevel statements.
  • Handle unspecified values with forward declarations and letrec expressions.
  • Use SRFI-72 based implementation for the macro system.
  • Form identifier-syntax and limited syntax-case support.
  • Allow a module reference as the first argument of set!.

Changes in the release 1.0.5

  • Corrected equivalence predicate optimization.
  • Corrected bugs in vector typecasts.
  • Check illegal non-toplevel expressions.

Changes in the release 1.0.4

  • Corrected a bug with parametrized procedure result type checking.
  • User defined Theme-D procedures are now visible in runtime backtrace.
  • Pretty printed runtime backtraces.
  • Print type information with runtime error messages.

Changes in the release 1.0.3

  • Corrected the eq-by-value? flag of pair classes to #t.
  • Corrected a bug with <none> type.
  • Optimized procedure calls.
  • Optimized the equality predicates.
  • Optimized checking primitive classes in match-type and is-instance?.
  • Redesigned assoc and member? procedures in order to invoke the equality predicate optimization.
  • Improved linker error messages with procedure typing errors.

Changes in the release 1.0.2

  • Better error messages.

Changes in the release 1.0.1

  • Simple and parametrized procedures can be used in signatures.
  • Corrected a bug with type checking simple procedure calls inside parametrized procedures.

Changes in the release 1.0.0

  • Support Tree-IL as intermediate language.
  • New keywords use and @: Modules can be used without importing their contents into the global namespace.
  • Corrected a bug with variable argument lists.
  • Corrected a bug with param-proc-dispatch.
  • Corrected a bug with field-set! inside parametrized procedures.
  • Procedure apply works with parametrized procedures.
  • Corrected type deduction algorithm in case a deduced value of a type variable contains other type variables.
  • Keywords make and constructor can be used with pair classes.
  • Forms and and or are implemented as macros.
  • Compatible with th-scheme-utilities version 1.3.

Changes in the release 0.9.10

  • Use guile objcode as the default target platform.
  • Shorter target variable names.

Changes in the release 0.9.9.1

  • Implemented nonpure iterators.
  • Allowed <none> as a type parameter.
  • Changed the current value of a stream to be evaluated lazily.

Changes in the release 0.9.9

  • Corrected several bugs related to parametrized procedures.
  • Corrected a bug in the runtime Theme-D environment.
  • Implemented purely functional iterators.
  • Added option --verbose-errors to the compiler and the linker.

Changes in the release 0.9.8

  • Implemented streams in the standard library.
  • Improved error messages in parametrized procedure instantiation.
  • Install compiled files.

Changes in the release 0.9.7

  • Corrected a bug with parametrized types (test434 did not compile).
  • Object factorization works again.
  • Optimized quoted list constants.
  • New keyword static-type-of.
  • New keywords lambda-automatic and param-lambda-automatic that deduce the result type from the body expression.
  • Implemented volatile variables that can be changed by pure procedures.
  • Implemented object conditionals that accept any nonfalse object as true value.
  • Implemented delayed evaluation (delay and force) into the standard library.
  • Implemented some new procedures in module text-file-io.
  • Reorganized the language manual and the standard library reference.

Changes in the release 0.9.6

  • Optimized match-type.
  • Rewrote the core list handling procedures to be statically typed internally.
  • Optimized parametrized primitive procedures as ordinary parametrized procedures are done.
  • Corrected bugs in psyntax-external.scm.
  • Made detect-cycles faster for lists.

Changes in the release 0.9.5

  • Corrected a bug with set!.
  • Allowed <none> as a type parameter.
  • Procedure apply-without-result is removed as it is no longer needed.

Changes in the release 0.9.4

  • Implemented a hygienic and lexically scoped macro system.
  • Added keyword force-pure-expr.
  • Added procedure peek-character into module text-file-io.

Changes in the release 0.9.3

  • Improved the explicit generic procedure dispatch.
  • Simplified the foreign class interface.
  • Corrected an error in the module system.
  • Correction to mutable variable declarations.
  • Corrected an error with method variable argument lists.
  • Corrected a bug with param-proc-instance.
  • Corrected the subtype checking algorithm for union types.
  • A declared value can be used as a value of a constant.
  • Type of a match-type expression may be <object> in some cases even though an else part is not present.
  • Implemented some list and string handling procedures into the standard library.
  • Better error messages for identical or noncovariant methods and erroneous parametrized procedure instantiations.

Changes in the release 0.9.2

  • Autotools are used.
  • Debian packaging is supported.

Changes in the release 0.9.1

  • Implemented signatures and parametrized signatures resembling Java interfaces.

Changes in the release 0.9.0

  • Linker strips away unused code.
  • Optimized application functionals apply, apply-nonpure, and apply-without-result.
  • Implemented keyword import-and-reeexport for importing and reexporting modules.
  • Implemented keywords match-type and try-cast for type casting.
  • Implemented the symbol tables in the compiler and linker as hash tables instead of lists.
  • Made the foreign function interface better. It is no longer necessary to specify equivalence predicates for external classes. Keyword prevent-stripping prevents stripping away a variable, which may be needed with the FFI.
  • The Theme-D configuration file may be put into user's home directory instead of /etc.

Changes in the release 0.8.12

  • A simple foreign function interface for GOOPS classes.
  • Made text file and console IO functionality better.
  • Implemented assoc and member? procedures.
  • Fixed several bugs.

Changes in the release 0.8.11

  • Renamed Theme to Theme-D in order to avoid confusion with Jaap Weel's Theme language.

Changes in the release 0.8.10

  • Fixed a bug with global mutable variables

Changes in the release 0.8.9

  • Custom primitive classes
  • Classes may specify a zero value. This is useful for parametrized numerical classes.
  • Libraries for scientific functions, complex numbers, and matrices

Changes in the release 0.8.8

  • Better type checking for parametrized types
  • Factorize type expressions out of translated procedure implementations
  • Implement call-with-current-continuation
  • Procedures may be specified as always returning or never returning
  • Mapping functionals in the core library implemented in Theme instead of using wrappers for Scheme functionals
  • More flexible vector typecasts

Changes in the release 0.8.7

  • Paramerized procedures are first class objects and they are allowed as methods.
  • Made an Emacs mode for Theme.

Changes in the release 0.8.6

  • Use guile 2.0 as the platform (both the translator implementation and the translator target code).
  • Changed the directory structure.
  • Corrected a linker bug that caused some runtime type checks not to be generated.

Changes in the release 0.8.5

  • Corrected a linker bug that caused running several tests to fail.
  • Corrected a bug in the linker. Compiled program files can now be put in any directory.
  • Implemented do-loop.
  • Added documentation of declare-method into the language manual.

Changes in the release 0.8.4

  • A new module system. Module interfaces and implementations are now in separate files.
  • Class constructors have an access specifier so you can restrict where the class may be instantiated.
  • Keyword declare-mutable to declare mutable variables.
  • The internal mutable variables of pure procedures can be changed.
  • Added library procedure apply-without-result for procedures without result value.
  • Dependencies to scsh have been removed.

Changes in the release 0.8.3

  • Changed procedure typing. Generic and parametrized types make now sense as values of procedure variables. For example, you can now compute (map cons ′(1 2 3) ′(a b c)) and (map + ′(1.1 2.2 3.3) ′(4.4 5.5 6.6)) .

Changes in the release 0.8.2

  • Corrected the parametrized class inheritance diagram in the specification document.
  • Corrected a minor error in theme-representation.scm.

Changes in the release 0.8.1

  • Made equal? safe for cyclic data structures.
  • Corrected unions so that incomplete (i.e. forward declared and not defined) types work as union member types.
  • Enhanced support for compilation into Scheme48 pseudocode.
  • Theme compiler and linker can now be used from a shell.
  • Updated documentation and added two figures about Theme class hierarchy.
  • theme-0.8.1 requires scheme-general-1.2.
Back to the main page

Last updated: November 16, 2020

Copyright (C) 2020 Tommi Höynälänmaa

tommi.hoynalanmaa@REMOVETHISiki.fi