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