/
NEWS
277 lines (256 loc) · 11.7 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
Changes relative to tre-0.20:
* CL: *ARGV* has the command-line arguments.
* DEFSTRUCT: Generated macro DEF-name does not require the first argument
to be of the structs name any more.
* Inside methods package "GLOBAL" now tells that a symbol should not be
thisified, allowing to access the symbol of the same name outside the
class if it's being used as a method name already.
E.g.: If you have a method named AREF and you want to access the global
AREF function, just write 'global:aref' in the function call.
* NEW without arguments does not create a JSON object but a standard object.
Use MAKE-JSON-OBJECT.
* AREF does not work an strings anymore. Use CHAR.
* New abbreviating macros:
…: LIST
*>: APPLY
~>: FUNCALL
+@: MAPCAN
@n: MAPTIMES
* PHP classes: array accessors may be overloaded by members AREF, =-AREF and
DELETE-AREF. PHP requires them all to be there if used.
* Added VECTOR?.
* EVERY much faster on lists.
* Added DIRECTORY to get directory lists.
* Added DUMP to CL target.
* Added GETENV.
* Added standard set functions SET-DIFFERENCE,
SET-EXCLUSIVE-OR and SUBSET?.
* New ARGUMENTS returns command-line arguments.
* New GETENV returns environment variables.
* File ~/.tre.sh is shell evaluated to update environment variables
before launching tré.
* JS class methods may be declared static.
* PHP class members and methods may be declared static,
protected or private.
* Return values of constructors are ignored.
* PHP classes may inherit.
* Removed obsolete JavaScript DOM features:
* GET-CANVAS-BY-CLASS-NAME
* ancestor getters
* FORM, IFRAME and VIDEO element utilities.
* TRE-ELEMENT:
* All event methods have been replaced by method ON, like
done in jQuery.
* Historic class, ID and name attribute methods have been
removed.
* General attribute accessors have been replaced by methods
ATTR, ATTR? and ATTRS.
* Removed opacity setter and rotation.
* Accessor CSS replaces all other style accessors.
* LOAD-STRING is now READ-FROM-STRING.
* CONCAT-STRINGTREE is now FLATTEN.
* QUASIQUOTE-SPLICE turns JavaScript objects into keyword/
value lists.
* New MAKE-JS-PROJECT and MAKE-PHP-PROJECTS compile with
all available modules for each target.
* READ-SYMBOL: Vertical bar '|' starts symbols with no
case conversion, also allowing special characters until
the next vertical bar. '\' is the escape character.
* Fixed(?) base64 functions.
* Fixed =-REF.
* Set *ASSERT?* to T by default.
* Moved external modules back in. Their separate
repositories on Github will be removed.
Changes of tre-0.20 relative to tre-0.19:
* Works with PHP-8.
* SUBSEQ (JS/PHP): Allow strings of any length. (Ugly
hack from the old days.)
* @, DYNAMIC-MAP return lists of arguments are arrays.
* PAD accepts arrays.
* Function definitions: single argument does not have to
be put in a list.
* REF: New functions to look up from alists, arrays, hash
tables and objects.
* ^ is now synonymous for REF. (It was for FN.)
* ACCCENT-CIRCONFLEX has been removed.
* ENSURE-LIST: Do not put NIL into a list.
* ENSURE-ARRAY: New function to convert lists into arrays.
* =-ELT has been fixed.
* FORMAT supports ~X to print hexadecimals. (Not complete.)
Changes of tre-0.19 relative to tre-0.18:
* Bug-fix: jump tag optimizer translated any number.
* Braces '{}' cannot be used as an alias for PROGN anymore.
Now property names may be variables.
* READ: Reads literal arrays. '#(…)'.
* PERMUTATE: Takes &REST argument instead of list of lists.
* DEFINE-SLOT-SETTER*: Weird idea removed.
* DEFINE-GENSYM-GENERATOR -> DEF-GENSYM.
* SIMPLE-OBJECT? -> JSON-OBJECT?.
* LML2XML allows to print standalone attributes (with NIL
values). Assigned an empty string before.
* CL: NANOTIME replaced by MILLISECONDS-SINCE-1970, albeit
with precision of seconds only.
"js" and "php".
* PRINT-HTML-SCRIPT: Old browsers not supported anymore.
Removed strict mode.
* CL: FIND-SYMBOL takes strings instead of symbols.
* PHP: versions older than 7.0 are not supported anymore.
In return, code size has been reduced by ~10% and
overall performance has been greatly improved as
well.
* PHP: Does not deal with magic quotes anymore.
* PHP: Faster array access.
* PHP: Native arrays are recognized as hash tables if they
are not sequential.
* PHP: MAKE-HASH-TABLE is a regular function, not a macro.
* JS: STRING? also checks if object is an instance of
class "String".
* JS/PHP: Code size reduction by ~30%.
* JS/PHP: MILLISECONDS-SINCE-1970 moved here from modules
* JS/PHP: DEFPACKAGE, IN-PACKAGE and EXPORT added.
* JS/PHP: OREF added for object access.
* JS/PHP: Slightly shorter generated identifiers for alien
characters.
* JS/PHP: MAKE-ARRAY is a regular function which does not
take a list of initial elements but a list of
dimensions.
Changes of tre-0.18 relative to tre-0.17:
* Slightly improved optimizer.
* NONE? renamed to NOTANY.
* AADJOIN moved to outside project "phitamine".
* Removed STRING-ARRAY.
* Beautified compiler dumps.
Changes of tre-0.17 relative to tre-0.16:
* COUNT now has :TEST argument.
* COMPILE lists unused functions.
* SUBSEQ: Doesn't claim error if sequence is NIL anymore.
* ELT: Returns NIL if object is NIL.
* Another thorough cleanup took place.
Changes of tre-0.16 relative to tre-0.15:
* Transpiler cleaned up thoroughly. Lots of stale code has
been removed.
* GENSYM now takes optional symbol name prefix.
* Added ready-made project directories in example/ to make
it easier to start projects.
* REMOVE-PROP is now REMOVE-PROPS and works on an arbitrarily
number of keys to remove.
* PROPERTY-VALUES: New function to return the values of the
keys PROPERTY-NAMES returns.
* Identifier obfuscation is not supported anymore.
* Macros MAPCAR-MACRO and MAPCAN-MACRO have been removed.
* ASSOC-URL and MAKE-SYMBOLS have been removed.
* *ENGLISH-NUMBERS* has been removed.
* Removed transpiler pass INJECT-DEBUGGING.
* Pseudo-profiler has been removed.
Changes of tre-0.15 relative to tre-0.14:
* MAP has been removed. It has been the same as MAPCAR.
* MERGE!, HASH-MERGE and OPTIONAL-DOWNCASE have been removed.
* PATHNAME-FILENAME has been renamed to PATH-FILENAME.
* LML keyword attributes are translated to camel notation when
XML or DOM nodes are being generated. Affects
https://github.com/SvenMichaelKlose/tre-lml/
* Empty curly braces {} became literal empty JSON objects.
* PHP: ROUND, FLOOR, CEILING: New functions.
* JS: ROUND, FLOOR, CEILING: More accurate implementations.
* JS/PHP: FIXED-POINT: New function to format numbers.
* JS: STRING== with more than two arguments fixed.
* @: The functional version now deals with arrays and strings.
as well. The types will be checked at run-time and must
not be mixed. The result type is the argument type.
(You'll get a string for strings.) This version of @ is
also available as function DYNAMIC-MAP.
* JS: Accidently didn't inherit base class methods when no
methods have been defined in the derived class. Fixed.
* PHP: Closures are converted to regular functions again, if
that's possible.
Changes of tre-0.14 relative to tre-0.13:
* Don't miss functions that need to get imported from the host
environment anymore.
* Only convert keywords that are keys in literal JSON objects
to camel notation, not literal strings.
Changes of tre-0.13 relative to tre-0.12:
* REMOVE-PROPERTY: New, non-destructive function.
* PROPERTY-LIST has been renamed to PROPERTIES-LIST.
* DEFCLASS fails on re-definitions or if a base class has
not been defined.
* FILTER functions aren't inlined anymore. Caused nasty bugs.
* JS: LENGTH: Works with objects.
* JS/PHP: Curly brackets now produce real literal objects, not
calls of MAKE-OBJECT. Keyword keys are now actually
converted to camel notation as stated in the README.
Changes of tre-0.12 relative to tre-0.11:
* LML2XML: Don't generate string for attribute values of NIL.
* PHP: OBJECT-PHPARRAY, PHPARRAY-OBJECT: New functions.
* PHP: PROPERTY-NAMES now supports native objects.
* PHP: HASHKEYS fixed for native arrays.
Changes of tre-0.11 relative to tre-0.10:
* Moved platform-specific functions into separate repositories
'tre-php', 'tre-js' and 'tre-shared'.
* Path/URI functions and READ-BINARY added to the environment.
Changes of tre-0.10 relative to tre-0.9:
* PHP: DEFINED? and UNDEFINED? had reversed effects.
* WITH-STRUCT: Most embarassing bug removed. Did not
introduce a GENSYM to evaluate the STRUCT's origin only
once.
Changes of tre-0.9 relative to tre-0.8:
* SLOT-VALUE can get and set by names passed as symbol or string,
also by variable.
* JSON obects must not be accessed like arrays. Use SLOT-VALUE instead
of AREF.
* PHP: TRANSPILER-CONFIGURATION :NATIVE-CODE holds a string of native code
without opening or closing angle brackets to insert in the prologue.
* PHP: GET-CURRENT-TIME has been replaced by MILLISECONDS-SINCE-1970.
* PHP: JSON objects are treated as objects, not arrays.
* PHP: NEW returns a stdClass.
* JS: ATAN2: New math function.
* CL: ASIN and ACOS added.
Changes of tre-0.8 relative to tre-0.7:
* WITHOUT-HEAD, WITHOUT-TAIL: New functions.
* PHP: AREF returns NIL for undefined indexes instead of breaking with an
error message.
Changes of tre-0.7 relative to tre-0.6:
* (%NEW): Accidentally converted to (%NEW NIL) – fixed.
* PHP: Debugged property and associative array functions.
* JS: Methods are also available as functions whose identifier is
($ class-name "-" method-name).
Changes of tre-0.6 relative to tre-0.5:
* PHP: PROPERTY-NAMES fixed for associative arrays.
* PHP: ASSOC-ARRAY? test if first key is a string.
* Curly brackets {} denote MAKE-OBJECT if the first element is a string or
keyword.
* MAKE-OBJECT, NEW, {}: Also takes keywords whose symbol names are converted
to downcase as property names.
* JS/PHP: COPY-PROPERTIES, MERGE-PROPERTIES, UPDATE-PROPERTIES: New
functions.
Changes of tre-0.5 relative to tre-0.4:
* LOG-MESSAGE returns its argument if logging has been switched off.
* LML: Attribute names must be keywords.
* PHP: NEW create a native object when used witout arguments.
* PHP: PROPERTY-NAME, PROPERTY-ALIST, ALIST-PROPERTIES, MAKE-OBJECT: New
core functions.
* PHP: ARRAY? returns T for indexed arrays only.
* JS/PHP: ASSOC-ARRAY?: New predicate.
* JS/PHP: JSON-ENCODE, JSON-DECODE added.
Changes of tre-0.4 relative to tre-0.3:
* PHP: LENGTH returns correct value for wrapped arrays.
* PHP: Issue an error when trying to convert a cons into string.
* JS/PHP: %%%MAKE-HASH-TABLE is now %%%MAKE-OBJECT.
* JS: MAKE-OBJECT: New function to use dynamically generated keys.
RELEASES:
Changes of tre-0.3 relative to tre-0.2:
* JS: PROPERTY-NAME, PROPERTY-ALIST, ALIST-PROPERTIES: New core functions.
* JS: PROPERTY-REMOVE: New core codegen macro.
* JS: NEW returns an empty object when used without arguments.
Changes of tre-0.2 relative to tre-0.1:
* Major cleanup.
* Additional basic optimisations.
* Forbids use of macro names as argument names.
* DEFUN is now FN.
* DEVAR is now VAR.
* ALET is now !=.
* EQL is converted to EQ for literal symbols.
* In DEFCLASS Macro SUPER denotes the parent class constructor.
* Macro MACROLET added.
Changes of tre-0.1 relative to tre-0.0:
* Removed parts that are not working anymore.
* Compiler cannot translate itself to JS, C or bytecode anymore.