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.6.4](#changes-in-ice-364)
12  - [General Changes](#general-changes)
13  - [C++ Changes](#c-changes)
14  - [Java Changes](#java-changes)
15  - [JavaScript Changes](#javascript-changes)
16  - [C# Changes](#csharp-changes)
17- [Changes in Ice 3.6.3](#changes-in-ice-363)
18  - [General Changes](#general-changes)
19  - [C++ Changes](#c-changes)
20  - [Objective-C Changes](#objective-c-changes)
21  - [PHP Changes](#php-changes)
22  - [Python Changes](#python-changes)
23- [Changes in Ice 3.6.2](#changes-in-ice-362)
24  - [General Changes](#general-changes-1)
25  - [C++ Changes](#c-changes-1)
26  - [C# Changes](#c-changes-2)
27  - [Java Changes](#java-changes)
28  - [Python Changes](#python-changes-1)
29  - [Ruby Changes](#ruby-changes)
30- [Changes in Ice 3.6.1](#changes-in-ice-361)
31  - [General Changes](#general-changes-1)
32  - [C++ Changes](#c-changes-3)
33  - [JavaScript Changes](#javascript-changes)
34  - [PHP Changes](#php-changes-1)
35- [Changes in Ice 3.6.0](#changes-in-ice-360)
36  - [General Changes](#general-changes-3)
37  - [C++ Changes](#c-changes-4)
38  - [C# Changes](#c-changes-5)
39  - [Java Changes](#java-changes-1)
40  - [JavaScript Changes](#javascript-changes-1)
41  - [Objective-C Changes](#objective-c-changes-1)
42  - [PHP Changes](#php-changes-2)
43  - [Python Changes](#python-changes-2)
44  - [Ruby Changes](#ruby-changes-1)
45
46# Changes in Ice 3.6.4
47
48These are the changes since Ice 3.6.3.
49
50## General Changes
51
52- Fixed IceGrid node bug where a replica might not get up-to-date object
53  adapter information about a server if an update is pending for this
54  server. Thanks to Michael Gmelin for the bug report and fix.
55
56- Added support for a new `Ice.ClassGraphDepthMax` property to prevent stack
57  overflows in case a sender sends a very large graph.
58
59  The unmarshaling or destruction of a graph of Slice class instances is a
60  recursive operation. This property limits the amount of stack size required to
61  perform these operations. This property is supported with all the language
62  mappings except Java and JavaScript where it's not needed (the run time
63  environment allows graceful handling of stack overflows).
64
65  The default maximum class graph depth is infinite. If your application
66  receives class graphs in an insecure environment, you should set the
67  `Ice.ClassGraphDepthMax` to a value that ensures the thread pool stack size is
68  large enough to allow reading graphs without causing a stack overflow.
69
70- Fixed IceGrid bug where updating properties of an IceBox service at runtime
71  would fail if the service used the IceBox shared communicator. Thanks to
72  Andreas Sommer for the bug report and fix.
73
74- Fixed a bug in the Slice compilers: they generated incorrect dependencies for
75  Slice files in directories with the string ".ice" in their path.
76
77- Significantly reduced the size of the Windows binary distribution by
78  moving all C++ debug information (PDB files) to https://symbols.zeroc.com.
79  Also removed the WinRT libraries from the Windows binary distribution.
80
81## C++ Changes
82
83- Fixed a spurious and harmless error message related to the kqueue selector.
84  This message would only show up under certain circumstances when using Ice
85  on macOS Sierra (10.2).
86
87- Fixed a bug which would cause an IceUtil::NullHandleException to be raised when
88  using a proxy configured with ice_invocationTimeout(-2) with collocated calls.
89
90- Fixed a bug which caused PTHREAD_PRIO_INHERIT to be ignored when building Ice
91  with -DICE_PRIO_INHERIT.
92
93## Java Changes
94
95- Fixed generated code bug which would cause a build failure if an interface
96  inherited from an interface from another module and if this interface had
97  operations returning multiple values.
98
99## JavaScript Changes
100
101- Fixed a bug in the Ice.Long toNumber implementation: negative integers
102  smaller than -(2^52 - 1) were not correctly handled.
103
104## CSharp Changes
105
106- Fixed a bug that affects the Stack sequence mapping. When using the Stack
107mapping with a sequence<Object*>, items were unmarshaled in reverse
108order.
109
110- Fixed a bug where incorrect code could be generated for invalid metadata
111directives.
112
113# Changes in Ice 3.6.3
114
115These are the changes since Ice 3.6.2.
116
117## General Changes
118
119- Fixed IceGrid bug where deployment of an application would fail if a well-
120  known object was registered with an adapter whose adapter ID contained spaces.
121
122- Added support for limiting the number of events queued for a given subscriber.
123  This is useful to prevent IceStorm from consuming too much memory when a
124  subscriber is too slow to consume published events. The queue maximum size is
125  configured with the IceStorm.Send.QueueSizeMax property. You can use the
126  property IceStorm.Send.QueueSizeMaxPolicy=RemoveSubscriber|DropEvents to
127  configure the behavior of IceStorm when the limit is reached. By default,
128  IceStorm will queue events indefinitely.
129
130- Speed-up the update of IceStorm replicas after the election of a new IceStorm
131  coordinator.
132
133- Fixed a bug in the IceLocatorDiscovery plug-in that could occasionally
134  trigger an infinite loop.
135
136- Fixed a bug in the unmarshalling code where passing optional input
137  parameters to an operation with no required input parameters would
138  cause an Ice::EncapsulationException to be thrown if the receiver
139  didn't expect the optional input parameters. The same applies for
140  passing optional output parameters to operations without required
141  output parameters.
142
143- Fixed a bug in icegridadmin and IceGridGUI which was preventing to get
144  properties for IceBox services using the IceBox shared communicator.
145
146- Fixed a bug in IceGrid Admin (IceGridGUI) that resulted in an incorrect
147  state when you removed and then re-added the same IceGrid application.
148
149- The Slice compilers now support non-ASCII paths on all platforms.
150
151- General clean up in slice2html, including a fix for broken link paths.
152
153## C++ Changes
154
155- Added support for archiving log files. The property Ice.LogFile.SizeMax
156  controls the maximum size in bytes of log files; when a log file reaches
157  this size, the log file is renamed and a new log file is started.
158  The Ice.LogFile.SizeMax property is set to 0 by default, which means the
159  log file size is unlimited and a single log file is created.
160
161## Objective-C Changes
162
163- Added identityToString and stringToIdentity non-member functions, which
164  were missing from previous releases.
165
166## PHP Changes
167
168- Added support for PHP 7.0.
169
170## Python Changes
171
172- Fixed a bug in the Slice compiler in which a Slice comment that begins or
173  ends with a double quote could generate a bogus Python docstring.
174
175- Fixed bug where Ice::UnknownUserException would sometimes be raised in C++
176  extension instead of being passed to Python.
177
178# Changes in Ice 3.6.2
179
180These are the changes since Ice 3.6.1.
181
182## General Changes
183
184- Added two new tools, icegriddb and icestormdb, used to import/export the
185  IceGrid and IceStorm databases.
186
187- Fixed a bug that affects Java and C# generated code. The generated patcher
188  for reading class data members was bogus when the class had more than one
189  class data member and derived from a class that contained class data
190  members. The same issue was true for exceptions with class data members
191  deriving from exceptions with class data members.
192
193- Fixed a bug that prevented scripting languages (Python, Ruby, Javascript and
194  PHP) from marshaling NaN or Infinity as a floating point value.
195
196- Fixed an IceGrid bug where resolving endpoints of dynamically registered
197  replica groups would fail unless the client was using an encoding superior
198  to the encoding   of the dynamically registered object adapters.
199
200- Added missing functions Ice::identityToString and Ice::stringToIdentity
201  (C++, Objective-C, PHP, Python and Ruby).
202
203- Added support for universal character names (\uNNNN and \UNNNNNNNN) in Slice
204  string constants.
205
206- Fixed Glacier2 router bug where requests from client to server could be lost
207  if forwarded as batch requests with the _fwd=O context.
208
209- Fixed Glacier2 bug which would occur in un-buffered mode and when forwarding
210  one-way requests. The Glacier2 router could eventually leak and hang on
211  shutdown.
212
213## C++ Changes
214
215- Fixed El Capitan build issues caused by a new security feature that no longer
216  exports DYLD_LIBRARY_PATH to child processes.
217
218- Fixed potential deadlock that could occur when using collocation optimization
219  and serialized server thread pools.
220
221- Fixed IceSSL bug that would only show up with WSS servers running on macOS
222  and Linux. The WSS server could stop reading requests if the client sent
223  multiple requests within the same SSL record.
224
225## C# Changes
226
227- Minor fixes to release the memory used by the transports to send and receive
228  data sooner. The garbage collector can therefore collect this memory sooner
229  as well.
230
231## Java Changes
232
233- Fixed a bug where unmarshaling Ice objects was really slow when using
234  compact type IDs.
235
236- Fixed an IceGridGUI bug where metrics attributes for Glacier2 and IceStorm
237  were not displayed.
238
239- Fixed an IceGridGUI bug where the GUI started minimized in macOS.
240
241## Python Changes
242
243- Added compatibility with Python 3.5.
244
245## Ruby Changes
246
247- Added compatibility with Ruby 2.3.
248
249# Changes in Ice 3.6.1
250
251These are the changes since Ice 3.6.0.
252
253## General Changes
254
255- Fixed IceStorm performance issue when creating a large number of topics.
256
257- Added support for Visual Studio 2015 and Universal Windows Platform (UWP)
258  apps.
259
260- Connection and transport buffers are now released when the connection is
261  closed rather than waiting for the collection or destruction of the Ice
262  connection object.
263
264- Calling `destroy()` on the `Glacier2::SessionHelper` during connection
265  establishment will now immediately cause the termination of the connection
266  attempt and `SessionCallback::connectFailed()` will be called with a
267  `CommunicatorDestroyedException`. Previously, the helper would wait until
268  the connection attempt either succeeded or failed before calling
269  `SessionCallback::disconnected()` or `SessionCallback::connectFailed`.
270
271- Fixed a bug in Slice compilers that would incorrectly reject valid Slice
272  where a parameter with the same name as a type would prevent further use of
273  that type in the same scope. For example:
274  ```
275  module Test
276  {
277  sequence<int> Seq;
278  struct S1
279  {
280    Seq seq;
281    Seq seq2; // This would fail with 'Seq is not a type'
282  };
283
284  interface Intf
285  {
286    void method(Seq seq, Seq seq2); // This would fail with 'Seq is not a type' for second parameter
287  };
288  };
289  ```
290
291- Added `--validate` option to Slice compilers. This option validates the
292  options that are passed to the Slice compiler and emits any errors but does
293  not create the generated files.
294
295## C++ Changes
296
297- Added registration function for Ice plug-ins (Ice::registerIceSSL, ...). Use
298  these functions if you don't want to rely on plug-in dynamic loading at run
299  time. Your application will need to link with the plug-in's dynamic library
300  if it uses the register function.
301
302- C++ source builds in Windows now use third-party packages from NuGet
303  (https://www.nuget.org).
304
305- Windows C++ builds now install the required third-party dependencies to the
306  install directory.
307
308## JavaScript Changes
309
310- Fixed an issue in connection code that would cause an unexpected exception to
311  be raised in some browsers when connection caching was enabled.
312
313- Fixed an issue where JavaScript browser code was trying to use TCP endpoints.
314
315- Fixed an issue that prevents Ice for JavaScript from running in a Web Worker.
316
317- JavaScript browser libraries no longer include a sourceMappingURL. To use
318  source maps you must enable them manually.
319
320## PHP Changes
321
322- Update PHP builds for Linux and macOS to use php-config from PATH. It is no
323  longer necessary to set PHP_HOME.
324
325# Changes in Ice 3.6.0
326
327These are the changes since Ice 3.5.1.
328
329## General Changes
330
331- Exceptions raised by the `Ice::Plugin` initialize method are now caught by the
332  communicator, which raises `Ice::PluginInitializationException` instead.
333
334- Fixed IceGrid bug where an application update could fail and leave the
335  registry in an invalid state if some allocation requests were pending while
336  the application was updated.
337
338- Deprecated the `IceSSL.PersistKeySet` which is now only used when importing
339  certificates with the deprecated `IceSSL.ImportCert` property.
340
341- Deprecated the `IceSSL.KeySet` property, use the `IceSSL.CertStoreLocation`
342  property instead.
343
344- Added `IceSSL.CertStoreLocation` property. This is a Windows specific property
345  to specify the location of the certificate store or key set for IceSSL
346  operation. The LocalMachine and CurrentUser locations are supported.
347
348- Added `IceSSL::WSSConnectionInfo` local Slice class to provide information on
349  a WSS connection. This class extends the `IceSSL::ConnectionInfo` class. The
350  `IceSSL::WSSNativeConnectionInfo` was also added to provide the language
351  mapping specific certificates associated with the SSL connection.
352
353- Added `IceSSL::WSSEndpointInfo` local Slice class to provide WSS endpoint
354  information. This class extends the `IceSSL::EndpointInfo` class.
355
356- Updated `Ice::WSEndpointInfo` to extend `Ice::TCPEndpointInfo` and
357  `Ice::WSConnectionInfo` to extend `Ice::TCPConnectionInfo`
358
359- IceSSL now supports using the platform Root Certificate Authorities to
360  validate remote certificates. The use of the platform Root CAs can be enabled
361  with the `IceSSL.UsePlatformCAs` property. The platform Root CAs are only
362  checked if `IceSSL.CAs` is not set.
363
364- The `IceSSL.CertAuthFile` and `IceSSL.CertAuthDir` properties have been
365  deprecated. You should now use the `IceSSL.CAs` property to configure the path
366  of the PEM file containing the Root Certificate Authorities or the path of a
367  directory containing the certificates (OpenSSL only).
368
369- The `IceSSL.KeyFile` property has been deprecated. You should instead use
370  `IceSSL.CertFile` and PKCS12 files to configure the IceSSL identity.
371
372- The default value of the `IceSSL.VerifyDepthMax` property is now 3 (it was
373  previously 2). This allows certificate chains of 3 certificates (e.g., a Peer,
374  CA and Root certificate chain).
375
376- The certificate chain provided in the `IceSSL::ConnectionInfo` should now
377  always include the root certificate if the chain could successfully be
378  verified.
379
380- Added `verified` member to the `IceSSL::ConnectionInfo` class. This member
381  indicates whether or not the peer certificate was successfully verified. This
382  member is useful for clients which set `IceSSL.VerifyPeer=0` to check if the
383  server certificate could be verified or not. For server connections, the
384  member should always be `true` since servers always reject invalid client
385  certificates.
386
387- The Ice distribution now supports the Objective-C mapping on macOS.
388
389- The Glacier2 `SessionHelper` class now creates the callback object adapter
390  automatically unless the application calls
391  `SessionFactoryHelper.setUseCallbacks(false)`.
392
393- Added the `headers` member to the `Ice::WSConnectionInfo` class. This member
394  contains the HTTP headers provided during WebSocket connection establishment.
395
396- Significantly changed the behavior of batch requests:
397
398    - Invocations on batch fixed proxies are still queued by the Ice connection
399      object as in previous releases.
400
401    - Invocations on batch direct or indirect proxies are now queued directly
402      by the proxy object.
403
404    - As a result, calling `flushBatchRequests` on the Ice communicator or
405      connection will no longer flush batch requests queued with proxies.
406
407    - You should instead call `flushBatchRequests` on the proxy to flush its
408      batch request queue. The flushing of those batch requests is handled like
409      a regular one-way request (e.g., the Ice run time will retry if the
410      connection fails).
411
412- Added support for batch request interceptors (C++, Java, C#, Python,
413  Objective-C). You can assign a batch request interceptor on communicator
414  initialization using the `InitializationData` structure.
415
416- IPv6 is now disabled by default if the operating system doesn't support the
417  creation of IPv6 sockets.
418
419- Added new `Ice.BatchAutoFlushSize` property to allow controlling how much data
420  (in kilobytes) is queued for batching before the batch is sent over the
421  connection. Previously, this was controlled by the `Ice.MessageSizeMax`
422  property. The `Ice.BatchAutoFlush` property has also been deprecated. To
423  disable auto flush you can set `Ice.BatchAutoFlushSize=0`. The default value
424  is 1024.
425
426- We have relaxed the semantics of `Ice.MessageSizeMax`. The check for the
427  maximum message size is now only performed on the receiver side. If the
428  size of the message is greater than the limit, Ice raises
429  `Ice::MemoryLimitException` and closes the connection. Previously, it was also
430  used to limit the amount of data sent to a peer (either for a request or
431  reply). This is no longer the case. A zero or negative value now also disables
432  the check and allows an unlimited amount of data to be received (this should
433  only be used in a trusted environment). Finally, support for the
434  `objectAdapter.MessageSizeMax` property was added to allow setting this limit
435  on specific object adapters.
436
437- The Ice run time now raises `Ice::IllegalServantException` if a null servant
438  is provided to a method that requires a non-null servant (such as the
439  `Ice::ObjectAdapter::add` methods or the Freeze evictor `add` methods).
440
441- It's now possible to specify an IPv6 address for the UDP `--interface` local
442  option; previously it only accepted an interface name or index.
443
444- Ice now guarantees that invocations made on different proxy objects will be
445  serialized if the proxies are equal and if connection caching is enabled.
446  Previously, invocations could be sent out of order if the connection wasn't
447  established.
448
449- IceGrid now permits removing or moving servers when saving an application
450  "without restart" (to ensure the update doesn't cause any server shutdown).
451  The servers to be removed or moved must be stopped or the saving will fail.
452  Previously, IceGrid prevented the saving of the application even if the
453  servers were stopped.
454
455- It's now possible to pass indirect proxies to
456  `IceGrid::AdminSession::setObservers`. Previously, the IceGrid registry would
457  fail to resolve the endpoints and the observer updates weren't sent.
458
459- The IceGrid implementation of `Ice::Locator::getRegistry` now returns a
460  replicated proxy if IceGrid replication is used. This way, if an IceGrid
461  replica becomes unavailable during a server's activation, the server will
462  still be able to register its endpoints with one of the other replicas.
463
464- Added a `cancel` method to `AsyncResult`. Calling it prevents a queued
465  asynchronous request from being sent, or ignores the reply if the request has
466  already been sent. It does not cancel the request in the server. Canceled
467  requests throw `Ice::InvocationCanceledException`.
468
469- Removed the "old" asynchronous invocation API that was deprecated in Ice 3.4.
470
471- Removed the following deprecated Slice operations:
472    - `Ice::Router::addProxy`
473    - `IceGrid::Admin::writeMessage`
474    - `IceStorm::Topic::subscribe`
475
476- Added the WebSocket transports to the Ice core, including new implementations
477  in Java and C#. This means it's no longer necessary to use Glacier2 as an
478  intermediary when a JavaScript client needs to communicate with a Java or C#
479  server.
480
481- Added a "Logger" facet to the admin object, which allows remote applications
482  to attach `RemoteLogger` objects and receive log messages. Both the
483  icegridadmin command-line utility and IceGrid Admin GUI use this new facet
484  to retrieve the logs of Ice servers, IceBox services, IceGrid nodes and
485  IceGrid registries.
486
487- Added `getNodeAdmin` and `getRegistryAdmin` operations to the `IceGrid::Admin`
488  interface. They return the admin object of a given IceGrid registry or node.
489
490- Added new `getPrefix` operation to `Ice::Logger`; it returns the prefix of the
491  logger.
492
493- The admin object can now be hosted in an application-supplied object adapter
494  using the new property `Ice.Admin.Enabled` and the new operation
495  `Ice::Communicator::createAdmin`.
496
497- Added methods to proxies to asynchronously get the connection associated with
498  the proxy. The current synchronous methods can block as they may cause the
499  connection to be established.
500
501- Added support for HTTP proxies to the Ice core in C++, C# and Java. This
502  allows outgoing TCP & SSL connections to be mediated by an HTTP network proxy
503  service that supports HTTP CONNECT tunneling. The new properties
504  `Ice.HTTPProxyHost` and `Ice.HTTPProxyPort` provide addressing information
505  for the proxy.
506
507- Added the `IceStorm::InvalidSubscriber` exception, which is thrown by the
508  `subscribe/unsubscribe` operations when an invalid subscriber (such as a null
509  proxy) is passed. IceStorm would previously either abort (if built in debug
510  mode) or throw an `Ice::UnknownLocalException` if such a subscriber proxy was
511  provided.
512
513- Added `Ice.Default.SourceAddress` property and `--sourceAddress` endpoint
514  setting to control the interface used for an outgoing connection. The
515  configured source address can be retrieved with the `sourceAddress` member
516  of the `Ice::IPEndpointInfo` class.
517
518- The signatures of `Ice::OutputStream startSize` and `endSize` have been
519  modified. It is now necessary for the caller of `startSize` to save the
520  returned position and pass it into `endSize`.
521
522- Added `IceStormAdmin.Host` and `IceStormAdmin.Port` properties. You can set
523  these properties to connect to an IceStorm instance running on a given host
524  and port.
525
526- Added IceStorm finder interface (defined in `IceStorm/IceStorm.ice`) to enable
527  clients to easily find the proxy of the topic manager with just the endpoint
528  information of the IceStorm service. The client doesn't need to know the
529  instance name. IceStorm provides an Ice object with the identity
530  `IceStorm/Finder` that implements this interface.
531
532- Added IceLocatorDiscovery plug-in, which enables Ice applications to discover
533  locators (such as IceGrid registries) running on the network using UDP
534  multicast.
535
536- Added support for IceLocatorDiscovery to the IceGrid administrative utilities.
537  Also added `IceGridAdmin.Host` and `IceGridAdmin.Port` properties; you can set
538  these properties to connect to an IceGrid registry running on a given host and
539  port.
540
541- Added "finder" interfaces for locators and routers to enable clients to easily
542  find proxies for the locator or router (defined in `Ice/Locator.ice` and
543  `Ice/Router.ice`). Glacier2 and IceGrid implement these interfaces and provide
544  finder Ice objects with the identities `Ice/RouterFinder` and
545  `Ice/LocatorFinder`, respectively. Clients can use these objects to connect
546  to Glacier2 and IceGrid using only the endpoint information; they don't need
547  to know the instance name of the Glacier2 or IceGrid service.
548
549- Ice metrics now support collocation optimization. The
550  `Ice::Instrumentation::CollocatedObserver` local interface and the
551  `IceMX::CollocatedMetrics` class have been added to monitor collocated
552  requests.
553
554- Collocation optimization has been significantly improved to remove
555  limitations. It now works with AMI, AMD, blobjects and batching. Collocated
556  requests are now always marshaled and unmarshaled but they don't go through
557  any transport. The `Ice::CollocationOptimizationException` is no longer used
558  and as a result is now deprecated.
559
560- Fixed a bug where retries might fail if the request failed right after
561  connection establishment.
562
563- Added callbacks for connection closure and heartbeats. The callback is invoked
564  when the connection is closed or when a heartbeat is received. Callbacks are
565  installed on the connection with the `Ice::Connection::setCallback` method and
566  implement the `Ice::ConnectionCallback` interface.
567
568- Active connection management improvements:
569
570    - Active connection management now supports sending heartbeats over the Ice
571      connection. Depending on the configuration, heartbeats are sent when there
572      are long invocations in progress, when the connection is idle, or at
573      regular time intervals.
574
575    - Connection closure by active connection management can be configured to
576      close connections under certain conditions. For example, a connection can
577      be closed gracefully or forcefully if it's idle for the specified timeout
578      period.
579
580    - The ACM properties to configure the ACM timeout have been deprecated. You
581      should now use the `prefix.Timeout` property where prefix can be
582      `Ice.ACM`, `Ice.ACM.Client`, `Ice.ACM.Server` or `objectAdapter.ACM`.
583
584- IceGrid and Glacier2 now support the new ACM mechanism to keep sessions alive.
585  The `Glacier2::Router` and `IceGrid::Registry` interfaces support a new
586  `getACMTimeout` operation. To keep the connection alive the client should
587  configure its connection to always send heartbeats using the timeout returned
588  by `getACMTimeout`. A client can also install a connection callback to be
589  notified when the connection is unexpectedly closed.
590
591- Added support for invocation timeouts. Invocation timeouts can be set on a
592  per-proxy basis with the `ice_invocationTimeout` proxy method. By default,
593  there's no invocation timeout meaning that an invocation will never timeout
594  if the connection between the client and server is alive. An invocation
595  timeout does not cause a connection to be closed. If the timeout is triggered
596  the invocation will raise `Ice::InvocationTimeoutException`.
597
598- With the addition of invocation timeouts, the existing connection timeout
599  mechanism no longer applies to invocations. Connection timeouts are now
600  enabled by default using the new property `Ice.Default.Timeout`, which
601  specifies the timeout for stringified proxy endpoints that do not have a
602  timeout explicitly set. The default setting for the property is 60 seconds.
603  It is also now possible to set an infinite timeout using `-t infinite` in
604  the endpoint configuration.
605
606- Added IceDiscovery plug-in, which provides a UDP multicast-based Ice locator
607  implementation. This can be used as an alternative to IceGrid when running a
608  few clients and servers on the same network and you don't want to deploy a
609  central service such as IceGrid.
610
611- Added support for IceGrid custom load balancing with the addition of replica
612  group and type filters. These filters allow you to select the set of replicas
613  that are sent back to the client when it resolves replica group endpoints.
614  It's also possible to filter the objects returned to the client when it uses
615  the `IceGrid::Query` interface.
616
617- This addition requires the upgrade of IceGrid registry databases if you
618  deployed replica groups for your IceGrid applications. See the release notes
619  for information on how to upgrade your IceGrid databases.
620
621- Fixed a marshaling bug where the marshaling of a type with nested optionals
622  of variable size could trigger an assertion.
623
624- Fixed an IceGrid registry replication bug where database synchronization could
625  fail on startup or connection establishment with the master if multiple
626  applications referred to a replica group defined in another application that
627  wasn't yet added.
628
629- FreezeScript can now transform classes to structures and structures to
630  classes. It also supports the use of compact type IDs for classes.
631
632- The `CryptPasswords` file support for Glacier2 and IceGrid is now implemented
633  in a separate C++ plug-in, the `Glacier2CryptPermissionsVerifier` plug-in. On
634  Windows, this plug-in is the only remaining Ice run time dependency on
635  OpenSSL.
636
637- Removed the `Ice::Stats` interface, which was deprecated in Ice 3.5 and
638  replaced by the new metrics facility.
639
640- The `IceBox.ServiceManager` object adapter has been deprecated. Use
641  `Ice.Admin` and the `IceBox.ServiceManager` facet instead.
642
643- Removed the following deprecated properties:
644    - `Glacier2.AddSSLContext`
645    - `IcePatch2.ChunkSize`
646    - `IcePatch2.Directory`
647    - `IcePatch2.Remove`
648    - `IcePatch2.Thorough`
649
650- Fixed a bug where optional class data members were not correctly marshaled and
651  unmarshaled when non optional class data members were defined after the
652  optional class data members or the optional tag were not in ascending order.
653  This bugs affects Java, CSharp and JavaScript language mappings.
654
655## C++ Changes
656
657- Calling Glacier2::SessionFactoryHelper::destroy() is now required to ensure
658  resources allocated for session helpers are correctly released.
659
660- Fixed a bug where the object adapter default servant map wasn't cleared on
661  object adapter destruction. This could potential lead to leaks if the default
662  servant had a reference to the object adapter.
663
664- IceStorm is now faster when creating persistent topics and subscribers.
665
666- Ice for C++ now supports the GCC and clang symbol visibility options: we build
667  by default with `-fvisibility=hidden` and we define `ICE_DECLSPEC_EXPORT` and
668  `ICE_DECLSPEC_IMPORT` for these compilers.
669
670- Refactored the capture and printing of exception stack traces to be more
671  efficient when the stack traces are not printed. The signature of
672  `IceUtil::Exception::ice_stackTrace` changed to:
673  `std::string ice_stackTrace() const;`
674
675- Fixed a bug where a private Windows Runtime delegate type could be published
676  in Windows Store Components metadata files (WINMD).
677
678- New garbage collection support for object graphs with cycles. Ice no longer
679  uses a background thread to collect objects. Instead, `Ice::Object` now has a
680  new `ice_collectable` method to indicate whether or not the object graph can
681  be collected. When a graph is marked as collectable with this method, you
682  shouldn't update the structure of the object graph. Ice tries to collect the
683  graph each time a reference count is dropped for an object in the cycle. By
684  default, object collection is turned off. When it's turned on with
685  `Ice.CollectObjects=1`, the Ice run time calls `ice_collectable(true)` on all
686  the objects it unmarshals. The properties `Ice.GC.Interval` and `Ice.Trace.GC`
687  are no longer supported, nor is the `Ice::collectGarbage` function.
688
689- Significant changes to the IceSSL plug-in:
690
691    - Now uses the native SecureTransport API on macOS
692    - Now uses the native SChannel API on Windows
693    - OpenSSL is only used in IceSSL on Linux
694
695- Added support for the `IceSSL.FindCert` property on Windows and macOS.
696
697- Added the new metadata tag `cpp:view-type:Type`, where `Type` is a type that
698  can safely provide a "view" into the Ice unmarshaling buffer and thereby avoid
699  extra copies. This tag can only be applied to operation parameters of type
700  string, sequence and dictionary, and only has an effect in situations where
701  the Ice data buffer is guaranteed to still exist.
702
703- It is no longer necessary to provide import libraries such as `IceD.lib`,
704  `IceUtilD.lib` or `IceGridD.lib` when linking on Windows with Visual C++. The
705  linker finds the import library names automatically through
706  `pragma comment(lib, ...)` in the Ice header files.
707
708- Ice header files no longer disable or downgrade any warning reported by the
709  C++ compiler in your code. In Ice 3.5, all header files indirectly included
710  the following:
711  ```
712  #ifdef _MSC_VER
713  //
714  // Move some warnings to level 4
715  //
716  # pragma warning( 4 : 4250 ) // ... : inherits ... via dominance
717  # pragma warning( 4 : 4251 ) // class ... needs to have
718  // dll-interface to be used by clients of class...
719  #endif
720  ```
721  When upgrading your Visual C++ application to Ice 3.6, you may need to fix,
722  disable or downgrade these warnings in your C++ code.
723
724- Fixed a bug where communicator destruction could raise
725  `Ice::NullHandleException` if a custom observer was present.
726
727- Fixed a bug where the selector wouldn't check for EPOLLERR on Linux. This
728  could cause the selector thread to spin if this condition occurred (which is
729  the case with UDP connected sockets).
730
731- Added per-process string converters for narrow and wide strings. The functions
732  `setProcessStringConverter` and `getProcessStringConverter` in the IceUtil
733  namespace can be used to establish and access the process narrow string
734  converter. Likewise `setProcessWstringConverter` and
735  `getProcessWstringConverter` can be used to establish and access the process
736  wide string converter.
737
738- Removed the `stringConverter` and `wstringConverter` data members of
739  `Ice::InitializationData`.
740
741- Moved the `StringConverter` template and classes from the Ice namespace to the
742  IceUtil namespace.
743
744- Added `Ice.LogStdErr.Convert` property which controls whether or not the
745  default StdErr logger converts messages from native narrow encoding to the
746  console code page. The default value is 1, meaning by default messages are
747  converted to the console code page encoding. The property is only used on
748  Windows.
749
750- Added `ice_staticId` to the ProxyHandle template.
751
752- Removed deprecated `Ice::Object::ice_getHash` function.
753
754## C# Changes
755
756- Fixed the Java IceSSL implementation to behave like the C++ and Java
757  implementation when `IceSSL.VerifyPeer=1` is set for servers. The server will
758  now request a certificate to the client and not abort the connection if the
759  client doesn't provide a certificate.
760
761- The default constructor for a Slice structure, exception or class now
762  initializes string, structure or enumerator data members. A string data member
763  is initialized to the empty string, a structure data member is initialized
764  with a new default-constructed structure, and an enumerator is initialized
765  with the first enumerator value.
766
767- Fixed a bug in the Slice-to-C# compiler that would generate invalid code if an
768  interface inherited a method that had an optional value as a return value.
769
770- Deprecated the `clr:collection` Slice metadata for sequences and dictionaries
771  as well as the `CollectionBase` and `DictionaryBase` classes.
772
773- Fixed a security vulnerability in IceSSL in which an untrusted self-signed CA
774  certificate was accepted.
775
776- Added `IceSSL.CertAuthFile` property, which allows you to specify a CA
777  certificate without having to import it into a certificate store.
778
779- Deprecated the `IceSSL.ImportCert` property. Certificates should be imported
780  using standard Windows tools.
781
782- Fixed a bug where under certain circumstances the thread pool could serialize
783  dispatch.
784
785- The `Ice.Communicator` type now implements `IDisposable`, which allows
786  communicator objects to be used as resources in `using()` statements.
787
788- Added the metadata tag `clr:implements:Base`, which adds the specified base
789  type to the generated code for a Slice structure, class or interface.
790
791- Most Slice data types now support .NET serialization, which allows Ice
792  exceptions to cross AppDomain boundaries. The only limitation is that data
793  members whose types are proxies cannot be serialized; these members will be
794  set to null after deserialization. Note that the `Ice.Optional` type now
795  implements `ISerializable` and the .NET serialization format in Ice 3.6 is
796  not backward-compatible with Ice 3.5.
797
798- It is now possible for users to provide a base class for a Slice-generated
799  class with .NET partial classes.
800
801- Fixed leak in C# transport. The leak occurred for each Ice connection.
802
803- Mono is no longer an officially-supported platform for Ice for .NET.
804
805## Java Changes
806
807- Fixed the Java IceSSL implementation to behave like the C++ and C#
808  implementation when `IceSSL.VerifyPeer=1` is set for servers. The server will
809  now reject the connection if the client provides a certificate and this
810  certificate can't be verified.
811
812- Passing null for a Slice structure or enumerator is now tolerated. Ice
813  marshals an empty structure or the first enumerator value.
814
815- The default constructor for a Slice structure, exception or class now
816  initializes string, structure or enumerator data members. A string data member
817  is initialized to the empty string, a structure data member is initialized
818  with a new default-constructed structure, and an enumerator is initialized
819  with the first enumerator value.
820
821- The `clone` method provided by Java classes generated from Slice definitions
822  is now returning the generated class, instead of `java.lang.Object`. For
823  example, the `Ice.Identity` class generated from the `Ice::Identity` Slice
824  structure contains:
825  ```
826  // Prior to Ice 3.6
827  public java.lang.Object clone() { ... }
828
829  // Starting with Ice 3.6
830  public Identity clone() { ... }
831  ```
832  This way, you typically no longer need to cast after cloning an Ice structure or other Ice object.
833
834- Added new Slice metadata `java:buffer` to enable the use of `java.nio.Buffer`
835  types in the generated code for sequences of byte, short, int, long, float and
836  double. For example, `sequence<byte>` maps to `java.nio.ByteBuffer` instead of
837  `byte[]`.
838
839- Changed the Ice core to allow applications to safely interrupt threads that
840  are calling Ice APIs. The new property `Ice.ThreadInterruptSafe` must be
841  enabled in order to use thread interrupts. Ice raises the new exception
842  `Ice.OperationInterruptedException` if an API call is interrupted.
843
844- Added support for Java 8.
845
846- Java 8 lambda expressions can be used as callbacks for asynchronous proxy
847  invocations.
848
849- Removed deprecated `IceUtil.Version` class.
850
851## JavaScript Changes
852
853- JavaScript is now an officially-supported language mapping.
854
855- Passing null for a Slice structure or enumerator is now tolerated. Ice
856  marshals an empty structure or the first enumerator value.
857
858- The default constructor for a Slice structure, exception or class now
859  initializes string, structure or enumerator data members. A string data member
860  is initialized to the empty string, a structure data member is initialized
861  with a new default-constructed structure, and an enumerator is initialized
862  with the first enumerator value.
863
864- Added the following methods to `AsyncResult` for consistency with the other
865  language mappings: `cancel`, `isCompleted`, `isSent`, `throwLocalException`,
866  `sentSynchronously`.
867
868- Changed the NodeJS packaging such that existing Ice for JavaScript programs
869  will need to modify their require statements. For example, to use Ice you
870  would now write:
871  `var Ice = require("icejs").Ice;`
872
873## Objective-C Changes
874
875- The Objective-C headers are now installed under the `include/objc` directory.
876  You will need to change the `#import` in your code to import `objc/Ice.h`
877  where you were previously importing `Ice/Ice.h`. You will need to make similar
878  changes as well if you include headers for Ice services:
879  `IceStorm/IceStorm.h`, `IceGrid/IceGrid.h`, `Glacier2/Glacier2.h` should be
880  changed to `objc/IceStorm.h`, `objc/IceGrid.h`, `objc/Glacier2.h`
881  respectively.
882
883- The IceSSL types are no longer included with the `IceObjC` library. You should
884  now import `objc/IceSSL.h` in your source code and link with the `IceSSLObjC`
885  library if you need to use IceSSL types (`ICESSLEndpointInfo` and
886  `IceSSLConnectionInfo`).
887
888- The Ice run time local interfaces (such as `ICECommunicator`,
889  `ICEObjectAdapter`, etc.) are now generated from the Slice definitions.
890
891- Added support for the `[objc:param:ID]` metadata to allow changing the
892  generated identifier for the parameter in the generated interface selector for
893  a Slice operation. For example, the Slice operation
894  `void op(int a, ["objc:param:withB"] int b)` will be generated as the selector
895  `op:(int)a withB:(int)b`.
896
897- Added support for servant locators.
898
899- The default constructor for a Slice structure, exception or class now
900  initializes string, structure or enumerator data members. A string data member
901  is initialized to the empty string, a structure data member is initialized
902  with a new default-constructed structure, and an enumerator is initialized
903  with the first enumerator value.
904
905## PHP Changes
906
907- Passing null for a Slice structure is now tolerated, an empty structure will
908  be marshaled.
909
910- Added support for PHP 5.6.
911
912- Added `ice_staticId` to generated proxy helper classes.
913
914- Generated interfaces now extend the `Object` base interface.
915
916- Added `ObjectPrxHelper` class.
917
918## Python Changes
919
920- Passing `None` for a Slice structure is now tolerated, an empty structure will
921  be marshaled.
922
923- Added support for Python 3.4.
924
925- Changed the semantics of `Ice.Unset` so that it evaluates as false in a
926  boolean context.
927
928- Fixed a bug in the Slice-to-Python translator that eliminates the use of
929  implicit relative imports for nested Slice modules.
930
931- Added `ice_staticId` to generated proxy classes.
932
933## Ruby Changes
934
935- Passing null for a Slice structure is now tolerated, an empty structure will
936  be marshaled.
937
938- Added support for Ruby 2.1.
939
940- Added `ice_staticId` to generated proxy classes.
941