Frequently Asked Questions

We are continually updating our FAQ's page

Contact us for any additional questions we may not have covered in this section.

Questions:

Q: How does one access platform related libraries from a Z++ program?

A: C++ dynamic libraries, such as DLL, can be linked with a Z++ program. This feature is intended for reuse of pre-existing C and C++ services. In particular the C++ code is not platform independent and must be rebuilt for a new platform. However, for service-oriented architecture we only need to expose services through Z++ rather than rebuild them on other platforms. The simple and intuitive mechanism of Z++ linkage with pre-existing C++ code is of great value for exposing services, without any need to XML or other expensive and complex tools.

Return to Top of Page

Q: How do I access socket libraries for client-server model?

A: Z++ provides a very simple library for client-server model without the need to use socket libraries. In fact, socket transmission is similar to file streams. The input/output operators can be overloaded the same way as for IO stream in C++.

Return to Top of Page

Q: What is the overhead of Z47 Virtual Processor?

A: Depending on platform the Z47 Virtual Processor is approximately 500K. However, Z++ executables are considerably smaller than their C++ equivalent. This is because Z++ executables do not include run-time library. The virtual processor includes all the libraries needed. The small size of executables is important for fast transmission of components over the wire.

Return to Top of Page

Q: What if I write a multi-threaded program for a smartphone?

A: Then it will behave as a multi-threaded program as it does on any other platform. The Z47 Virtual Processor manages threading. The Z++ language is the same for all platforms. There are no specific versions for particular platforms.

Return to Top of Page

Q: Does Z++ support pointers?

A: Yes. Z++ treatment of pointers is identical to that of C++.

Return to Top of Page

Q: Does Z++ support Unions and Enumerations?

A: Yes. In addition, Z++ extends enumeration in several dimensions. For instance, it is possible to extend an enumeration (similar to derivation).

Return to Top of Page

Q: Does Z++ support code mobility for Mobile Agent technology?

A: Yes. Z++ directly supports Strong Mobility. A mobile agent retains its state as it travels. The statement "travel IP-address" can appear in any context, such as nested loops and selections, and sends the agent code to the IP-address.

Return to Top of Page

Q: What is template-pattern extension to C++ templates?

A: A template pattern is a specification for the types that can instantiate a template definition. This is illustrated in the white paper titled "Templates", at: http://www.zhmicro.com/whitepaper.html

Return to Top of Page

Q: What is Class Invariant?

A: Class Invariants are Boolean expressions involving members of class. The invariants are tested at the end of execution of public methods except the destructor. If an invariant is violated, its specified action will take place. The action could be raising an exception or invoking a trigger. Invariants are illustrated at: http://www.zhmicro.com/whitepaper.html in the white paper titled "Invariant".

Return to Top of Page

Q: What is Method Constraint?

A: A constraint is a Boolean expression for a method that must hold before an invoked method will begin executing its code. If a constraint is violated the action specified for that constraint will take place. The action could be raising an exception or invoking a trigger. Constraints are illustrated at: http://www.zhmicro.com/whitepaper.html in the white paper titled "Invariant", which also illustrates Invariants.

Return to Top of Page

Q: Do templates support Invariants and Constraints?

A: Yes. Z++ linguistic mechanisms are orthogonal. There are no counter intuitive grammatical exceptions.

Return to Top of Page

Q: How does Z++ extend C++ Namespace mechanism?

A: Z++ packaging mechanism is treated in a manner similar to class, with private section and inheritance. Namespace definition and implementation can be separated, and the scope of a namespace can be ended. These are illustrated in "Namespaces", a white paper at: http://www.zhmicro.com/whitepaper.html

Return to Top of Page

Q: Does Z++ support Component-Oriented development?

A: Indeed, Z++ is the only language that provides abstract and expressive linguistic mechanisms for Component-Oriented development. Z++ components are platform-free. The Component-Oriented construct is illustrated at: http://www.zhmicro.com/whitepaper.html in the white paper titled "Component", which also discusses the use of Invariants in the context of Components.

Return to Top of Page

Q: In what sense Z++ supports Distributed Computing?

A: A Z++ program consists of a number of components, as in Component-Oriented development. However, the components do not need to reside on a single computing device, such a PDA or PC. Indeed, components can be distributed among heterogeneous devices and platforms, cooperating as a single coherent program. Perhaps the more interesting fact is the intuitive linguistic construct for Distributed Computing, which is nothing more than defining a class.

Return to Top of Page

Q: How is Remote Procedure Call (RPC) done in Z++?

A: Since a component is introduced via a class definition, RPC reduces to invoking a method. In a distributed program components are scattered among nodes of a network of computing devices. Nonetheless, a developer simply uses the familiar syntax of calling a method on an instance of a class, whether the component is loaded on the local machine or remotely.

Return to Top of Page