blob: 0c80b518d8703cf38c62728a07ac85cc8f5980ee [file] [log] [blame]
Brian Silverman70325d62015-09-20 17:00:43 -04001== 19 March 2014 ==
2
3Ctemplate 2.3 has been released. Fixed some more C++11 issues.
4Removed deprecated Template::SetEscapedValueAndShowSection() and Template::ReloadIfChanged().
5
6== 18 April 2012 ==
7
8Ctemplate 2.2 has been released. Several issues reported by G++ 4.7 have been fixed.
9
10== 22 March 2012 ==
11
122.1 has been released. operator[] has been added to TemplateDictionary.
13
14== 24 January 2012 ==
15
16I've just released ctemplate 2.0. It has no functional changes from
17ctemplate 1.2.
18
19The `google-ctemplate` project has been renamed to `ctemplate`. I
20(csilvers) am stepping down as maintainer, to be replaced by Olaf van
21der Spek. Welcome to the team, Olaf! I've been impressed by your
22contributions to the project discussions and code to date, and look
23forward to having you on the team.
24
25I bumped the major version number up to 2 to reflect the new community
26ownership of the project. All the
27[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-2.0/ChangeLog changes]
28are related to the renaming.
29
30
31=== 18 January 2011 ===
32
33The `google-ctemplate` Google Code page has been renamed to
34`ctemplate`, in preparation for the project being renamed to
35`ctemplate`. In the coming weeks, I'll be stepping down as
36maintainer for the ctemplate project, and as part of that Google is
37relinquishing ownership of the project; it will now be entirely
38community run. The name change reflects that shift.
39
40=== 22 December 2011 ===
41
42I've just released ctemplate 1.1. The only functionality change is
43obscure: when a reload is done (via, say, `ReloadAllIfChanged`), and a
44new file has been created since the last reload that both a) has the
45same filename as a template file that had been loaded in the past, and
46b) is earlier on the template search-path than the previously loaded
47file, *and* c) the previously loaded file hasn't changed since the
48last reload, then at reload-time we now load the new file into the
49template, replacing the old file. Before we would only load the new
50file if the old file had changed on disk, and would otherwise leave
51the template alone. Even more minor changes are in the
52[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-1.1/ChangeLog ChangeLog].
53
54=== 26 August 2011 ===
55
56I've just released ctemplate 1.0! (I've decided 4 weeks is well
57within the definition of "the next week or so"...)
58
59A bit anti-climactic: there are no changes from ctemplate 1.0rc2.
60
61=== 29 July 2011 ===
62
63I've just released ctemplate 1.0rc2. This fixes a serious bug where I
64had added #includes in installed header files, that tried to include
65non-installed header files. This means it was impossible to use
66installed ctemplate; it only worked if you were using it from the
67tarball directory.
68
69I also fixed the unittest that was supposed to catch this, but didn't
70(it was also building in the tarball directory).
71
72If no further problems are found in the next week or so, I will
73release ctemplate 1.0.
74
75=== 22 July 2011 ===
76
77I've just released ctemplate 1.0rc1. If no problems are found in the
78next week or two, I will release ctemplate 1.0.
79
80ctemplate 1.0rc1 has relatively few changes from ctemplate 0.99.
81xml-escaping has been improved a bit. A couple of bugs have been
82fixed, including one where we were ignoring template-global sections
83(a relatively new feature) in some places. A full list of changes is
84available in the
85[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-1.0rc1/ChangeLog ChangeLog].
86
87I've also changed the internal tools used to integrate
88Google-supplied patches to ctemplate into the opensource release.
89These new tools should result in more frequent updates with better
90change descriptions. They will also result in future ChangeLog
91entries being much more verbose (for better or for worse).
92
93=== 24 January 2011 ===
94
95I've just released ctemplate 0.99. I expect this to be the last
96release before ctemplate 1.0. Code has settled down; the big change
97here is some efficiency improvements to javascript template escaping.
98There is also a bugfix for an obscure case where ReloadAllIfChanged()
99is used with multiple ctemplate search paths, where files are deleted
100in one part of the search path between reloads. Unless you need
101either of the above, there's no particular reason to upgrade.
102
103A full list of changes is available in the
104[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.99/ChangeLog ChangeLog].
105
106=== 23 September 2010 ===
107
108I've just released ctemplate 0.98. The changes are settling down as
109we approach ctemplate 1.0 -- a few new default modifiers, a few
110performance tweaks, a few portability improvements, but nothing
111disruptive.
112
113In my testing for this release, I noticed that the template regression
114test (but not other template tests) would segfault on gcc 4.1.1 when
115compiled with -O2. This seems pretty clearly to be a compiler bug; if
116you need to use gcc 4.1.1 to compile ctemplate, you may wish to build
117via `./configure CXXFLAGS="-O1 -g"` just to be safe.
118
119=== 20 April 2010 ===
120
121I've just released ctemplate 0.97. This change consists primarily of
122a significant change to the API: the addition of the `TemplateCache`
123class, combined with deprecation of the `Template` class.
124
125`TemplateCache` is a class that holds a collection of templates; this
126concept always existed in ctemplate, but was not previously exposed.
127Many static methods of the `Template` class, such as
128`ReloadAllIfChanged()`, have become methods on `TemplateCache` instead
129(the `Template` methods have been retained for backwards
130compatibility.) Other methods, such as `Expand()`, have become free
131functions. In fact, the entire `Template` class has been deprecated.
132
133The deprecation of `Template` calls for changes in all clients of the
134template code -- you can see in the example at the top of this page
135how the code has changed from `Template* tpl =
136ctemplate::Template::GetTemplate("example.tpl",
137ctemplate::DO_NOT_STRIP); tpl->Expand(&output, &dict);` to
138`ctemplate::ExpandTemplate("example.tpl", ctemplate::DO_NOT_STRIP,
139&dict, &output);`. These changes will make the code simpler and more
140thread-safe.
141
142Old code should continue to work -- the `Template` class remains --
143but new code should use the new API, and old code should transition as
144convenient. One old API method is intrinsically thread-unsafe, and
145should be prioritized to change: `tpl->ReloadIfChanged` should change
146to `ctemplate::Template::ReloadAllIfChanged()`. Note this is a
147semantic change: all templates are now reloaded, rather than just one.
148However, since templates are reloaded lazily, and only if they've
149changed on disk, I'm hopeful it will always be a reasonable change to
150make.
151
152To go along with these changes, the documentation has been almost
153entirely revamped and made more accessible. Obscure ctemplate
154features have been excised from the user's guide and moved into a
155separate reference document. The new API is fully documented,
156including new flexibility around reloading templates, made available
157by the introduction of `TemplateCache`.
158
159There are some more minor changes as well, such as the addition of
160#include guards in the auto-generated .tpl.h files, to make it safe to
161multiply-include them. I've also been continuing the portability
162work: ctemplate should now work under Cygwin and MinGW. A full list
163of changes is available in the
164[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.97/ChangeLog ChangeLog].
165
166I know I've said this before, but I don't expect major API changes
167before the 1.0 release. The most significant changes I expect to see
168are the potential removal of some of the 'forwarding' methods in the
169(deprecated) `Template` class.
170
171=== 12 June 2009 ===
172
173I've just released ctemplate 0.95. This is entirely an API cleanup
174release. Actually, relatively little of the API proper has changed:
175`StringToTemplate` no longer takes an autoescape-context arg (instead
176you specify this as part of the template-string, using the
177`AUTOESCAPE` pragma). A few obsolete constructs have gone away, such
178as the `TemplateFromString` class and
179`TemplateDictionary::html_escape` and friends (just use the top-level
180`html_escape`). See the
181[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.95/ChangeLog
182ChangeLog] for a full list of these changes.
183
184The biggest change is a renaming: the default namespace is now
185`ctemplate` rather than `google`, and the include directory is
186`ctemplate` rather than `google`. Other namespaces, such as
187`template_modifiers`, have gone away.
188
189All these changes will require you to modify your old code to get it
190working with ctemplate 0.95. I've written a
191[http://google-ctemplate.googlecode.com/svn/trunk/contrib/convert_to_95.pl
192script] to help you do that. Please open an
193[http://code.google.com/p/google-ctemplate/issues/list issue] if you
194see a problem with the script. I've tested it, but not as widely as
195I'd like. Also note the script will not be perfect for more complex
196constructs, which you will have to clean up by hand.
197
198I hope (expect) the API is now stable, and we won't see any more such
199changes before ctemplate 1.0. I tried to isolate them all in this
200release; except for the API changes, this release should behave
201identically to ctemplate 0.94.
202
203=== 7 May 2009 ===
204
205I've just released ctemplate 0.94. A few new features have been
206added, such as the ability to expand a template into your own custom
207`ExpandEmitter` instance, and the ability to hook the annotation
208system (typically used for debugging). You can now remove strings
209from the template cache in addition to adding them. Also, there
210continues to be a trickle of new modifiers, in this case a modifier
211for URL's in a CSS context.
212
213However, the most invasive changes were made for speed reasons. The
214biggest is that (almost) all `TemplateDictionary` allocations are now
215done on the arena -- this includes allocations by the STL classes
216inside the dictionary. This allows us to free all the memory at once,
217rather than item by item, and has yielded a 3-4% speed improvement in
218our tests. I've combined this with a `small_map` class that stores
219items in a vector instead of a hash-map until we get to 3 or 4 items;
220this gives another speed increase in the (common) case a template has
221only a few sections or includes.
222
223I also changed the hashing code to use
224[http://murmurhash.googlepages.com/ MurmurHash] everywhere, rather
225than the string hash function built into the STL library. This should
226be faster.
227
228All these changes should not be outwardly visible, but they do use
229more advanced features of C++ than ctemplate has to date. This may
230result in some problems compiling, or conceivably when running. If
231you see any, please file an
232[http://code.google.com/p/google-ctemplate/issues/list issue report].
233
234You can see a full list of changes on the
235[http://google-ctemplate.googlecode.com/svn/tags/ctemplate-0.94/ChangeLog
236ChangeLog].
237
238=== 20 August 2008 ===
239
240ctemplate 0.91 introduces the beginning of some API changes, as I look
241to clean up the API in preparation for ctemplate 1.0. After 1.0, the
242API will remain backwards compatible, but until that time, the API may
243change. Please take a look at the
244[http://google-ctemplate.googlecode.com/svn/trunk/ChangeLog ChangeLog]
245to see if any of these changes affect you.
246
247One change is the introduction of a new `PerExpandData` class, which
248holds some state that was formerly in the `TemplateDictionary` class.
249I'm still not sure if this class is a good idea, if it should be
250separate from `TemplateDictionary` or a member, or what functionality
251should move there (for instance, should `SetTemplateGlobal` move
252there, since template-global variables are really, in some sense,
253per-expand variables?) If you have any feedback, ideally based on
254your own experience using the current API, feel free to post it at
255`google-ctemplate@googlegroups.com`.
256
257ctemplate also has several new features, including the addition of
258"separator" sections, and the ability to change the markup character
259(from `{{`). See the
260[http://google-ctemplate.googlecode.com/svn/trunk/ChangeLog ChangeLog]
261for a complete list, and the
262[http://google-ctemplate.googlecode.com/svn/trunk/doc/howto.html howto
263documentation] for more details on these new features.