EiffelStudio Goes Open
WeiszNet writes "Bertrand Meyer, the creator of Eiffel the language and CTO of Eiffel Software in Santa Barbara, CA has announced in his Software Architecture course at ETH Zurich that the company's flagship product - EiffelStudio was released under the GPL today. Here is the press release: and the project's page.
Eiffel is an object oriented programming language supporting contracts. Last year the international standard (ECMA) for Eiffel was released and now the initiative to go open has been taken."
I'm sure we'll all be programming in Eiffel in a few years. Yep.
This was the #1 reason for not using Eifell.
Eiffel is an object oriented programming language supporting contracts.
I was beginning to get concerned about the incredible lack of object oriented programming languages currently available.
Fortunately, there's now another one to choose from that is now free.
I'm a big tall mofo.
Wikipedia knows.
The big thing is design by contract. Calling procedures specify what they will guarantee functions and what they expect, functions guarantee what they won't change and list what they expect. This makes code reuse actually practical, since global effects are spelled out.
For example a sqrt function will require x >= 0, that is the calling function must have checked. Since this is specifically listed in the contract your calling function is expected to be able to indicated how it knows that x >= 0 before computing sqrt(x).
The second big thing is that the language is pretty high level and you just give hints to the compiler about how to implement things (sort of like Oracle SQL) unlike Java or C++ where implementation details are definitely part of the program.
That's pretty much it.
I haven't heard of this language, and don't want to do too much research (go go procrastination!). Can anyone tell me some of the basic info about this, and what makes it different? Why would I want to use this language over something already available, for example.
Eiffel has been around for a long time, and is a mature language. What does it offer? A very clean and well designed Object Oriented language with a very clear and readable syntax and great support for Design by Contract. The principle behind Design by Contract is simple enough: objects, and methods provide contracts - providing you meet their stated requirements, the guarantee things in return. Statically typed languages offer some level of this already: you have to provide paramters of the right datatype, and it guarantees the datatype of the return type. Design by Contract essentially just extends this principle to allow for much more expressive contracts than just type signatures, and things like object invariants (properties of an object that are guaranteed not to change). The result is a much clearer statement of intention as to how code should work, and a powerful test harness that massively speeds up the test/debug cycle. In theory you can achieve this by liberally sprinkling assertions through your code. The advantage of having a language with explicit support for Design by Contract is that things like inheritance of contracts and invariants are all handled automatically and elegantly etc.
As well as this release of EiffelStudio as open source, there's SmartEiffel which is an open source Eiffel compiler (which supports a number of extra features beyond what is given in the recent ECMA spec).
Jedidiah.
Craft Beer Programming T-shirts
The link for the project page goes to a wiki page with not too much information. Not to sound too much like a slashvertisement, I'm sure they would want you to also link to this page, containing more information:
http://www.eiffel.com/products/studio/
Also there should be a PDF warning on the ECMA standards link, just a thought.
What are the odds that some idiot will name his mutex ether-rot-mutex!
I'm having first year comp sci flashback! I remember at the time being taught Eiffel as my first OO langage used to teach OO techniques and design - I hated it back then it felt clunky, overly protective and claustraphobic. Now after almost 10 years as a programmer every so often I crack open the old textbooks and think "wow.. that is rather elegent and expressive". Eiffel is engineered/designed - it is deliberately not suited if all you want to do is hack about. It's funny, only yesterday I was using Eiffel as an example to my IT team as a language that forced strong contractual based interfaces.
I just can't be bothered.
In other words, Algorithms + Data Structures = Programs. I'll be damned ... that Wirth guy was right after all.
The higher the technology, the sharper that two-edged sword.
As a language, Eiffel doesn't make it more convenient to express a problem to receive a good solution, it just makes the programmer follow the public speaker's maxim:
Programming by contract is essentially just writing twice as many unit tests, wrapped all around the code that is supposed to be doing the work. It's even easier to write bad tests when it's right next to the code being tested, so why bother?
Bertie, give it up already!
[
BUt can you write an Eiffel compiler in Eiffel ?
The Kruger Dunning explains most post on
At least according to this website I found via the Artima.com website.
It lets you compare any two languages that have compilers in Linux and it gives you a graph of speed vs memory usage in various kinds of programming patterns such as matrix math, branchy programs, etc.
Eiffel (compiled with SmartEiffel) vs C++ (GCC 3.3.4) is actually slightly faster than C++ in almost all of the tests that the author came up with. And the memory usage is just as efficient as C++.
I've looked at Eiffel, but the syntax isn't very pretty. However, for important projects I think Eiffel will be the right language for the job.
They already told you. If you managed to get to the "object oriented" part, how did you miss the "contract" part?
What are the differences between Eiffel and other free object oriented programming languages? What does Eiffel have that Ruby, Python, and Java do not?
Compared to Ruby, Python and Java the biggest thing Eiffel has going for it is raw speed. Consider the benchmarks and you'll see Eiffel is much much faster than Java, with considerably less memory use. You get that sort of performance from a langauge with an exceptionally clean, well designed and engineered OO system, and great support for Design by Contract, and a very clear readable syntax: learning Eiffel is very easy.
If you're doing very dynamic work that really calls for the flexibility of Python or Ruby, then Eiffel probably isn't for you. If you want something to build robust complex large scale systems then Eiffel is actually better than Java for producing robust, well documented, reusable, maintainable code - and its faster to boot. Java, of course, has its own advantages in terms of "run anywhere" and its huge standard library, but Eiffel is well worth acquainting yourself with.
Jedidiah.
Craft Beer Programming T-shirts
Doesn't anyone remember Bertrand's rant against Stallman and the GPL in 2000? It is pretty amusing that he finally chose the GPL -- I would have thought he would have gone for a BSD License just to save face.
I've heard of Eiffel a number of times. The contract by design feature intrigues me; I've always wanted to try it. Well, I guess now I have more incentive. I don't think there's anything like it in the more common languages - C, Python, Java, etc. When I'm coding, I usually try to force myself to make decisions about which objects/functions are responsible for what. But it never seems to work out that way. Things decay over time.
I've wondered just how much a language can compensate for programmer laziness, carelessness, or just lack of ability. This question recently came up in a discussion. I am somewhat confident that software or languages can be designed to force good behaviour and eliminate (certain types of) mistakes. After all, there are no memory leaks in scripting languages, right? And you can't write to memory that's not yours. In lisp, it's harder to make off-by-one mistakes than in some other languages. Java forces you to handle error conditions with checked exceptions.
Yeah, I'm going to have to try this eiffel thing.
For all of those hearing about Eiffel for the first time. Back in the mid 80's, when the OO paradigm was first starting to gain traction (but it wasn't obvious that C++ would become the first mainstream object-oriented language) there were debates about whether the big OO language of the future would be C++, Smalltalk, or Eiffel.
If you want contract programming, but prefer C++ style syntax to Eiffel style, try the D programming language.
http://www.digitalmars.com/d/
1) Designed for native compilation. Compare it vs. Common Lisp and C++, not the modern enterprise toys.
2) Design-by-contract. Think of it as taking type-safety squared. Just like static-typed languages are more verbose but compile-time safer than dynamic-type languages (don't argue static/dynamic, you know damn well what I mean), design-by-contract is moreso.
3) Extremely generic-oriented and had generics designed in, as opposed to the after-the-fact hacks that appeared in C++, Java, and C#. And it has multiple inheritence.
Plus, I'm also very disappointed by all the languages you listed being non-generic Algol family languages. That's like asking someone "what's your favourite beverage - Coke, Pepsi, or RC Cola?" The example languages you listed are all of the same line of descent (although Ruby pulls more from SmallTalk than the others). Plus, most of the languages you mentioned are just a mishmash of features. Eiffel is more like "Lisp" in the mentality of design, which is "keep the language simple but make it expressive enough that complex concepts can be expressed simply anyways".
Such languages tend to be much more intelligently structured, safe, and extendable, but also fall short in legibility.
Basically it is similar to Ada and C++, with a little functional programming thrown in. The problem is that most attempts to make C++ "safer" have focussed on ripping out language features like multiple inheritence and templates that made it "too complicated" but were important, useful features. Eiffel takes the alternate approach - instead of paring down the featureset, it pares down the language while actually expanding the featureset.
And if you've never coded with generics and still just typecast your container data: get out of my sight you disgusting hacker. OOP without generics is like a car that only turns left - sure you can go right, just do three lefts.
From the product web site http://www.eiffel.com/products/studio/, it looks like Eiffel targets .NET. I know in the past Eiffel could emit C code which was them compiled. I'm not sure if the .NET "integration" is only in Windows or if it uses Mono on linux for that. I'm not able to determine this from a cursury glance at their web site.
In any event, I welcome this move. I'm definitely adding Eiffel to my list of languages to learn. It is a neat language that has a lot of advantages. In fact at one time HP was using it for developing printer firmware since it was less error-prone and increased their productivity dramatically over using just C. Certainly as our apps increase in complexity we need tools that allow things like design-by-contract in order to save us from the inevidable bugs.
It also has a well-designed, usable multiple inheritance mechanism. It allows removing name clashes by letting the programmer to rename features. It is such a simple a neat idea that I cannot understand why it is not present in more languages.
Correct me if I'm wrong, but from viewing some of the presentation, especially DBC, it sounds like a more strict implementation of C header files. The compilation refuses to execute a routine unless the implementation explicitly follows the definition.
"ECMAEiffel".
That's a death knell if ever I heard one.
Design by contract is essentially putting assertions into your code. You typically insert these as pre- and post-conditions. For example part of the contract for a real square root function might be the precondition that the argument is greater than or equal to zero. In C assertions generally cause program failure if they turn out to be false. And the support in C is pretty crude, simply a macro called assert(). In Eiffel this stuff is built right into the language and the language offers graceful recovery in the event that one of these conditions has failed. Most people I know who have used Eiffel hate these features. I've never used it so I reserve judgement.
Now you too can make up technobabble to impress people with your knowledge of contracts.
"The White House is not an intelligence-gathering agency," -- Scott McClellan, Whitehouse spokesman.
Oh yeah, thats right. My college used it in it's introductory CS classes. It was my first real language experience and it almost drove me from the field. I can't tell you why really but it was just too much. I struggled until I we got to C++ and then, well everything made sense. That seem crazy? It sure did to me. Looking at it now it seems rather wordy. I should download it and get to know it, if only to conquer something that frustrated me so much.
Sure, Digg can deliver some news faster, but then I prefer the depth of the userbase on Slashdot, the moderation system, the fact that it is frequented by more than just 16 year olds and of course its lovely green.
If Digg is what you want, Digg is what you should get, so piss off.
". . .the biggest thing Eiffel has going for it is raw speed."
Wikipedia's entry gives the secret to this raw speed:
"Eiffel is generally closely connected to C: three of the four Eiffel compilers output no object or machine code, but only C source code as an intermediate language, to submit to a C compiler, for optimizing and portability."
You can do design by contract in any language. You can do the same thing in any other language but you have to always remember to call super methods when you are doing your pre and post assertions otherwise your subclasses won't adhere to the contract. What Eiffel gives you are contracts as part of the language.
Disclosure: I haven't used Eiffel since about 1998 when my undergrad degree software engineering courses were taught using the language, so I'm not complete current on the language.
These posts express my own personal views, not those of my employer
Eiffel is kind of dated. Even its successor, Sather, didn't catch on, even though Sather has been out under the GPL since 1999. There are some great ideas in there, but the language was a bit too clunky. It's kind of like Ada and Modula in that respect; the concepts are sound but the syntax is too bulky to become popular.
On the other hand, all the languages listed here protect against buffer overflows without requiring an interpretive run-time system.
Please mod parent up! That is all.
I'm done with sigs. Sigs are lame.
>Plus, I'm also very disappointed by all the languages you listed being non-generic Algol family languages.
I disagree here - GP listed Ruby, which definitely is not in the Algol family - having a syntax that doesn't look like Lisp/ML/Haskell does not mean it cannot be functional.
Every Ruby statement is also an expression that has a return value. It basically means you can (and a lot of people do) use Ruby as a functional language.
Are you at the University of Saskatchewan? I'm taking a class from Prof Cheston and he wrote the textbook....its everything about Eiffel, and I hate it.
-------
Support Indy Music. Buy
I happed to take a course that taught among other things how to program in Eiffel, and the contract principle is in fact very nice. When you write a contract, you define exactly what you want want to pass to a feature.. err... function and exactly what you want to get from it. I know, every good programmer has to write down specification anyway, may be even in clever mathematical form. Still, contracting scheme helps to avoid lots of stupid errors, and when you are sure you're done, just turn off contract checking in the compiler. After some time, I started thinking in terms of contracts, and it would be great feature in next revision of C++. I'm writing this because there are many features that I do not like in eiffel, and in EiffelStudio (you can download free version for most of the platforms). In general, the language is very restrictive, and allows no freedom whatsoever - you can use classes, only classes and nothing but classes and you will use them exactly the way it's creators want you to, e.g. No break statements. Also it is slow - when developing applications - eiffel code is translated to C, then C code is compiled. So on average you'd get 80 Mbyte project for every 500K of code. And finally Eiffel has arcane Pascale-like syntax, it could've been much simpler. Adding insult to injury, EiffelStudio, the IDE if you ever try to program in eifffel(I know, RTFA), is very annoying, if you made a mistake in the code and attempted to save it, studio will make a pop up window informing you about it, if you try to look inside anther class while having an error inside the current one, the studio will abruptly return you to the line where you made a mistake, even if you need to switch to a different class to fix the error. It, also, doesn't have context menu, the right mouse button is used for other purposes, e.g. view single function from other viewer inside the studio in a debug mode (don't ask me why), or moving around the code - double right click on class declaration will move you to the class definition, this actually is really nice, except, why makers of eiffel never thought about middle mouse button?! Though, debugger is nice. I think Eiffel is 1984 of programming languages, and an attempt to popularize it would not help, anyhow free version of EiffelStudio has been around a while, and it is not like anyone would suddenly begin to develop many applications using it.
"It's kind of like Ada and Modula in that respect; the concepts are sound but the syntax is too bulky to become popular."
Unfortunately when a programmer tosses around the word "syntax". What they really mean is "Hey this isn't C/C++"! Even Python's whitespaces gets chewed up, and spat out. That's partially why Java has done as well as it has with it's "feels like" syntax.
I'd like to point out statically typed languages don't have to be more verbose. With type inference, they can be as terse as dynamically typed languages. See o'caml, haskell, etc.
Well Java is from a different generation, its harder to compare. But C++ compiles native. Most early Eiffels compiled to C, and Meyers explicitly consider C to be the "p-code" for Eiffel (15.1.2). In 15.4.2 he outlines the higher level calling mechanism. I don't generally respond to ACs but you need to defend this point a little better.
"And if you've never coded with generics and still just typecast your container data: get out of my sight you disgusting hacker. OOP without generics is like a car that only turns left - sure you can go right, just do three lefts."
True hacker just make 3/4th circle to left to make single right turn. Hence 3/4 is more efficient than 1...
You bastard, you made me feel sad...
"Don't let fools fool you. They are the clever ones."
An awful lot of computer science courses pick weird arse languages precisely because they act as a filter - an attempt to get those who either can't handle anything more complex than C or the favoured toy language du jour, or can't accept that the world's an exciting enough place for there to be room for more than those languages, to drop out. My uni, for example, taught Scheme as the first language, followed by Ada as the second, and didn't even officially teach C - if a course needed it, you were expected to pick it up yourself.
Sure, at the time I hated Ada (couldn't hate Scheme - it was just far, far too elegant). Now, after a few years of seeing what your standard C programmer churns out, I wish fervently and deeply that they were all forced to write in SPARK Ada, just so their awful code wouldn't be foisted on the world.
The benefits of Design by Contract include the following:
Ah, and this has been demonstrated how? Programming language designers like to dream about how their features are going to lead to fewer bugs, lower costs, and all that, but there is almost no acceptable experimental data to support their claims.
Is this fully open source? I.e., do you get the entire sources to EiffelStudio and all the libraries, compiler, and runtime?
Or is this one of those pseudo-open source releases, in which a large body of code gets released under an open source license, but in order to compile and run it, you need proprietary tools from the same vendor that released the code?
Shouldn't you be able to write a compiler for any language in any turing-complete language with file I/O and access to enough memory, provided it's possible to write a compiler for that language at all (which obviously is true for Eiffel)?
The Tao of math: The numbers you can count are not the real numbers.
As much as it was groundbreaking about 10-15 years ago, nowadays Eiffel is pretty much dead, same goes for Oberon (which was not even groundbreaking, sorry Nicolas Wirth, but I think it is the truth that a language is not groundbreaking if you just rehash the language = os concepts of the early smalltalks but not the geniality behind of having its minimalism, and only going oo the half way, and then nail the Pascal syntax on top of it. Anyway back to Eiffel, it really was groundbreaking by introducing design by contract, but it is a dead fish in the water nowadays, like so many languages before it and afterwards, which were declared as the next big thing when they came out. Maybe it one day will see a revival like Ruby did recently, but for now, forget it :-(
Have I missed any?
By the way, here are some useful links related to the newly-open-sourced EiffelStudio, and you can find additional Eiffel libraries and tools at EiffelZone.
Paid Q&A/Research
...how things change. for BM's earlier position on free software see The Ethics of Free Software . For a decent eiffel compiler (last time i tried, ISE's sucked hard. funny that, for a company made by the number one authority on software engineering), try SmallEiffel. and don't take me wrong, i think Object-oriented Software Construction is one of the great classics of computer science. but there is a gap between theory and practice.
- OSS? Check.
..., looks like the Eiffel bunch has me looking into their favourite PL with some quality time.
- Avantgarde Language known for neat concepts, hippness and good results? Check.
- Compiled rather than the bazillion interpreted PLs I've got allready (Python, Perl, PHP, etc...)? Check.
- No C/C++ suckage even though it's a compiled language? Check.
- Comes with neat OSS IDE now costing 0 as opposed to the 4900$ last week? Check.
- Zero fuss hassle free cross-plattform deving? Check.
- Zero fuss ultra hassle free cross-plattform GUI kit? Dunno... gotta find that out.
Mmmmh
We suffer more in our imagination than in reality. - Seneca
I've been using Eiffel - and EiffelStudio - a bit lately. Eiffel seems like a decent enough language, though it's most attractive for writing libraries etc, just where its less than fantastic interface with other languages makes it less useful. If I didn't feel some bizarre need to have portable code (what a silly idea!) I'd be interested in using it on the .NET CLR ... but that's not viable for me at present.
EiffelStudio is nowhere near as nice as Eiffel. The IDE is clunky and in some ways quite antiquated. A good gcc Eiffel backend (NOT intermediate-C based like SmartEiffel) or a standalone compiler combined with good integration into Eclipse, VC++, and so on would be much more interesting IMO. Add the ability to generate interface stubs for C, C++, and Java, and it'd actually start to look attractive.
Right now, though, Eiffel looks like the kind of language you use in isolated projects where you don't need to use too many outside componenents and don't expect to have others basing work on your code. Does that sort of project still even exist?
I mean, one could extend this to just about anything, though I'm curious as to how you would describe this technique in non-CS specific terms. Would you consider the relevant variables that the learning context be one that is less forgiving than the typical RL one? That it be more abstract? Would you consider obscurity itself a good thing as it avoids distraction by "mere" commercial applications or tool-specific hacks?
-Rustin
Data is the lever, rigor the fulcrum, brains the force that drives it all.
Not too mention:
* Best support of any OO language i've seen for multiple inheritance, especially when dealing with repeated inheritance problems
* Fantastic CASE tool for viewing class heirarchy and architecture.
Eiffel is more like "Lisp" in the mentality of design, which is "keep the language simple but make it expressive enough that complex concepts can be expressed simply anyways".
More than what? Ruby? Parent did list that...
Ruby is a very simple language, with quite simple syntax, and includes standard libraries that provide enough features that you think they're built into the language itself. Open up a Ruby shell, and it's as easy to hack around in as Perl, yet often looks cleaner than Python -- nice syntactic sugar. But dig deeper, and you find that the internals of just about any powerful idea are as transparent as they are in Perl.
Object-orientedness, for instance. Perl implements object-orientedness in such a way that if you want to pretend you've got properties of an object, the syntax for that will pretty much constantly be rubbing in your face that your object is, in fact, a blessed reference to a hash.
While Ruby does implement properties as some sort of hash, the syntax hides this from you unless you're looking for it. This is a good thing -- I can do at least as many cool tricks as I can do in Perl, but if I just want to do some mundane OOP, it will look and feel like Java/C++/Python, only less verbose and more readable.
And here, let me fix this one for you...
Statically typed OOP without generics is like a car that only turns left...
IMHO, statically typed languages cause more headaches than they solve. Generics remove some of the limitations of static typing, in very restrictive ways. It's like intentionally paralyzing yourself from the waist down, then bragging about your wheelchair. It may be insensitive to say this, but I'd rather have my legs than your wheelchair any day, even if it's theoretically easier for me to trip and fall.
Don't thank God, thank a doctor!
Of 6mb "hello world" executeables while using eiffel in university. Sigh
No one notes it here, but besides the Eiffel Compiler (anyways, we have had a GPL eiffel compiler for about 10 years), the guys at Eiffel.com are releasing not just the compiler, but also one of the most complete IDEs you can find under a Free license.
It has a project editor, integrated debugger, including browsing the object structure in run time, a class browser, an integrated documentation generator, and you can write your designs in BON (a graphical notation, UML-style) and flip back and forth from diagrams to code seamlessly. You probably can compare it pretty well to Eclipse, but much lighter (it's written in Eiffel instead of Java).
Even if you are not planning to use Eiffel, I would love to see that GPL IDE being used for other languages...
In this situation I prefer to throw an Exception. I've written the method to return a float but I've been asked to evaluate a negative number. This does not evaluate to a float. My 'contract' is the mathematical definition of SQRT, not some arbitrary business requirement that I first test the passed-in value. By writing the method to throw an Exception I'm signaling to the consumer (the *real* business requirement - the Controller in MVC) that I do not know how to do what I've been asked to do so I must ask you to please determine your own next step.
This requires a rational Exception hierarchy and to facilitate I used custom Exceptions that added Item and Severity tracking. The idea for this was push back to the consumer with a label for the processing step that was exceptional, and a relative measure of it's likelihood of recovery. I/O to database, for example, may very well succeed if retried, but a primary key issue would not.
These were used extensively where DTO's (Data Transport Object) provided the data on which the method acted. Yes, there was quite a bit of verification code in the methods to assure the DTO was complete (especially with Weblogic XMLObjects), and that might be simpler to do given a contractual-based language.
So my question is: isn't these the same thing?
In any case, in practice, in *most* cases, handling an incomplete DTO (contractual) or some kind of processing failure (procedural) really meant the same thing to my consumer (eg. we failed to do what you asked). And more often than not it punted back to its own consumer! And it may be noted that my consumer often threw a more generic form of the custom Exception. In cases where the interface design was more mature, though, it was expressively possible to map these against probable actions in my consumer.
Is this sort of thing handled well in Eiffel?
Well, you opened this can of worms; so I'll close it. And by the way, I do not "hate America". On the contrary, I very much like and admire America, and almost all Americans. Which is why it depresses me so much when they write things like your last article.
h tml
"I hate everything french for all the basic reasons most people hate the french which are all more or less deeply rooted in their insurmountable arrogance".
Yeah, right. Those arrogant French, thinking they are God's chosen people! Don't they know that *Americans* are God's chosen people?
And they're a real bunch of chicken-livered, gutless surrender monkeys, too - right from Charles Martel who defeated the Arabs at the battle of Tours in 732 (preventing Europe from becoming a Muslim continent), to the heroes of the Resistance who fought on against one of the most viciously efficient repressions the world has ever known. By way of Joan of Arc, Napoleon and his soldiers who conquered Europe in about ten years (on foot), the Foreign Legion and many, many others. Not to mention Lafayette -
"In 1777, Lafayette purchased a ship, and with a crew of adventurers set sail for America to fight in the revolution against the British. Lafayette joined the ranks as a major general and was assigned to the staff of George Washington. He served with distinction, leading American forces to several victories. On a return visit to France in 1779 Lafayette persuaded the French government to send aid to the Americans. After the British surrender at Yorktown, Lafayette returned home to Paris. He had become a hero to the new nation. At home he cooperated closely with Ambassadors Benjamin Franklin, and then Thomas Jefferson in behalf of American interests". http://www.lucidcafe.com/library/95sep/lafayette.
As for the "surrender" part, in September 1939 Britain and France declared war on Germany because it had invaded Poland. The USA did nothing. In 1940 Germany invaded France, launching one of the most inspired, unexpected, and vigorous surprise attacks in history. This defeated the large British and French armies, and compelled France to surrender. The USA still did nothing. At that time the US army (and other armed forces) were pathetic remnants. It took a full two years to get them up to a level at which the administration dared to enter the war. Had the USA been where France was in 1940 - right next to Germany, with a long land border - the Wehrmacht would have walked in, pulverised the US armed forces, and taken over the country with contemptuous ease. (Ask any competent American officer if you doubt this). With the Atlantic Ocean in the way, nearly two and a half extra years to get ready, about three times the population of either France or Germany, and far greater natural and industrial resources than both put together, the USA finally entered the war - but only when it was forced to because Hitler declared war on it.
As for "rescuing" France, don't be ridiculous. The USA was at war with Germany; to win, it had to invade Germany; and the only reasonable path lay through France. Taking credit for having liberated Europe, when the only reason the USA was even in the war was because the dictatorships attacked it, is the sheerest hypocrisy.
At least the French had the guts to take on Nazi Germany. The USA, which didn't dare take on Hitler, was happy to attack Saddam Hussein - a third-rate copy of Stalin, with a large army of disaffected, poorly-trained troops equipped with obsolete Soviet weapons. About as brave as a farmer going out with a combine harvester to cut a field of wheat.
I am sure that there are many other solipsists out there.
Acutally Eiffelsoft has some great case studies from companies like HP that back up their claims.
There are 4 boxes to use in the defense of liberty: soap, ballot, jury, ammo. Use in that order. Starting now.
Is this a good time to plug my open source Eiffel project secom?
Secom is an object-oriented library of portable, reusable components for communicating over serial devices. With secom you can develop an application that will compile and execute on Posix and Windows, with little to no changes to the source code.
Check it out
Check out the documentation
Brian
n this situation I prefer to throw an Exception. I've written the method to return a float but I've been asked to evaluate a negative number. This does not evaluate to a float.
My example is a little simple to make it clear why this isn't such a good idea. Basically using your method (called function checks) you are often testing the same criteria N times. Lets say you have a function like:
A which will end up calling B which end up calling C which will end up calling D. D has criteria (x) shared by C,B and A. Then:
calling function checks (x), A checks (x), B checks (x), C checks (x), D checks (x). Now if its something like
x = (y >=0) then that's pretty cheap. But lets say it was much more complicated. Lets say for example a Neural Net with a million elements where you need to make sure the points are convex in 25,000 dimensional space.
That is if you have to test this as a function without global knowledge you have to:
1) convert each point into a 25k element vector
2) take all ordered triples of points (10^18) of them
3) do a simple computation on each triple of vectors. Something like 400k simple math operations. Total time on a modern pentium IV should work out a over a millisecond per triple which works out to a little over 30,000 years. Maybe you can improve and cut it to 1000 years if you are very good at assembly.
conversely if you check the points as they come in and can assure A,B,C and D of that you skip it. Otherwise you have to do this test over and over and over every-time you call function A. The situation doesn't have to be nearly as bas as the neural net for it not to be a good idea to be checking this over and over and over.
My 'contract' is the mathematical definition of SQRT,
Which mathematical definition? For example is (-3) a valid sqrt for 9? If the calling function only allows for the positive sqrt and the sqrt function returns either then you'll get flagged and know to call absolute value?
These were used extensively where DTO's (Data Transport Object) provided the data on which the method acted. Yes, there was quite a bit of verification code in the methods to assure the DTO was complete (especially with Weblogic XMLObjects), and that might be simpler to do given a contractual-based language.So my question is: isn't these the same thing?
No in the contract based language your weblogic routine would specify what a complete DTO meant and the caller would be responsible for making sure it met your criteria. You would never check. Eiffel would assume the lower level code between client and server checks to make sure the transport package is complete. That is you wouldn't have code dealing with network (did the database I/O complete) and code dealing with business logic at the same level. The database code would assure a complete transmission and the form code would know the original DTO was perfect so....
In addition to integrating the design-by-contract paradigm into the language, Eiffel for .NET is also the only .NET language that supports multiple inheritance via compiler-generated interface implementation.
Tech, life, family, faith: Give me a visit
Are we sure that this is being released under the GPL? I don't see any mention of the GPL on the press release or the product page. According to the licensing page (http://www.eiffel.com/licensing/licensing.html) it is only free if you agree to release all software written using it under a free license. If you intend to develop any commercial software, you still have to buy the commercial version. That doesn't sounds at all like the GPL to me. GCC certainly doesn't have that restriction. Moreover the GPL doesn't allow adding additional restrictions to the license either, so I don't think he has any ground to say that you can only distribute it under the GPL if you only use it to write free software.
Not that I am opposed to the guy who wrote the software choosing whatever licensing model he sees fit, but let's not be misleading about this announcement, shall we?
If I don't put anything here, will anyone recognize me anymore?
More Java programmers need to be exposed to Eiffel. I constantly interview Java programmers that can't tell me why Gosling added interfaces to Java. I virtually always get the answer "because they allow multiple inheritance". Then I ask them, "why didn't Gosling just add multiple inheritance to the class hierarchy and be done with it?". They can't answer that question.
Gosling added interfaces to Java because they represent abstract data types (ADTs)! The classes are implementations of the ADT behavior and are known as concrete data types (CDTs). They are an approximation of the abstract data types. For example, you can't represent an infinite amount of integers in Java. You can only represent -2^32 to 2^32. You can't have a stack of infinite size either. You can only approximate the "infinite stack model" in Java since you have limited memory.
Why is everything in an interface public, static, and final? Because you can't instantiate it and it is a specification of behavior! Gosling doesn't like multiple inheritance in the class hierarchy because of diamond inheritance (which he discusses in the Java book) but he allows it in the interface hierarchy because you are specifying behavior and there is no code to conflict. How do you connect the class tree and the interface directed acyclic graph hierarchy? With the "implements" keyword, a keyword for specifying that an implementation fulfills and ADTs contract.
Even Java programmers need to read the Eiffel book. They can't even program in Java correctly.
Tell you what I agree wholeheartedly with what you're saying but I guess that's mainly because I'm not anglo at all, nor really much of a patriot for that matter. Now let's take a look at what you got here: Yeah, right. Those arrogant French, thinking they are God's chosen people! Don't they know that *Americans* are God's chosen people? Actually as we all know it's the jews who think they're "God's chosen people". As far as the French are concerned, it is mainly because they still believe they're in the same league with anglo culture. However, with the exception of maybe Africa and an island or two in the southern pacific, english and spanish will see you through most of the world and we're that is not spoken your safest bet is russian.
... About as brave as a farmer going out with a combine harvester to cut a field of wheat.
You're right. They're a bunch of wieners.
And they a real bunch of chicken-livered... Here let me condense this to: Karl Martell, La Resistance, Joan of Arc, Napolean and the foreign legion. An odd mix of french valor and scum you have here. With the exception of Martell (who for all purposes counts as a German) we have people here history would have done well without. Without Joan of Arc we wouldn't have this discussion here as you would most likely speak English and La Resistance is really mostly a bunch of tales invented post-war to take off the minds of people of the unsavory fact that most French eagerly collaborated with the Germans. Napoleon marched war all over Europe and the Foreign Legion are a bunch of criminals doing France's dirty work in exchange for protection from prosecution (They say otherwise, I know). As far as bravery is concerned, in a war bravery has little to do with language. There were just as many brave SS-Troopers as there were brave allied troops.
In 1777, Lafayette purchased a ship, and with a crew of adventurers set sail for America to fight in the revolution against the British. In the same conflict, thousands of more or less able-bodied Hessians were forced into uniform and sold to the british as Kanonenfutter - cannon fodder. Most of these people however stayed in the new world and thus "Hess" is a very common name in Pennsylvania. Nowadays the descendants of these people all speak english and think nothing of it. I don't think the same thing could be said of Lafayette's people had they chosen to stay.
As for the "surrender" part,
In the mid 1980s (really until about 1993) floating point operations were very expensive. This choice seems stupid now that floats are first class objects. But most languages today have vector operations in libraries even though most modern processors can handle them natively.
I prefer the depth of the userbase on Slashdot, the moderation system, the fact that it is frequented by more than just 16 year olds and of course its lovely green.
Laughing out loud!
The depth of the user base? Oh yes, the deep levels of trolls, flamebait posters, and GNAA members really add to the community here.
The moderation system? Abused by those same trolls and idiots; anyone with a dissenting view is modded off the page.
More than just 16 year olds? Ha, you've got me rolling on the floor now...
I'm with the grandparent. Digg rocks, slashdot is dead.
Tech, life, family, faith: Give me a visit
And if you work at it a little longer, you'll gain an even huger insight into how poorly strict, static typechecking gets along with polymorphism, and object oriented design in general.
Example: In OCaml, the only way to "downcast" an object to one of its subclasses is to call a virtual function which is implemented in each of its subclasses to throw a different exception, and to pattern match against the different exceptions.
So yeah, I wasn't impressed. There's a reason Smalltalk is, well, Smalltalk.
It can be GPL without allowing use to produce non-free software, as AdaCore's GPL releases of GNAT are. The trick is that the runtime library has a license, and is needed to run any generated code. If that library is GPL, then you can't use generated code other than in GPL products. You *could* write a replacement runtime library, and then use the GPL-licensed compiler for non-free software -- but normally that's too much work.
Right. First you call your neighbor and tell him that you're coming over to smash his car, kill his dog, rape his wife and children and then rob him of anything you see fit taking and then finally to burn down his house and kill him and his family with a huge knife. Then you go into the garage and spend two hours looking for that bush knife you want to use on him... but to your surprise of the sudden there is this click noise and you drop everything you're holding in your hands because your neighbor is standing behind you with a shotgun in his hands and a grim look in his face.
Last night I downloaded and installed Eiffle Studio 5.7 and wrote my first Hello World program in Eiffle. After careful consideration, I have decided to concentrate on developing my expertise using this programming language. It is a losing proposition to base your expertise on a common programming language or commonplace technology. I think I've wasted my time, effort, and genuis on developing solutions only to see my work taken over by some less experienced and talented developers because the company "has the software" and doesn't feel they need my expertise. Frequently this has disasterous results and significantly impacts work efficiency but management clearly does not value technical expertise or experience.
Having read that book a few years ago, I can agree that it is an authoritative and exhaustive description of OO software construction. However it must rank as the dullest book on software ever written. BM has no idea about how to write to keep the reader reading and his vitriolic attacks on C++ and Java in the book, along with his extensive explanation of design by contract, show the book should be called 'Why Eiffel is the only true OO language' If you haven't read it, don't bother unless you suffer from insomnia.
Dum spiro spero
"...one of the most inspired, unexpected, and vigorous surprise attacks in history..."
Oh, I see. You are saying that after declaring war, the French should have been expecting to be attacked. Well, they were. And the attack came in, just as expected: through the Netherlands and Belgium, just as in WW1. Then the "inspired, unexpected, and vigorous surprise attack" arrived - a left hook through the Ardennes, country that nobody had thought passable for armoured vehicles. Moreover, it was pressed home with tremendous energy and speed, although even the German high command kept telling the lead elements to stop and wait for their infantry to catch up. The Ardennes attack was almost entirely the brainchild of von Manstein, although Hitler was quick to grab the credit when it succeeded. I think most experts would agree that any army in the world, as of 1940, would have been defeated in the place of the French and British. Most of them, for a start, were simply too weak to have any chance of resisting. The British and French weren't too weak, but they were outmanoeuvred. German strategy and tactics were generally superior to those of all their enemies throughout WW2. For instance, to win the critical battle of El Alamein, Montgomery needed something like a 10-1 superiority in tanks and not much less in infantry.
My point was that France at least declared war on Germany. The failure to invade right away was probably a serious strategic blunder. But at least the French government had the moral strength to declare war, rather than gazing in the opposite direction, filing its nails and pretending nothing was happening.
I am sure that there are many other solipsists out there.
Wow. After my initial post, I really didn't want to look at any replies. I was sure I would be buried by a torrent of abuse and unjustified rebuttals. Instead, I got two well-written replies full of sensible, factual, reasoned criticism (and a short one with a logical comment). It really reinforces my faith in Slashdot!
o cument_page71.htm. Where you can also read: 'In the 1940 Presidential election campaign, Roosevelt promised to keep America out of the war. He stated, "I have said this before, but I shall say it again and again and again; your boys are not going to be sent into any foreign wars."'
gd23ka, you did home in on several of the weaker points in my rant. Truth to tell, there are precious few nations or peoples that haven't, at some stage at least, believed they were "the chosen people". Tentatively, I think the Portuguese might be an exception - I know they set up a colonial empire, but they have always been fairly level-headed and modest. What I was trying to express was my sense of irony that an American would find French people annoyingly arrogant. (Pots and kettles). "Karl Martell" - a very neat way of reminding me that France and Germany had not even begun to emerge as nations back then. (This is a problem Americans don't face, as their nation only dates back 230 years). "Valor and scum" is fair comment, but a universal one - show me a war hero, and half the time I'll show you a latent violent criminal.
As for AC, I have to disagree. "Ironic you bring up Nappy, who was heroic in attempting to enslave europe, while the Resistance was heroic in attempting to prevent enslaving europe". I suspect you will not see it this way, but to my eyes Napoleon's role was analogous to that of Bush, and the French Resistance analogous to the Iraqi Resistance. Heroism is heroism, regardless of the justice of the cause. Incidentally, all the generals on both sides of the American Civil War idolised Napoleon. Perhaps you think they were all wrong?
"You should also look up "Lend Lease" - the USA was actively involved with fighting the Nazis long before Dec. 7, 1941, even sinking Nazi warships". I know about Lend Lease - for example, 50 obsolete WWI destroyers, which US sailors would never have been asked to take to sea, were "given" to Britain in return for 99-year leases on British bases in the Caribbean and Newfoundland. I also know that Britain paid back the last of its war debt to the USA last year. And before you ask, here's a US source: http://www.usnews.com/usnews/documents/docpages/d
I am sure that there are many other solipsists out there.
'...I do have a hard time fighting down the loathing I have for the french and it really hits me extra hard when I look at the box they have on the commercial Eiffelstudio page which clearly looks like "La Tour Eiffel", the Eiffel Tower'.
One last (mild) remark, and then I shall drop this. Apparently you detest the sight of the Eiffel Tower; do you feel the same way about the Statue of Liberty?
I am sure that there are many other solipsists out there.
Death Penalty
When discussing topics such as the death penalty, it's important to understand the functions and needs of punishment. Punishment serves many purposes. Prisoners may be rehabilitated into functional members of society, and then let go. Prisoners may be in jail or killed in order to keep them out of the public's way. Punishments such as prisons or the death penalty may deter possible offenders from committing crimes. And finally, prisoners may be punished as a way of "getting even" with them. In terms of the death penalty, it has been shown that in areas where the death penalty is prevalent, there is a much higher rate of death-penalty-worthy crime. With capital crimes, rehabilitation isn't even on the table. Capital crimes also leave the offender away from society with either the death penalty or life in jail. The argument concerning the death penalty boils down to a question of morality. Is it moral to execute someone in response to his or her actions of murder?
The Code of Hammurabi, the rudimentary beginning of all laws, stated, "If a man put out the eye of another man, his eye shall be put out." While the actual laws varied a bit (just below that, it states that if a man puts out the eye of a freed-man, they only have to pay a small amount of gold), this law set an important precedent in that the punishment must fit the crime. It's more colloquially referred to as "an eye for an eye". In fact, this concept strongly resembles what we were taught about morality in Kindergarten. The Golden Rule tells us to treat others as we would like to be treated. It could be argued that the death penalty is a reflection of this culture. But is the death penalty truly equal to the crime that was committed?
The simple fact is, very few people murder someone for absolutely no reason. People might murder someone for cheating on them. People might murder someone in their self-defense, or in defense of their child. People might murder someone for failing to pay them protection money. People might murder someone for murdering someone else. While it certainly seems that citizens might be more sympathetic to reasons for murder, there is a definite moral line-in-the-sand that's crossed in determining what deserves death.
Etiquette is etiquette. He kills his mother but he can't wear grey trousers.
Meyer transmits a strong sense of intellectual excitement and the book is very fascinating. The subject is about the design of the perfect/ideal O-O programming language. He describes every choice balancing pragmatic and academic considerations and the result is one of the best designed programming language.
The book is useful not only for the final result, but also in the rational way used to solve the problem, that can be adopted in many other situation.
You were going to drop this before and so was I but regarding the Statue of Liberty, that doesn't register emotionally with me even though I know of its french origins. I think Archtech, you're confusing past grandeur and exploits with the ingrained pettiness of the average french(wo)man I am talking about. Here's an anecdote to give you to think about.
I don't speak french. Un petit peux mais but that is all. Back when I was twenty me and a friend of mine would put on a backpack get on a train and go places. We were on our way to England and if you're travelling to England by rail you, the easiest way to go is the connection Calais - Dover. So we arrived at Paris Gare du Nord (something or rather) and had maybe twenty minutes left before our train left for Calais. Now the thing about this railway station is once you get off the subway you do have to find your way to the trains. Usually in Germany they have pictograms all over the place so you don't need to know a single word of German to find your way to basic facilities but oh no, not the french and back then I didn't know for certain what train meant in their language.
So we tried to ask people. I would go "Excuse me, do you speak English?" and they would all respond with "Non! Non! Non!, I would then ask "Sprechen Sie Deutsch?" and they would again go "Non! Non! Non!". Not knowing the word for train but remembering something like "Chemin der Fer" which sounded plausible to me I asked them in french, "Ou sont les chemin de fer?" and they would look stupidly at me and say something like "La bas! La bas!" (over there! over there!). I repeated this at least 15 times every time with almost exactly the same result and this was in a hot summer and I was sweating like an animal wearing a heavy backpack and we did not make that train that day. However the real kicker is, arriving at the street level I asked a woman again the same questions.. "Do you speak English", she: "NON!". I then asked her if she spoke German and she went "NON!" again, this time even louder. With a sigh I asked her one more time in french for the "Chemin de Fer" and then all of the sudden this woman DID SPEAK GERMAN. Even though she had an accent she needed to work on she was fluent in German! She told me that "Chemin de Fer means Railway Company but I need to ask for the Grand Lignes to get to the trains".
I'm not alone with this. It appears the french are universally hated. Don't ask me how I got there or on what business but a couple of years ago me and a colleague of mine stopped at a gas station on I80 somewhere in Illinois. We went into the "restaurant" and we were talking to each other in German. All of the sudden I see this rapid movement to my left and this huge trucker jumps out of his chair dropping that chair to the floor and approaches us with his fists clenched. He wasn't pretending most obviously he wasn't joking. "Don't tell me you're french!" he roared, "Don't tell me you're french!". I just looked at him and thought of the irony that now I was going to get the shit beat out of me for the french. Then I got a little angry myself over that and told him, "We're GERMAN! DEUTSCHE! GERMANS! Wir sind Deutsche, verstanden! GERMANS! GERMANS!". After that they made us sit at their table and I had the worst Spaghetti Bolognese you could imagine. While I was shoving that Dreck down into my system the truckers told me they had to go through the Quebec to get to Ontario which is why they really don't appreciate to see any froggies south of the border.
I could go on and on and maybe even tell you about M. Voisin, the man I had to work with in Montreal who didn't have his intestines under control and would fart in front of me and make jokes about "Les Boches!" (derogatory for German) the nekulturny paysan thinking I couldn't understand what he was saying but I guess I have made my point. I get around a LOT in the world I have to say and NOWHERE have I ever been more insulted and abused than in La France and Quebec. Really for the most part people reciprocate friendliness and are
"Case studies" aren't acceptable experimental data.
I think you're a pretty okay guy too... even though you're most likely one of those froggies. Tell you what, there are always exceptions and exceptions made so you're now listed in my book of cool frogs. You're not on page one though, it's got a couple of entries already.
"...even though you're most likely one of those froggies".
British, actually, old man.
I am sure that there are many other solipsists out there.
Journal 1
Society of Friends: 2 hours
On Saturday, the day before I went over to the Society of Friends, I went to the grocery store in order to get things to make dishes for the potluck lunch. I ended up making two dishes. The vegan dish was a three bean salad, with diced onions. The vegetarian one was more complicated. I boiled shells, and cut up cherry tomatoes, onions, and peppers. When the shells were done, I added mayonnaise, and garlic salt. I tossed the entire thing, and had my second dish. Seeing my two dishes side by side, I decided to eat a large breakfast before leaving for the service.
When I arrived in Worcester for the Society of Friends meeting, Jesse and I had brought food, and yard work supplies. Matt, our contact, met us inside the house. He briefly went over some of the Quaker philosophy and then led us to a room where the service was to take place. This was a traditional unprogrammed worship. Jesse and I were in a room with about 25 other people, and we all bowed our head in silence. The concept of an unprogrammed worship is that when anyone is moved to start a sermon, they can -anyone who is worshipping. Sometimes lots of people will talk, and sometimes they go the entire hour in silence. In this particular example, it was 30 minutes before someone spoke up.
The woman who spoke up talked about the newly translated Chronicles of Judas, and how it conflicts with the gospel. She said that in an article she was reading, Jesus laughs in the Chronicle, and that's when she realized that he never laughs once during the gospel. She explains how she believes that it's important to realize that Jesus had a sense of humor, and that's one of the main stems of his ability to forgive.
After the worship, we all shook hands and introduced ourselves. I introduced myself and explained our project. Coincidently, there was a girl from Clark University there as well, who was there for her Peace Studies class. The potluck was eaten, and everyone was very kind and gentle. I told Jesse I wasn't used to amount of compassion, coming from Nashua High and Elm Street.
After the potluck, Jesse and I went out to the back and started cleaning up the yard. We picked up twigs, sticks, and branches that had fallen over the fall and winter, and we picked up the various pieces of trash that had blown about.
Etiquette is etiquette. He kills his mother but he can't wear grey trousers.