That is, according to Embarcadero’s “Chief Evangelist”. I don’t know how else to interpret his claim that the Delphi compiler produces 5MB+ of executable code per line of written code*2.
Of course, this isn’t what he means but it’s a conclusion that is just as valid as the initial proposition – that his app consists of “one line of code” at all.
Intelligent developers are fully aware that behind that one line of code lie hundreds if not thousands upon thousands of lines of framework code all invoked into action by that innocuous one line. Otherwise of course every single language and development tool could make the same or significantly similar claim, simply by conveniently ignoring all of that pre-written code behind the scenes.
Only an idiot would swallow the marketing spin – for it is certainly not a technical claim of any credibility – that his “application” consists of “one line of code”. And only an idiot would think such an obviously nonsensical claim would carry any weight with an intelligent audience.
Which leads to the uncomfortable conclusion that either David I is an idiot or he is working from the premise that his audience are idiots.
The (ever increasing) body of evidence strongly suggests the latter, but that in itself should be offensive to those who might consider themselves part of that audience. It certainly is to me.
It might have been more interesting to see an Android Service implemented using Delphi for FireMonkey (Android Edition). Or an AppWidget.
Ah, but of course, I am forgetting…
This “true native“*3 development tool cannot do those things on the Android platform.
Oh well, perhaps best to just leave David I to parade around in the Emperor’s New Autumn/Winter Collection then, eh ? π
Footnotes
*1 – Not actually an “Official” measure. Just as the subject app is not actually a one line app. π
*2 – I don’t know if this would actually qualify as the Worlds Least Efficient Compiler, but it must be pretty close. π
*3 – “native” as used by Embarcadero means “unmanaged code”, not “native” in the sense of “fitting in perfectly”, “feeling right at home”, “availed of all rights and privileges”, “able to converse and participate efficiently and naturally with the environment” or any of the other more usefully relevant interpretations of “native” on mobile devices where platform experience is a key differentiator
Glad I use free pascal now…
Given the same code FreePascal is generating rather bulky executables as well, but that’s not the problem.
The real culprit here is not the Compiler, it’s the libraries, which not only have been getting more spaghetti, but are relying more and more on RTTI, and RTTI means the compiler can do nothing else but bundle everything and the kitchen sink, since it can’t know at compile time what you’ll really use at runtime.
Reading his blog post, I understood the distinction between him writing one line of code for the app versus him writing many lines of code. It seems that you are the one claiming that he thinks his app consists of one line of code whereas I never got that impression from what he wrote.
You “understood a distinction” that was never made, and deliberately so. The expression “one line of code” occurs no less than seven times in the post. Not once is there any mention of how much code (source or compiled) that lies behind it.
Just because you weren’t taken in doesn’t mean that there was no attempt to take you for a ride. π
I don’t see why David I had to state the obvious that there is framework and RTL code behind the scenes. Anyone that has ever used Delphi knows that the VCL and RTL are used in applications built with Delphi just as Delphi mobile apps will use elements of FireMonkey, RTL and frameworks.
I don’t see why framework code needs to be included in the post just as I don’t think that would need to be disclosed when using Oxygene with the various Java or iOS frameworks as those are deemed standard parts of that development environment.
You seem to be the one assuming that everything is some conspiracy to take intelligent people for a ride. You are the one claiming David I says the app consists of one line of code. Yet, “consists of one line of code” are your words. You have come to the conclusion that their was an “attempt” to take people for a ride so do you have any evidence of that attempt?
Really ?
Tacking on “consists of” to construct an argument that the I invented a “one line of code” claim ?
Erecting a straw man comparison with other languages ?
Invoking a “conspiracy theory” defense ?
You really are clutching at straws. π
Nice of you to answer a question with a bunch of questions instead of actually providing evidence backing up your conclusion that he is attempting to take people for a ride.
If he wrote one line of code then he wrote one line of code. Just because there are thousands of lines of code in frameworks, RTL, compiler magic, etc doesn’t change the fact that he only wrote one line of code (spread over three lines). That doesn’t change based on the programming language being used.
Interesting how you can claim specific things about the mindset and intention of David I and others when they write blog posts but those are only your claims, conclusions, guesses, delusions, theories, etc. and to me, predominantly seem to be a personal attack on the author.
They weren’t “questions” they were literary raised eyebrows at the points you were raising as deflection, a deflection which you continue now with further inventions about mindsets and intentions. There is no point engaging on such shifting sands.
I apologise however, for my “taken for a ride” comment was misplaced. I should have stuck with my original phrasing but decided it would have gone over your head. In simplifying I went too far and inadvertently and subtly changed the meaning in a way I had not intended.
So to clarify: I did not mean to suggest that David I was attempting to fool anybody, only that his post rested on the presumption that his audience were fools.
So in simplifying to avoid it going over my head, you’ve managed to make it go over your own head because you couldn’t understand the meaning of your own words. π
Now you’ve changed it from a personal attack on David I to one on me and my lack of ability to comprehend and understand what you are saying. That lends itself to more credibility of your argument and point of view – if in doubt, insult the other person.
If you wish to continue the debate you might want to respond to some of Joseph’s points ?
I’m too busy to waste any more time chasing you down the rabbit hole.
Congratulations, you win. π
>You seem to be the one assuming that everything is some
>conspiracy to take intelligent people for a ride.
Sometimes it is; other times they’ve deluded themselves.
>You are the one claiming David I says the app consists of one line
>of code. Yet, βconsists of one line of codeβ are your words.
“Delphi XE5 iOS and Android One Line of Code App” – his words. A rather misleading title. It’s about 30 lines of code.
Here’s a Python one line of code app:
sorted(set(open(‘somewords.txt’)))
That outputs a sorted list of unique words derived from the file “somewords,txt’. Note that it’s actually one line of code and not one line of code and 29 lines my IDE generated for me. I’ve got no problem with bragging that FireMonkey encapsulates functionality, leading to less code necessary for the user to write. That’s an awesome thing – it translates to higher productivity. I agree with you on that. But the post didn’t actually show us that it’s any shorter in Delphi than anything else, and also the impressive functionality – actually mapping one’s location – is being done by Google’s website, not the app itself. That makes it a rather poor example of showing off the capabilities of the framework. Any framework with a web browser should be able to do the same thing.
In fact, this is the code required to do it with C++ and Qt, per Stack Overflow:
#include
#include
int main(int argc, char** argv) {
QApplication app(argc, argv);
QWebView view;
view.show();
view.setUrl(QUrl(“http://google.com”));
return app.exec();
}
Toss in another include and a line to get the GPS coordinates and I think it would still come out to be a lot SMALLER than David’s Delphi example! And this shows once again that the only way evangelists seem to possess any more to make Delphi look code is to pretend that the competition doesn’t exist (or to be genuinely ignorant of it). So yes, sometimes they seek to trick you, other times they’ve fooled themselves. But we’ve yet to see a definitive, fact-based argument for the superiority of FireMonkey of Qt for mobile, Xamarin, Oxygene, etc.
“I’d love to see your feature matrix for Qt and FireMonkey” – David I., I believe this blog, around FM1 time. No David, we’d love to see your feature matrix.
“Does Qt use NDK?” Marco, on his blog, after having it pointed out to him that his Delphi “first” was incorrect because Qt also runs non-managed cross-platform code on Android and iOS. He’s the product manager, and he doesn’t know if Delphi’s biggest competitor is using the NDK (it is), when their code is open source and development happens in the open!
So in this case I don’t think they’re trying to bamboozle us, so much as they honestly have no idea what anybody else is doing, which may suggest that they don’t really expect to sell anything to people who aren’t already locked into Delphi.
Most titles are designed to grab attention and get people to read the article. Just as Jolyon did with his title about the efficiency of the compiler.
I’m not seeing how one/three lines that David I wrote is a lot larger than the five lines in the implementation of main in your C++ example. The important part of the code is the bit implementing the event handler and the bit inside main in your example. Obviously, line of code comparisons between languages don’t make much sense with so many variations in syntax, etc.
Isn’t it your job as a professional developer to evaluate the various technology options available and decide for yourself which suits you the best. Each vendor can claim individual points but I’d always evaluate them against each other. Some people feel that code reuse and a common framework is most important and others may decide that writing at the different API level but with the same language syntax is more important while others may decide that writing in a single language for each platform is most important.
So I can write the same non-trivial app in both Delphi and Oxygene across the platforms they have in common and make the determination for me which is best for my particular needs. Doesn’t mean that is now a global statement of which is better.
I expect to have to test claims made by vendors on what their products can really do for me as part of a proper evaluation.
>Most titles are designed to grab attention and get people to
>read the article.
There’s nothing wrong with grabbing attention, but you do it wrong if you end up over-promising and under-delivering.
>Iβm not seeing how one/three lines that David I wrote is a lot
>larger than the five lines in the implementation of main in
>your C++ example.
David’s program isn’t one or three lines; it’s about thirty lines depending on exactly what you count as an individual line. That’s a lot more code to do almost the same thing that the C++ example does (which would probably need two or three more lines of code). This means the language and/or framework is more expressive than the Delphi/FireMonkey combination David used.
>The important part of the code is the bit implementing the
>event handler and the bit inside main in your example.
Important or not, someone looking to understand or modify the original will need to wade through 30 lines of code in David’s example.
>Obviously, line of code comparisons between languages
>donβt make much sense with so many variations in syntax,
>etc.
Those variations are THE WHOLE POINT. π We have a word for it – expressiveness. This is how much can be done with the elements of the language, related to conciseness. You can look at non-whitespace character counts if you want, but either way it seems the bragging about the Delphi code wasn’t particularly justified.
>Isnβt it your job as a professional developer to evaluate the
>various technology options available and decide for yourself
>which suits you the best.
Earlier this year/late last year one job I had specifically was to evaluate language, IDE, database and business intelligence software to help two startups choose software stacks. And honestly examining Embarcadero’s products was second only to Microsoft’s in terms of hair-pulling frustration due to they (and only they) pretending that their competition doesn’t exist. I can partially understand Microsoft’s position given that it’s historically been a monopoly for much of its existence, but EMBT’s marketing was truly mystifying. The only explanation is that the people behind the products don’t really believe in them.
>Each vendor can claim individual points but Iβd always
>evaluate them against each other.
EMBT, however, doesn’t seem to have any idea how their own products stack up against the competition in their own eyes. Either they’re woefully negligent on their competition, or they don’t believe they offer much of a difference/advantage. When I asked a PostgreSQL developer as my first question, “What does your product do/offer that no other competitor does?” he not only gave me an answer – he gave me TEN of them. I was also given a PDF article that explained the ten items in greater detail. That was some start to the interview! It got better from there and I ended up recommending PostgreSQL to both startups. Heck, even RealBasic and Eiffel have marketing material comparing themselves to various other dev tools. EMBT/Delphi? Nothing. In fact, in an interview with The Register, EMBT’s CEO was asked what Delphi offered that C# didn’t. Wayne WIlliams declined to answer the question because C# “is a .NET IDE” and thus “we don’t consider it a competitor”!!! When the question was amended to VS C++, he dismissed it as “not our focus” (really odd since they sell C++ Builder). Even Nick Hodges confessed these answers were “ridiculous”. But doesn’t it tell you something when the CEO can’t name an advantage his product offers? In another interview the journalist wrote on his blog he felt he was “back in the 1990s” given some of Williams’ criticisms of Java. In yet another interview another Evangelist was asked about what Delphi offered over the competition and a rambling answer was given about “writing Windows programs quickly” which of course isn’t close to being exclusive to Delphi anymore.
Heck, I knew one auto dealership that was so confident the vehicles they sold were best in class they had their COMPETITION’S cars on their lot as well! Customers could take them out for test drives, compare them side by side, etc.
>I expect to have to test claims made by vendors on what
>their products can really do for me as part of a proper
>evaluation.
I expect vendors to be able to make specific claims about superiority in the first place!
I wish WordPress had a +1 system for comments. π
You comment on the job of someone who has to maintain the code having to wade through the 30 lines of code (29 of which are generated by the IDE so any Delphi developer will skip over them) as opposed to someone having to maintain your code where all the work is done in main. That’s not a very good or maintainable solution so they’d possibly have to extract the code out into a class, instantiate the class, etc to add some more functionality but maybe you started out more expressive.
Dealerships may do that with cars, but vendors offer 30 day trials so people can compare for themselves by taking them for a test drive and compare them side by side from their own home or office. I haven’t seen developer or component/library vendors with links to their competitors products on their own website.
Complacency is the enemy of quality and the mother of any number of bugs. π
You also neglect to address the fact that some of the “lines of code” are not actual lines of code but equivalent lines of code. Changing 5 component properties from their defaults is equivalent to (at least) 5 lines of code to set those values, but identifying the fact that these properties have been set is far more time consuming (and error prone) when forced to find them by laboriously working through the visual design in the IDE inspecting the properties of every component that might have such changes.
As opposed to implementing the entire apps logic in main being the definition of quality? π
Quick, you better include clicks on the component palette and the form as “equivalent” to lines of code to instantiate the components so you can keep getting the “line of code” count up.
I didn’t notice in the C++ code where the toolbar caption is set so it seems that implementation may be missing some lines of code to set properties. It may even be missing having a toolbar in the C++ implementation but don’t let that stop you from comparing total lines of code in Delphi with some lines of code in C++.
Which is why I did state that the line of code comparison was pointless.
After first trying to establish beyond any possible claim to the contrary that one was the number of lines of code written. Not two. Three was way too much and any more than that was right out. Almost as if it was important to you at the time. What happened since then I wonder ? π
Here is my original response:
“Reading his blog post, I understood the distinction between him writing one line of code for the app versus him writing many lines of code. It seems that you are the one claiming that he thinks his app consists of one line of code whereas I never got that impression from what he wrote.”
That seems clearly to be talking about the number of lines written by *him* with him being David I so yes, he wrote one line of code and the IDE generated some other stuff, some stuff was set in properties.
Joseph started comparing lines of code with an incomplete C++ implementation which was not identical to the app provided in Delphi and then you felt it was necessary to add “equivalent” lines of code to increase the number of lines of code written. You and Joseph seem to be focused on lines of code in the total solution whether typed by a person, implied through property setting whereas I was talking about lines of code in the two method implementations.
It seems your metric of lines of code written seems to include standard frameworks, IDE generated code, equivalent based on property setting when comparing to the C++ solution provided. I was trying to point out that the comparison was for lines *written* by the developer between the begin..end or {..}.
I notice you haven’t pointed out all the lines of code missing from the C++ solution provided that you keep wanting to compare.
I read his post with excitement, expecting him to be attempting the impossible and demonstrate a “Delphi XE5 iOS and Android One Line of Code App” as his own title stated. Sadly, what I saw was about 30 lines, only one (very large one) he wrote himself. In the game of Code Golf, in which contestants compete to produce programs that use the least code, I don’t think that counts. π
All he really did was read the location from the GPS unit and pass it to Google Maps, which did all the work. I don’t expect this to be any harder with any other language or any other framework such as Qt. In that sense, then, I’m not sure what the bragging was really about. Honestly I’m starting to get tired of Delphi evangelism posts that don’t make any comparisons to any other products.
Is this available for download anywhere? I’d love to see what happens with this one-line app if GPS functionality isn’t present or is turned off or WiFi isn’t available. π In other words, I suspect to really do this right takes mores than one line of written code.
These are all valid and very good points to which I am sure that the response would be “Well obviously more code is required to write a real app. This is clearly just a demo”, which is why I addressed a slightly different angle of obfuscation in the post than this one.
I think the fact that the simplicity implied in the oft-repeated “one line of code” proposition is exploded by David I himself – as much as he attempts to skip over the details, the amount of button clicking and property setting involved cannot be avoided, even if it is downplayed by presenting it as a series of screen-shots rather than described steps.
The bigger issue is what that “one line of code” ends up cranking out at the back end, and the mass of baggage required to make even that one line possible. The platform atop the platform, if you like.
Or, if you prefer, the house of cards. π
So now you are complaining about how many clicks and properties need to be set which still doesn’t change that he wrote one line of code.
Maybe you should have written the blog article about the bigger issue of what that one line of code ends up cranking out and the mass of baggage instead of focusing on the one line of code statement.
Um, I made that point right at the outset.
I thought you provided yourself on being able to divine the intentions of an author without their having to write the words and without being distracted by the words they did write into thinking that they were saying not what they wrote but what you believe they intended to write ?
No ? π
>So now you are complaining about how many clicks and
>properties need to be set which still doesnβt change that he
>wrote one line of code.
Filling in a whole bunch of properties in a dialog and writing them in as lines of code are essentially the same thing. It’s arguably worse, though, since those values don’t end up appearing in the main source code.
Where in your C++ solution does it set the caption so you are actually missing functionality from your solution but still insist on comparing the line of code count.
I like how you and Jolyon have become so focused on comparing a partial solution in C++ to the Delphi solution and reducing it down to lines of code which I’m saying isn’t a very good measure.
Let’s not compare like for like which is why I stated that the lines of code comparison isn’t valid. How about you implement the C++ solution in a class so you can compare the Delphi code existing in a separate class to “main” or does that misrepresent the total lines of code written.
I for one am not focussed on comparing anything, just responding to your obsession with drawing a comparison.
You appear to be saying that lines of code is a meaningless measure of anything and I would invite you to remember who it was that attached such significance to the number of lines of code (ordinal value: “one”) that started all this. π
I seem to remember making the distinction between one line of code written by DavidI versus the app consisting of one line of code. That was the comparison I was making until Joseph started talking about lines of code count in the C++ versus Delphi solution at which point I made a comment about that not being a valid comparison.
I’m not seeing me obsessed with drawing a comparison when I’ve stated the comparison is invalid and that Joseph was directly comparing the C++ solution he pasted versus the solution provided by DavidI. I would have thought that Joseph was making a comparison and my view was that it is invalid, not complete and not like for like.
>Where in your C++ solution does it set the caption so you
>are actually missing functionality from your solution but
>still insist on comparing the line of code count.
As I mentioned, the solution was from Stack Overflow in response to a question about the shortest/simplest code required to display a web page with C++ and Qt. Even adding in a few additional short lines of code it would still be shorter. Let’s at least say that it wouldn’t be any bigger, which serves to illustrate my point that what David posted isn’t impressive if Qt (and honestly, really any other major framework today) could do it in the same or fewer lines.
>I like how you and Jolyon have become so focused on
>comparing a partial solution in C++ to the Delphi solution
>and reducing it down to lines of code which Iβm saying
>isnβt a very good measure.
As Jolyon points out, that was the whole subject of David’s post: “one line of code”, Swindell introducing a “one line of code challenge”, etc. The purpose of the post wasn’t about Delphi/FireMonkey being capable of displaying Google Maps – it was that it only took “one line of code” to do it.
>Letβs not compare like for like which is why I stated that
>the lines of code comparison isnβt valid. How about you
>implement the C++ solution in a class so you can
>compare the Delphi code existing in a separate class to
>βmainβ or does that misrepresent the total lines of code
>written.
The question here is – why implement it in a class if it doesn’t need to be implemented in a class? That’s a Delphi design decision and part of the boilerplate code that the IDE inserted for David. If other frameworks don’t need that extra overhead, I don’t see why they should be required to do so for comparison.
>Intelligent developers are fully aware that behind that one line of code lie
>hundreds if not thousands upon thousands of lines of framework code all
>invoked into action by that innocuous one line.
I have to disagree with this section of your post. If it’s in the framework, I don’t believe it really “counts”. This is a line of argument I’ve seen Mason Wheeler try to use when confronted with code that takes far less lines than Delphi. π If we’re not writing it, then it doesn’t matter – although in David’s case, if it’s still being generated (in this case by the IDE), I think it still counts to some degree, because in the future someone will have to read through it all to change or fix it.
>Otherwise of course every single language and development tool could
>make the same or significantly similar claim, simply by conveniently
>ignoring all of that pre-written code behind the scenes.
I disagree with this too. Some languages and development tools have worse frameworks than others.
Now, in this particular case I think the claim is valid because it’s the Google Maps website that’s doing all the work, not David’s program, and that would indeed hold for any development language being used. Also, it still seems like there’s a lot of boilerplate involved in reading the GPS values, adding them to a URL string, then showing a website, including importing 14 different units.
I totally agree with Kieran.
It seems like you can’t ever bite your tongue, and that every little thing related to EMBT (especially coming from DavidI) you construe as something nefarious. I don’t think it would be far from the truth to call this trolling to be honest.
I am not against criticism (in fact its a necessity), but from our point of view all you seem to be doing nowadays is writing somewhat seemingly spiteful/rancorous posts. Well unless you’re writing about Oxygene.
Not nefarious. Just depressing and imho dangerous to the long term reputation of Delphi.
Someone believing the Embarcadero hype about Android and, to a lesser extent, iOS is going to be sorely disappointed and gain a wholly false impression of what still remains the best Win32/Win64 development tool there is.
Incidentally, if you check my recent posts you will find 12 posts in the past (almost) 3 weeks of which 7 were technically oriented, Delphi specific posts with the remainder also being inspired more by my current Delphi work than Oxygene (though sadly, not entirely positive experiences but still useful to share).
In fact, I think you will find that precisely ONE of those posts is even remotely connected to Oxygene, and that was only because it involved a build tool written using Oxygene. A build tool that I am using with (and wrote my post about using with) Delphi.
You would do well to ensure that your opinion of me reflects the real me, rather than the caricature effigy of me as paraded around by people with their own shattered illusions and an axe to grind. π
I always enjoy reading your blog, and you often have good and valid points, but here I just have the feeling that you’re just fighting some personal vendetta, even after reading your further explanations and arguments in the comments.
Yeah, delphi executables are giant, the compiler is unusably slow, and by the way, i hate the forced switch to 0 based strings. But i never for a second thougt that any one-line pascal code could even compile. You’re underestimating the intelligence of your readers if you think you have to explain that.
I’ll just pretend this blog post didn’t happen, and I look forward to reading purely technical rant-free articles from you.
Come to think of it.. Keep those rants coming too. I’m glad that some people speak up about certain issues.
The only vendetta in this case is against the “dumbing down” of what it means to be a Delphi developer. And it’s not so much a vendetta as a reaction. As a Delphi developer it is offensive to me that anybody coming across David I’s posts would come away with the impression – as is clearly intended – that the subject of the post, let alone the execution of it, is the sort of thing that Delphi developers are supposed to be impressed by. π
>But i never for a second thougt that any one-line pascal code could even
>compile. Youβre underestimating the intelligence of your readers if you
>think you have to explain that.
But witness the Delphi defenders here who appear to be arguing that lines of code “don’t count” if they didn’t type them in themselves! They (and David) are ignoring what’s a sore point for me (although I seem to be in the minority compared to the Delphi users who remain): how far Delphi has fallen from being a genuine RAD tool. While other languages have or are adding things like type inference, we’re still laboring under design decisions imposed because of a legacy single-pass compiler design. The Delphi code is more verbose than C++ (!!!), yet they’re focusing on what they typed in and not on how verbose the language and framework have become.
I wept when I saw some their example REST library code:
LRequest := TRESTRequest.Create(nil);
LRequest.Method := TRESTRequestMethod.rmPOST;
LRequest.Resource := ‘o/oauth2/token’;
// required parameters
LRequest.AddParameter(‘code’, ‘AUTHCODE_FROM_STEP#1’, TRESTRequestParameterKind.pkGETorPOST);
LRequest.AddParameter(‘client_id’, ‘YOUR_CLIENTID’, TRESTRequestParameterKind.pkGETorPOST);
LRequest.AddParameter(‘client_secret’, ‘YOUR_CLIENT_SECRET’, TRESTRequestParameterKind.pkGETorPOST);
LRequest.AddParameter(‘redirect_uri’, ‘urn:ietf:wg:oauth:2.0:oob’, TRESTRequestParameterKind.pkGETorPOST);
LRequest.AddParameter(‘grant_type’, ‘authorization_code’, TRESTRequestParameterKind.pkGETorPOST);
Now they’re imagining they’ve got a one-line solution to displaying maps when they’ve got a 30-line solution with 29 lines generated by the IDE. That’s heading into Java territory, where developers can’t survive without hyper-intelligent IDEs to cut down on all the boilerplate work. I do indeed think that they need to be hammered over the “one line” claim.
I’m not defending Delphi, I’m responding to the misinformation claiming “consists of one line of code” versus “one line of code”. They do not mean the same thing.
To you less verbose may be more important but to me more readable may be more important or more maintainable. None of my responses were about verbosity so now you are talking about something completely different. Enjoy your less verbose, faster compiler, multi-pass compilation in C++ with all your code in main.
You implemented your solution in main, no class declaration with instantiation of the class so you are not comparing like code for like. That was my point about comparing lines of code.
I’m not imagining anything although I’m not sure how you jumped to a comment about “real developers”. If you want to work in environments where the IDE doesn’t assist you in the mundane tasks or boilerplate code then good for you, but I remember when “real developers” wrote in assembler or when they changed to C. Now I deal with “real developers” writing Python in Notepad who claim debugging is for babies.
>Iβm not defending Delphi, Iβm responding to the misinformation
>claiming βconsists of one line of codeβ versus βone line of codeβ.
>They do not mean the same thing.
But the problem still remains. Either David I’s point was that it only took one line of written code to display the map, in which case the same can be said about Qt, Gtk, WxWidgets, .NET and essentially every other framework in use today. If the point was to suggest that Delphi was very expressive, the fact that there were a lot more lines actually required to compile argues against that. I’m not sure what he was claiming, but either way I’m not sure what we’re supposed to be impressed about.
>To you less verbose may be more important but to me more
>readable may be more important or more maintainable.
In general, I believe less verbose = more readable and more maintainable; “every line of code that doesn’t have to be written is a line of code guaranteed to be bug free”.
>None of my responses were about verbosity so now you are talking
>about something completely different.
I actually didn’t reply to you; I replied to Wouter. π
> Enjoy your less verbose, faster compiler, multi-pass compilation in
>C++ with all your code in main.
I’m not a C++ programmer, and I’d choose D over C++ anyway. π
>You implemented your solution in main, no class declaration with
>instantiation of the class so you are not comparing like code for
>like. That was my point about comparing lines of code.
Perhaps it wasn’t clear from my post, but the solution is actually from Stack Overflow, not me personally. Yes, you’d need to add another line or two and include another library. It’d still be significantly shorter, and be importing three libraries vs. fourteen.
>Iβm not imagining anything although Iβm not sure how you jumped to
>a comment about βreal developersβ.
Again, that reply wasn’t to you so that should explain the confusion. π
>If you want to work in environments where the IDE doesnβt assist
>you in the mundane tasks or boilerplate code then good for you,
Personally, I’d prefer a development tool that didn’t need all of that boilerplate code. Java is the absolute worst offender at this, and the typical rebuttal from Java defenders when some of the worst examples are pointed out is “Yeah, but the IDE inserts all that stuff for me”, as if that makes up for some questionable language design choices or means that someone won’t have to read through all of those lines of code some time in the future. I don’t want to see Delphi going the same way, where it’s considered ok for boilerplate code or complexity to increase so long as the IDE can auto-insert most of it.
>but I remember when βreal developersβ wrote in assembler or
>when they changed to C.
And the assembler diehards forecast the end of the world, dumbing down of developers and impossibly slow code if we moved to compiled languages, which couldn’t possibly do as good a job as they could in producing machine code. And now we hear the same things from Embarcadero marketing and especially the Delphi forum in regard to managed code. π
>Now I deal with βreal developersβ writing Python in Notepad who
>claim debugging is for babies.
Now Python has it right in avoiding boilerplate code. It’s said to be the only language you really could write code on the back of a napkin with. No need for an IDE to fill in complex boilerplate. Just this week I saw a business card with functional Python code on the back of it!
http://pythonforbiologists.com/index.php/new-business-cards/
Since we can call a web server everthing is fine. Don’t care Jolyon. It’s their dreamworld or ask Alice.
David I blog post started with: “Michael Swindell challenged us to create mobile apps using Delphi XE5 for iOS and Android with only one line of code.” I don’t see anything wrong with it and the point is completely valid: He created an working iOS and Android app typing only one line of code. He wants to promote it as a feature and – again – I don’t see anything wrong with that either. You may say that it is not “native”, it is slow, it is ugly, you could do better in Oxygene with one zillion LOCs, and the usual bla bla bla, but IMHO, you are the one who is taking your readers as stupid programmers, not David I.
Interesting to note that of all the things you gave me permission to say I only actually said one of them: That it’s not (meaningfully) “native”. The rest, I thank you for the invite but would like to point out that I didn’t actually say them nor was I going to. π
In this blog post no, you are correct. But who follow your blog know that nothing there is outside your scope π
I’m sorry, I do not agree. It is quite obvious that David was demonstrating how you can write an app by *typing* only one line of code. Not only the pre-written code in RTL is irrelevant, it’s a good thing here because David was trying to show exactly that: how lots of things are already in RTL. What you claim he’s hiding, he was actually advertising!
(It is also obvious this is a marketing trick and real life apps need much more than that, but that’s a different story).
Except that he neglected to mention the huge impact that the RTL has. One line of code. 5MB of horrendously inefficient runtime.
When the thrill of being able to write a pointless app in such a trivial amount of code will wear off very quickly with the dawning realisation that the pain of deploying real world applications which are battery drains and storage hogs will never go away.
Of course he doesn’t mention this. As an Evangelist it is literally his job to expound the virtues and brush over the sins of his company’s products. But I don’t see how that makes it somehow objectionable to then point out that this is occurring, in the interests only of ensuring that people considering using Delphi properly understand the proposition on offer and don’t come to it with hopelessly unrealistic expectations.
π
one little question:
what do you mean with “horrendously inefficient runtime.”?
i guess that your info level it that up to date that 5MB nowadays is nearly nothing, my current FireFox instance has seized 196MB, with only 4 tabs opened.
So this is nothing you can mean, although you are mentioning it.
i conclude, your are intending to say, that it would be slow.
So i would be really curious on how you would explain how the following app, wirtten in Delphi XE5 is managed to get so fast, probably you have an idea? i would be really curious!:
http://www.youtube.com/watch?v=kZkGBwHN1EQ
(link from one of the retorts to Davids blog posts)
thx in advance π
Without knowing whether you are talking about the desktop, phone or tablet version of FireFox or what pages it is showing in those 4 tabs I can’t comment on how much RAM it may be using.
But memory use is a different consideration than storage for the executable itself.
The trend on mobile devices, even on Android, is away from expandable storage and even where expandable storage is possible there are often constraints on what types of applications can be moved onto that expanded storage.
Beyond that, efficiency on mobile devices is measured in different ways than on desktop apps.
Efficiency of space is one measure. Efficiency of battery use is another. With a FireMonkey app you cannot use an energy efficient Android alarm based service to schedule some application behaviour, to give just one example. You cannot create a widget to provide a lightweight user interface onto some activity, to give another. Your user will have to fire up your entire application, complete with it’s FireMonkey runtime baggage (and startup times of FireMonkey apps, as it drags that FireMonkey runtime off of storage and into memory, is a well known problem with FireMonkey).
And then there is the raw performance itself.
If you read some of the discussion around that DigiFort application you will find that many people express surprise at how well it performs and the developers admit to having had to struggle with FireMonkey to get that performance. Yes, it’s possible but it is not a simple matter of just dropping FireMonkey controls and using them “out of the box”.
Getting acceptable performance is certainly not a simple matter of “one line of code”. π
Isn’t that how Delphi has always been marketed? I remember seeing Delphi 1 for the first time, and the first example was a Notepad clone “written” using 1 line of code. (it could have been 0 or 2, can’t remember, it was a long time ago). It obviously bears absolutely no resemblance to any code you might write in the real world, but isn’t that always a problem with these sale-type people?
Aww, cmon. We don’t need disclaimers telling us that there are lots of things going on behind the curtains. That’s the magic of “one-line programs.”
We know that stuff already. As you say, we are not idiots.
The point is how much powerful is a line of code write in delphi.
Is not a hello world line of code.
But i don’t know why im explaining this to you, if you already do. Your intention is being a troll.
Thats the point you forget to mention and this is because you are really biased right now.
I suggest you just leave alone to all the stupid idiot still using delphi, and start being productive using whatever you use. Oh wait.. Or theres some specific plan behind your negative comments about delphi?
I have lots of positive things to say about Delphi. None of them apply to FireMonkey and particularly not the inadequate Android support.
Then i recommend you learn to write. The tittle of this post is:”Delphi is the Worlds Least Efficient Compiler!”, no delphi mobile.
Reflecting the fact that Embarcadero talk about Delphi these days as if Android and iOS are the only things it can do. “Windows” is a dirty word at Embarcadero these days. π
Really? That are your arguments? Your mistake is a EMB fail? You are very hilarious, but not funny at all.
It wasn’t a mistake.
As I presume that English is not your first language I respectfully suggest that you have simply missed a subtlety in the deliberately sarcastic (and yes, inflammatory) nature of the “headline”.
That’s not a criticism, merely an observation. π
Delphi is not only mobile, and Delphi mobile is a big game changer. ThatΒ΄s all. Don’t matter how hard you shout this.
“Delphi is not only mobile” ? Embarcadero would have you think otherwise.
“Delphi for Mobile is a game changer“, very pithy. And it sounds good until you stop and consider that not all game changers result in good changes (and quite often are detrimental for the player, sometimes even fatal, for the player(s) involved). π
I mean: “don’t matter how hard you shout the oposite. “
In my browser title says: Delphi XE5 | Develop Apps for Android, iOS, Windows and OS X. So, your point is?
In my browser the title says “Delphi XE5 | Develop Apps…” the rest can’t be read because it’s too long to fit in the tab. For this reason, and the fact that most people aren’t going to bother reading the page title in the browser caption bar, even if it is displayed in full, page title’s aren’t places to put important information.
The page content is more important.
The first line in huge text says “Mobile is your future”
The next line in smaller but still large text says: “Delphi XE5 is the easy way to learn to build apps for Android and iOS”
I won’t bother going down the rest of the page line by line. The point is that the only mention of Windows on the entire page is a parenthetical reference in paragraph 3. Even there it gets pride of place in a list of platforms that puts both Android and iOS before it.
Sorry, but you are on a hiding to nothing trying to argue this one. π
The point isn’t “more powerful”, since he doesn’t compare the code to any other languages or frameworks. If he did and did it successfully, it would be a valid point. In the end, though, it really took 30 lines of Delphi/FM code and other products require less code, so I at least am left wondering what we’re supposed to be impressed by.
Here’s some one-liners from LiveCode (also targets desktop and mobile, and free for personal and open source use):
put word 3 to 6 of βThe quick brown fox jumped over the lazy dog.β into theVariable
put β quick brownβ after word 2 of theText
sort lines of theText descending by item 3 of each
See, those are impressive one-liners. It’s sad and embarrassing for an EMBT employee to be showing off “one-liners” that really involve 30 lines of code to pull off correctly. On top of that, the one line he wants us to pay attention to (“Pay no attention to the lines behind the curtain!”) is also a single line in any other language/framework you want to talk about.
When we can’t even get the maximum or minimum value of a TList in a single line of code (without using Spring4D) it’s embarrassing to see David bragging about being able to access a URL in one line of code as if it were a significant feat. Give us list comprehensions or filter/map/reduce capabilities or novel constructs to easily parallelize algorithms and it’ll be something to brag about.
I agree with Wouter this time.
The problem with this post is that you are implying that we are dumb and we don’t see David I moves or any marketing moves. You are NerdRAGING against a marketing post (most posts from David I are that).
Don’t you know that marketing praises good points and hide the bad points of the product? Yeah! I’m sure you know.
I never see a post from Apple saying they IPhone are bad for this or that. Neither from Google. Neither from RemObjects.
Com’on, you are better than that.
It is obviously is far more comfortable for people to criticise me than their kindly old Uncle David I. That’s fair enough. I don’t much mind being the community’s whipping boy even though if you read the post objectively there really is nothing much to get so worked up about. π
As for the idea that companies never talk about what their product don’t do, this is quite obviously a misconception. Some companies not only say what their products cannot do but even take the time to explain and justify their decision to not include those features.
Even taking RemObjects as an example, they are quite open about the fact that Oxygene cannot be used to create “single source” cross platform apps. It is a specific question raised and answered in their FAQ, backed up by an explanation of why they believe it is the right approach.
Dismissing Embarcadero’s failure to address the things that FireMonkey cannot do as only to be expected and no different than any other company’s approach is not only dangerously complacent but simply flat out incorrect.
All that as may be, I don’t get what I am supposed to be “better” than ?
Sorry, I don’t have “English speaking” culture enough to get why you’re calling David I an Uncle. Maybe you are comparing his person with Uncle Sam. Or maybe you are being sarcastic. But for a foreign reader just seems that you are criticizing people for criticize you. That’s doesn’t seems fair.
Also, seems that you didn’t get what I talked about when mentioned MARKETING posts. By your feedback links, you are still thinking that I and other readers blindly believe in theses MARKETING posts. Please, post a link about a marketing campaign where the company praise a bad feature and not a link about a microwave company saying that you cannot dry your cats inside them.
Finally, I’m not dismissing Embarcadero’s failures. You are thinking that I am. And THAT is what is sad about this post.
Just a note: I would like to people stop calling Embarcadero Technologies as EMB. I personally don’t like that because it is my nick. π
But, IMHO, this is like calling Apple App or Google Goo.
Let me get this straight …. I am now supposedly being criticized for criticizing people for criticizing me ? But the people criticizing me for criticizing someone else, that’s OK ? I just want to be clear on who is allowed to do what on what is – after all – my blog. π
“Kindly Uncle” is a euphemism for that often embarrassing family member that most families seem to have who is oh just so gosh-darned nice and cuddly and lovely and all, even if he’s a bit weird at times, that all his faults and foibles are forgiven and don’t anybody dare say anything about him that isn’t nice or they will have to face the consequences! π
Perhaps the language barrier is a minor issue between us because the point of my post is not that I or anyone else is blindly believing in these marketing posts but that the person writing them is assuming or expecting that someone will.
And of course no company praises a bad (or missing feature). However, that was not what you originally said. You said that other companies never post about them. “Praise” was not a factor. The point is that Embarcadero do not even go so far as to mention, anywhere key information about what their products cannot do. And other companies, including some of the ones you mentioned do provide to their (potential) customers similarly important information about what their products do not do.
Of course nobody does this in the form of “praise”.
But protesting that the information that is available does not take the form of praise and holding this up as some sort of justification for Embarcadero (or any other company) to fail to disclose similarly relevant information about their own products is bizarre and unreasonable.
Even more so in light of the fact that Embarcadero persist in describing their product in a way that implies capabilities that it does not have (“true native”) behind a shield of plausible deniability about the ambiguity in the terminology (“We mean unmanaged, compiled code, not platform native capabilities. Thanks for the cheque. Sorry for any confusion. Byeee”).
Well, you started the loop. Now is criticizing all the way down. π
Got the kindle uncle reference now. It remember me of uncle Ted from Bobby’s World animated television series.
Anyway, I don’t think that Wouter see David I that way. I’m sure don’t. And if you don’t get that when I said that most of David I’s posts are marketing, I don’t know how to help you there.
And of course no company praises a bad (or missing feature). However, that was not what you originally said.
I’m sorry then. The first one is what I meant to be said.
To be fair, in my point of view you just took the phrase “I never see a post from Apple saying they IPhone are bad for this or that.” out of the context of the other “Donβt you know that marketing praises good points and hide the bad points of the product? Yeah! Iβm sure you know.” part.
If you prefer, disregard it as a counter to your contextual point and consider it a point made on it’s own merit. It stands either way. π
You cannot hold up the fact that no company does something that nobody would expect any company to do as validation of the fact that one company in articular fails to do what those other companies do do in the better interests of their customers (and, in my view, the longer term interests of their own credibility and thus that of their products).
Joylon, I really respect your POV. If that was not true, I would not even comment here. You can see that not many comments from me are found in Delphi blogs.
Also I am not defending Embarcadero for they lack of information.They don’t even put the prices of the products on their site. I personally find that discouraging. So, please, stop thinking that I am. That way, you can see what I really wanted to say.
EMB your comments are much appreciated and very welcome. Please don’t misinterpret my enthusiasm for debate as any sort of attack on you personally. Some blogs don’t respond to comments (some blogs even censor comments and don’t publish ones that they find uncomfortable – Embarcadero are particularly guilty of that).
This – in the main – is not one of those. That’s all. π
I have to say that I don’t find price information to be lacking from Embarcadero. Confusing and prohibitively and unjustifiably expensive, yes. But not lacking. π
I didn’t got it as an attack to myself. Maybe an misguided overreaction, but not a personal attack. Also, your responses are appreciated. So are your enthusiasm for debate. π
About the prices, let us just agree that we disagree. π
Reading your title I got enraged thinking “yet again”* but when I saw the original article I could find nothing of what you said.
It’s a very typical example that many people use to advertize how expressive their programming tools are. And that’s really what they do, show with how little you can do so much. It’s basically just showing off RAD, like usual.
They don’t talk about code size or compiler efficiency at all.
I really don’t see where you read all which you said, the article seems pretty neutral to me: it shows the code and the necessary steps to create the application right away. Of course it doesn’t mention all the little issues you run into when doing serious work or have high quality expectations, but that is not the subject of his blog post. It’s not about quality (unfortunately) but just about efficiency (or maybe more about quick and dirty).
But this is not flashy enough for a headline. I think you are doing yourself a disservice by immitating tabloids, switch to another programming environment to safe yourself the stress and focus on what’s enjoyable and productive.
*=because yes there are too many bugs, and too little polish of the framework, including design, in general, which is highly frustrating when doing serious work
Thanks for the advice but I already switched to Oxygene for Java / Android and iOS / OS X and Windows .NET / RT / Phone. π
Delphi remains the best tool for Win32/Win64 development but Embarcadero seem oblivious to this fact and bizarrely don’t seem to want anybody else to know it either, persisting in pushing their half-baked cross-platform write-once-
runanywhere-in-a-few-places fantasy.The baby is being thrown out with the bath water and unless they realise their error soon, it will be too late.