diff --git a/doc/Makefile.am b/doc/Makefile.am index c1f3b04c..e9d08b37 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -27,8 +27,8 @@ stylesheets := $(shell find "$(path_src)" \ stexi := $(stylesheets:.xsl=.texi) info_TEXINFOS = tame.texi -tame_TEXINFOS = usage.texi macros.texi preproc.texi license.texi \ - config.texi $(stexi) tame.css +tame_TEXINFOS = usage.texi concept.texi preproc.texi license.texi \ + config.texi macros.texi $(stexi) tame.css MAKEINFOHTML=$(MAKEINFO) --html --css-include tame.css diff --git a/doc/concept.texi b/doc/concept.texi new file mode 100644 index 00000000..ca74f970 --- /dev/null +++ b/doc/concept.texi @@ -0,0 +1,67 @@ +@c This document is part of the TAME manual. +@c Copyright (C) 2019 R-T Specialty, LLC. +@c Permission is granted to copy, distribute and/or modify this document +@c under the terms of the GNU Free Documentation License, Version 1.3 or +@c any later version published by the Free Software Foundation; with no +@c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. +@c A copy of the license is included in the section entitled ``GNU Free +@c Documentation License''. + +@node Core Concepts +@chapter Core Concepts +@helpwanted + +@cindex declarative, programming +@cindex imperative, programming +@tame is a @dfn{declarative} programming language@mdash{ + }it @emph{describes} how a program ought to behave rather than + explicitly telling a computer the steps needed to make it work + (@dfn{imperative}). +@tame is a calculator at heart, + so code written in its language describes mathematical operations. +Definitions fall primarily under two categories: + +@table @strong + @cindex classifications + @item Classifications + Higher-order logic used to classify data and predicate calculations, + controlling program flow. + + @cindex calculations + @item Calculations + Mathematical operations motivated by linear algebra. +@end table + +@tame also supports abstracting calculations into @dfn{functions}, + which permits the use of recursion for solving problems that are + difficult to fit into an algebraic model. +The language is Turing-complete. + +@cindex metalanguage +@cindex domain-specific language +@tame itself is a @dfn{domain-specific language} (DSL)@mdash{ + }it was designed for use in comparative insurance rating systems. +However, + it couldn't possibly know all useful abstractions that may be needed + in the future; + the domain for which @tame was designed encompasses many + subdomains as well. +To accommodate future needs, + @tame is also a @dfn{metalanguage}@mdash{ + }a language that can be used to program itself. +The core language is based upon broad mathematical foundations + that offer great flexibility. +Its expressive template system allows the creation of abstractions + that are indistinguishable from core language features, + and templates have powerful introspective capabilities that allow + for many useful types of code generation. +Essentially, + @tame allows the creation of sub-DSLs. + +Code is written in @tame without regard to order of execution@mdash{ + }the linker will figure that out for you. +This simplifies the development of systems with complex graphs of + dependencies. + +@todo{This chapter is a placeholder. + More to come.} diff --git a/doc/preproc.texi b/doc/preproc.texi index 6bf1d236..faf0ab7b 100644 --- a/doc/preproc.texi +++ b/doc/preproc.texi @@ -1,4 +1,3 @@ -\input texinfo @c This document is part of the TAME manual. @c Copyright (C) 2015, 2016, 2018, 2019 R-T Specialty, LLC. @c Permission is granted to copy, distribute and/or modify this document diff --git a/doc/tame.texi b/doc/tame.texi index a97d41d9..c9202ab7 100644 --- a/doc/tame.texi +++ b/doc/tame.texi @@ -63,6 +63,7 @@ Free Documentation License". @menu * Using TAME:: History of TAME and how to use it +* Core Concepts:: Design philosophy and mathematical concepts * Preprocessor:: Metaprogramming system * Dependency Graph:: Dependency processing and flow analysis * Symbol Table:: Lookup table for all objects @@ -79,6 +80,7 @@ Free Documentation License". @include usage.texi +@include concept.texi @include preproc.texi @include src/graph.texi