1The entries below contain brief descriptions of the changes in a release, in no
2particular order. Some of the entries reflect significant new additions, while
3others represent minor corrections. Although this list is not a comprehensive
4report of every change we made in a release, it does provide details on the
5changes we feel Ice users might need to be aware of.
6
7We recommend that you use the release notes as a guide for migrating your
8applications to this release, and the manual for complete details on a
9particular aspect of Ice.
10
11- [Changes in Ice 3.7.2](#changes-in-ice-372)
12  * [General Changes](#general-changes)
13  * [C++ Changes](#c-changes)
14  * [C# Changes](#c-changes-1)
15  * [Java Changes](#java-changes)
16  * [JavaScript Changes](#javascript-changes)
17  * [MATLAB Changes](#matlab-changes)
18  * [Objective-C Changes](#objective-c-changes)
19  * [PHP Changes](#php-changes)
20  * [Python Changes](#python-changes)
21- [Changes in Ice 3.7.1](#changes-in-ice-371)
22  * [General Changes](#general-changes-1)
23  * [C++ Changes](#c-changes-2)
24  * [C# Changes](#c-changes-3)
25  * [Java Changes](#java-changes-1)
26  * [JavaScript Changes](#javascript-changes-1)
27  * [MATLAB Changes](#matlab-changes-1)
28  * [Objective-C Changes](#objective-c-changes-1)
29  * [PHP Changes](#php-changes-1)
30  * [Python Changes](#python-changes-1)
31  * [Ruby Changes](#ruby-changes)
32- [Changes in Ice 3.7.0](#changes-in-ice-370)
33  * [General Changes](#general-changes-2)
34  * [C++ Changes](#c-changes-4)
35  * [C# Changes](#c-changes-5)
36  * [Java Changes](#java-changes-2)
37  * [JavaScript Changes](#javascript-changes-2)
38  * [Objective-C Changes](#objective-c-changes-2)
39  * [PHP Changes](#php-changes-2)
40  * [Python Changes](#python-changes-2)
41  * [Ruby Changes](#ruby-changes-1)
42
43# Changes in Ice 3.7.2
44
45These are the changes since Ice 3.7.1.
46
47## General Changes
48
49- Add support for TLS 1.3 to IceSSL.
50
51- Add support for reading Ice properties from the HKCU Windows registry hive. Previously
52  you could only read properties from the HKLM Windows registry hive.
53
54## C++ Changes
55
56- Fixed a bug where the callback set with the `IceUtil::CtrlCHandler` was not
57  cleared on destruction of the `CtrlCHandler` object. Variables captured by the
58  callback were therefore not released until static destruction. This fix
59  ensures that the destruction of the `CtrlCHandler` object clears the
60  callback.
61
62- Fixed a debug assert in the Windows SChannel IceSSL implementation which would
63  occur in rare circumstances where SChannel returned `SEC_E_INCOMPLETE_MESSAGE`
64  with a `cbBuffer` value of 0. This occurred when running the JavaScript tests
65  with Firefox and using a C++ debug build.
66
67- Fixed a bug in the syslog logger that caused the program name to not be correctly
68  displayed with log messages.
69
70- Fixed an IceStorm bug that prevented topics from being restored from the database
71  when there was multiple topics.
72
73- Added support for systemd `Type=Notify` to `Ice::Service`. Services
74  started without the `--daemon` command-line option send notifications
75  to systemd using the `sd_notify` API.
76
77- Added systemd journal logger. This logger is enabled by setting the
78  `Ice.UseSystemdJournal` property to a value of 1 or greater.
79
80- Fixed memory leak in the Ice iAP transport where the `EASession` object wasn't
81  correctly released. Thanks to @astreube on GitHub for reporting this bug and
82  suggesting a fix.
83
84- Fixed a bug in the Windows build system that disabled wildcard expansion for
85  Slice compiler command line arguments.
86
87- Fixed a bug in the code that parses command line options that caused short command
88  line options to be incorrectly parsed when multiple short command line options
89  are specified together.
90
91- Fixed a bug in IceGrid that could result in an infinite loop when `Ice.ChangeUser` is
92  set and the call to `getpwnam_r` fails with `ERANGE`.
93
94- Fixed SChannel initialization to use a global mutex to avoid crashes occurring with
95  latest SChannel updates. See: https://github.com/zeroc-ice/ice/issues/242
96
97- Add support to build Ice in C++17 mode.
98
99- Add support for ARM builds with RHELP and CentOS.
100
101- Allow users to configure the adapter created by `icegridadmin` when run in server mode.
102  Thanks to Michael Dorner for the pull request: https://github.com/zeroc-ice/ice/pull/58
103
104## C# Changes
105
106- Fixed metrics bug where remote invocations for `flushBatchRequests` weren't
107  counted.
108
109- Add ability to build .NET Core assemblies with strong name.
110
111- Add Android, iOS and UWP platform support to Ice for .NET Core. The Ice test
112  suite now works with Xamarin and runs on Android, iOS and UWP.
113
114- Fixed marshaling code: removed unsafe code used in ByteBuffer that was
115  causing problems with mono on Android.
116
117- Fixed a bug in `slice2cs` that could result in generated code using
118  invalid namespace qualification for a type.
119  See: https://github.com/zeroc-ice/ice/issues/122
120
121- Removed dependency on the Ice Builder Visual Studio Extension for C# source builds.
122
123- You can now map Slice modules to custom C# namespaces using the `cs:namespace`
124  metadata directive.
125
126## Java Changes
127
128- Fixed Android IceSSL issue that caused SSL connections to hang
129  with Android >= 8.0.
130
131- Fixed metrics bug where remote invocations for `flushBatchRequests` weren't
132  counted.
133
134- Improved Javadoc support for the Java mapping (and not Java-Compat). Internal
135  classes and methods with public or protected visibility are now excluded or
136  tagged `@hidden`. Since `@hidden` requires javadoc 9 or greater, javadoc is no
137  longer generated with javadoc 8.
138  The new Gradle target `alljavadoc` generates a complete API reference for all
139  Ice components (Ice, IceSSL, IceGrid, IceStorm, Glacier2, etc.).
140
141- IceGrid GUI settings are now stored in the operating system application data
142  directory `%LOCALAPPDATA%/ZeroC` for Windows, `~/Library/Application Support/ZeroC`
143  for macOS and `~/.ZeroC` for Linux. Previous settings are automatically migrated to the
144  new location without user intervention.
145
146- Add support to build IceGrid GUI with OpenJFX and Java 11 JDK.
147
148- Fixed a bug in the IceGrid GUI that could cause IceGrid GUI to hang after a login
149  failure.
150
151## JavaScript Changes
152
153- Add TypeScript declaration files for Ice for JavaScript.
154
155- The Slice to JavaScript compiler can now generate TypeScript declaration files
156  for JavaScript generated code using the `--typescript` command line option.
157
158- Fixed generated code for sequences of interface by value types. The generated
159  sequence helper must use `Ice.Value` as the element type for the sequence
160  and not a class with the name of the interface when the element type is an
161  interface by value.
162
163- Add missing `OutputStream.writeException` method.
164
165- Update JavaScript build system to Babel 7 and gulp 4.0. Support for building
166  Ice for JavaScript with NodeJS 4 and NodeJS 5 has been removed.
167
168- Fixed a bug in Slice-to-JavaScript compiler that resulted in incorrect generated
169  code for classes containing a data member of type `Value`. Thanks to Daniel Lytkin
170  for the bug report and fix. See https://github.com/zeroc-ice/ice/pull/203
171
172## MATLAB Changes
173
174- Fixed a bug that caused the code generated by `slice2matlab` to throw a type
175  conversion exception. This affected classes or structs containing a dictionary
176  mapped to a structure array.
177
178- Add support for `IceSSL::ConnectionInfo`.
179
180## Objective-C Changes
181
182- Fixed a bug in Slice-to-Objective-C compiler that resulted in incorrect generated
183  code for classes containing a data member of type `Value`.
184
185## PHP Changes
186
187- Fixed build failure when building with the Debug configuration on Windows.
188
189- Fixed a bug that caused the generated code to reference undefined variables
190  when included (using `require` or `require_once`) from a static method.
191
192## Python Changes
193
194- Add support for unmarshaling sequences of basic types using the [buffer
195  protocol][1]. This can be enabled using the metadata `python:array.array`,
196  `python:numpy.ndarray` or `python:memoryview:<factory>`. The first two enable
197  mapping to the `array.array` and `numpy.ndarray` types respectively and the
198  last one allows to specify a custom Python factory function responsible for
199  creating the sequence from a `memoryview` object.
200
201- Add `python:default`, `python:list` and `python:tuple` metadata which are
202  equivalent to `python:seq:default`, `python:seq:list` and `python:seq:tuple`
203  respectively.
204
205- Fixed Python segfault that could occur because of a KeyboardInterrupt.
206
207- Add support to build Ice for Python using Python 3.7.
208
209# Changes in Ice 3.7.1
210
211These are the changes since Ice 3.7.0.
212
213## General Changes
214
215- Fixed UDP multicast issue where adding multicast membership on all the
216  available network interfaces on the host would fail with an "Address already
217  in use" error if the host had network interfaces with multiple IPv4 addresses
218  or different interfaces using the same IP address.
219
220- Improved `Ice::ObjectAdapter` `getPublishedEndpoints` and
221  `refreshPublishedEndpoints` methods to now return or refresh the Ice router
222  server endpoints if the adapter is associated with a router. Calling the
223  `setPublishedEndpoints` method on an adapter associated with a router also now
224  raises an invalid argument exception.
225
226- Added tracing support for IceGrid and locator discovery. The IceGrid registry
227  supports the `IceGrid.Registry.Trace.Discovery` property and the
228  `IceLocatorDiscovery` plug-in supports `IceLocatorDiscovery.Trace.Lookup` to
229  trace lookup requests.
230
231- Instead of succeeding, `Ice::Connection::setAdapter` now raises
232  `Ice.ObjectAdapterDeactivatedException` if the adapter is deactivated.
233
234- Fixed bug where the `IceGrid.Registry.Client.ACM.Timeout` property setting
235  was ignored.
236
237- Added the ice_fixed proxy method to create a fixed proxy bound to a given
238  connection.
239
240- Added the ice_getTimeout and ice_getCompress proxy methods. These methods
241  return an optional value that contains the proxy timeout or compression
242  override setting. If the timeout or the compression setting haven't been
243  overridden with ice_timeout or ice_compress, the optional value is unset.
244
245- Fixed IceGrid node bug where a replica would not get up-to-date object
246  adapter information about a server if an update was pending for the
247  server. Thanks to Michael Gmelin for the bug report and fix.
248
249- Fixed IceGrid registry to no longer allow dynamic registration of a replica
250  group if this replica group is already registered with the deployment
251  facility. Registration was previously allowed but the dynamically registered
252  adapter members of the replica group were never used.
253
254- IceBridge can now be configured as a router in a client's object adapter,
255  which means the Ice run time in the client will automatically set up a
256  bidirectional connection.
257
258## C++ Changes
259
260- Fixed a Windows bug with the WS transport where at-most-once semantics weren't
261  always enforced causing invalid invocation retries on failures.
262
263- Added the "cpp:noexcept" metadata to operations in several local Slice
264  interfaces, including Communicator, Connection, and ObjectAdapter.
265  This helps to clarify that these operations do not raise exceptions.
266
267- Slice documentation comments are now preserved in the generated C++ code
268  using Doxygen markup.
269
270## C# Changes
271
272- Disabled Windows fast path loopback socket option. This option was
273  already disabled with the C++ mapping. It's causing hangs at the
274  TCP/IP level when connections are closed.
275
276- Added support for .NET Core 2.0 on Windows and Linux.
277
278- Added the ice_initialize partial method to generated structs and classes.
279  This method is called by constructors after initialization of the data
280  members. By implementing this method users can customize struct and
281  class initialization.
282
283## Java Changes
284
285- The java:package metadata can now be applied to modules. It can still
286  be used as global metadata, in which case it serves as the default
287  directive unless overridden by module metadata.
288
289## JavaScript Changes
290
291- Updated the generated code for compatibility with WebPack.
292
293## MATLAB Changes
294
295- Added a MATLAB language mapping. It provides a client-side run time and
296  supports MATLAB versions R2016a through R2018a on Windows.
297
298## Objective-C Changes
299
300- Fixed the generated code to specify the `__autoreleasing` qualifier on
301  parameters returned by reference. Xcode 9.0 now emits a warning if this
302  qualifier is omitted.
303
304## PHP Changes
305
306- Fixed Ice for PHP build failure when building with PHP5 ZTS.
307
308## Python Changes
309
310- The python:package metadata can now be applied to modules. It can still
311  be used as global metadata, in which case it serves as the default
312  directive unless overridden by module metadata.
313
314- Fixed a bug that caused Python to crash on exit when the extension is
315  built with GCC 7.
316
317## Ruby Changes
318
319- Ice::initialize now accepts an implicit block. If provided, initialize
320  will pass the communicator (and optionally the argument vector) to the
321  block, destroy the communicator upon the block's completion, and return
322  the block's result as the result of initialize.
323
324# Changes in Ice 3.7.0
325
326These are the changes since the Ice 3.6 release or snapshot described in
327[CHANGELOG-3.6.md](./CHANGELOG-3.6.md).
328
329## General Changes
330
331- Added `ice_getSlicedData` method to the `Value` and `UserException` base
332  classes. This method can be used to obtain the sliced data when available.
333
334- Fixed IceGrid inconsistency when resolving dynamically registered replica
335  group endpoints. Like for replica group registered with descriptors, if the
336  replica group members don't support the encoding requested by the client, the
337  client will raise `Ice::NoEndpointException` instead of
338  `Ice::NotRegisteredException`.
339
340- Defining operations on non-local classes is now deprecated: operations should
341  be defined only on interfaces and local classes. Likewise, having a class
342  implement an interface, passing a class by proxy and passing an interface by
343  value are now deprecated.
344
345- Added new Slice keyword `Value`. All Slice classes implicitly derive from the
346  `Value` class, and a parameter of type `Value` can represent any class
347  instance. In prior release, the base class for Slice classes was `Object`,
348  and for non-local definitions, `Object` remains a synonym for `Value`.
349  (However, `Value*` is invalid: it cannot be used as a synonym for `Object*`).
350  For local definitions, `Object` designates a servant while `Value`
351  designates a class instance.
352
353- Semicolons are now optional after braces in Slice definitions. For example
354  ```
355  module M
356  {
357      enum { A, B, C , D }
358
359      interface Intf
360      {
361          void op();
362      }
363  }
364  ```
365  is equivalent to
366  ```
367  module M
368  {
369      enum { A, B, C , D };
370
371      interface Intf
372      {
373          void op();
374      };
375  };
376  ```
377
378- The server run time will now bind to all the addresses associated with a DNS
379  name specified in an endpoint of the object adapter (with the endpoint -h
380  option). You must make sure the DNS name resolves to local addresses only.
381
382  If no `PublishedEndpoints` property is specified for the object adapter, the
383  published endpoints for an endpoint with a DNS name will either be, if the
384  endpoint doesn't specifies a fixed port, a list of endpoints with each of
385  the addresses associated with the DNS name or, if it specifies a fixed port,
386  the endpoint with the DNS name.
387
388- Added the IceBridge service, which acts as a bridge between a client and
389  server to relay requests and replies in both directions.
390
391- Added new operation metadata, `marshaled-result`, in C++11, C#, Java,
392  and Python. When this metadata is specified, the generated code for the
393  servant dispatch returns a generated struct that contains the marshaled
394  values for the return and out parameters.
395
396- A Slice enumeration (enum) now creates a new namespace scope for its
397  enumerators. In previous releases, the enumerators were in the same
398  namespace scope as the enumeration. For example:
399  ```
400     enum Fruit { Apple, Orange, Pear }
401     enum ComputerBrands { Apple, Dell, HP } // Ok as of Ice 3.7, error in
402                                              // prior releases
403  ```
404  The mapping of enum to C++, C#, Java etc. is not affected by this
405  change. Slice constants and data member default values that reference
406  enumerators should be updated to use only the enumerator's name when the
407  enclosing enum is in a different module. For example:
408  ```
409  module M1
410  {
411      enum Fruit { Apple, Orange, Pear }
412      enum ComputerBrands { Apple, Dell, HP }
413
414      const Fruit a = Apple; // Recommended syntax for all Ice releases
415  }
416
417  module M2
418  {
419      const M1::Fruit a1 = Apple;             // The recommended syntax as of
420                                              // Ice 3.7
421      const M1::Fruit a2 = M1::Fruit::Apple;  // Ok as well
422      const M1::Fruit a3 = M1::Apple;         // Supported for backwards
423                                              // compatibility with earlier
424                                              // Ice releases
425  }
426
427  ```
428
429- Added Bluetooth transport plug-in for C++ and Android. The C++ plug-in
430  requires BlueZ 5.40 or later.
431
432- Added support for iAP transport to allow iOS clients to communicate with
433  connected accessories.
434
435- Added new overloads to `Ice::initialize` in C++11, C++98, C#, Java,
436  Java Compat, Python and Ruby. They accept a `configFile` string parameter as
437  an alternative to the `InitializationData` parameter of several existing
438  `Ice::initialize` overloads.
439
440- Added support for a new `Ice.ClassGraphDepthMax` property to prevent stack
441  overflows in case a sender sends a very large graph.
442
443  The unmarshaling or destruction of a graph of Slice class instances is a
444  recursive operation. This property limits the amount of stack size required to
445  perform these operations. This property is supported with all the language
446  mappings except Java and JavaScript where it's not needed (the run time
447  environment allows graceful handling of stack overflows).
448
449  The default maximum class graph depth is 100. If you increase this value, you
450  must ensure the thread pool stack size is large enough to allow reading graphs
451  without causing a stack overflow.
452
453- Minor change to the network and retry tracing. Connection establishment
454  attempts on endpoints are no longer traced with Ice.Trace.Retry. They are
455  now traced when Ice.Trace.Network is set to 2.
456
457- Renamed ACM heartbeat enumerator `HeartbeatOnInvocation` to
458  `HeartbeatOnDispatch`.
459
460- Added `Ice::ObjectAdapter::setPublishedEndpoints` to allow updating the
461  published endpoints programmatically.
462
463- Added new `ice_id` method or member function to all Ice exceptions; `ice_id`
464  returns the Slice type ID of the exception. It replaces the now deprecated
465  `ice_name` method or member function.
466
467- Added `Ice::Connection::throwException`. When the connection is closed, this
468  method throws an exception indicating the reason of the connection closure.
469
470- Changed the Slice definition of the `Connection::close` operation to take an
471  enumerator instead of a boolean. The new enumeration, `ConnectionClose`,
472  defines three enumerators for controlling how the connection is closed:
473
474  - `Forcefully` - Closes the connection immediately. Equivalent to the boolean
475  value true in previous releases.
476
477  - `Gracefully` - Closes the connection gracefully without waiting for pending
478  invocations to complete.
479
480  - `GracefullyWithWait` - Closes the connection gracefully after all pending
481  invocations have completed. Equivalent to the boolean value false in previous
482  releases.
483
484  The `Ice::ForcedCloseConnectionException` exception has also been replaced
485  with `Ice::ConnectionManuallyClosedException`. This exception is set on the
486  connection when `Connection::close` is called.
487
488- Added support for IceStorm subscriber `locatorCacheTimeout` and
489  `connectionCached` QoS settings. These settings match the proxy settings and
490  allow configuring per-request load balancing on the subscriber proxy.
491
492- Implementations of the `Ice::Router` interface can now indicate whether or not
493  they support a routing table through the optional out parameter
494  `hasRoutingTable` of the `getClientProxy` operation. The Ice run time won't
495  call the `addProxies` operation if the router implementation indicates that it
496  doesn't manage a routing table.
497
498- The `findObjectByType`, `findAllObjectsByType`,
499  `findObjectByTypeOnLeastLoadedNode` operations from the `IceGrid::Query`
500  interface and the `allocateObjectByType` operation from the `IceGrid::Session`
501  interfaces now only return proxies for Ice objects from enabled servers. If a
502  server is disabled, its well-known or allocatable Ice objects won't be
503  returned anymore to clients.
504
505- The Communicator and Connection `flushBatchRequests` operations now require
506  an argument to specify whether or not the batch requests to flush should be
507  compressed. See the documentation of the `Ice::CompressBatch` enumeration
508  for the different options available to specify when the batch should be
509  compressed.
510
511- The UDP server endpoint now supports specifying `--interface *` to join the
512  multicast group using all the local interfaces. It's also now the default
513  behavior if no `--interface` option is specified.
514
515- Ice no longer halts a program if it can't accept new incoming connections when
516  the system runs out of file descriptors. Instead, it rejects queued pending
517  connections and temporarily stops accepting new connections. An error message
518  is also sent to the Ice logger.
519
520- Dispatch interceptors and `ice_dispatch` can now catch user exceptions. User
521  exceptions raised by a servant dispatch are propagated to `ice_dispatch` and
522  may be raised by the implementation of `Ice::DispatchInterceptor::dispatch`.
523  As a result, the `Ice::DispatchStatus` enumeration has been removed. See the
524  Ice Manual for details on the new dispatch interceptor API.
525
526- The `ice_getConnection` operation now correctly returns a connection if
527  connection caching is disabled (it previously returned a null connection).
528
529- The iOS SSL transport is now based on the same implementation as macOS. Most
530  of the functionality supported on macOS is now also supported on iOS. There
531  are still few limitations however:
532
533  - the `checkValidity`, `getNotBefore`, `getNotAfter` methods are not supported
534    on the `IceSSL::Certificate` class.
535
536  - only PKCS12 certificates are supported (no support for PEM).
537
538- The `Ice::ConnectionInfo` `sndSize` and `rcvSize` data members have been moved
539  to the TCP and UDP connection info classes. The `Ice::WSEndpointInfo` and
540  `IceSSL::EndpointInfo` classes no longer inherit `Ice::IPConnectionInfo` and
541  instead directly extend `Ice::ConnectionInfo`. IP connection information can
542  still be retrieved by accessing the connection information object stored with
543  the new `underlying` data member.
544
545- IceGrid and IceStorm now use LMDB for their persistent storage instead of
546  Freeze/Berkeley DB.
547
548- Added support for two additional IceGrid variables: `server.data` and
549  `service.data`. These variables point to server and service specific data
550  directories created by IceGrid on the node. These data directories are
551  automatically removed by IceGrid if you remove the server from the
552  deployment.
553
554  For consistency, the `node.datadir` variable has been deprecated, use the
555  `node.data` variable instead.
556
557- Added the new metadata tag `delegate` for local interfaces with one operation.
558  Interfaces with this metadata will be generated as a `std::function` in C++11,
559  `delegate` in C#, `FunctionalInterface` in Java, `function callback` in
560  JavaScript, `block` in Objective-C, `function/lambda` in Python. Other language
561  mappings keep their default behavior.
562
563- `ObjectFactory` has been deprecated in favor of the new local interface
564  `ValueFactory`. Communicator operations `addObjectFactory`and
565  `findObjectFactory` have been deprecated in favor of similar operations on the
566  new interface `ValueFactoryManager`.
567
568- Replaced `Ice::NoObjectFactoryException` with `Ice::NoValueFactoryException`.
569
570- The Slice compiler options `--ice` and `--underscore` are now deprecated, and
571  replaced by the global Slice metadata `ice-prefix` and `underscore`.
572
573- Renamed local interface metadata `async` to `async-oneway`.
574
575- Replaced `ConnectionCallback` by delegates `CloseCallback` and
576 `HeartbeatCallback`.  Also replaced `setCallback` by `setCloseCallback` and
577  `setHeartbeatCallback` on the `Connection` interface.
578
579- Updating Windows build system to use MSBuild instead of nmake.
580
581- Changed the parsing of hex escape sequences (\x....) in Slice string literals:
582  the parsing now stops after 2 hex digits. For example, `\x0ab` is now read as
583  `\x0a` followed by `b`. Previously all the hex digits were read like in C++.
584
585- Stringified identities and proxies now support non-ASCII characters
586  and universal character names (`\unnnn` and `\Unnnnnnnn`). See the property
587  `Ice.ToStringMode` and the static function/method `identityToString`.
588
589- Fixed proxies stringification: `Communicator::proxyToString` and equivalent
590  "to string" methods on fixed proxies no longer raise a `FixedProxyException`;
591  the proxy is just stringified without endpoints.
592
593- An empty endpoint in an Object Adapter endpoint list is now rejected with an
594  `EndpointParseException`; such an endpoint was ignored in previous releases.
595
596- IcePatch2 and IceGrid's distribution mechanism (based on IcePatch2) are now
597  deprecated.
598
599- Updated IceSSL hostname verification (enabled with `IceSSL.CheckCertName`) to
600  use the native checks of the platform's SSL implementation.
601
602- Removed `IceSSL::NativeConnectionInfo`. `IceSSL::ConnectionInfo`'s `certs` data
603  member is now mapped to the native certificate type in C++, Java and C#. In
604  other languages, it remains mapped to a string sequence containing the PEM
605  encoded certificates.
606
607- Freeze has been moved to its own source repository,
608  https://github.com/zeroc-ice/freeze.
609
610- Added support for suppressing Slice warnings using the `[["suppress-warning"]]`
611  global metadata directive. If one or more categories are specified (for
612  example `"suppress-warning:invalid-metadata"` or
613  `"suppress-warning:deprecated, invalid-metadata"`) only warnings matching these
614  categories are suppressed, otherwise all warnings are suppressed.
615
616## C++ Changes
617
618- Added `Ice::SlicedData::clear` method to allow clearing the slices associated
619  with the slice data. Calling `clear` can be useful if the sliced data contains
620  cycles. You should call this method if your application receives sliced values
621  which might contain cycles.
622
623- Added a new C++11 mapping that takes advantage of C++11 language features. This
624  new mapping is very different from the Slice-to-C++ mapping provided in prior
625  releases. The old mapping, now known as the C++98 mapping, is still supported
626  so that existing applications can be migrated to Ice 3.7 without much change.
627
628- Added support for Visual Studio 2010 (C++98 only)
629
630- The `Ice::Communicator` and `Ice::ObjectAdapter` `destroy` functions are now
631  declared as `noexcept` (C++11) or `throw()` (C++98).
632
633- Added new helper class `Ice::CommunicatorHolder`. `CommunicatorHolder`
634  creates a `Communicator` in its constructor and destroys it in its destructor.
635
636- The `--dll-export` option of `slice2cpp` is now deprecated, and replaced by
637  the global Slice metadata `cpp:dll-export:SYMBOL`.
638
639- The UDP and WS transports are no longer enabled by default with static builds
640  of the Ice library. You need to register them explicitly with the
641  `Ice::registerIceUDP` or `Ice::registerIceWS` function to use these transports
642   with your statically linked application.
643
644  NOTE: this affects UWP and iOS applications which are linked statically with
645  Ice libraries.
646
647- Added `cpp:scoped` metadata for enums in the C++98 mapping. The generated C++
648  enumerators for a "scoped enum" are prefixed with the enumeration's name. For
649  example:
650  ```
651     // Slice
652     ["cpp:scoped"] enum Fruit { Apple, Orange, Pear }
653  ```
654  corresponds to:
655  ```
656     // C++98
657     enum Fruit { FruitApple, FruitOrange, FruitPear };
658  ```
659
660- Upgrade the UWP IceSSL implementation to support client side certificates and
661  custom certificate verification.
662
663- Added `getOpenSSLVersion` function to `IceSSL::OpenSSL::Plugin` to retrieve
664  the OpenSSL version used by the Ice run time.
665
666- Added `getAuthorityKeyIdentifier` and `getSubjectKeyIdentifier` functions to
667  `IceSSL::Certificate`. These functions are not supported on iOS or UWP.
668
669- Improved the IceSSL Certificate API to allow retrieving X509v3 extensions.
670  This feature is currently only available with OpenSSL and SChannel.
671
672- Refactored the IceSSL Plug-in API to allow loading multiple implementations of
673  the plug-in in the same process. Each communicator can load a single
674  implementation, but separate communicators in the same process can load
675  different implementations.
676
677- Added ability to build IceSSL with OpenSSL on Windows. The resulting library
678  is named `icesslopenssl`. An application can load this plug-in with the
679  `IceSSLOpenSSL:createIceSSLOpenSSL` entry point.
680
681- Added `IceSSL.SchannelStrongCrypto` property: when set to a value greater than
682  0, the IceSSL SChannel implementation sets the `SCH_USE_STRONG_CRYPTO` flag,
683  which instructs SChannel to disable weak cryptographic algorithms. The default
684  values for this property is 0 for increased interoperability.
685
686- Improve Linux stack traces generated by `Exception::ice_stackTrace`, by using
687  libbacktrace when available.
688
689- Fixed IceGrid PlatformInfo to report the correct release and version number
690  for recent versions of Windows.
691
692- IceSSL has been updated to support OpenSSL 1.1.0 version.
693
694## C# Changes
695
696- Added a new C# AMI mapping based on TAP (Task-based Asynchronous Pattern).
697  With this mapping, you can use the C# async/away keywords with
698  asynchronous invocations and dispatches (AMI and AMD).
699
700- Updated the AMD mapping to be Task-based. Chaining AMD and AMI calls is now
701  straightforward.
702
703- Added the proxy method `ice_scheduler`. It returns an instance of
704  `System.Threading.Tasks.TaskScheduler` that you can pass to `Task` methods
705  such as `ContinueWith` in order to force a continuation to be executed by
706  an Ice thread pool thread.
707
708- The `batchRequestInterceptor` data member of `Ice.InitializationData` is now
709  defined as a `System.Action<Ice.BatchRequest, int, int>` delegate. You will
710  need to update your code accordingly if you were using the now removed
711  `Ice.BatchRequestInterceptor` interface.
712
713- The `Ice.PropertiesUpdateCallback` interface is deprecated, use the
714  `System.Action<Dictionary<string, string>>` delegate instead to receive
715  property updates.
716
717- The `threadHook` member of `InitializationData` is now deprecated. Instead,
718  set `threadStart` and `threadStop`.
719
720- The `Ice.ClassResolver` delegate has been replaced with the
721  `System.Func<string, Type>` delegate. The `Ice.CompactIdResolver` delegate
722  has been replaced with the `System.Func<int, string>` delegate. The
723  `Ice.Dispatcher` delegate has been replaced with the
724  `System.Action<System.Action, Ice.Connection>` delegate.
725
726- Added new interface/class metadata `cs:tie`. Use this metadata to generate a
727  tie class for a given interface or class.
728
729- `cs:` and `clr:` are now interchangeable in metadata directives.
730
731- Add support to preload referenced assemblies. The property
732  `Ice.PreloadAssemblies` controls this behavior. If set to a value greater than
733  0 the Ice run-time will try to load all the assemblies referenced by the
734  process during communicator initialization, otherwise the referenced
735  assemblies will be initialized when the Ice run-time needs to lookup a C#
736  class. The default value is 0.
737
738- Update C# proxy implementation to implement `ISerializable`.
739
740## Java Changes
741
742- Added a new Java mapping that takes advantage of Java 8 language features. The
743  new mapping is significantly different than prior releases in many ways,
744  including the package name (com.zeroc) as well as APIs such as AMI, AMD, out
745  parameters and optional values. The prior mapping, now known as Java Compat,
746  is still supported so that existing applications can be migrated to Ice 3.7
747  without much change.
748
749- The Ice Communicator interface now implements `java.lang.AutoCloseable`.
750  This enables the code to initialize the communicator within a
751  `try-with-resources` statement. The communicator will be destroyed
752   automatically at the end of this statement.
753
754- Fixed a bug where unmarshaling Ice objects was very slow when using
755  compact type IDs.
756
757- (Java) Added the proxy method `ice_executor`, which returns an instance of
758  `java.util.concurrent.Executor` that you can pass to `CompletableFuture`
759  methods such as `whenCompleteAsync` in order to force an action to be
760  executed by an Ice thread pool thread.
761
762- (Java Compat) Added new interface/class metadata `java:tie`. Use this metadata
763  to generate a tie class for a given interface or class.
764
765- Protocol compression now uses Bzip2 implementation from Apache Commons Compress,
766  previous versions use Bizp2 implementation from Apache Ant.
767
768## JavaScript Changes
769
770- Improved the `Ice.Long` class to allow creating `Ice.Long` instance from
771  JavaScript `Numbers`.
772
773- Updated the `Ice.Promise` class. It now extends the standard JavaScript
774  `Promise` class.
775
776- The `Ice.Class` helper function used to create classes has been removed. The
777  Ice run time and the generated code now use the JavaScript `class` keyword to
778  define the classes.
779
780- `Ice.HashMap` usage is now limited to dictionaries with mutable keys, for all
781  other cases the standard JavaScript `Map` type is used.
782
783- `Ice.HashMap` API has been aligned with the API of JavaScript `Map` type.
784
785- Added support to map Slice modules to JavaScript native modules this requires
786  using the global metadata `[["js:es6-module"]]`.
787
788- The `["amd"]` metadata is now ignored in JavaScript. An operation can now be
789  be dispatched asynchronously by just returning a JavaScript Promise object.
790
791- `sequence<byte>` is now always mapped to the `Uint8Array` JavaScript type. It
792  used to be mapped to the `Buffer` type for NodeJS and to `Uint8Array` for
793  browsers.
794
795- The helper method `Ice.Buffer.createNative` has been removed and replaced by
796  the use of `Uint8Array`.
797
798## Objective-C Changes
799
800- Added clear selector to `ICESlicedData` to allow clearing the slices
801  associated with the slice data. Calling `clear` can be useful if the sliced
802  data contains cycles. You should call this method if your application receives
803  sliced values which might contain cycles.
804
805- The UDP and WS transports are no longer enabled by default with static builds
806  of the IceObjC library. You need to register them explicitly with the
807  `ICEregisterIceUDP` or `ICEregisterIceWS` function to use these transports
808   with your statically linked application.
809
810  NOTE: this affects iOS applications which are linked statically with Ice
811  libraries.
812
813- Fixed a bug where optional object dictionary parameters would
814  trigger an assert on marshaling.
815
816- The `--dll-export` option of `slice2objc` is now deprecated, and replaced by
817  the global Slice metadata `objc:dll-export:SYMBOL`.
818
819- Added `objc:scoped` metadata for enums. The generated Objective-C enumerators
820  for a "scoped enum" are prefixed with the enumeration's name. For example:
821  ```
822  // Slice
823  module M
824  {
825     ["objc:scoped"] enum Fruit { Apple, Orange, Pear }
826  }
827
828  ```
829  corresponds to:
830  ```
831  // Objective-C
832  typedef enum : ICEInt
833  {
834      MFruitApple,
835      MFruitPear,
836      MFruitOrange
837  } MFruit;
838  ```
839
840## PHP Changes
841
842- Ice for PHP now uses namespace by default.
843
844- Added support for PHP 7.0 and PHP 7.1.
845
846- The symbol used to indicate an unset optional value for the PHP namespace
847  mapping is `Ice\None`. The symbol for the flattened mapping remains
848 `Ice_Unset`,  but since `unset` is a PHP keyword, we could not use `Ice\Unset`.
849
850## Python Changes
851
852- Added a new AMI mapping that returns `Ice.Future`. The Future class provides
853  an API that is compatible with `concurrent.futures.Future`, with some
854  additional Ice-specific methods. Programs can use the new mapping by adding the
855  suffix `Async` to operation names, such as `sayHelloAsync`. The existing
856  `begin_/end_` mapping is still supported.
857
858- Changed the AMD mapping. AMD servant methods must no longer append the `_async`
859  suffix to their names. Additionally, an AMD callback is no longer passed to a
860  servant method.
861  Now a servant method always uses the mapped name, and it can either return the
862  results (for a synchronous implementation) or return an `Ice.Future` (for an
863  asynchronous implementation).
864
865  With Python 3, a servant method can also be implemented as a coroutine. Ice
866  will start the coroutine, and coroutines can `await` on `Ice.Future` objects.
867  Note that because Ice is multithreaded, users who also want to use the asyncio
868  package must make sure it's done in a thread-safe manner. To assist with this,
869  the `Ice.wrap_future` function accepts an `Ice.Future` and returns an
870  `asyncio.Future`.
871
872- Revised the Ice for Python packaging layout. Using the new Slice metadata
873  directive `python:pkgdir`, all generated files are now placed in their
874  respective package directories.
875
876- The Ice Communicator now implements the context manager protocol. This enables
877  the code to initialize the communicator within a `with` statement.
878  The communicator is destroyed automatically at the end of the `with` statement.
879
880- Added support for the Dispatcher facility. The `dispatcher` member of
881  `InitializationData` can be set to a callable that Ice invokes when it
882  needs to dispatch a servant invocation or an AMI callback. This facility
883  is useful for example in UI applications where it's convenient to
884  schedule Ice activity for execution on the main UI thread.
885
886- The `threadHook` member of `InitializationData` is now deprecated. We have
887  added `threadStart` and `threadStop` members for consistency with the C++11
888  and Java mappings. A program should set these members to a callable, such as
889  a lambda function.
890
891- The `batchRequestInterceptor` member of `InitializationData` can now be set
892  to a callable. For backward compatibility, a program can also continue to
893  supply an instance of the deprecated class `Ice.BatchRequestInterceptor`.
894
895- Renamed optional invocation context parameter to `context` for consistency
896  with other language mappings (was `_ctx` in previous versions).
897
898- Fixed a bug where `Ice.Application` Ctrl-C handler was installed even if
899  `Ice.Application.NoSignalHandling` was set.
900
901## Ruby Changes
902
903- Ice for Ruby is no longer supported on Windows.
904
905- Fix `Application` Ctrl-C handling to be compatible with Ruby 2.x signal
906   handler restrictions.
907
908- Fixed a bug that prevented the data members of `IceSSL::ConnectionInfo` from
909  being defined correctly.
910
911[1]: https://docs.python.org/3/c-api/buffer.html
912