Two Eiffel Implementations
The Tower class library has 102 classes, including the 47 kernel classes, providing the standard Eiffel language hooks into the underlying runtime library and operating system, as well as certain basic amenities, such as ANY, the ancestor of all user classes. Also present here are classes for strings, numbers, arrays, and so on.
Another 22 encrypted classes comprise a subset of the Booch components from Rational (Santa Clara, CA). These provide data structure and support classes giving you containers, lists, searching and sorting, pattern matching, and so on. Tower sells the full set of Booch components in unencrypted form.
Finally, 16 classes provide for storage and transmission of objects, and 10 more provide support functions.
Tower staff were consistently prompt in responding to e-mail, even when the answer to a question was not immediately available. The longest delay between sending mail and receiving a response was about four days, for a non-urgent matter. Most e-mail responses were within 24 hours. I phoned Tower only twice, about matters unrelated to any preceding e-mail. The person I wished to speak with answered the phone himself the first time, and the second, returned my call within a couple of hours.
Interactive Software Engineering is the company of Bertrand Meyer, Eiffel's designer.
Included with the pre-release document set I read were Eiffel: The Language, Eiffel: The Reference, Eiffel: The Libraries, and Eiffel: The Environment, all by Bertrand Meyer.
The Language is the definitive work on Eiffel, required reading for every Eiffel developer. Best read after obtaining some initial familiarity with the language, it is the language standard, and the place where all discussions of the fine points turn for answers.
The remaining books are necessary if you plan to use the ISE package, and are worthwhile reading in their own right. Bertrand Meyer's writing is often entertaining, always very insightful.
Interactive Software Engineering Eiffel-3 version 3.3.4 for Linux arrived on a DAT tape. I took it over to the Linux Journal offices to read it onto disk, then compressed it to six floppies for klister to read. Unpacking was easy, and I filled out the registration form and sent it off by e-mail. In due time the license codes arrived by return e-mail, I installed them and fired up the license manager daemon, and ISE Eiffel-3 was up and running.
Program edit, class browsing, compilation, and debug are performed from ebench or the tools it launches. These static linked Motif applications require no Motif shared libraries.
The user interface is thoughtful and innovative. Many of the things you need to do are initiated by pushbuttons or drag and drop. Dragging is performed without holding down a button, by clicking button three once to drag and again to drop, reducing the carpal tunnel wear and tear. Drag is easily aborted by clicking button 1. Pushbuttons have distinctive icons, and a phrase describing each pushbutton appears in the tool frame when the cursor is over the button. Those who have worked with graphical tools will appreciate that multiple level menus, pop-ups, and pull-downs are few. Instead, most of the controls needed at any point are immediately available on the frames of the tools present on the desktop.
You can edit program text using the native Motif capabilities, or you can click on a button that launches your favorite editor in a subshell. vi is the default editor. If you prefer emacs, you might run it in its own window to avoid starting it every time you want to edit a file.
ISE includes the following tools:
Project tool: Launch other tools, debug programs.
System tool: Edit Ace file; look at system statistics. Provide class names, for launching or targeting class tools.
Class tool: Edit and browse classes.
Feature tool: Closer look at features, including ancestry.
Object tool: Examine objects at debug time.
Explanation tool: Help on compilation errors
The class, one of the more interesting tools, gives you alternate views of a class at the push of a button. Views include:
Text: Editable class text.
Short: Feature definitions and feature header comments.
Short flat: Short, with all ancestors rolled in.
Ancestors: Indented list of all ancestors.
Descendents: Indented list of descendents.
Clients: List of all class clients in system.
Suppliers: List of classes whose client the target class is.
And more. Within each of these views, many things can be clicked and dragged to various tools. The effect is a very good hypertext view of a system, including the supporting classes from the libraries. Users of ctags may know what I mean if I call this “ctags on steroids”.
My small test application took sixteen minutes to compile from scratch with full optimizations and no assertions. The resulting binary file was about 130KB.
With assertions enabled and optimizations off, full compile time from scratch was about six minutes, and the binary file was about 1.7MB.
ISE ebench uses “melting ice technology”, which allows incremental changes to run in an interpreted mode. Only modified classes are recompiled. Changing one class and clicking the Melt button caused only a few seconds of compilation. The entire application can be run in this mode, which runs slower but compiles faster. My test application took 20 seconds to compile from scratch in “melt” mode.
Compiler errors are shown in the project tool, whence you can drag and drop class and feature names into class tools, letting you find the affected program code quickly. For more information, drag and drop the error code itself into an explanation tool, and very likely you'll see a paragraph and page number from The Language.
Debug uses the same drag and drop technique used elsewhere. Breakpoints can be set regardless of whether the system is executing, in any class whose text is accessible to the tools. At each breakpoint the stack frame is shown, and features may be displayed by dragging from the stack frame to an object tool. Once displayed, further references may be followed by dragging from the object tool to itself. For example, to traverse a linked list, drag its root object to an object tool, then repeatedly drag the forward link to the same tool.
A breakpoint can be set only at a routine's entry point. As most Eiffel routines are short, this gives better granularity than a C source debugger able to break only at function entry points, but can sometimes require insertion of feature calls and recompilation. Single stepping is available, but I was unable to discover any indication of which source statement had been reached at a step.
The EiffelBench environment is a very nice piece of work. If you are interested in integrated development environments, ISE Eiffel-3 is worth the purchase price just to get a good look at what they've done here. While not perfect, this environment gives a stable, quick, and user friendly, but not confining, basis for doing projects in Eiffel.
Practical Task Scheduling Deployment
One of the best things about the UNIX environment (aside from being stable and efficient) is the vast array of software tools available to help you do your job. Traditionally, a UNIX tool does only one thing, but does that one thing very well. For example, grep is very easy to use and can search vast amounts of data quickly. The find tool can find a particular file or files based on all kinds of criteria. It's pretty easy to string these tools together to build even more powerful tools, such as a tool that finds all of the .log files in the /home directory and searches each one for a particular entry. This erector-set mentality allows UNIX system administrators to seem to always have the right tool for the job.
Cron traditionally has been considered another such a tool for job scheduling, but is it enough? This webinar considers that very question. The first part builds on a previous Geek Guide, Beyond Cron, and briefly describes how to know when it might be time to consider upgrading your job scheduling infrastructure. The second part presents an actual planning and implementation framework.
Join Linux Journal's Mike Diehl and Pat Cameron of Help Systems.
Free to Linux Journal readers.View Now!
|The Firebird Project's Firebird Relational Database||Jul 29, 2016|
|Stunnel Security for Oracle||Jul 28, 2016|
|SUSE LLC's SUSE Manager||Jul 21, 2016|
|My +1 Sword of Productivity||Jul 20, 2016|
|Non-Linux FOSS: Caffeine!||Jul 19, 2016|
|Murat Yener and Onur Dundar's Expert Android Studio (Wrox)||Jul 18, 2016|
- Stunnel Security for Oracle
- The Firebird Project's Firebird Relational Database
- SUSE LLC's SUSE Manager
- Murat Yener and Onur Dundar's Expert Android Studio (Wrox)
- Managing Linux Using Puppet
- My +1 Sword of Productivity
- Non-Linux FOSS: Caffeine!
- Google's SwiftShader Released
- SuperTuxKart 0.9.2 Released
- Doing for User Space What We Did for Kernel Space
With all the industry talk about the benefits of Linux on Power and all the performance advantages offered by its open architecture, you may be considering a move in that direction. If you are thinking about analytics, big data and cloud computing, you would be right to evaluate Power. The idea of using commodity x86 hardware and replacing it every three years is an outdated cost model. It doesn’t consider the total cost of ownership, and it doesn’t consider the advantage of real processing power, high-availability and multithreading like a demon.
This ebook takes a look at some of the practical applications of the Linux on Power platform and ways you might bring all the performance power of this open architecture to bear for your organization. There are no smoke and mirrors here—just hard, cold, empirical evidence provided by independent sources. I also consider some innovative ways Linux on Power will be used in the future.Get the Guide