Eiffel

Me and Eiffel

I knew Eiffel from 1992 or so, and had used the preconditions of its Design-By-Contract principle extensively. However, I had not used Eiffel itself. In 1999 I started using SmallEiffel, now called SmartEiffel. I was very impressed. Having used Pascal, TurboPascal and Delphi over the years, it's great to be able to write portable code. Also Eiffel forces you to write OO, even with Delphi I tend to code a bit sloppy sometimes. I like the protection Eiffel offers. And I noticed that it is really different if you have DbC in your programming language. I've made some observations how Eiffel and Delphi differ.

I've won awards at two Eiffel struggle's:

Since November 2002 I'm on the NICE board. My duty is to maintain the website.

Gobo

The following sources might be interesting for people tracking the Gobo project. They contain enhancements and possibly new libraries for Gobo. There is usually no documentation, but always test code. I don't check the generated archives, so there might be some missing files. Just let me know.

Gobo technology preview downloads
DescriptionFile name
Gobonization of the very interesting pipework library of Simon Parker. gobo-pipework.zip
Possible streaming validator based upon the Gobo XML parsers. Works only for DTDs, have a subset of Relax NG working, but these classes can't possibly work for the full Relax NG specification. gobo-xip.zip
Settings and enhancements for Martin Schwenke's eiffel.el to make it better comply with the Gobo standards. Use the M-x gobonize to gobonize a class with a reasonably degree of success. berend-eiffel.el

Other Eiffel projects

I continually enhance my e-POSIX library. The goal of this library is to bring a 100% complete POSIX binding to Eiffel programmers, including a native Windows portabily layer. As this project is mostly complete, I'm currently bringing the Single Unix Specification API to Eiffel programmers. This will make it possible to write an IRC Bot in Eiffel for example.

I'm also working on an autoconf macro package for Eiffel. Let me know what you think of eiffel.m4!.

Example of use in an configure.ac script:

# Checks for Eiffel compiler
# We need Gobo as well.
AC_PROG_GOBO
AC_CHECK_RQRD_CLUSTER(GOBO)
AC_CHECK_RQRD_XACE(EPOSIX, src)

The required cluster check, checks if a certain environment variable is defined and if it points to an existing directory. The required xace check tests if the given directory contains a librace.xace file.

This configure script is used by eposix and by orgadoc.

NT Service in Eiffel

New version released on 2003-Nov-15

Yes, it's possible! I've tried to create an NT service in ISE Eiffel. This seems to work quite well, although it hasn't yet been used for industrial strength projects. You can download the ported winsvc library and a sample service. As I used ewg to port the winsvc header files, you will also need version 0.8 of that library (or the current CVS version) to compile and run this project.

With this version you just inherit from NT_SERVICE to create a new service and from NT_SERVICE_APPLICATION to initialize the service you want to run. The code might work when you declare more than one service, but as this has not been tested, assertions will forbid this. Let me know if you were successfull with this.

I tested it successfully with Microsoft C and Borland C on Windows 2000. Services created with this version do not work with Windows NT 4.0 due to the use of calls that only have been made available since Windows 2000.

First version released on 2003-Sep-26

You can also still download my first port of the winsvc library and its sample service. As I used ewg to port the winsvc header files, you need version 0.6 of that library as well to compile this project.

I didn't put a lot of work in making these archives, it's just a zip of my work. It's proof of concept so it might not work (very well). If it doesn't work for you, I'm happy to bring out corrections, so let me know. Also, I'm still working on this project, so one day I might bring out a real package that will make it easy to write NT services: just inherit from NT_SERVICE and there you go. But currently I'm struggling with ISE C compiler and link errors to make it work.

FreeBSD package for SmartEiffel

FreeBSD users might be interested in a prebuild FreeBSD package of the SmartEiffel Transitional release. Download it and say:

pgk_add smarteiffel-1.2r6.tgz

to install it. Remove it with:

pgk_delete smarteiffel-1.2r6.tgz

Previous packages:

  1. SmartEiffel 1.1
  2. SmartEiffel 1.0
  3. SmallEiffel -0.74

If you want to build the port yourself, download the lang/smarteiffel archive. Unzip it in your ports directory (usually /usr/ports) and start the make. If you are brave, you might want to submit it to the FreeBSD ports collection. This is such a pain, that I stopped doing it.