@@ -7,12 +7,170 @@ Version 1.14 (in progress)
77
88.. rubric :: New Functionality
99
10+ - GH-2028: New interprocedural optimizations.
11+
12+ We added infrastructure for performing interprocedural optimizations, and as
13+ a first user added a pass which removes unused function parameters in
14+ GH-2030. While this works on any code it is mainly intended to simply
15+ generated parser code for better runtime performance.
16+
17+ - GH-1697: Remove some dead statements based on control and data flow.
18+
19+ We now collect control and data flow information. We use this to detect and
20+ remove "dead statements", i.e., statements which are not seen by any other
21+ needed computations. Currently we handle two classes of dead statements:
22+
23+ - assignments which are override before being used
24+ - unreachable code, e.g., due to preceding ``return ``, ``break `` or ``throw ``
25+
26+ The implementation for this is still not able to cover all possible Spicy
27+ language constructs, so it is behind a feature flag and not enabled by
28+ default. To enable it one needs to set the environment variable
29+ ``HILTI_OPTIMIZER_ENABLE_CFG=1 `` when compiling Spicy code with e.g., ``spicyc ``.
30+
31+ We encourage users to test this compilation mode and if possible use the
32+ compiled parsers in production. If parsers compiled this way show the
33+ intended runtime behavior in tests they should also be fine to use in
34+ production.
35+
1036.. rubric :: Changed Functionality
1137
38+ - GH-2050: Prefer stdout over stderr for ``--help `` messages.
39+
40+ Spicy tools now emit ``--help `` output to stdout instead of ``stderr ``.
41+
42+ - GH-2068: Allow disabling building of tests.
43+
44+ We added a new CMake option ``SPICY_ENABLE_TESTS `` which if toggled on forces
45+ building of test and benchmark binaries; it is ``ON `` by default. This flag
46+ can be used by projects building Spicy to disable building of tests if they
47+ are not interested in them. We also provide a configure flag
48+ ``--disable-tests `` which has has the effect of turning it off.
49+
50+ - GH-1663: Speed up checking of iterator compatibility.
51+
52+ We were previously using a control block which held a ``weak_ptr `` to the
53+ protected data. This was pretty inefficient for a number of reasons:
54+
55+ - access to the controlled data always required a ``weak_ptr::lock `` which
56+ created a temporary ``shared_ptr `` copy and immediately destroyed it after
57+ access
58+ - to check whether the control block was expired we used ``lock `` instead
59+ of ``expired `` which introduced the same overhead
60+ - to check compatibility of iterators we compared ``shared_ptrs `` to the
61+ control data which again required full locks instead of using
62+ ``owner_before ``
63+
64+ This manifested in e.g., loops often being less performant than possible. We
65+ now changed how we hold data to make iterating collections cheaper.
66+
67+ - GH-2086: Fix scope resolution of local variables.
68+
69+ If usage of a local comes before its declaration, we now no longer
70+ resolve that usage to this local. It'll either be resolved to an
71+ upper layer ID (if there is one of the same name), or rejected if it's
72+ otherwise unknown.
73+
74+ - GH-2066: When C++ compilation fails, ask user for help.
75+
76+ We do expect C++ code generated by Spicy to be valid, so C++ compiler errors
77+ in generated code are likely bugs. We now record the output of the C++
78+ compiler in a dedicated file ``hilti-jit-error.log `` and ask users to file a
79+ ticket in case C++ compilation failed.
80+
81+ - GH-1660: When printing anonymous bitfields inside a struct, lift up the fields.
82+
83+ This now prints, e.g., ``[$fin=1, $rsv=0, $opcode=2, $remaining=255] ``
84+ instead of ``[$<anon>=(1, 0, 2, 255)] ``.
85+
86+ In addition, we also prettify non-anonymous bitfields. They now print
87+ as, e.g., ``[$y=(a: 4, b: 8)] `` instead of ``[$y=(4, 8)] ``.
88+
89+ - GH-1085: Allow registering a module twice.
90+
91+ So far, if one compiled the same HILTI module twice, each into its own
92+ HLTO, then when loading the two HLTOs, the runtime system would skip
93+ the second instance. However, that's not really what we want: a module
94+ could intentionally be part of multiple HLTOs, in which case each
95+ should get its own copy of that module state (i.e., its globals).
96+
97+ This change allows the same module to be registered multiple times,
98+ with the HLTO linker scope distinguishing between the instances at
99+ runtime, as usual. To make that work, we move computation of the scope
100+ from compile time to runtime, using the library's absolute path as the
101+ scope.
102+
103+ - GH-1905: Fix operator precedence in Spicy grammar.
104+
105+ We fixed the precedence of a number of operators to be closer to what users
106+ would expect from other language like C++ or Python.
107+
108+ - we reduced the precedence of the ``in `` operator
109+ - pre- and postfix operators ``++ `` and ``-- `` now have same precedence and are
110+ right associative
111+ - unary negate was change to match the precedence of other unary operators.
112+
113+ - Switch compilation to C++20.
114+
115+ Like Zeek Spicy now requires a C++ compiler. As part of this change we
116+ cleaned up the implementation to take advantage of C++ functionality in a
117+ number of places. We also moved from the external libraries ``linb::any `` to
118+ ``std::any ``, and ``ghc::filesystem `` to ``std::filesystem ``.
119+
120+ - Update supported platforms.
121+
122+ We dropped support for the following platforms:
123+
124+ - debian-11
125+ - fedora-40
126+
127+ We added support for
128+
129+ - debian-13
130+ - fedora-42
131+
132+ - GH-1660: Render all bitfield instances with included field names.
133+
134+ - GH-2099: Fully implement iterator interface for ``set::Iterator ``.
135+
136+ - GH-2052: Move calling convention from function to function type.
137+
12138.. rubric :: Bug fixes
13139
140+ - GH-2057: Fix ``bytes `` iterator dereference operation.
141+
142+ - GH-2065: Error for redefined locals from statement inits.
143+
144+ - GH-2061: Fix cyclic usage of units types inside other types.
145+
146+ - GH-2074: Fix fiber abortion.
147+
148+ - GH-2063: Fix C++ compilation issue with weak->strong refs.
149+
150+ - GH-2064: Ensure generated typeinfos are declared before used.
151+
152+ - GH-2044: Catch if methods are implemented multiple times.
153+
154+ - GH-2078: Fix C++ output for constants of constant type.
155+
156+ - GH-1988: Enforce that block-local declarations must be variables.
157+
158+ - GH-1996: Catch exceptions in ``processInput `` gracefully.
159+
160+ - GH-2091: Fix strong->value reference coercion in calls.
161+
162+ - GH-2100: Add missing deref operations for struct try-member/has-member operators.
163+
164+ - GH-2119: Fix missing ``inline `` functions in enum prototypes.
165+
166+ - GH-2142, GH-2134: Complete information exposed for reflection in typeinfo.
167+
168+ - GH-2135: Add ``&cxx-any-as-ptr `` attribute.
169+
14170.. rubric :: Documentation
15171
172+ - GH-1905: Document operator precedence.
173+
16174Version 1.13
17175============
18176
0 commit comments