Life In All Its Forms With GNU/Linux

“The system surprised us one day when a user’s Windows install went corrupt on her laptop and she accidentally installed Linux. When her laptop couldn’t boot from the hard drive, it automatically booted from the network. When she got the PXE install menu she just hit enter, installing a Linux desktop with all of our default network security settings and applications. She then logged into it with her network account and emailed me to say that her Windows had updated and she wanted to know why her Microsoft Office looked so different now and “Where did Outlook go?” We had a good laugh over how Linux is so easy you can install and configure it by accident now, even on a laptop.”
 
See Tony Maro: My Linux Story
I chuckled when I read this (->) in an article about a growing business preferring GNU/Linux and FLOSS for just about everything, saving a bundle and having total control of IT rather than being anyone’s slave… That’s freedom.

I’ve been experiencing that freedom for 15 years now. I use Debian GNU/Linux for everything and do some PXE installations right in my own home now that I’m retired, none of them by accident, however. 😉 I certainly can live without software from M$.

About Robert Pogson

I am a retired teacher in Canada. I taught in the subject areas where I have worked for almost forty years: maths, physics, chemistry and computers. I love hunting, fishing, picking berries and mushrooms, too.
This entry was posted in technology and tagged , , , , , , , , , . Bookmark the permalink.

500 Responses to Life In All Its Forms With GNU/Linux

  1. On an unrelated matter, China is spamming my snail-mailbox. My two-tone multimeter arrived today. As expected it’s rather lightweight but it has all the features advertised. When I went to find the battery-compartment there was an obvious cover underneath but I could not open it. RTFM suggested two screws needed removal… There were 3 on the back of the meter so I removed those. I discovered there was a 4th screw covered by a “quality control” sticker. That was the screw for the cover of the battery-compartment… So, as before, doing business with China is an adventure. Thankfully, it’s a prosperous adventure.

    Two other packages have arrived yesterday. Further, I had a gain of $1K in my stock portfolio even on a “down” day. This week is like Christmas all over again.

  2. kurkosdr says:

    But of course, Linux Audio should stop any evolution and wait for the incompetent morons to catch up with them. Chuckle.

    …aaand that’s how we got the PulseAudio debacle (which broke compat for all apps). This kind of reasoning sucks. There is a reason WMV failed even though an encoder was bundled with 95% of all new PCs in the early-to-mid 2000s, while divx avi, where you had to download shareware encoders and codecs, succeeded. One reason was Microsoft’s bitchiness when it came to licensing the format, the other was the constant changes in the format which made back compat and support in general a PITA.

  3. Deaf Spy says:

    It’s a fact that M$ deliberately kept moving the goalposts of file-formats

    But of course, MS should stop any evolution and wait for the incompetent morons to catch up with them. Chuckle.

  4. luvr says:

    Oops… Sorry for the messed-up link to that blatant buffoon.

  5. luvr says:

    DrLoser said, ”you will no doubt wish to deal with the various other issues on this thread
    […]
    Care to apply it to some to the “lesser breeds” on this site? I encourage you to try your hand.”

    Wait a minute… You’re calling me for help? Me—that blatant buffoon and thoughtless imbecile, not to mention blind pig that likes to spout entirely uninformative interjections? You know, the kind of creature that only a blatant buffoon and thoughtless imbecile, not to mention blind pig that likes to spout entirely uninformative interjections would ever think of calling for help? I couldn’t think of a clearer demonstration of the severe case of projection that you’re suffering from. 🙂

  6. wizard emeritus says:

    So Robert Pogson you are saying that you will subborn mendaciousness among your partisan posters because they share your skewed view of microsoft. For someone who sees himself as a scientist,that is particularly sad. The fact is that this enemy of your enemy is a self admitted liar who makes himself look stupid again and again. And makes you look stupid by extension.

    Nice job.

  7. DrLoser wrote, “Imbecilic.” about compatibility of documents shared between That Other OS and GNU/Linux.

    I’ve met a ton of people who loved it that GNU/Linux could open, display, modify and ship such documents regularly. It’s a fact that M$ deliberately kept moving the goalposts of file-formats so that users would be pressured to upgrade and that users would be discouraged from using competing software.
    “Q. OKAY. DID THERE COME A TIME WHEN YOU
    BEGAN TO EXPERIENCE PROBLEMS WITH YOUR–WITH THE QUICKTIME PLUG-IN WORKING WITH INTERNET EXPLORER?
     
    A. WELL, WITH EACH NEW VERSION OF THE BROWSER, WE HAVE EXPERIENCED COMPATIBILITY ISSUES. AND SPECIFICALLY, THE CHALLENGES THAT WE HAVE HAD MOST RECENTLY HAVE BEEN IN BEING ABLE TO PROVIDE CUSTOMERS ACCESS–BEING ABLE TO PROVIDE THE CAPABILITY OF HAVING THE QUICKTIME PLAYER BE ABLE TO BE USED TO PLAY BACK A VARIETY OF INTERNET FILE FORMATS THAT ARE NOW SUPPORTED BY QUICKTIME IN THE IE BROWSER.
     
    SO, THESE ARE CAPABILITIES WHICH WE ARE ABLE TO PROVIDE TO OUR SATISFACTION WHEN USING THE PLUG-IN INSIDE OF THE NETSCAPE BROWSER. BUT IF I TAKE THE SAME PLUG-IN, AND I TRY TO UTILIZE IT INSIDE OF THE IE BROWSER, I FIND THAT THE FUNCTIONALITY THAT I’M ACTUALLY ABLE TO PROVIDE THE CUSTOMER IS MUCH REDUCED.”

    See exhibit 1415 in US DOJ v M$.

    “we have to get serious about extending and owning HTML as a format, and in the process leverage our existing assets to get ahead. We need to ship the Forms’ runtime with the Internet Explorer, and make sure that the Forms’ runtime can handle HTML‘ extended for 2D layout. We also have to take RTF, re-purpose it so it is a natural extension of HTML, and change our Word and other text editors to read and write this new format.
     
    3. Get 80% of Top Web Sites to Target Our Client. Content drives browser adoption, and we need to go to the top five sites and ask them “What can we do to get you to adopt IE?”
     
    We should be prepared to write a check, buy sites, or add features — basically do whatever it takes to drive adoption.”
    see exhibit 684

    Not imbecilic on the part of oiaohm but M$. For decades they shit on users of IT to get what M$ wanted to the detriment of millions of people.

  8. DrLoser says:

    Oh, why wait? It’s a fresh start and a New Year, after all.

    Here is a (not necessarily complete) list of Princess Fifi’s solecisms on this thread:

    1) The reality is for 80-90 percent of a business staff machines as long a click on document and it opens for word, excel and power-point everything is good. Imbecilic.
    2) DrLoser something horible here relates to interoperability. There have been many long term bugs in MS Office where a single document results in MS Office being not functional. . Imbecilic.
    3) kurkosdr building a functional identical using FOSS to the old SBS 2003/2008 Servers is more than possible these days.
    Sogo/openchange replaces Exchange
    Alfresco replaces Sharepoint.
    Samba ADS is more complete than SBS 2003/2008 ADS was.
    . The ravings of an imbecile.
    4) This is the nasty problem of FOSS is that it can attack like a hydra so there is no single competitor to neutralize.. The ravings of an abject moron.
    5) LOLOLOLOLOL IDIOT Oracle has banned some of their clients from presenting at their conferences due to them supporting Postgresql. Yes salesforce is one of the victims of this. Salesforce never used Mysql. This was a Orcale client jumping ship to Postgresql due to lower costs.. To be fair: Inspired stupidity.
    6) Deaf Spy void variables existed in K&R C. Like it or not. A complete lie.
    7) This is another lie I have created and deployed 12 on Asure as testing for different things as well as another 20 locally. And I can tell you that 2016 on Asure behaved differently to 2016 locally. Those are just product benching. None are still left in place.. No, you have not, Fifi.

    Every single thing you have come up with in those cites from this thread — and I promise you, I did not avoid one of your responses where some sort of truth or accuracy was present, because there were none

    As lying ignorant cretins go, Dolding, you take the cake. The above only represents your pitiful incredible mendacious efforts up to the end of October (if that), and quite frankly I am already exhausted.

    Save me, Fifi, save me! Do you ever once get anything right, you contemptible little uneducated hayseed git?

  9. DrLoser says:

    That should have been “rouler“, by the way.

    And indeed you are correct, Luvr. Every now and again, even a blind pig can find an acorn. Well snuffled, cheri!

    Fresh from that triumph, you will no doubt wish to deal with the various other issues on this thread. Now, we can no doubt leave some of the less contentious ones to one side — such as, for instance, whether there is any point whatsoever these days in teaching anybody at all the Pascal language. (Clearly, there is none.)

    Oiaohm seems to have covered an incredible amount of totally specious ground, however. I may well, in a moment of weakness, spend a couple of hours covering those inanities, coupled with Robert’s unsuitable ventures into matters he clearly does not understand.

    I’d rather not, though. So, once again: Duck Typing.

    Pascal does not afford that dubious pleasure. (I believe we have established that fact.)
    C does not afford it, either. (Two, hyphenated, words, Fifi: Meta-Data. And you have yet to mention the particular bit of Meta-Data that is an
    absolute requirement for duck-typing. Despite the fact that it is bleeding obvious.)

    Gotta admit, though, Luvr, your attention to detail is beginning to be quite impressive.

    Care to apply it to some to the “lesser breeds” on this site? I encourage you to try your hand.

  10. luvr says:

    DrLoser said, “Laissez les Bon Faux-Pas roulez!”

    That should have been “rouler“, by the way.
    And, yes, I’m well aware of Muphry’s_law, so don’t bother… 🙂

  11. luvr says:

    DrLoser said, “Out of interest, however, Torvalds isn’t really Finnish either. Not in any way I can think of.”

    Perhaps he could be, if you thought of it in a slightly different way, then? 🙂
    He certainly isn’t Flemish (or Chinese, or Japanese, for that matter) in any way I can think of. 🙂

  12. DrLoser says:

    Now Now, my good Doctor, remember…

    Never assume perfidy when stupidity will do nicely…

    In 99% of cases I would go along with that metric, Deaf Spy.

    Unfortunately, Robert is very evidently not stupid. His forty years in (I think) four different scientific disciplines, including teaching, prove that fact.

    (On this point, rather unfortunately, I have to admit the preponderance of fact: oiaohm is evidently stupid, not perfidious. This thread alone will prove that, although Dolding has dozens of others to his name in the same fashion.)

    Robert Pogson is not stupid.

    There are clearly, as Sherlock Holmes would point out, certain “deficiencies” in Robert’s approach.

  13. Wizard Emeritus says:

    “Good egg, Robert. This is going to make it trivially simple for the rest of us to keep track of your evasions, misrepresentations, statistical ignorance, and other such common “whoopsies, not quite true as such” on this site.”

    Now Now, my good Doctor, remember…

    Never assume perfidy
    when stupidity will do nicely…

  14. DrLoser says:

    I haven’t the memory to remember every lie I ever told so I do try never to lie. I like to keep life simple.

    Good egg, Robert. This is going to make it trivially simple for the rest of us to keep track of your evasions, misrepresentations, statistical ignorance, and other such common “whoopsies, not quite true as such” on this site.

    Happy New Year!

    And just for once in the last twenty years or so … any chance that you could actually go round a neighbour’s house and check out some sort of Microsoft OS that Modern Man actually uses?

    Give it a go. It will very probably give you more ammunition.

    Alternatively, as the Canucks say,

    “Laissez les Bon Faux-Pas roulez!”

  15. DrLoser says:

    Makes me wonder: did I have too much to drink, or did you?

    Aspirationally, Luvr, both of us. Happy New Year, and I wish you the very best of it!

    Yes, of course Linus isn’t Flaamisch, youngster … just a silly secondary trap I set after the first trap. You fell into the first, but I hardly expected you to fall into the second.

    Out of interest, however, Torvalds isn’t really Finnish either. Not in any way I can think of.

  16. Wizard Emeritus wrote, “Someone has to keep the site owner Honest.”

    That implies I’m dishonest. I haven’t the memory to remember every lie I ever told so I do try never to lie. I like to keep life simple.

  17. Wizard Emeritus says:

    “Happy new year trolls and freedom fighters!!”

    Happy new year to you too Mr. K. Keep up the good work here. Someone has to keep the site owner Honest.

  18. kurkosdr says:

    Happy new year trolls and freedom fighters!!

  19. DrLoser beat on “with”, “to put it another way, a syntactic construct that sounds like a really smart and liberating thing in the first place, but turns out to be a not particularly pleasant experience, as far as semantics go.”

    “with” is not about semantics but shortening the expression of references to data-records. An innermost loop may well have a bunch of expressions dealing with some pointer to a type of record with a bunch of fields named fiscal_2016_projections.*. It’s just silly to type that 47 times in the innermost loop instead of “with fiscal_2016_projections do begin revenue:=sales+investment_income+donations;… end; “with” by itself encourages very descriptive names for variables without punishing programmers for using such. In this case it really improves readability and eliminates uncertainty. Typically, humans are nearly perfect in understanding a screen of code. Give them an innermost loop spanning 12 screens and the chances for errors multiply. By reducing the typing in that innermost loop, “with” saves the day. It’s just like SQL. One can reference tables with db.table but everyone I know uses “use db” and carries on if there’s mostly references to one database or no ambiguity in table names; Do you think “use” is useless? No it’s helpful and not a problem.

  20. DrLoser wrote, “if one single little sod chooses Pascal, well then. My father was a college lecturer. Little sods like that get taught a lesson, and will never do it again.”

    Often students don’t get to choose the programming language. The professor/lecturer will often teach using a meta-language and students will transform it into whatever languages are suitable or available on the school’s equipment. In my experience PASCAL was cheap and available and very easy to learn/teach so everybody won. Students went on to use whatever languages they wanted. As a second language I usually used HTML/PHP or even spreadsheets. I don’t recall any student every demanding C although in all my years one did state in class that PASCAL was never used in the “real” world. I showed him job-ads for PASCAL programmers. Some were into the ~$100K range.

    Just checked. Lots of job-ads mention PASCAL today. e.g. “More than 5 years of programming experience in PASCAL, C, C+​+​, JAVA, Delphi (JAVA and Delphi preferred)” See Technical Specialist – Delphi

    Clearly, folks are not chasing PASCAL programmers away with sticks.

  21. DrLoser wrote, “your 2013 efforts are unlikely to bring down an Elk any time soon.”

    I know a guy who wants to hunt elk next year, just to say he’d done it once in his life. It means a real expedition as the nearest elk are about 200 miles away from us. My work and GEBC have both been used to check out suitable loads and trajectories. The likely load would be Sierra 175BTSP on a 7mm Remington Magnum case load of IMR7828.

    The output of my PASCAL version:
    Name = 7mm Rem Mag, 175 Sierra BTSP
    Drag Function (G1,G2...G8) = G1
    Enable Atmospheric Corrections (nonblank) = x
    Ballistic Coefficient = 0.533
    Bullet-weight (grains) = 175
    Muzzle velocity (ft/s) = 2900
    Range (yards) = 600
    Sight Height Over Bore (inches) = 1.6
    Shooting Angle (degrees elevation) = 0
    Windspeed (mi/h) = 10
    Wind Direction (degrees) = 90
    Altitude above sealevel (ft) = 900
    temperature (F) = 32
    pressure (in Hg) = 29.53
    relative humidity (%) = 50
    Range (yd) Path (in) Path (MOA) Time (s) Windage (in) Windage (MOA) Velocity (ft/s)
    100 12.82 -12.22 0.11 0.61 0.58 2725
    200 22.53 -10.75 0.22 2.40 1.15 2558
    300 26.92 -8.57 0.34 5.53 1.76 2396
    400 25.25 -6.03 0.47 10.11 2.41 2240
    500 16.64 -3.18 0.61 16.31 3.11 2090
    600 0.06 -0.01 0.76 24.29 3.86 1946

    GEBC:
    7mm Remington Magnum
    GNU Exterior Ballistics, v1.05
    Drag Coefficient: 0.533 Projectile Weight: 175 grains
    Initial Velocity: 2900 (ft/s) Zero Range: 600 yards Shooting Angle: 0 degrees
    Wind Velocity: 10 mph Wind Direction: 90 degrees
    Altitude: 0 feet Barometer: 29.53 in-Hg Temperature: 59 F Relative Humidity: 78%
    Range Drop Elevation Velocity Energy Wind Drift Windage Time
    (yards) (inches) (MOA) (ft/s) (ft-lb) (inches) (MOA) (seconds)
    0 -1.60 5400.00 2900 3267 0.03 5400.00 0.00
    100 12.82 -12.22 2726 2886 0.61 0.58 0.11
    200 22.53 -10.75 2558 2542 2.40 1.15 0.22
    300 26.91 -8.56 2396 2231 5.52 1.76 0.34
    400 25.23 -6.02 2241 1950 10.10 2.41 0.47
    500 16.61 -3.17 2091 1698 16.30 3.11 0.61
    600 0.02 -0.00 1946 1472 24.27 3.86 0.76

    Hard to tell ’em apart, eh? The elk certainly won’t notice 0.01 inch difference in the point of impact.

  22. luvr says:

    DrLoser said, “may I assist you with a small correction to your original assertion? That being, of course, that Linus Torvalds is Flemish.”

    I’m afraid you have just lost me. Makes me wonder: did I have too much to drink, or did you? 🙂

  23. kurkosdr wrote, “why a post from October is still getting comments?”

    Pick one or more:

    • It’s a really inspiring post…
    • The trolls are too lazy to start their own blogs so they adopt one of my comments…
    • WordPress is wonderful…
    • Other…
  24. DrLoser says:

    Thanks for the info; saves me from having to look it up.

    As ever, Luvr, your service is my distinct pleasure.

    Having dealt with the thorny question of whether Bjarne Stroustrup and/or Anders Hejlsborg are Swedish/Danish, may I assist you with a small correction to your original assertion?

    That being, of course, that Linus Torvalds is Flemish.

    Of course the bloody man isn’t Flemish. Try a little harder.

    (:)) (:)) (:))

  25. kurkosdr says:

    Can anyone explain to me why a post from October is still getting comments? I didn’t follow along early on and now I am too bored to read the whole shebang.

  26. DrLoser says:

    DrLoser wrote, “show us that GEBC online improvement using Pascal that you have been advertising for the last four years or so.”

    I have done so, in C, back in 2011 and in Pascal, back in 2013. There’s more to come.

    It’s taking an unconscionably long time, Robert. As you are well aware, I examined both updates — 2011 and 2013. It seemed only fair, since I submitted updates to the GEBC site for your particular complaints in 2011. Which were in fact in C++, but, you know, no worries.

    Oh, and your 2013 efforts are unlikely to bring down an Elk any time soon. Pascal doesn’t seem to suit you when it comes to an Internet language.

    Have you considered PHP? I’d recommend PHP4 — before it got all complicated with that object-oriented stuff.

  27. DrLoser says:

    OTOH, professional geologists accept PASCAL-programming as one of their requirements at the university level: “Computer Programming (1B) Computer science course that requires students to develop familiarity with a high level programming language (one of Fortran, Pascal, or C) and develop facility in writing computer programs.

    There was a chap at Oxford University, not so long ago, I think, who was intrigued by some such clause in the Modern Languages curriculum. Basically, it came down to the curriculum authoritatively stating “The qualifications for a B.A. require a major in one language from the following list … French, German, Russian, Chinese, etc etc … and a minor in any other language of your choice. The University will select an instructor and examiner and invigilator for that language.”

    I seem to recall that this guy picked an obscure dialect of Farsi. Not that it matters. You get the general idea.

    Somehow or other, our man managed a freakishly good score of 100% on his chosen second language. Not only that, but he managed a freakishly good 100% on two years worth of coursework.

    And to top all that off, Robert, you know what? He also pocketed substantial fees for training, for lab work, for setting the exam, for invigilating, and for marking the exam.

    Why? Because he was the only known “linguistic expert” in this particular dialect of Farsi, or whatever it was.

    So, an interesting quotation from the 2012 Geophysics site, Robert. But, do you know what?

    I don’t even think they’re going to press the little darlings too hard on either C or Fortran. Setting the data up and running the sims or the linear algebra or whatever is probably going to be enough.

    And if one single little sod chooses Pascal, well then. My father was a college lecturer. Little sods like that get taught a lesson, and will never do it again.

    Which is a kindness, really. Because the alternative is to let the little sod out into the Real World:

    “Ah, Mr Snivelmeister? I see you have more impressive scores on Pascal than both Wirth and Hejlsberg. Regrettably you can’t program worth spit in either Fortran or C or indeed anything else. What on earth was wrong with you? Didn’t you notice it was a Freshman course?

    “Begone, Snivelmeister. Find a better choice of career. I hear there’s an opening in Easterville for a Handyman … they need the school IT system to be fixed up.

    “Apparently the previous weirdo convinced them that Pascal was the way to go, so you should have no trouble, kid.”

  28. DrLoser says:

    What don’t get, is the objection to the with statement; it is not essential in any way, and I have seldom used it, but it can be helpful if used wisely. Granted, it can quickly get confusing if overused, but so can deep nesting, and I don’t think anyone will support artificially limiting the maximum allowed nesting levels—or will they?

    This is going to sound a little odd, Luvr, but that entire paragraph explains, very accurately indeed, why I have problems with the with-statement. It is almost literally true that I couldn’t have said it better myself, although in my case I would improve it by omitting but it can be helpful if used wisely. Because that’s where imprecision kicks in, and where arbitrary confusion commences.

    It’s not that the with-statement is bad per se; it’s just that it is an “invitation to bad-ness.” Or, to put it another way, a syntactic construct that sounds like a really smart and liberating thing in the first place, but turns out to be a not particularly pleasant experience, as far as semantics go.

    And, quite frankly, if you’re dealing with what is by now, if not actually a Dead Parrot, at the most a Teaching Language, then I think Semantics should trump Syntax.

    Interesting point, though.

  29. luvr wrote, “A weird consequence of this syntax is, that there cannot be a ‘;’ before the else.”

    I’ve always considered “;” a statement separator and there’s no need for it in the middle of a statement. That can catch one with copy and paste or habit but the compiler always catches attempts to use ELSE as a statement…

    There are many who will outgrow PASCAL because they join projects using C or whatever but for one’s personal coding of user-level applications, PASCAL has stayed with me. I did use Modula-2 for one project because it is better for bit-level operations, hardware and processes but a lot of programming can be done without those. e.g. data-reduction, number-crunching, text-processing, graphics and such, things where some process is applied to some data, implementation of a huge number of algorithms. For me personally, PASCAL is optimal because I can do whatever I need to do and my poor short term memory is not a problem. I like UNITS. I can debug some code with strong type-checking, put it away and use it forever. That makes the language infinitely extendable one way or another without any tweaking of syntax or compiler. I like that. Having to “maintain” stuff you wrote a decade ago is such a drag. With PASCAL I am close to “write once, use forever”, unlike with many other languages which constantly evolve out from under mountains of code. It’s like some of my old rifles. Really, some are over 100 years old and still work as intended and competitively with much newer and redesigned products. “New” on its own is not meritorious, just newer. Just look at PC-tech. There isn’t really anything new in a typical notebook or desktop PC compared to 20 years ago except lighter, smaller, faster and wider. That’s not better in terms of innovation, just scaled in some way. Lots of real problems have not scaled up requiring such hardware, like balancing the books, plotting the blood-sugar or ballistics. Many of the first applications I wrote in PASCAL back in the 1980s still work today on the latest hardware, not the binaries but the sources.

  30. luvr says:

    Deaf Spy said, “Currently, I see absolutely no reason why one would start teaching programming in Pascal instead of Python or C#.”

    I don’t think Python is a good language for absolute beginners to learn programming. With its strong, but entirely dynamic typing system, it simply doesn’t enforce sufficient discipline on a beginning student. The strong and static typing system, as seen in Pascal, is very helpful and valuable to such a beginner—who can use all the help he/she needs to get up to speed.

    Pascal may not be a full-featured language, compared to C, C++, C#, and whatnot, but is was never meant to be. Its first and foremost purpose has always been educational, and it is an excellent choice in that regard. It is simpler than any of the alternatives, and provides just the right features to assist beginning programming students in the best way possible. Students will outgrow Pascal soon enough, but they will keep everything they learned from it with them throughout their careers. That’s not rocket science—I’m convinced that anyone who is willing to understand this, can. I’m also sure that not everyone will be willing to understand it, and that is fine by me.

    Pascal does have its quirks, by the way. The one thing that I have never really gotten the hang of, is the if statement syntax:

    IF expression THEN statement ELSE statement

    A weird consequence of this syntax is, that there cannot be a ‘;’ before the else. According to the syntax that is entirely understandable, but I have always considered it an anomaly. A far more elegant solution would have been something along the lines of:

    IF expression THEN statement-sequence ELSE statement-sequence END IF

    (which is close to how Modula-2 does it).

    What don’t get, is the objection to the with statement; it is not essential in any way, and I have seldom used it, but it can be helpful if used wisely. Granted, it can quickly get confusing if overused, but so can deep nesting, and I don’t think anyone will support artificially limiting the maximum allowed nesting levels—or will they?

  31. luvr says:

    DrLoser said, “Unlike Anders or Bjarne, who are definitionally Swedish, I presume, Luvr? Despite actually being Danish, in both cases.”

    Thanks for the info; saves me from having to look it up.

  32. here’s something out of Google’s Cache. It’s in reference to the list of objectives for computer courses in Manitoba.
    “Access to Computer Hardware and Software
     
    To achieve the outcomes for the ICT courses, students must have access to a computer with appropriate software installed. This framework does not prescribe specific software. It also avoids the use of trade names and product-specific terminology so that teachers and students may decide which software is appropriate for the activities designed to meet the learning outcomes.
    This allows for the introduction of new products and future technological developments.”

  33. DrLoser, wrote, “I have to say, though, that having set a deliberate trap, I was gratified to watch a total incompetent fall into it.”

    Troll.

  34. DrLoser demands proof of PASCAL’s relevance in education on the day edu.gov.mb.ca is down…

    OTOH, professional geologists accept PASCAL-programming as one of their requirements at the university level:
    “Computer Programming (1B) Computer science course that requires students to develop familiarity with a high level programming
    language (one of Fortran, Pascal, or C) and develop facility in writing computer programs. Organization of stored program computers; principles of structured programming (input/output, assignment, selection and repetition, modular design using functions and procedures/subroutines, data structures including arrays and text files; design and testing of algorithms; introduction to numerical methods) curve fitting, numerical integration, root finding, or Computer Programming: Application of programming techniques using a high-level language for the manipulation of large data sets and the solution of problems in mathematics and physics. NOTE: Computer science courses that do not involve any programming are not acceptable.”

    I’ve discarded all my files with MB curriculums so I don’t have a recent quotation but other provinces are up, so…

    I found what I wrote on this very topic back in 2006. That was when I was current on several curriculums.

    Neither Alberta nor Manitoba recommends particular languages but gives a list of objectives that can be easily met with PASCAL.
    Saskatchewan recommends Pascal resources even as dead trees prominently. They actually suggest Turbo Pascal as their curriculum is so old.. but they state, “The selection of programming languages is left to the teacher. However, situations may arise where guidance is needed. These are suggestions for beginners. These are good languages that are easy to obtain, cheap, and relatively easy to use.”

  35. DrLoser says:

    It becomes tedious to request a simple answer to a simple question. Neverttheless, since we are on this particular thread:

    Moving on then.

    Got a solution for “QUACKABLE,” Fifi, you miserable excuse for something that hangs around a lamp-post in a red leather miniskirt and pretends to have even the vaguest comprehension of Computer Science?

    No?

    Thought not.

    Fifi clearly has no answer to this. Anybody else out there?

    Clue: Involves metadata

  36. DrLoser says:

    Here I will give one or more hostages to fortune.

    What defines “Scope?”

    Interested parties are invited to consider functional languages such as Lisp.

  37. DrLoser says:

    I am led to believe that Mr Pogson’s home province is Manitoba. I have not doubt of that.

    I am led to believe that various school administrations, across the world, prescribe or otherwise at least recommend one or more computer languages of choice as a learning tool. I have no doubt of that. I cannot even bring myself to censoriousness when I am forced to admit that, depending upon what level of education, those languages are very probably Java or PHP.

    But somehow I find the following assertion utterly hilarious:

    I know Python is practical. In my home province, a student is expected to be exposed to two languages or more. Python is often one and so is Pascal.

    Well then, Robert. I believe you owe all of us a cite on this miraculous and completely unbelievable assertion that the fine Province of Manitoba somehow “includes” Pascal as one of those languages.

    Be honest. It does no such thing.

  38. DrLoser says:

    Linus Torvalds isn’t Swedish—he’s Finnish.

    Unlike Anders or Bjarne, who are definitionally Swedish, I presume, Luvr? Despite actually being Danish, in both cases.

    🙂 🙂 🙂

    I have to say, though, that having set a deliberate trap, I was gratified to watch a total incompetent fall into it.

    Now, about this Finnish thing.

  39. DrLoser says:

    Are nested braces (‘{‘ and ‘}’) really that more readable than BEGIN and END?

    Presumably so if you are not a native speaker of English, Robert. They are also far easier to parse … I assume you have, at one time or another, written at least a Lexer or two. If not, I recommend the excellent GNU tool flex, as written by the Toe-Nibbling Meister himself, Mr Richard Stallman.

    It’s an interesting question, though. Why would one use delimiters such as {BEGIN … END} in the first place? Basically, because that’s what languages from the 1960s (Algol 60/68) and at least one language from the 1950s (Fortran) did.

    This is not a good argument for a pedagogue to carry forward into the 21st century.

    Here’s a clue: whatever delimiters one chooses to define in a language, it’s all about scope.

    Which brings us back to the Pascal “with” construct, btw. You have yet to defend that one, satisfactorily.

    More subtly, why would one use curly brackets as delimiters?

    That usage is neither necessary or particularly useful, Robert. As you will no doubt know, having examined the alternative (and far better) teaching language that is Python.

  40. Deaf Spy wrote, “BEGIN and END are too verbose, and get in the way with other keywords, especially like IF and ELSE. Brackets are more discrete.”

    That can be true when you get three or so deep but students rarely go there. If the lines don’t fit, it’s easy enough to reset the scope by using a sub-programme.
    e.g.
    procedure deep();
    begin
    if whatever then
    begin
    do_something
    end
    end;
    begin
    while counting do
    begin
    with it do
    begin
    do_something_else();
    while next <> nil do deep()
    end
    end

    I gave up struggling to get the indents past WP…

  41. Deaf Spy says:

    Pascal was a great learning tool

    Indeed. Pascal was.

    I still have to hear why C# or Python are worse educational languages than Pascal. Java has some mind-boggling quirks, and JavaScript is a sad piece of crap, beaten in its crappiness only by PHP. TypeScript is a much better one, and once again we need to praise Anders Hejlsberg for it. Btw, if anyone at Sun had at least two working brain cells back at the time, they would have embraced Anders’s ideas how to improve Java.

  42. Deaf Spy says:

    Begin-End clearly delimits a block of code often in a loop or conditional statement and that helps the student understand what he is doing.

    Brackets, Robert, are introduced in elementary school. Everyone passed that knows that brackets define a scope.

    Are nested braces (‘{‘ and ‘}’) really that more readable than BEGIN and END?

    Yes, they are. BEGIN and END are too verbose, and get in the way with other keywords, especially like IF and ELSE. Brackets are more discrete.

    Of course, you can argue that you can make a mess of brackets. Let me tell you, you can do the same with BEGIN and END.

    Robert, if I were you, I would jump to defend one of the few very meaningful features of Pascal, which the compilers sadly underuse. The requirement to declare your variables at the very beginning of routines in a VAR block, coupled with the limited, yet existing closures – visibility of local variables within nested routines.

  43. luvr says:

    DrLoser said, “Vote now for your favourite Swedish Code-Meister”, and included Linus Torvalds as one of the options.

    Linus Torvalds isn’t Swedish—he’s Finnish.

  44. luvr says:

    Deaf Spy said, “Nesting begins and ends produces noise and reduces code readability.”

    Perhaps it does, but how would you suggest nesting be done, so that it doesn’t reduce code readability? Are nested braces (‘{‘ and ‘}’) really that more readable than BEGIN and END?

    My first programming language was Pascal, in the early 1980s, followed not much later by Fortran, COBOL, and IBM Mainframe Assembly Language. It was immediately clear to me that Pascal (which didn’t even have units yet, back in those days) was pretty limited when it came to real-life programming projects, but the simple, well-structured design of the language greatly facilitated grasping basic programming concepts.

    Pascal was a great learning tool, and I think it still is. No other programming language that I know of can beat Pascal in that regard, even today. Even when I subsequently learned assembly language, it was easy to spot who of the students had first learned Pascal, since they had a far better structured programming style than the others.

    I’m not saying that you absolutely, positively had to have started with Pascal to become a great programmer, but I’m pretty sure that those who were destined to be outstanding programmers could become proficient at it far more easily if they started with Pascal. (By the way, I consider myself a fairly average programmer, and Pascal obviously couldn’t make me an excellent one, but it did assist me in making the most of what level of competence I did have in me.)

    Guess what I’m really trying to say, is that incremental learning is what generally works best, and Pascal is an excellent first step in such a process. Granted, it’s a small step indeed, but that is by definition how an incremental process starts—or BEGINs, if you will. 😉

  45. DrLoser wrote, “I’m reasonably convinced that nobody has yet defended the Pascal “with-statement””.

    That’s been done here already. Perhaps you ignored it.

    Wirth said this about with: “aid clarity and avoid clerical work”. It’s just silly to retype identical selectors all over the place. “With” is an economical means of avoiding repetition in a programming language just as we use if-then-else rather than if this followed by if that or case statements instead of a bunch of equivalent ifs. It’s just less typing/insertion. One can spell out selector after selector or a long string of ifs but if it’s clear what’s happening there should be a shortcut.

    An analogy. A telephone system could be worked out so that users had to constantly list their phone number and the party they are calling at every sentence (2045555555 to 3065554444:How’s the weather there?) “in the interests of efficiency of transmission hardware”. With that dynamic, the phone companies could make a connection just in time rather than wasting $billions in hardware waiting for humans. Sure it might optimize the phone-company’s profits but it sure would annoy the users. That’s why we don’t do it. Endlessly naming the layers of some linked structure to reference some element is just like that. Once you establish the connection, you just want to get on with it. “With” saves time/space coding, compiling even if it does nothing to affect speed of execution. A bunch of constant offsets will be computed outside the loop. Why not do that explicitly in the language especially when it enhances readability?

  46. DrLoser wrote, “I would give you Mad Props for coming up with whatever reason you can find to prefer Pascal to either of those two.”

    The last time I looked it was just about impossible to find documentation for javascript. Now there are more sources but back in the day it was a closed shop.

    Checking Wikipedia:“JavaScript is a high-level, dynamic, untyped, and interpreted programming language.”

    ewww…. Why would anyone want to introduce a newbie to an untyped language? Shouldn’t we reward students with reproducible results? Further:“Spaces, tabs and newlines used outside of string constants are called whitespace. Unlike C, whitespace in JavaScript source can directly impact semantics. Because of a technique called “automatic semicolon insertion” (ASI), some statements that are well formed when a newline is parsed will be considered complete (as if a semicolon were inserted just prior to the newline). Some authorities advise supplying statement-terminating semicolons explicitly, because it may lessen unintended effects of the automatic semicolon insertion.
     
    There are two issues: five tokens can either begin a statement or be the extension of a complete statement; and five restricted productions, where line breaks are not allowed in certain positions, potentially yielding incorrect parsing.
     
    The five problematic tokens are the open parenthesis “(“, open bracket “[“, slash “/”, plus “+”, and minus “-“. Of these, open parenthesis is common in the immediately-invoked function expression pattern, and open bracket occurs sometimes, while others are quite rare.”

    Gosh! That’s just awful and should be banned. Students of computer science should be subjected to rational environments not random number generators offered as interpreters. Hell would freeze over before I would use that as a first language for students. C is a little better but too large a syntax and too subject to changes in the compilers. Having to specify the compiler rather than the language is idiotic. C has no standards in that respect.

  47. DrLoser says:

    Vote now for your favourite Swedish Code-Meister, btw.

    1) Bjarne Stroustrup
    2) Linus Torvalds
    3) Anders Hejlsberg

    Clue … now, why would I give any of you a clue? You don’t have one in the first place.

  48. DrLoser says:

    Pointers are essential for dynamic structures, the stuff of which practical applications are built.

    That is arguably, and despite the heavy amount of competition, the most stupid claim I have ever read here.

    Stupid. Stupid. Just, really, Stupid.

  49. DrLoser says:

    Deaf Spy decried PASCAL’s 1.Syntax.

    I’m not keen on Pascal’s syntax, Robert. Although, unlike Fifi, I can actually quote the Standard on that small unimportant thing.

    On the contrary. A minimal syntax which allows all the basic operations on computing hardware is sufficient and easier for students …. [around five hundred words of so of gibberish follows]

    OK, Robert. I will give you that gibberish, unconditionally, if you are prepared to admit that, what with one thing or another, it might be better in 2015 to teach your students either Python (very clean syntax, good libraries, etc) or JavaScript (pretty much universal, with very few warts).

    In fact, since the discussion is about teaching kids a programming language, I would give you Mad Props for coming up with whatever reason you can find to prefer Pascal to either of those two.

    Oh, and I forgot. Begin. End. Am I still in scope?

  50. DrLoser says:

    I’m reasonably convinced that nobody has yet defended the Pascal “with-statement”, as claimed by Deaf Spy (in my humble opinion, correctly) as one of the most monstrous semantic warts on the entire Pascal language.

    One could charitably admit that with was broken at birth, and has never recovered. The scoping rules alone are unfathomable.

    I will therefore pass this question on to a Mr Robert Pogson, who claims the ability to write 600 lines of Pascal code per year.

    How on earth can you cope with this crap, Robert?

  51. DrLoser says:

    [Robert Pogson] DrLoser wrote, “How many hundreds of lines have you, personally, programmed in Pascal since, say, 2010?”

    I don’t know, but the directory where I put most of my stuff has 6K lines of Pascal, about half of which I wrote.

    An honest answer. Also rather pathetic for one who presumes that Pascal is the way to go.

    Six hundred lines a year? Shameful.

  52. Deaf Spy, wrote a bunch of stuff and, “Nesting begins and ends produces noise and reduces code readability.”

    No, it does not. Begin-End clearly delimits a block of code often in a loop or conditional statement and that helps the student understand what he is doing. Leaving such delimeters to punctuation or implication causes great confusion because the syntax of casual language is so vague. PASCAL needs to be precise for students to control or to understand it. On my system, a single key-press yields a Begin-End block. It’s not a problem.

  53. Deaf Spy says:

    I think you misunderstand some points, Robert.

    A minimal syntax

    Pascal’s syntax is anything but minimal. On contrary, it is too verbose. Nesting begins and ends produces noise and reduces code readability.

    Think of assign, reset, rewrite, write and writeln as a minimal API to the outside world

    Pascal simply tries to copy C’s printf and all. Nothing new, nothing to facilitate the output. Kinda good for text output, and not great for anything else. The world moved on to a new abstract API – streams. C++ does it way better.

    Units allow that type-checking and separate compilation, allowing the student to put aside debugged code and work on new code while relying on the old

    And they do it in a bad way. The world moved on to something better – namespaces and libraries. Units are somewhere in between the two, and limited in both ways.

    Pointers are essential for dynamic structures, the stuff of which practical applications are built

    No, they are not. Properly implemented reference types with automatic memory management hide all the nasty details that can send students screaming into the night.
    Again, it is about reference vs. value types. With reference types and GC you can do all these structures and never think of a pointer as such and their complexities.

    New and dispose were sufficient management for students.

    And absolutely useless.

    Because students’ projects are often just a few pages of code there really isn’t any need for anything else beyond VIM

    Well, you can plow with oxen. You can even plow manually, without oxen, with just a spade. Then anyone with a tractor will be thousand times more efficient then you.

    Robert, the world moves on. So must teachers.

  54. Deaf Spy decried PASCAL’s

    1. Syntax.
    2. Complexity – the whole concept of units is outdated.
    3. Memory-management and pointers.
    4. OOP concepts.
    5. IO operations.
    6. Toolsets.

    On the contrary. A minimal syntax which allows all the basic operations on computing hardware is sufficient and easier for students. Indeed, I/O was not in the basic concept as it is somewhat dependent on external matters such as hardware and operating system. Think of assign, reset, rewrite, write and writeln as a minimal API to the outside world. Units are a simplifying feature not complexity. In the original concept, the whole application was compiled from source at once so that strong type-checking could be enforced. Units allow that type-checking and separate compilation, allowing the student to put aside debugged code and work on new code while relying on the old. Units also allowed students to have strong type-checking with procedures, types and storage locations in the libraries, something essential to learning to use those effectively. Pointers are essential for dynamic structures, the stuff of which practical applications are built. Not having pointers would have limited students to stuff barely beyond “Hello, World!”. New and dispose were sufficient management for students. When virtual memory came along there were other means but PASCAL was started in the days of 8 and 16-bit computers. These are sufficient for most students’ exercises. OOP makes a lot of sense for large applications but those are not necessary to learn the building blocks of computer science. Toolsets… Students are usually capable of text-editing when they reach PASCAL so there’s no toolset to learn. Because students’ projects are often just a few pages of code there really isn’t any need for anything else beyond VIM or NANO. KATE was the most advanced editor I used/taught for decades before Lazarus was workable. Lazarus always seemed to have the wrong paths set up by default whereas simple text-editors were good to go.

  55. Deaf Spy says:

    Currently, I see absolutely no reason why one would start teaching programming in Pascal instead of Python or C#. Pascal is inferior to both in terms of:
    1. Syntax.
    2. Complexity – the whole concept of units is outdated.
    3. Memory-management and pointers.
    4. OOP concepts.
    5. IO operations.
    6. Toolsets.

    The list is not intended to be exhausting.

  56. Deaf Spy says:

    Students don’t need to be wasting their time learning to use some IDE/toolset.

    Exactly, Robert! That is why good toolsets are better than poor toolsets. Good ones take less time to learn. Pressing F9 (default key for TP / BP / Delphi) to get your program compiled, linked and executed is much easier than perform three separate steps. Double-clicking in the gutter to set a breakpoint, click F5, then hover over a variable and see its value and type, is much better than having to open a couple of Windows and navigate around the code to get all that information.

    You don’t need to start with oxen to learn to plow, Pogson. You can simply start using a tractor.

  57. Deaf Spy wrote, “no Pascal IDE / toolset has anything interesting to show to the world without being laughed at.”

    That’s not true at all. Students don’t need to be wasting their time learning to use some IDE/toolset. They need to be concentrating on fundamental principles of computer science and technology: systems, processes, storage, computation, algorithms, and data-structures. After they have that you can properly offer them other layers but they have to get the fundamentals first. You don’t need to drive a Cadillac to get the benefit of the wheel. PASCAL is ideal as a first or second programming language. It doesn’t need a lot of crap to get in the way of learning/teaching that. Try teaching calculus/complex arithmetic to most first-graders. It won’t work. Introduce them to fundamental concepts a few at a time and you lead, follow or get out of their way. Learners have multiple ways of learning but very few are comfortable or efficient learning the big picture first. It’s information overload and distraction from the key purpose of education, to provide information and skills upon which great things can be built.

  58. Deaf Spy says:

    Robert, you may not like it, but all these many Pascal compilers you speak of are all niche products. The only popular ones were these by Borland, fact. Brought to this world by Anders, hallow may his name be. Why? Because Turbo/Borland Pascal and Delphi had a great toolset for their time:
    1. You got very good editor, with integrated, fast compiler and debugger that allowed way many things without resolving to arcane two-character commands.
    2. A bit later on (TP/BP 5+, then Delphi) you got great libraries for writing apps: TurboVision, Paradox Engine, OWL, VCL, BDE… Without these, the compiler would have never gained its popularity.
    3. Delphi had unique for its time data-binding technology, easy to use with just point-and-click.
    4. Delphi swiped the floor with all the RAID IDEs at its time, until the sad 2000. Then .NET came out and Borland found themselves totally lost and clueless what to do.

    Fast-forward today, no Pascal IDE / toolset has anything interesting to show to the world without being laughed at.

    Ah, and if you bought the full version of BP / Delphi, you got all the sources, including the sources of RTL and even its assembly parts. You could rebuild everything and debug through it.

  59. Deaf Spy says:

    Pascal is a nice language for teaching programing, I will gladly admit. But, it is old. Several things that don’t suit modern development:
    1. Crap like with, too much keywords like being and end.
    2. Archaic library model, based on units.
    3. Archaic memory management model.
    4. Dynamic arrays are a poor replacement for a solid collection library, and can lead to very inefficient code. Something that still lacks in any Pascal environment. For everything you need to re-invent the wheel. Generics came too late to the party.
    5. Syntax inconsistencies between objects and pointers.

    These are all minor inconveniences. The most serious issue stems from the total inferiority of the current toolset. Development tools – editors, debuggers, are so crappy compared to what VS can do for you (even Eclipse is head and shoulders above) that it hurts.

    Python is nice, too, but they made a mess with 3.x not quite compatible with 2.x. C# is, however, something quite nice.

    You may argue that C#, being fully OOP and managed, doesn’t teach students stuff about pointers and all.

    But, I will counter that. You don’t have to teach students pointers and memory management. Modern hardware made efficient memory management so complicated, that manual attempts by non-experts on the particular platform will result in sub-efficient performance. C# has something better than pointers – good distinction between value types and reference types. Once you manage to communicate this through, you have a great win.

    If you also don’t like OOP constructs for a start, you can always work with static methods and partial classes and forget about OOP at all.

  60. DrLoser wrote, “How many hundreds of lines have you, personally, programmed in Pascal since, say, 2010?”

    I don’t know, but the directory where I put most of my stuff has 6K lines of Pascal, about half of which I wrote. I’ve written other stuff that has not followed me over the years but I doubt it was more than a few K lines. In my younger days, I would write about 1K per month along with other duties as assigned. Most of that was number-crunching of which there was a lot in nuclear physics, but also control-systems and sorting/merging. I used several different assmblers/machine-languages and a dozen or more higher level languages of which two were Pascal and Modula-2, both products of Wirth. Modula-2 was much like Pascal but with extra features for dealing with underlying hardware like bits/registers/interrupts. For some reason, I never encountered C until I was working with Linux many years later. I guess it wasn’t pushed on IBM System 360/370 and just wasn’t needed on our PDP11s and VAX. We didn’t use a UNIX-like OS until GNU/Linux. A gazillion languages were available and I just didn’t need all of them.

  61. olderman wrote, of Pascal, “it is also being abandoned as a teaching tool increasingly in favor of Python.”

    I know Python is practical. In my home province, a student is expected to be exposed to two languages or more. Python is often one and so is Pascal. I think Pascal is a better first language. A student who knows what a fussy compiler like Pascal is doing will better appreciate a helpful interpreter like Python. These days computers are so fast that a compiler isn’t at much of a disadvantage to an interpreter as they were in the old days. e.g. a benchmark shows C, Pascal, Java and JavaScript all competitive…

  62. DrLoser wrote, “Most of us want a programming language that, in some sort of way, increases our personal value.”

    That should be “some of us”. If you want to be some stock part in M$’s machine, that might make sense but most of us want to use the best tool for the job. If you want to teach students how to write programmes rather than to code in C, you use the right tool for the job, a language and compiler designed for that task. Students who learn to programme well in Pascal are ready to learn any number of other languages because they now have the discipline to do things right the first time, get the logic right and clearly communicate to the compiler their wishes. It’s harder for students to do that with many other languages. e.g. In the Alberta curriculum, teachers were taking years to go through the basic concepts of computer science in programming because they were wasting years teaching how to programme in one language or another. Meanwhile, students can become decent masters of Pascal in a few days and get on with the learning. I was absolutely amazed when I first figured out what other teachers were doing wrong. The Alberta curriculum is brilliant because it allows parallel processing for the teaching/learning whereas most teachers were using serial processes with learning C or whatever being major bottlenecks. I was easily able to teach all the high school curriculum for programming in grade 10 whereas other teachers were taking grades 10, 11 and 12 to do the same. Some bright students in grades 7-9 could do the work too. Pascal is the right tool for the job.

  63. DrLoser wrote, “show us that GEBC online improvement using Pascal that you have been advertising for the last four years or so.”

    I have done so, in C, back in 2011 and in Pascal, back in 2013. There’s more to come.

  64. DrLoser says:

    Naturally, Robert, you are welcome to contemplate the wonderful Pascal semantics of with.

    Give it a go. Amuse us.

  65. DrLoser says:

    Which is pretty well my position. I was teaching that stuff to grade 9/10 highschool students. The University was getting first year students with little or no exposure and needed to do it right. Cish languages don’t cut it.

    Triffic. You are an inadequate teacher of an out-moded language that was only ever designed as a (very fine) teaching aid in he 1980s.

    Good ‘nough, Robert. Now. An innocent question.

    How many hundreds of lines have you, personally, programmed in Pascal since, say, 2010?

  66. DrLoser says:

    Cish languages don’t cut it.

    Excellent, Robert!

  67. DrLoser wrote, “Did either of you, even once in your life, experience the joy of using either Borland Pascal or Borland Delphi?”

    I did. Borland offered Pascal as a $free download some years ago, just to celebrate that history. It might still be out there (Yes, it is, along with other “abandonware and beta software”). FreePascal is more or less compatible but under current development and self-sustaining, even compiling itself. I don’t think Borland ever gave away the code of their thing. I don’t think I did anything more than “Hello World!” with Borland because about that time I no longer had/needed access to That Other OS. I guess it would run on Wine but I don’t think I tried that.

  68. DrLoser says:

    In fact, the whole point of the discussion, as I see it, is that there’s no natural ordering between any two symbols of a character set (e.g., “is ‘;’ less than or greater than ‘@’?” is a pointless question), while the char type that the computer uses to represent the character set is really just a subset of the integer type, and is, therefore, ordered by nature.

    Luvr has pretty much summed that discussion up. (:)).

    Moving on then.

    Got a solution for “QUACKABLE,” Fifi, you miserable excuse for something that hangs around a lamp-post in a red leather miniskirt and pretends to have even the vaguest comprehension of Computer Science?

    No?

    Thought not.

  69. DrLoser, referring to PASCAL, wrote, “for a variety of reasons, nobody at all uses it these days.”

    See for instance, BACK TO PASCAL: RETRO BUT NOT BACKWARDS (University of Calgary)

    “For a few years we used ‘C’ in the first course, but this was quickly abandoned in favour of C++ as it was felt we needed something with more market appeal.
     
    Up until this year we used C++ in both our first courses. The approach we have always used involves covering the introductory sequence in three semesters. In the latest ACM Curriculum, this is now recognized as the CS101-102-103 sequence. After three years of teaching with C++ we felt that students were unnecessarily frustrated by the language itself, and this was not merely the result of inexperience in using it as a tool. As it turns out, our students weren’t the only ones to experience this frustration.
     
    Late in 2000 discussions began to pave the way for another language change. The proposal was to move to Pascal in CS101 and Java in CS102 from the outset, and most were in favour of switching to Java as an OO language. A few did have difficulty with the move to Java. One felt it was impossible to teach OO without access to multiple inheritance. A few others were concerned that students would be left with no experience in C/C++. The latter was addressed by offering to introduce C in the final weeks of CS102 and by spending more time with it in our required 2nd year architecture course. The proposal to switch to Pascal met with very mixed response, including some who were in severe opposition.

    One of the key factors influencing the final acceptance of the Pascal had to be the realization that the audience is assumed to have no experience with programming. The over-riding concern was to be able to move beginning programmers to the intermediate stage as smoothly as possible. The argument was made that Pascal does fulfill the requirements outlined above. It is known to be easier to learn for beginners. It also possesses a number of additional advantages. Perhaps chief among them is the fact that the entire syntax can be presented formally on 2 sheets of paper. With Pascal we have an opportunity to introduce the concept of formal languages in first year – something we couldn’t do with C++. No parts of the language are “off limits” to beginners so there is less to complicate the concepts. Standard Pascal compiles the same way everywhere. Pascal warns about uninitialized variables, won’t permit array bound violations, implicit type conversions, and distinguishes between real and integer division. While an experienced programmer is likely to find these “features” restrictive, all of them are useful for beginners. Pascal has clearly defined parameter passing mechanisms (no defaults). It permits no statement side-effects which is typically a difficult concept for beginners. Since the language is so restrictive, it will allow us to concentrate more on algorithms & problem solving and less time on syntax, thus students can begin creating substantial programs sooner. Using Pascal, we can still cover all the major concepts including pointers and recursion (which we didn’t have time for with C++). Pascal compilers typically have more meaningful error messages and the restrictive nature of the language helps to foster more disciplined programming.”

    Which is pretty well my position. I was teaching that stuff to grade 9/10 highschool students. The University was getting first year students with little or no exposure and needed to do it right. Cish languages don’t cut it.

  70. DrLoser says:

    Pascal by standard has a locked encoding.

    Interestingly, Princess, no it does not.

    Normally I would refute your obdurate ignorance by asking for, say, a sample program. Or perhaps a bit of language grammar. But in this particular case, and God forgive me, I am going to require a cite via Google.

    Bust yer chops on that, girlie.

  71. DrLoser says:

    Nonsense. Pascal is a standard language.

    Not really. Consider either Cobol or Fortran.

    Either one has a legitimate claim to be a “standard language.”

    I am fairly certain that there is no possible way, Robert, that you can in any sense make the case that Pascal is a “standard langage.”

    Because it is not. It is a language with a 1990 standard. That is all.

    And for a variety of reasons, nobody at all uses it these days.

    Not even you, apparently.

  72. DrLoser says:

    DrLoser named arrays instead of numbers the fact the program langauge encoding is locked in fact prevent different encodings causing hell.

    I’d let this wash by, except that Fifi’s following four bullet points are an exact replica of his earlier post. And make equally little sense. And similarly do not address the issues of code pages or coding points.

    I am, as I say, a generous man

    And as such, I devoutly hope that Fifi will somehow find a way to spell the word COMPILER correctly.

    Far too much to ask from a cretinous imbecile who evidently relies on the Internet for his enjoyable, stupid, yet easily disproven observations.

    Happy New Year, Fifi!

    (And yes, I did indeed “name arrays instead of” what, in that inscrutable way you have, “numbers.”)

    Shall we proceed from that particular point, Princess? I don’t advise it. I will beat you senseless.

  73. DrLoser says:

    It was $free with no documentation…

    Spiffy.

    And yet not quite as satisfying as a professional alternative with documentation.

    Your move, Elder Sage of the Plains.

  74. DrLoser says:

    Between 1990 pascal standards and the ratification UTF-8 as subtable replacement ISO 646 so able to be classed as new version(1998) there is a time frame of gray where implementations of pascal do all kinds of stupid.

    Have you considered a career writing Science Fiction, Fifi?

    I merely ask this because you are evidently incapable of writing in any form of English that would conform to the requirements of a scientific discipline. But, that notwithstanding, this sort of refined gibberish would appeal to hundreds of thousands of uninformed teenagers. Add a few dragons, a castration scene or two, and — Win!

    Not to distract you from your Magnum Opus … as if I ever could … but what the hell was that drivel supposed to mean, Fifi?

  75. DrLoser says:

    I think the following is worth repeating, as regards Pascal:

    Mind you, the only reason why Pascal ever achieved popularity is… Anders Hejlsberg, since Microsoft failed miserably to create a decent Pascal development toolset. First it was Turbo Pascal, and then it was Delphi.

    As far as I can recall, either Turbo Pascal or Delphi cost something like $49.99 or $65 or some such. Either one would be within the budget of a serious programmer.

    Now, I cannot claim to be serious. (I can, unlike Fifi, claim to be a programmer). But I am driven to ask the following question to Messrs Pogson and oiaohm:

    Did either of you, even once in your life, experience the joy of using either Borland Pascal or Borland Delphi?

  76. DrLoser says:

    Pogson: Pascal is great! Do it my way!
    Spotty teenager: I’d prefer to use JavaScript and NodeJS, Sir.
    Pogson: You don’t know what you’re talking about! Just use 1980’s Tech! By the Norse Gods and Loki in particular! It has always been good enough for me, and it will always be good enough for you!

    Regrettably, Robert — most of us have moved on from the 1980s. It is no longer good enough. (A moment’s thought on the question of ordinals versus code pages should convince you of that. I will forebear comments on covariance and contravariance. Not to say Hindley-Miller, amongst other now ancient yet relevant matters that have somehow escaped your attention.)

    It’s a dead language, Pogson.

    Either admit that fact, or alternatively show us that GEBC online improvement using Pascal that you have been advertising for the last four years or so.

  77. DrLoser says:

    It was $free with no documentation…

    And herein lies the problem, Robert. Most of us want a programming language that, in some sort of way, increases our personal value.

    One good such language is still C. Works for embedded stuff. Works for the 100 or so people who toil at the coal-face of the Linux Kernel, and maybe 1,000 more who toil at a similar coal-face with drivers. (Nota Bene: I am not in any way disparaging this effort. Quite the contrary.)

    Java is apparently good, for the sort of person who enjoys that sort of work. C#, on my five years’ experience, is basically a much nicer version of Java.

    JavaScript (which has nothing at all to do with Java) is coming up on the rails. (Not Ruby. Small joke.)

    Perl used to be popular, but for some reason I do not understand is incomprehensible to the massive amounts of divots who are prepared to live somewhere below the bread-line and spend their useless deformed pointless little lives chucking out PHP garbage.

    Which leaves, as far as the mainstream goes, Python.

    I wholeheartedly recommend Python to you, Robert. I absolutely guarantee that you will enjoy the experience.

    Obviously, you are more than capable of piddling the rest of your life via a decades-long futile teaching language with I18N flaws such as, say, Pascal.

    Your choice, basically.

  78. olderman says:

    “PASCAL is great. It enforces the discipline children lack and it’s very easy to learn quickly, just what kids want. It’s also inexpensive which is great for teachers/schools. I consider that discipline makes PASCAL superior to BASIC/Python/Ruby/PHP/C etc. for education.”

    And it is also being abandoned as a teaching tool increasingly in favor of Python. You may wish to check out

    https://www.python.org/community/sigs/current/edu-sig/

  79. Deaf Spy wrote, “FreePascal became to life only to continue the live of Borland Pascal when Borland abandoned MS DOS. There is not a single other Pascal compiler that can make any difference in the PC world out there.”

    Nonsense. Pascal is a standard language. GNU has a compiler. I’ve used a compiler on Macs but I don’t remember the name of it (~1997, Think Pascal – I found it in this list… It is deceased.). It was $free with no documentation… It worked quite well except that I had to figure out some parameter lists by trial and error, because I did not have that documentation. So, while Deaf Spy is nearly correct, he is not. There are many other extant PASCAL compilers out there and still used, perhaps not very widely but they have a place. PASCAL was designed for teaching/learning and it’s still one of the best for that. It’s not as good as the touchy-feely things out there for young children but once they are literate, PASCAL is great. It enforces the discipline children lack and it’s very easy to learn quickly, just what kids want. It’s also inexpensive which is great for teachers/schools. I consider that discipline makes PASCAL superior to BASIC/Python/Ruby/PHP/C etc. for education.

  80. Deaf Spy says:

    Between old pascal to modern pascal there is 8 years of non conforming to standard pascal with all kinds of evil caused by non conformance.

    Really, Fifi, and once again, for the third time. What are these conforming compilers?

    We agreed that FreePascal is not such, due to its compiler magic with writeln(), which you keep saying is against the standard. (Bwaha-ha-ha)

    Mind you, the only reason why Pascal ever achieved popularity is… Anders Hejlsberg, since Microsoft failed miserably to create a decent Pascal development toolset. First it was Turbo Pascal, and then it was Delphi. FreePascal became to life only to continue the live of Borland Pascal when Borland abandoned MS DOS. There is not a single other Pascal compiler that can make any difference in the PC world out there. Not one.

  81. oiaohm says:

    Between 1990 pascal standards and the ratification UTF-8 as subtable replacement ISO 646 so able to be classed as new version(1998) there is a time frame of gray where implementations of pascal do all kinds of stupid.

    Modern Pascal is those using UTF-8 and after 1998. Between 1990 and 1998 you have items like turbo pascal that are using codepage over 8 bit chars. Codepage hell is technically only a 8 year section of pascal history. Between old pascal to modern pascal there is 8 years of non conforming to standard pascal with all kinds of evil caused by non conformance.

    Yes your example of “а”…”я” in something like non conforming turbo pascal can build and go horribly wrong. Freepascal maintains modes to be compatible with that non-conforming crap.

    That the thing the problem you have been referring has been legacy code for over 10 years and never a standard conforming code. Pascal standard has always been dead clear on what chars you were allowed to use.

  82. Deaf Spy says:

    The standard is clear on this. A-Z is supported.

    Good, Fifi, I will give you this. Then, the feature is even less useful. I really wonder why would Robert jump in to defend it?

    And please don’t let your latest non-sense about JavaScript distract you, Fifi. Tell me, Fifi, what are these mysterious “modern Pascal compilers”? And what the hell is “modern Pascal code”?

  83. oiaohm says:

    Deaf Spy FreePascal has flags to go way from standard in this area and the current day dephi also is unicode out box.

    Then, if in Bulgaria I declare an array from “А” to “Я”, suddenly I will get three elements more which I can’t even find on the keyboard. If I declare it as “а”…”я”, then there will be only two more. And you call this “no risk”.
    The standard is clear on this. A-Z is supported.

    1) The subset of character values representing the digits O to 9 shall be numerically ordered and contiguous.
    2) The subset of character values representing the upper case letters A to Z, if available, shall be alphabetically ordered but not necessarily contiguous.
    3) The subset of character values representing the lower case letters a to z, if available, shall be alphabetically ordered but not necessarily contiguous.

    This in iso 7185 is still in current day standard ISO standard.

    If I declare it as “а”…”я”,
    By standard since ”я” is not between a and z in UTF-8 unicode or ISO 646 or ASCII 7bit complier throws error as standard mandates end of story.

    Basically ISO/ANSI to standard pascal complier is not going to have the problem you describe other than throwing a complier error and not building the code. Only a non-conforming pascal complier is going to build a mistake like that.

  84. Deaf Spy says:

    Fifi, sweetie,

    Deaf Spy javascript also has char index arrays.

    Who cares? We discuss Pascal, little one. For the record, Fifi, JS does not have this. Unless you consider automatic conversion of “1” to 1, but hey, JS is not strongly-typed, and it is not in the same league as Pascal by any means.

    Follows total non-sense, then this:

    Any modern pascal complier using modern pascal code is running no risk using Character-indexed arrays. Its only legacy code with that problem.

    Fifi, what are these mysterious “modern Pascal compilers”? And what the hell is “modern Pascal code”? We already agreed that your once favorite FreePascal is no longer “standard”. Now, perhaps it isn’t even modern? Tell us, Fifi, make us laugh!

    Then, for a change, let’s consider that a hypothetical “modern Pascal compiler, using modern Pascal code”, actually uses Unicode. Then, if in Bulgaria I declare an array from “А” to “Я”, suddenly I will get three elements more which I can’t even find on the keyboard. If I declare it as “а”…”я”, then there will be only two more. And you call this “no risk”.

    You are an endless entertainment, and an incompetent lying fraud.

  85. oiaohm says:

    Character-indexed arrays and “with” clause may be stupid beyond comprehension, but Pascal has some rather good features:

    Deaf Spy javascript also has char index arrays. The universal thing for char index arrays is set and predictable encoding. ISO and ANSI standards of Pascal have defined encoding. So do all standards of JavaScript also have encoding.

    True not all languages should contain this feature. The feature should have been removed in the time frame that people decided to use charmaps over Pascal source code and make their compliers non conforming.

    The reality here Deaf Spy the idea you put up were from what non conforming Pascal implementations allowed. Yes being stuck to only ISO646 until 1998 kinda was not friendly. Any modern pascal complier using modern pascal code is running no risk using Character-indexed arrays. Its only legacy code with that problem.

  86. Deaf Spy says:

    Btw, I don’t want to sound purely negative to Pascal. Character-indexed arrays and “with” clause may be stupid beyond comprehension, but Pascal has some rather good features:

    1. Strict typing, compared to C.
    2. Native support for strings, treating them as first-class citizens, not some isolated case of arrays.
    3. Simple assignment statement constructs, which produce a much clearer code.

    Then Anders Hejlsberg made it a very reasonable language by adding:
    4. OOP support with properties. Something that Java still doesn’t have.
    5. Class procedure types.
    6. Dynamic strings, larger than 255.

  87. Deaf Spy says:

    hm, damn editor…

    …and that using arrays indexed on characters is one of the worst features of Pascal.

  88. Deaf Spy says:

    Not quite. There’s no way you can ever map real numbers to ordinal values. It’s simply mathematically impossible.

    Yes, and… No. Yes, when speaking from the point of view of Mathematics. No, when speaking from the point of view of computing. Because, real numbers are never presented properly in computers. In stead, they are presented as approximations. All real number data types – single, double, extended, decimal, if you’d like, they all store an approximation of the actual real number. “Sad but true”, Luvr.

    At the end of the day, they all are serialized as a set of bits. Consequently, these approximations that computers work with pretending to be real numbers, can be mapped to an ordinal value.

    In fact, the whole point of the discussion, as I see it, is that there’s no natural ordering between any two symbols of a character set…

    … and that the whole idea of Pascal to use arrays indexed by characters is bad, perhaps one of the worst two ideas of Pascal.

  89. luvr says:

    Robert Pogson said, “That was true for analogue computers but digital computers always work from some modulus like 2^32 or 2^64 so “real” numbers are actually “rational” so there’s always a way”

    True, but the mapping will not be complete, as opposed to the mapping between a character set and a range of sequence numbers. You cannot map any arbitrary real number to some computer representation, then back, and expect to get the original number back in all cases. You can do that between characters and numbers, once you set up the corrrespondence between the characters and the numbers.

    In fact, the whole point of the discussion, as I see it, is that there’s no natural ordering between any two symbols of a character set (e.g., “is ‘;’ less than or greater than ‘@’?” is a pointless question), while the char type that the computer uses to represent the character set is really just a subset of the integer type, and is, therefore, ordered by nature.

  90. oiaohm says:

    DrLoser named arrays instead of numbers the fact the program langauge encoding is locked in fact prevent different encodings causing hell.

    1. Compiled in CP1251, executed in CP1251. Works properly.
    2. Compiled in CP1251, executed in KOI8-R. Fails with undefined bugs.
    3. Compiled in KOI8-R, execured in CP1251. Fails with range errors.
    4. Compiled in KOI8-R, execured in KOI8-R. Fails to comply with functional requirements.

    This is all dependent on the Programming language not having a locked encoding. Reality the conversions listed are not allowed by pascal standard.

    Now, let’s imagine for an instance than the character index comes as user input and analyze the run-time behavior. The input is sanitized properly to be in the range of ‘а’…’я’.
    Programming languages with locked encoding mandate translation. Unicode supporting Pascal by ISO is UTF-8 default. So CP1251 and KOI8-R. input would be converted to UTF-8 before being processed. No fowl.

    Pascal by standard has a locked encoding. Same reason why javascript can use same type of stuff safely. Why javascript mandates UTF-8. Pascal standard over it time mandate 4 different encodings.

    Now when you leave conforming {$codepage xxx} come into effect this is pascal you declare encoding then runtime/compiler to perform the match up.

    DrLoser “Pascal character-strings, are we” in fact “for information exchange” covers the default string format in pascal. That 1 line has huge effects on the standard.

    To be current pascal standard conforming to modern a input string not in UTF-8 has to be special declared or it should be converted to UTF-8 or platform unicode. If converted to platform Unicode the UTF-8 in the source code would be converted to platform Unicode as well. Default pascal code will not have the conversion issues due to mandated so input that is to mandated has to be converted by the runtime/complier code to unicode.

    The for information exchange limitation means that a CP1251 for old standard has to be converted to ISO 646 before being process. Of course this causes disappearing char issues. Borland does a hack around issue by declaring all strings UTF-16 then ISO/ANSI Pascal standards proposes a completely different solution using UTF-8.

    You program might set a codepage wrong on file and have a issue as it converted to either UTF-16 or UTF-8.

    Supporting old non standard conforming pascal code the teeth can come out. Like the {H-} that makes pascal support 255 bit chars with code page overlay. But this is disabling a feature to leave standard.

    The reality is the standards of pascal define how multi encoding should be handled to avoid platform hell. Yes an ansistring in pascal is UTF8 unless particularly declared otherwise and current standard says this will be default string.

    Shortstring what is {H-} in freepascal for strings is the old non conforming implementation using system code pages. But doing a char compare from pascal the source code unless stated otherwise is UTF-8 for non ISO646 chars. So its now up to the runtime/compiler to make sure shortstring compare works as expected.

    You know you have really horible pascal code when you see {codepage -something other than utf8-} Of course the runtime/complier is still maintaining sanity.

    This is not allowed by standard “Compiled in CP1251, executed in KOI8-R.”
    Complied in ISO646, ASCII 7bit or UTF-8 is all that is allowed by Pascal standards. Borland adds UTF-16.

    Yes the reality here is CP1251 or KOI8-R your source code for pascal should not have been in those in the first place.

    Basically using codepages over a 8 bit text is not part of Pascal standard and is playing in non standard conforming area.

  91. DrLoser wrote, “You cannot project, map, use what term you will, real numbers to an ordinal set.”

    Yes, you can. You can take some interval, say [xn,xn+1) and map them to n. It’s not 1:1 but it’s a mapping. Further, digital computers don’t work with real numbers. The numbers of a kind known as real in programming languages are actually rational. There is no exact representation of pi or e in digital computing, just arbitrarily close precision. Rational numbers certainly can be mapped to ordinal numbers. We can compare them and determine the order and pick a set of ordinals to use based on the number of bits in computer words and exponents, for instance. It’s not a particularly useful practice in many situations because the 2n exceeds addressable memory usually, but not always. For graphics of many kinds this operation is essential. That’s why many GPUs have tons of FP processors even though colours and bitmaps are quite finite.

  92. DrLoser says:

    Be honest, Robert.

    You have absolutely no clue what Deaf Spy is talking about, do you?

  93. DrLoser says:

    I’ve done that kind of transformation from the 1960s to the present day. It works.

    As bounds for a Pascal array, Robert?

    You want to go first, or should I?

  94. DrLoser says:

    I’ve just downloaded FreePascal, btw, Robert. Including the source. (Isn’t FLOSS wonderful?)

    Feel free to post anecdotal evidence — or botched efforts at programming, whichever — to support your claims.

    While you’re doing that, I might just look at the source code for Ord(c: Char) : byte

  95. DrLoser says:

    That was true for analogue computers but digital computers always work from some modulus like 2^32 or 2^64 so “real” numbers are actually “rational” so there’s always a way although it doesn’t make a lot of sense and it would be a lot more work than just copying the value and treating the result as a different type. ie. if x is your “real” number and it’s actually a/b where a and b are integers, then you can recover an ordinal value from it with a=b*x, assuming you have a way to hold the extra bits, lots of them, and you know the modulus of your computer.

    Whew! An incredibly long sentence that boils down to precisely what Luvr was saying.

    You cannot project, map, use what term you will, real numbers to an ordinal set.

    So then. Let’s get back to what Ord(c: Char) : byte is supposed to do. Remember that? It was the whole point of the recent discussion. (We can return to duck-typing later, by your leave.)

    Luvr is welcome to correct me, but I see his excellent point as being that there is no type coercion in Pascal, and that therefore, should you wish to perform arithmetic with a “pseudo-ordinal” type such as Char, you first have to down-cast it via Ord()

    (I may well have misrepresented Luvr here. If so, I welcome correction and apologise in advance.)

    Are you, Robert, for example, suggesting that there is some ordinal relationship between, say, phi and pi? Or at least an ordinal relationship that somehow depends upon an arbitrary bit precision?

    Because, Robert … if that is what you are suggesting … I am reasonably sure that both Luvr and I would disagree with you.

    Anyhoo … about them code pages …

  96. luvr wrote, “There’s no way you can ever map real numbers to ordinal values. It’s simply mathematically impossible.”

    That was true for analogue computers but digital computers always work from some modulus like 2^32 or 2^64 so “real” numbers are actually “rational” so there’s always a way although it doesn’t make a lot of sense and it would be a lot more work than just copying the value and treating the result as a different type. ie. if x is your “real” number and it’s actually a/b where a and b are integers, then you can recover an ordinal value from it with a=b*x, assuming you have a way to hold the extra bits, lots of them, and you know the modulus of your computer. Folks do this all the time in an approximate way when they plot positions of “real” numbers on graphs, converting real numbers into pixel-positions, say. They transform x like this, x’=int((x-xmin)*(pixel_range)/(xmax – xmin)) + starting_pixel, checking for “out of range” for sure… x’ will be a pixel number, an integer, an ordinal.

    I’ve done that kind of transformation from the 1960s to the present day. It works.

  97. DrLoser says:

    DrLoser go and look up what ” for information interchange.” means when written in a ISO standard and learn to eat humble pie here. Those 3 words have very strict meaning in ISO standards.

    Indeed, Fifi.

    However,

    a) This has no relevance whatsoever to the Pascal character-string (which is what we are talking about, when it comes to Pascal arrays) and
    b) Nobody has yet mentioned “information interchange.”

    In ancient times, we used to do “information interchange” via the medium of Dixie cups and a length of twine. More recently we have advanced to a digital version of this, invariably involving a transmitter and at least one receiver.

    Naturally, you, yourself, Princess, can handle this insouciantly merely by the yet-to-be-documented method of mind-microwaves.

    But, whichever medium of transmission you choose, we’re not talking about Pascal character-strings, are we?

    Just for once in your pitiful little life, Princess Magpie: try to stay on subject.

  98. DrLoser says:

    Not quite. There’s no way you can ever map real numbers to ordinal values. It’s simply mathematically impossible.

    Good catch, Luvr.

    Now, try marrying that thought up to an arbitrary code-page as applied to Pascal.

    🙂

  99. luvr says:

    DeafSpy said, “You see, Luvr, a value of any data type can be mapped to an ordinal value.”

    Not quite. There’s no way you can ever map real numbers to ordinal values. It’s simply mathematically impossible.

  100. DeafSpy says:

    Any way, ’nuff said: char is an ordinal type, period—no matter how hard some random nitwit keeps trying to claim that it is really a “non-ordinal ordinal type.”

    No, it is not. The fact that a char can map to an ordinal value doesn’t make it an ordinary type.

    You see, Luvr, a value of any data type can be mapped to an ordinal value. In a way no more different than a code page.

    Now I will give you and Robert a few guesses how that can be achieved (it is well hinted already in this thread). In the answer, you will see clearly that what you consider as a direct translation of char as ordinal type is nothing but an implementation detail, which is totally wrong in the whole picture.

    P.S. Fifi, don’t bother, sweetie, you are beyond any hope.

  101. DeafSpy says:

    Conforming Pascal compliers are very well behaved.

    Really, Fifiest Fifi Evar? Care to tell us about such? Let me remind you, fraud, that you first claimed that Free Pascal was such a “confirming” compiler as per writeln(), until all of us, even Robert proved the opposite.

    You are an incompetent and lying fraud, Fifi.

  102. oiaohm says:

    DrLoser
    ISO 646:1983, Information processing- ISO 7-bit coded character set for information interchange.
    You quoted the line and you were too much of a idiot to read it correctly.

    Before that line it says latter editions of the ISO646 standard is acceptable. Last edition of IS0646 is ISO 646:1991

    Reference the Pascal Standard that requires any of those four, please.

    Please learn to read before saying that I need to provide reference for any of those 4. The early ANSI standard is very hard to track down online. UTF-8 usage in Free-pascal in fact mentions the standard that allows it to use UTF-8.

    So pascal encoding are extremely limited DrLoser. Only 1 line in standard had to be found to confirm the limitation to 2 standards. The ascii 7bit is older and the UTF-8 is newer.

    DrLoser go and look up what ” for information interchange.” means when written in a ISO standard and learn to eat humble pie here. Those 3 words have very strict meaning in ISO standards. Encoding Storage, Reading and Writing standard is magically locked as soon as you start saying encoding standard for information interchange.

    Basically as I said you are absolutely worthless at reading ISO standards DrLoser.

  103. DrLoser says:

    Source code encoding screw up what happens is something that should not happen with any ISO or ANSI conforming Pascal complier.

    Source code encoding has nothing at all to do with Pascal character-strings, as is quite evident from the Standard, Princess.

    Try again.

  104. DrLoser says:

    So there are 4 possible and valid encoding of a pascal source file to conform to at-least 1 standard.

    Reference the Pascal Standard that requires any of those four, please.

    Otherwise — get the hell out of here. And stop with your specious ignorant Googling nonsense.

  105. DrLoser says:

    You’re just being your obnoxious old self. You know just as well as we all do that char is an ordinal type. If it weren’t, then the ord() function couldn’t even work on chars in the first place. As you are well aware, the only reason why Pascal needs the ord() function on chars, is its strong typing system. Pascal simply doesn’t allow you to do arithmetic on chars, so if you really, really, really do want to do arithmetic on them, you explicitly have to tell the compiler that you want to treat them as integers (which, technically, they actually are).

    Here, just for once in this interminable thread, Luvr makes a very reasonable and pertinent and, if I may say so, rather fascinating point.

    Now, I happen to feel that the entire requirement for Ord(c: Char) : byte is simply an (understandable) failure of the Pascal language, 1990 or prior. To whit: having seen what C does with casts, Niklaus Wirth and Anders Hejlsborg and other Pascal luminaries wanted nothing to do with the things.

    And if you don’t have the ability to down-cast (up-casting is quite correctly not an option in Pascal), then you lose the ability to map from non-ordinal types to a proper ordinal type, which as far as I am concerned is a type that obeys Peano arithmetic. I’m wide open to debate on this one.

    Pascal “simply doesn’t allow you to do arithmetic on chars” precisely because Chars are a bogus “ordinal type.” (Thus my “being your obnoxious old self.) However, it’s quite possible to map them onto a mathematically-correct “ordinal type,” which is the sole and admirable function of Ord(c: Char) : byte.

    I contend that there are several issues with this otherwise admirable aim.

    1) Code pages. Which wouldn’t matter if Pascal actually did Dictionaries, rather than a specious “array…” as Deaf Spy correctly points out.
    2) This 1990 standard thing. Did you notice the different specifications for [0..9], [a..z] and [A..Z]?

    Because I did. There’s absolutely no need for this requirement, either using ASCII-7 or UTF-8.

    There is such a requirement if you use EBCDIC, however. Quite common at the time. Which is why that particular clause was inserted into the standard, I would assume.

  106. oiaohm says:

    ANSI/IEEE770X3.97-1983 is where I was remembering the ASCII 7 bit from. Yes the old original ANSI standard of pascal did not include 8 bit char support either.

    So there are 4 possible and valid encoding of a pascal source file to conform to at-least 1 standard. ANSII 7 bit as per ANSI/IEEE770X3.97-1983 standard. ISO646:1983 or ISO645:1991 due to ISO646:1983 referenced in early ISO standard and really new UTF-8 as referenced in newer Pascal standards.

    ISO 646:1983, Information processing- ISO 7-bit coded character set for information interchange.
    Yes for information interchange included complier reading source code. If complier cannot process ISO646:1983 source code directly its not ISO pascal conforming. There is a newer Pascal standard after 1998 that states UTF-8. Source code encoding causing trouble should not happen with Pascal full stop because the standards state what encodings you should be using and they are almost 100 percent compatible with each other. Only using chars in ASCII 7 bit that are not in ISO646 should cause pascal trouble nothing else should. Yes UTF-8 is 100 percent ASCII 7 read compatible so compatible with the original ANSI pascal standard source code files.

    Source code encoding screw up what happens is something that should not happen with any ISO or ANSI conforming Pascal complier.

    Even C and C++ source code encoding really should not be causing hell as those fall through to ISO standard body default. Yes ISO body default unless standard states otherwise has been ISO 646 and is currently UTF-8.

  107. DrLoser says:

    DrLoser Hosting bodies I said for a reason. ISO/IEC standard prior to 1998 unless stated otherwise in the standard encoding to be used ISO 646 7bit from ISO/IEC themselves. After 1998 UTF-8 or ISO 646 7bit. Wait ISO 646 7bit processes perfectly fine in UTF-8. Yes an old ISO/IEC standard body rule so since you could not find it referenced in the ISO/IEC standard the char set to be used is ISO 646 7bit newer standard without defined encoding ISO 646 7bit or UTF-8.

    That is utter gibberish, Fifi. Try again. One simple sentence of less than thirty words, please.

  108. oiaohm says:

    DrLoser Hosting bodies I said for a reason. ISO/IEC standard prior to 1998 unless stated otherwise in the standard encoding to be used ISO 646 7bit from ISO/IEC themselves. After 1998 UTF-8 or ISO 646 7bit. Wait ISO 646 7bit processes perfectly fine in UTF-8. Yes an old ISO/IEC standard body rule so since you could not find it referenced in the ISO/IEC standard the char set to be used is ISO 646 7bit newer standard without defined encoding ISO 646 7bit or UTF-8.

    The is part of the problem of reading standards. Its not only want it written in the standard document its the certification body of standard also applies particular rules. ISO/IEC body rules prevented encoding hell if they are followed.

    ISO 646:1983 is incorrect in most cases why it has to be special mentioned.
    https://en.wikipedia.org/wiki/ISO/IEC_646
    1983 was invalidated by 1991.
    ISO646:1972. and ISO646:1991 are the two that can apply to a document published in 1991 unless ISO 646:1983 is particularly referenced in the standard.

    ISO 646:1983, Information processing- ISO 7-bit coded character set for information interchange.
    That is mentioned in the Pascal document because that is the supported encoding. If it was not mentioned with the 1991 publication date only ISO646:1972 or ISO646:1991 could have been used.

    Normative reference
    Yes the Normative reference bit is easy to overlook but it is in fact stating all standards it depends on. If pascal source files from early standards was to be encoded with other standards they should be mentioned in the Normative Reference area. So as soon as someone starts spewing on about pascal having issues with source files being in different encodings you know they are talking about non conforming pascal implementations. New implementations Pascal should be UTF-8 old implementations should be ISO 646:1983 and ISO646:1991.

    Yes I will put my hand up for forgetting that ASCII 7bit and ISO 646 are slightly different. For most cases in source code there is no difference.

    Source Code encoding causing issues in pascal are naturalized by standard if standard is followed. ISO body early on yes back in 1972 set down default encoding for standards that did not define char encoding as ISO 646. ISO back then was all about interchange.

  109. luvr says:

    DrLoser said, “Hoorah! A “char-type” is definitionally an “ordinal-type!” Except that, as the follow-on paragraphs point out … apparently Pascal doesn’t really require an “ordinal-type” to be, well, ordinal”

    You’re just being your obnoxious old self. You know just as well as we all do that char is an ordinal type. If it weren’t, then the ord() function couldn’t even work on chars in the first place. As you are well aware, the only reason why Pascal needs the ord() function on chars, is its strong typing system. Pascal simply doesn’t allow you to do arithmetic on chars, so if you really, really, really do want to do arithmetic on them, you explicitly have to tell the compiler that you want to treat them as integers (which, technically, they actually are). (Not that I’m telling you anything new here—no matter how hard you try to deny it, you have already been knowing this perfectly well all along.)

    Just take a quick look at, for instance, C, which doesn’t make any effort to hide the fact that chars are really just (single-byte) integers. In C, you can do something like the following:

    void *loser [‘A’];

    and you will have defined loser to be an array of ‘A’ void pointers (To be honest, I have know idea why you would ever want to do such a thing, but it is perfectly valid; it would be equally valid in Pascal if the language didn’t artificially—albeit with good reason—prevent it). The first element of the array will be loser[0] and its last element will be loser[‘A’ – 1]. How many elements there actually are in the array will, obviously, depend on the character set that the host system uses. On an ASCII system, for instance, there will be 65 elements in the array, and you can address the last one as, e.g., loser[64] or as loser[‘@’] or even as loser[2 * ‘ ‘], etc. On an EBCDIC system, on the other hand, there will be 193 elements in the array, and the last one will be loser[192] or loser[‘{‘] (assuming that the EBCDIC host computer supports braces—not all of them do).

    An other weird example would be:

    void *biggerloser [‘0’];

    which makes biggerloser an array of ‘0’ void pointers, the last of which you can address as biggerloser[‘0’ – 1] (but again, I fail to understand why you would ever want to do this).

    Any way, ’nuff said: char is an ordinal type, period—no matter how hard some random nitwit keeps trying to claim that it is really a “non-ordinal ordinal type.”

  110. DrLoser says:

    Oh, and Princess? Quit with the nitwit insults, if you please.

    Lets point out to the idiot who does not read standards.

    Deaf Spy, myself, and others not only read them, but we also cite what we honestly believe are the parts that support our judgement.

    All you do, Princess, is you throw in a URL — usually without even gracing it by an a-href — and then you expect the rest of us to do the actual work.

    Whilst you call us “idiots.”

    That’s no way to behave, is it, Princess?

  111. DrLoser says:

    This is a person who has missed that Html, Pascal and other standards have in fact limited the encodings you are meant to use for source files … Deaf Spy If you dig through the pascal standards and the hosting bodies there are only two permitted encodings for pascal source files. First 7 bits ANSI or UTF-8.

    I presume this is another instance of your fabled mantra “As a professional, I reserve the right to spew outright lies in a pathetic attempt to catch the opposition out,” Fifi. The reason I make this presumption is because you do not seem to be backed up by any part of the 1990 standard. I see no such requirement, either for 7-bit ANSI or for UTF-8*.

    I did find one or two interesting nuggets, though.

    ISO 646:1983, Information processing- ISO 7-bit coded character set for information interchange.

    This one just hangs there as part of 2. Normative reference. It doesn’t specify a requirement of any kind, as far as I can see. I’m not even sure why it’s there.

    6. Requirements

    6.1 Lexical tokens

    NOTE -The syntax given in this subclause describes the formation of lexical tokens from characters and the separation of these tokens and therefore does not adhere to the same rules as the syntax in the rest of this International Standard.

    6.1.1 General

    The lexical tokens used to construct Pascal programs are classified into special-symbols, identifiers, directives, unsigned-numbers, labels, and character-strings. The representation of any letter (upper case or lower case, differences of font, etc.) occurring anywhere outside of a character-string (see 6.1.7) shall be insignificant in that occurrence to the meaning of the program.”

    My emphasis. Only lexical tokens etc are required to follow this limitation. Not character-strings.

    Let’s examine 6.1.7, then:

    6.1.7 Character-strings

    A character-string containing a single string-element shall denote a value of the required char-type (see 6.4.2 2) . A character-string containing more than one string-element shall denote a value of a string-type (see 6.4.3. 2) with the same number of components as the character-string contains string-elements. All character-strings with a given number of components shall possess the same string-type.”

    That seems to weasel out of the question. On to the required char-type, then:

    6.4.2 2 Simple-types

    General

    A simple-type shall determine an ordered set of values. A value of an ordinal-type shall have an integer ordinal number; the ordering relationship between any two such values of one type shall be the same as that between their ordinal numbers. An ordinal-type-identifier shall denote an ordinal-type. A real-type-identifier shall denote the real-type.”

    Sounds straight-forward. We can discuss the concept of simple-type at some later date, should you wish, Fifi. Ah, but what do we have here?

    “d) char-type. The required type-identifier char shall denote the char-type. The char-type shall be an ordinal-type.”

    Hoorah! A “char-type” is definitionally an “ordinal-type!”

    Except that, as the follow-on paragraphs point out … apparently Pascal doesn’t really require an “ordinal-type” to be, well, ordinal:

    1) The subset of character values representing the digits O to 9 shall be numerically ordered and contiguous.
    2) The subset of character values representing the upper case letters A to Z, if available, shall be alphabetically ordered but not necessarily contiguous.
    3) The subset of character values representing the lower case letters a to z, if available, shall be alphabetically ordered but not necessarily contiguous.

    That’s a pretty piss-poor restriction by ordinality, if you ask me.

    Which is, I imagine, why the Pascal library function Ord(c: Char) : byte exists.

    The question of definition recurs in Annex E (Informative):

    Implementation-defined features

    A complying processor is required to provide a definition of all the implementation-defined features of the language. To facilitate the production of this definition, all the implementation-defined aspects specified in clause 6 are listed again in this annex.

    E.1 6.1.7

    The string-characters which denote an implementation-defined value of the required char­ type.”

    I don’t know how you read this, Fifi. I read it as an admission that the choice of “string-characters” is implementation-dependent, and any such choice is perfectly legitimate, so long as it adheres to the requirements of Annex E.

    Which Annex makes no mention of ordinality, nor even hints at such a requirement.

    * If there were to be such a requirement for UTF-8, you would still be left with discussing a mapping of code points, not with an ordinal set. We’ve been through this before, Fifi. You were completely unconvincing back then, and you are still completely unconvincing right now.

  112. luvr says:

    DrLoser said, “If, in Pascal, Char is an “ordinal” type, why then does Pascal provide the evident ordinal mapping of Ord()?

    Duck typing? 🙂 🙂 🙂
    (Quickly ducking…)

  113. oiaohm says:

    1. Compiled in CP1251, executed in CP1251. Works properly.
    2. Compiled in CP1251, executed in KOI8-R. Fails with undefined bugs.
    3. Compiled in KOI8-R, execured in CP1251. Fails with range errors.
    4. Compiled in KOI8-R, execured in KOI8-R. Fails to comply with functional requirements.

    Lets point out to the idiot who does not read standards.

    3 of 4 failures. Now, tell me again, how is indexing by a character a nice thing, Robert, especially for young students?
    This is a person who has missed that Html, Pascal and other standards have in fact limited the encodings you are meant to use for source files. Using random encodings gets random behavior.

    Deaf Spy If you dig through the pascal standards and the hosting bodies there are only two permitted encodings for pascal source files. First 7 bits ANSI or UTF-8. Anything else is an coding not permitted by any Pascal standards.

    Everything you have described is a case of breaching standard. Borland Pascal suffers from this problem and free-pascal catches it for compatibility reasons.

    So Robert Pogson example is not in fact to Pascal standard.

    Conforming Pascal compliers are very well behaved. Non conforming compliers in a lot of standards bring hell accepting stuff they should straight up reject.

  114. DrLoser says:

    DrLoser wrote, “Robert seems to have given up on his quest to prove that non-ordinal things in Pascal should somehow be considered ordinal”.

    Yes, Robert. And thank you for adding a definition that is unnecessary for either of us, although it might be useful to some of the other denizens of this site.

    You have yet to respond to my question. If, in Pascal, Char is an “ordinal” type, why then does Pascal provide the evident ordinal mapping of Ord()?

    Once you’ve answered that, we can proceed. Unless you answer that, you cannot even theorise that the Pascal Char type is definitionally ordinal.

  115. luvr says:

    DrLoser loves to throw around compliments like “blatant buffoon” and “thoughtless imbecile”, and whatnot.

    You’re suffering from a severe case of projection.

  116. DrLoser wrote, “Robert seems to have given up on his quest to prove that non-ordinal things in Pascal should somehow be considered ordinal”.

    ordinal: “Indicating order or succession; as, the ordinal numbers, first, second, third, etc. Contrasted to cardinal. [1913 Webster +PJC]”

    I suppose one could use random numbers as characters but I’m sure communications would have a low signal to noise ratio. I use character sets with fixed numerical values per character. It works perfectly if one does not randomly change character sets. Only DrLoser wants to live in a totally chaotic universe. That’s why he loses.

  117. DrLoser says:

    Now, let’s see. Robert seems to have given up on his quest to prove that non-ordinal things in Pascal should somehow be considered ordinal, after all. Which is of course Robert’s privilege. Not very convincing and all, but still, a privilege.

    Let us return, therefore, to Fifi’s “quest” for duck-typing in C.

    Worth repeating, since Fifi is trying to wriggle away from her insane belief that C supports duck typing. (Rather unsuccessfully, but her latest efforts are so hilarious that I applaud her efforts.)

    Consider the following:

    #define QUACKABLE typeof (void*)()
    void Quack();
    void BarkingMad();
    QUACKABLE FifiQuacks = Quack;
    QUACKABLE FifiIsBarkingMad = BarkingMad;

    A moment’s thought, Fifi, will tell you that you can pass either FifiQuacks or FifiIsBarkingMad through to the C run-time libraries, and they will not be able to discriminate between the two using typeof().

    But I forget. A moment’s thought is utterly beyond you, isn’t it?

    Did I say “a moment?” It’s been twenty three days.

    Is it possible that Fifi is suffering from Tin Foil Hat poisoning?

  118. DrLoser says:

    Now then, Robert.

    Given the obvious fact that Ord(c: Char) : byte exists — in fact, you have quoted its existence in one of your own posts, not ten earlier than this — how do you suppose this would work in the Cyrillic Alphabet, as cited by Deaf Spy, below?

    I mean, perhaps there’s a problem with naked Chars, as input from a keyboard that uses a Cyrillic code page (eight bits per char, I should remind you).

    Let’s remediate that problem via the very handy mechanism of mapping a given code page into an ordinal set via the use of the FreePascal library function Ord().

    I say “we,” Robert. Luvr has just disqualified himself from this exercise by being a blatant buffoon. You can no longer rely on oiaohm, who has unaccountably gone silent. And frankly I don’t think it’s even remotely possible.

    Which means it’s up to you, Mr Pogson.

    Show us a little Pascal program (ten or so lines should do) that makes use of a Pascal Array with a code page that represents the Cyrillic alphabet.

    Define a Pascal Array using Chars from that code page.

    Allow input of a single Cyrillic character. Which character shall then be used to index the array you have just defined.

    It’s a simple task, Robert. And as a pedagogue, it should appeal to you.

    Half an hour, and you can prove us doubters wrong!

  119. DrLoser says:

    Now then.

    Let’s ignore that entirely uninformative interjection by Student Luvr (:)) and try again.

    What, precisely, does Function ord (c : Char) : byte offer the Teeming Millions who use Pascal on a daily basis and are somehow convinced that delimiting an array with a pair of, shall we say, what is the word, oh, I remember now, it’s ORDINALS? (Even though this has been a rotten idea since the 1990s.)

    Either Char is “ordinal”, or it is not.

    Either Ord() performs the function of mapping the non-ordinal type Char onto an ordinal set, or it has no purpose whatsoever.

    I’m surprised it takes quite as long as this to drill the obvious conclusion into you guys.

  120. DrLoser says:

    DrLoser wrote, “If Char is an ordinal type, then what is the purpose of ord(Char) : byte?”

    The simple fact that you have to ask, shows that you know nothing about Pascal.

    Perhaps.

    Or, alternatively, it suggests that
    1) I do not accept the farcical idea that “Chars” taken from an arbitrary code page can be considered to be “ordinal” in any meaningful sense.
    2) Neither does the guy who wrote the FreePascal library function, Ord(Char) : byte
    3) There is apparently a difference between an ordinal type in Pascal, and the code-page defined “Char.”

    I don’t quite see how this is a difficult concept to grasp. I accept that Robert refuses to grasp it (witness his weird tergiversations below, involving “clean room scenarios” and the like). But I had thought better of … no, wait, Luvr, I’d pretty much pegged you as a thoughtless imbecile.

    Good Lord. Even Fifi knows better than to wade into this nonsensical argument. (Well done there, by the way, oiaohm. Evidently you are smarter than I give you credit for.)

    No point [me, Luvr] in attempting to discuss it in any meaningful way, then.

    True, Luvr. Very true.

    But not quite for the reasons you imagine.

  121. luvr says:

    DrLoser wrote, “If Char is an ordinal type, then what is the purpose of ord(Char) : byte?”

    The simple fact that you have to ask, shows that you know nothing about Pascal. No point in attempting to discuss it in any meaningful way, then. (Mind you, I don’t consider it a shortcoming if anyone is unfamiliar with Pascal; it’s just a neutral observation.)

  122. DrLoser says:

    That would not be appropriate for an introductory class.

    Who said anything about “introductory classes?”

    And what sort of teacher would introduce the very worst (and probably the most idiosyncratic) feature of a language in an introductory class, anyhow?

    Wait, I think I know the answer to that question.

    Indexing by any ordinal type is a part of the language. Get used to it.

    A quick question, Robert.

    If Char is an ordinal type, then what is the purpose of ord(Char) : byte?

  123. Deaf Spy, being a troll, wrote, “explain why
    var myarray : array[‘а’…’я’] of integer;
    has exactly 17 elements, and not 32 as the Russian alphabet mandates?”

    Just refer to the alphabets and the codepages. Neither I nor PASCAL created those codepages. If I were Russian and wanted to work with character subscripts in a compact way, I could define the array type to be from 0 to 255 in the character set or create a specific type. PASCAL is flexible.

    cat arrays.pas
    program arrays;
    type mychars = (A,Z,Q);codepage= array[0..255] of char;
    var whatever:array [mychars] of real;translate:codepage;
    x:array[mychars] of char;ch:char;n:integer;
    begin
    for n:=0 to 255 do translate[n]:=chr(255); translate[ord(‘A’)]:=chr(ord(A)); translate[ord(‘Q’)]:=chr(ord(Q)); translate[ord(‘Z’)]:=chr(ord(Z));
    x[A]:=’A’;x[Z]:=’Z’;x[Q]:=’Q’;
    writeln(sizeof(whatever),’ ‘,sizeof(x));
    whatever[Z]:=3.7;
    readln(ch);ch:=translate[ord(ch)];if ord(ch) > ord(Q) then halt;
    writeln(x[mychars(ord(ch))]);
    end.
    pogson@beast:~/pascal$ ./arrays
    24 3
    Z
    Z
    So, I can take a character from any codepage and use it to index arrays any way I want. PASCAL is a gneral-purpose programming language. You can do anything with it.

  124. Deaf Spy says:

    Imagine you go to teach to Russia, Robert. Russia, the country of Putin, who enforces Freedom as in Linux to the state administration. Should be a favorite place of yours!

    So, you teach a group of students, a class, you know. As everywhere in Russia, all students use KOI8-R. Now, as a prominent teacher, who’s done it for decades in multiple languages, starting with assembler, would explain why
    var myarray : array['а'...'я'] of integer;
    has exactly 17 elements, and not 32 as the Russian alphabet mandates?

  125. Deaf Spy wrote, ” Now, tell me again, how is indexing by a character a nice thing, Robert, especially for young students?”

    Students are often in groups, you know, classes. They can all work with a single set of characters. It’s FLOSS. You can tweak it any way you want. If you truly must ship an application that works anywhere with data from anywhere it would not be optimal but you could make the software locale aware and correct for such problems. Lots of applications filter inputs looking for malware/SQL injection so they could filter/translate the character set. That would not be appropriate for an introductory class. Indexing by any ordinal type is a part of the language. Get used to it. PASCAL is not the only language that permits that. I’ve done it for decades in multiple languages, starting with assembler.

  126. Deaf Spy says:

    Robert, let’s work on this wonderful piece a bit more, shall we?
    var myarray : array['а'...'я'] of integer;

    When compiled under code page CP1251, the array will have 32 elements as any normal Cyrillic-using human being would be expecting.

    When compiled under code page KOI8-R, the array will have exactly 17 elements. Which is kinda less than the 32 characters of the alphabet.

    This great effect just by changing the code page. Sweeeeet, isn’t it?

    Now, let’s imagine for an instance than the character index comes as user input and analyze the run-time behavior. The input is sanitized properly to be in the range of ‘а’…’я’.

    I know you can realize the consequences, Robert, but I will explain for our incompetent fraud, Fifi.

    1. Compiled in CP1251, executed in CP1251. Works properly.
    2. Compiled in CP1251, executed in KOI8-R. Fails with undefined bugs.
    3. Compiled in KOI8-R, execured in CP1251. Fails with range errors.
    4. Compiled in KOI8-R, execured in KOI8-R. Fails to comply with functional requirements.

    3 of 4 failures. Now, tell me again, how is indexing by a character a nice thing, Robert, especially for young students?

  127. DrLoser says:

    Now, to be scrupulously fair on the subject of ordinality in Pascal, I have followed Robert’s earlier cite on Char and found the following.

    Function ord returns the ASCII value of the char c.

    Declaration
    Function ord (c : Char) : byte;

    I’d run with this one, if I were you, Robert.

  128. DrLoser says:

    Then, don’t do it. It works. Why not? Data from some other locale, perhaps, but if the application and its data are in the same room that should not be a problem.

    Fascinating, Robert. In a single sentence, you have managed to anthropomorphise both “the application” and “the data.”

    Perhaps you would care to complete this uniquely silly trifecta by also anthropomorphising the room in question?

  129. DrLoser says:

    There’s obviously a faint possibility that you didn’t “go native” Oop North, Robert, so let’s try a language that may be more familiar to you. Say, Spanish.

    A fairly familiar ordinality, I would say, apart from
    * ce hache
    * elle
    * enye

    Still, who could possibly argue with a (computing) language construct that inadvertently either drops three characters out of twenty nine off the map entirely, or alternatively fails to sort them into the correct order?

    Exercise for the reader. What happens when you declare a Pascal array with a start boundary of ce hache and an end boundary of enye?

    I’m a rotten teacher. I freely admit that I have no clue whatsoever.

  130. DrLoser says:

    Perhaps Inuktitut might be a more down-home sort of example here of the difference between the ordinality of bytes and the ordinality of chars in Pascal?

  131. DrLoser says:

    In other words, what ‘a’..’z’ means for an English student is something quite different than what ‘а’..’я’ is for the Russian. And indexing for “ё” will trigger a nice range check error, or, worse, simply crash the program for the nothing suspecting student.

    Or the unsuspecting teacher.

    Naturally, Robert has long known of these perils. It’s important to a teacher to be on top of this stuff. Not to mention being embarrassing when you’re shown up in the classroom because you’re not on top of this stuff.

    Now, obviously, speculating on precise details here would be ad hominem, Robert. The sort of unacceptable ad hominem speculation that oiaohm, may his Little Cotton Socks be Blessed by the Spaghetti Monster, indulges in through a simple freakish element of his approach to IT that some … I could not possibly comment … might consider a personality disorder.

    Not you, Robert, not you. You have taught Pascal.

    So, presumably, you have at some point considered the effect of code pages and perhaps even written a few test programs involving foreign alphabets?

  132. DrLoser says:

    Deaf Spy wrote, of char in FP being like integers, “No, they are not.”

    Good. All three of us agree, then, Robert, as you have shown by your excellent cite re Char.

    * Chars are not like Integers.
    * Bytes are [for some value of “like”] like Integers.

    As you sagely proceed to demonstrate:

    A byte and a char are the same thing, except a char can be used as a character, or as part of a string type, and cannot be used in an arithmetic expression, while a byte can only be referred to as a numeric type. ”

    And then, rather unfortunately, you jump the shark:

    Deaf Spy wrote, “1. Characters are not translated to ordinal values in a clean, well-defined way.”

    They are in Free Pascal. They are like 8-bit integers.

    No, they ain’t. Bytes are “like 8-bit integers.” Chars are not.

    I think we may be converging on a very important point here.

    Do not index Pascal “Arrays” with characters!

    I don’t care whether those “characters” are typographical representations of the Pascal byte type or the Pascal char type.

    By all means, use as an index into a Pascal array the integer (precision and sign irrelevant here) the hex characters 0x50 or 0x52.

    Never use either the “byte” which is silently emitted when you type ‘R’ or ‘P’, or the “char.”

    Why? Why? I’m surprised we still need to explain this to you, Robert.

    We no longer live in a simple American National Standards Institute world.

    There is no guarantee that the order in your array will be maintained.

    Because, semantically, it is a dictionary.

  133. Deaf Spy wrote, of char in FP being like integers, “No, they are not.”

    ” A byte and a char are the same thing, except a char can be used as a character, or as part of a string type, and cannot be used in an arithmetic expression, while a byte can only be referred to as a numeric type. ”

    see Char

  134. Deaf Spy says:

    Again, let me go over this:

    var myarray : array['а'...'я'] of integer;

    Lets take Cyrillic code page, based on KOI8-R, one very popular in the non-Unicode world. (Mind you, when Unicode kicks in, your notion that characters map to ordinal values just like that goes down the drain).

    This code page, Robert, has the peculiarity I had in mind – letters do not come in alphabetic order. See how a certain letter – Ñ‘ is in the middle of nowhere.

    In other words, what ‘a’..’z’ means for an English student is something quite different than what ‘а’..’я’ is for the Russian. And indexing for “Ñ‘” will trigger a nice range check error, or, worse, simply crash the program for the nothing suspecting student.

  135. Deaf Spy says:

    They are in Free Pascal. They are like 8-bit integers.
    No, they are not.

    Care to read again and actually try to understand the implications of my examples for French and Russian?

  136. Deaf Spy wrote, “1. Characters are not translated to ordinal values in a clean, well-defined way.”

    They are in Free Pascal. They are like 8-bit integers.

  137. Deaf Spy says:

    No, Robert, it is you not getting it.

    A character is a bad candidate for an index for two major reasons:

    1. Characters are not translated to ordinal values in a clean, well-defined way.
    No, ASCII doesn’t count as such. Consider French. è. Where does it come in? After e? Or after z? In ASCII, it comes waaaay after z. And don’t get me started with Cyrillic. Do you know that some Russian ASCII code pages have a gap between small letters “п” and “Ñ€”?

    An array, declared as:

    var myarray : array['а'...'я'] of integer;

    would result in an array of not 32, but 50?

    And do you know that is some Cyrillic ASCII code pages (Russian again) the letters are not in alphabetical order?

    So, what are teachers going to do? Teach kids not to use their native letters?

    2. Using anything but ordinary value for an index is totally wrong approach to arrays. Anything else you have a key – value pair, where the key is not an ordinary, sequential value, is a dictionary. Result: you simply teach the students wrong.

    if the application and its data are in the same room

    This never happens in real-life, Robert.

  138. DrLoser, not getting it, wrote, “like Pascal, whose apparent Array semantics, when carried over to literally any other computer language you can think of, turn out to have a Performance Curse of O(log n)?”

    There is no searching involved. These enumerated types are matched to integers and the array is addressed in the same way as FORTRAN did it (constant + (index)*constant).

    You have a problem with using a character to index an array?

    cat arrays.pas;./arrays
    program arrays;
    type people=(fred, tom,alice,mary);
    var x:array [people] of string[44];
    var y:array [char] of integer;
    I:integer;p:people;
    begin
    writeln(sizeof(y));
    x[fred]:=’lazy’;
    x[mary]:=’smart’;
    x[tom]:=’lazier’;
    x[alice]:=’smarter’;
    for I:=0 to 4 do
    begin
    writeln(x[people(I)])
    end;
    for p:= fred to mary do
    begin
    writeln(x[p])
    end
    end.
    512
    lazy
    lazier
    smarter
    smart

    lazy
    lazier
    smarter
    smart

    Then, don’t do it. It works. Why not? Data from some other locale, perhaps, but if the application and its data are in the same room that should not be a problem.

  139. DrLoser says:

    I especially used to like translating signal processing algorithims for the stack based 8087.

    Your perverted ancient memories are of no consequence on this shiny modern site, Olderman.

    However, you have inadvertently stumbled on a solution to all of Robert’s — yea, two years or so — technical issues with a reimplementation of GEBC to Pascal. I wouldn’t necessarily recommend tunnelling down through the turtles to I8087 — although Robert seems to be happy to quote his compiler when it does so.

    No no no. A stack-based language, that would be the ticket!

    Robert: have you considered the awesome efficiency that Forth provides?

    And if you prefer what Donald Knuth refers to as “literate programming,” may I recommend the superb, stack-based, free-form literate programming language Whitespace?

    I sense that you, Robert, are a man of refinement and moreover one who understands the maxim: “No Bit Left Behind.”

    You would adore Whitespace. Although, to be frank, Forth is a little easier to handle without an IDE.

  140. DrLoser says:

    After all if you plan on using underpowered inexpensive hardware as long as possible, don’t you need all the efficiency you can get?

    For retrieving menus from a MySQL database? I doubt that. An Apple Wristwatch would do the job quite nicely.

    Available this Christmas for $375, by the way.

    There’s always the possibility that the Little Lady (TM) will treat you to one, Robert, but I’d aim lower and ask for the Bertrand Meyer book instead.

  141. DrLoser says:

    Well, log n for some value of n.
    I’ll let the Magnificent Fifi figure out where I was being “economical with the truth,” there.

    I mean, the idiot has to be useful for something.

  142. DrLoser says:

    May I be permitted to conflate my cri de Coeur for underlying algorithmic efficiency with Deaf Spy’s justified complaint that Pascal’s weirdo array indexing policy — which as I say works only under unstated assumptions, such as the pervasive use of ASCII — is a dangerous semantic construct that can easily be confused with a Dictionary?

    You see, Robert, any language that is a child of Algol (pretty much all curly bracket ones) features the semantic construct of an Array. And (even in the STL) an Array is supposed to have O(1) performance characteristics. As you say. Merely add an offset to a base. (We shall stipulate ignorance here of page boundaries, memory mapping, and perhaps more importantly in the present world of concurrency, cache-busting.)

    Trouble is, a naïve re-implementation of precisely the same code in any language other than Pascal turns it into a Dictionary.

    Now, it doesn’t matter for our purposes whether that Dictionary is implemented via a R-B tree or via a hash of some sort. Either one of these algorithms offers performance characteristics of O(log n).

    Now then, Robert. What sort of feeble inadequate teacher would train several whole classes of bright young students in an outdated language like Pascal, whose apparent Array semantics, when carried over to literally any other computer language you can think of, turn out to have a Performance Curse of O(log n)?

    Oh, wait. I can think of one.

  143. olderman says:

    “See, the thing here, Robert, is that your vaunted “efficiency” is, in 2015, the attitude of a dinosaur. ”

    But my deal doctor, isn’t Robert Pogsons attitude is IMHO actually understandable. After all if you plan on using underpowered inexpensive hardware as long as possible, don’t you need all the efficiency you can get.

    In fact,m I would suggest that Robert should actually consider working in x86 assembler. There was nothing like assembler for making tight compact code in the old days… I especially used to like translating signal processing algorithims for the stack based 8087

    Ah the good old days.

  144. DrLoser says:

    Range-checks are important if the index is some random integer obtained by computation. If it’s an ordinal value obtained from some strongly-typed enumerated variable it’s less important because the compiler constrains the values to the legal/correct range.

    I see, I see. So then, Robert. You are hereby advocating either:
    1) Using range-checks everywhere, because you never know when they may be important, or
    2) Writing your Pascal program in one huge great glob with no functions/subroutines/units, and most certainly no reliance whatsoever on external libraries.

    Because, you see, that’s basically the choice you have to make.

    Pascal, in any flavour, does not feature what Bertrand Meyer, author of Eiffel describes as “contracts.” There is no guarantee whatsoever that what you get from an external source meets your bound-checking requirements.

    And, in fact, I strongly recommend that you “switch on” bounds-checking for Pascal Dictionaries, oops, Arrays. Back when I was a lad, it was impossible to switch that feature off. In fact, it was the main reason to use Pascal in the first place.

    See, the thing here, Robert, is that your vaunted “efficiency” is, in 2015, the attitude of a dinosaur. The additional cost of bounds-checking — yea, even unto the crossing of the Sacred 64KB boundary — is trivial on any processor post-1990 or so.

    In terms of effective use of computational resources, you’d be far better off dealing with the underlying algorithms. I can help you with that, too, if you ask nicely.

    And whilst I wait for your earnest supplication, born of your ceaseless desire to learn, I do recommend, Robert, that you read that Bertrand Meyers cite.

    It’s boffo. Available for $51.77 in the E-Z-Browz Kindle edition.

    I recommend the Kindle. It runs on FOSS.

  145. Deaf Spy says:

    Range-checks are important if the index is some random integer obtained by computation. If it’s an ordinal value obtained from some strongly-typed enumerated variable …

    Fair enough. With characters, though, this is definitely not the case. Unless you are an ASCII guru, there is no way to know whether ‘1’ is before or after ‘a’, or where space comes in the whole thing. Dr. Loser rightfully pointed out that for all other languages the problem is even worse.

    Still, there is no excuse for this awful decision to mask dictionaries as arrays.

  146. Deaf Spy wrote, “Overhead occurs if you turn range-checks on. Which you should do, if you program relies heavily on such indices.”

    Range-checks are important if the index is some random integer obtained by computation. If it’s an ordinal value obtained from some strongly-typed enumerated variable it’s less important because the compiler constrains the values to the legal/correct range.

    fpc arrays.pas
    Free Pascal Compiler version 2.4.4 [2011/04/21] for x86_64
    Copyright (c) 1993-2010 by Florian Klaempfl
    Target OS: Linux for x86-64
    Compiling arrays.pas
    arrays.pas(6,3) Warning: range check error while evaluating constants
    arrays.pas(6,5) Error: Incompatible types: got “Int64” expected “x”
    arrays.pas(7,3) Warning: range check error while evaluating constants
    arrays.pas(7,7) Error: Incompatible types: got “Int64” expected “x”
    arrays.pas(9) Fatal: There were 2 errors compiling module, stopping
    Fatal: Compilation aborted
    Error: /home/pogson/pascal/fpc-2.4.4/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
    pogson@beast:~/pascal$ cat arrays.pas
    program arrays;
    type x=(fred,mary,joe);
    var a:array [x] of integer;
    const jill=3;
    begin
    a[34]:=873546;
    a[jill]:=34;
    end.

  147. luvr says:

    Deaf Spy wrote, “Overhead occurs if you turn range-checks on. Which you should do, if you program relies heavily on such indices.”

    But then it doesn’t make any difference whether all arrays are zero-based, one-based, or any-based, does it? Plus, you must have heard about this issue called “one-off errors” that are easy to make with zero-based arrays, right? I know that I made this type of mistake more than once back in the days when I was new to C. It does take a bit of training to avoid such issues.

  148. Deaf Spy says:

    call fpc_write_text_boolean

    I must thank you for this example, Robert.

    Fifi, you incompetent fraud, do you see it with your own eyes, little one? No RTTI. No duck-typing. This is exactly the result of the compiler magic, which happily substituted Robert’s writeln with fpc_write_text_boolean.

  149. Deaf Spy says:

    Not an issue.

    As a teacher, you must recognize the issue. You are cheating your students that the basic data structure array can behave as a dictionary. Then I wish the poor students good luck in working with arrays in any other language out there.

    FreePascal translates the indices with the offset implied in the declaration. Arrays aren’t 64k elements by default.

    Every Pascal compiler since Turbo Pascal 3 (I haven’t used any prior that) does it. In 16-bit x86, only a moron would waste a whole segment for a single array of a handful of elements.

    No serious overhead beyond access by a constant index.

    You are not paying attention, Robert. Overhead occurs if you turn range-checks on. Which you should do, if you program relies heavily on such indices.

  150. Deaf Spy says:

    Gee, Fifi, after the writeln fiasco, you stand up for another trashing?

    True in borland implementations.

    No, dimwit. You now why? Because it has nothing to do with implementation. This is just about the syntax of the language, and this is in the very standard you keep wave around like a flag.

    The descendant from Borland Delphi is Embarcadero Delphi. Embarecadero the rebuilt the complete RTL fixing many errors but also broke backward compatibility.

    No, they didn’t. You are make-believing fantasies again, Fifi. I know, because I successfully compiled a Delphi 5 project (IBX and some proprietary VCL components) in Delphi XE 4. It worked, Fifi. No issues at all. For other reasons, though, we ditched Delphi altogether and migrated to project to .NET.

    At no point ever Embarcadero re-wrote the RTL. Never, ever. They extended it, but never rewrote it.

    You are an incompetent fraud, little one.

  151. oiaohm says:

    ISO/IEC 10206:1990 the extended standard is first published 1990 as well.
    ISO/IEC 10206:1990 and ISO/IEC 7185:1990 is Pascal 1990.

    Sorry DrLoser claiming that ISO/IEC7185 is Pascal 1990 is wrong. You need to learn to use standard code names not to attempt to make stuff generic. If you make it generic I take generic you end up finding yourself in a hell load of trouble.

    And its extended because it exactly that DrLoser. ISO/IEC 10206:1991 is everything in ISO/IEC 10206:1991 and ISO/IEC 7185:1990

    There is a total of 8 differences between ISO/IEC 10206:1991 and ISO/IEC 10206:1990. All don’t change meaning at all.

    So the difference between saying Pascal 1990 and Pascal 1991 is bugger all. In fact DrLoser due to you being such a idiot you want to make out something that is false.

    Pascal 1990 and Pascal 1991 as references covers lot more documentation.

    Freepascal has a Object Pascal mode for a reason. Complier in freepascal chooses if write is a do while loop over the arguments calling functions matching type or if it can be solved out to a functions. Of course deafspy points to the inc files not how the freepascal complier in fact processed write/writeln. Yes the BNF mentions the structures assigning type to data at runtime.

    The reality is Deaf Spy has no idea how Pascal works. Those who have read the standard and can in fact understand it spot quickly that RTL is not meant to be used for particular functions. write/writeln/read/readln by pascal standards are meant to be complier generated and support an RTTI form of course complier can choose to solve out like printf turning into put functions in gcc to save cpu time..

    Reality here neither Deaf Spy or DrLoser can read the Pascal standards and understand what it says.

    Deaf Spy problem is taking the point of view that Pascal starts in 1995.

    Here, Pascal tries to make arrays look like dictionaries. This is misleading. It leads to hideous bugs at run-time, including security issues. Or you can use range-checking but it kills performance.
    True in borland implementations. Not true in every other Pascal implementation including Embarecadero implementation managed todo it perfectly without security issues or hideous bugs at runtime. Part of the reason for people switching to Freepascal was to get away from the kind of error Deafspy describes here.

    Borland’s Delphi DrLoser historically is a lemon. The descendant from Borland Delphi is Embarcadero Delphi. Embarecadero the rebuilt the complete RTL fixing many errors but also broke backward compatibility. Yes those wishing to build old Borland Delphi code with a sane complier your options is Freepascal or nothing. The reality Freepascal had the lots of RTL fixes years ahead of main line Delphi getting them. Even so Freepascal has been very late getting unicode.in RTL.

    Even freepascal still has it issues.

  152. DrLoser wrote, “Yes, I’m convinced. That elision of two “somethings” saves a whole 18 characters!”

    For such trivial cases, there isn’t much call for “with” statements but in normal programming and bulky record-structures, “with” pays handsomely.

  153. DrLoser wrote, “A with-statement shall specify the execution of the statement of the with-statement.”

    To be fair, that should be combined with the relevant BNF
    “with record-variable-list do statement”

    That makes it abundantly clear what statement is referenced in the definition.

  154. DrLoser says:

    I do particularly love the lead-in to this farcical paragraph, btw:

    A with-statement shall specify the execution of the statement of the with-statement.

    Hello darkness my old friend …

  155. DrLoser says:

    with something do writeln(x:5:2,y:2)
    end.

    As opposed to, I suppose:

    WriteLn(something.x:5,something.y:2)

    Yes, I’m convinced. That elision of two “somethings” saves a whole 18 characters!

    Of course, it also incurs the cost of twenty-one more characters in the with-statement.

    And it doesn’t take any account of the more general case that there may be an arbitrary number of “somethings.” And that an arbitrary nesting of with-statements are permitted.

    Luckily, the Pascal 1990 Standard takes painstaking account of the various “somethings.” I shall refresh your memory, Robert:

    A with-statement shall specify the execution of the statement of the with-statement. The occurrence of a record-variable as the only record-variable i n the record-variable-list of a with-statement shall constitute the defining-point of each of the field-identifiers associated with components of the record-type possessed by the record-variable as a field-designator-identifier for the region that is the statement of the with-statement; each applied occurrence of a field-designator-identifier shall denote that component of the record-variable that is associated with the field-identifier by the record-type. The record-variable shall be accessed before the statement of the with-statement is executed, and that access shall establish a reference to the variable during the entire execution of the statement of the with-statement.

    That, I think, takes account of each and every “something” your little heart could desire.

    Now, in simple pedagogical language, do you think you could explain this to a metaphorical ten year old?

  156. Dr Loser wrote, “I have no clue how this is supposed to make sense.”

    One example is worth 1K words:

    pogson@beast:~/pascal$ cat withs.pas
    program withs;
    type thing=record x:real;y:integer end;
    var something:thing;
    begin
    something.x:=4.5;
    something.y:=3;
    with something do writeln(x:5:2,y:2)
    end.
    pogson@beast:~/pascal$ ./withs
    4.50 3

    Essentially, it’s a shortcut to avoid writing a whole bunch of structure.element references. You write, with structure do whatever to element;

    I admit the definition is hard to swallow but once you show teenagers you’re just establishing shorter references to the elements of a structure, they are all for it. I’ve had Grade 9/10 students do this all the time, particularly with linked lists or arrays of stuff being searched/indexed. It allows both very descriptive naming of structures without all the repetition of that name.

  157. DrLoser says:

    Mind you, to be fair, Robert, you presumably have no experience whatsoever with Borland’s Delphi.
    After all, the thing cost $49 a pop.

  158. DrLoser says:

    The worst keyword of all in Pascal is with.

    What’s wrong with “with,” you foreign fool! It’s a perfectly legitimate English word! Any school child under the expert supervision of Robert Pogson, Pascal Teacher Extraordinaire, would instantly grasp the intent, the scope, the … oh dear, perhaps not.

    Let’s have a quick squiz at the 1990 Pascal Standard, shall we? In particular, 6.8.3.10 With-statements. Here we go:

    A with-statement shall specify the execution of the statement of the with-statement. The occurrence of a record-variable as the only record-variable i n the record-variable-list of a with-statement shall constitute the defining-point of each of the field-identifiers associated with components of the record-type possessed by the record-variable as a field-designator-identifier for the region that is the statement of the with-statement; each applied occurrence of a field-designator-identifier shall denote that component of the record-variable that is associated with the field-identifier by the record-type. The record-variable shall be accessed before the statement of the with-statement is executed, and that access shall establish a reference to the variable during the entire execution of the statement of the with-statement.

    Fairly trivial to explain to a smart ten year old in the northern wastes, I would imagine.

    Then again, I am not a smart ten year old. I have no clue how this is supposed to make sense.

    Help me, Robert!

  159. DrLoser says:

    Some folks use Pascal with Eclipse. The limitations of Pascal are actually limitations of Deaf Spy’s imagination.

    Tell us, Robert. Are you one of these “some folks?” Do you aspire to be one of these “some folks?” Have you ever, however temporarily, indulged in an IDE whim and experimented with becoming one of these “some folks?”

    I’m guessing the answer to all three questions is “no.”

    In which case, there seems very little point in bringing up your non-existent experience in that particular Pascal IDE, does there?

    They all suck. They have all sucked since the days of Anders Hejlsberg at Borland. One of the finer Swedish practitioners of the Dark Arts of Computer Science is Anders, in my humble opinion.

  160. DrLoser says:

    Characters are ordinal types and certainly do make good indices for arrays.

    Characters are no such thing, O ANSI-centric one. The representation of characters (which I will here stipulate as the mapping within Unicode, although one may choose some other accepted I18N mapping of choice) is ordinal.

    Characters are only “ordinal” in the restricted sense that, given a fixed locale, they can be placed in order. And frankly even that doesn’t work outside the USA and minor satellites such as Canada, because you still have to deal with the selection of code pages and such.

    What you are talking about, Robert (without, I think, realising this fact), is precisely what Deaf Spy was complaining about. These things look like ordered lists/sequences/arrays/enumerables/whatever, but in fact they are no such thing.

    What they are, as Deaf Spy pointed out, is they are basically Dictionaries, where the key is a single character. Triffic. Also a bad choice for practically anything at all. Mostly because it encourages the assumption that the key is in ASCII.

    For a real-life practical example of how and why this does not work, even granted the restriction of the Latin alphabet, may I encourage you, Robert, to broaden your horizons and consult a dictionary (a real one, with real words in it) in one of the following languages?

    * Swedish
    * German
    * Slovenian
    * Practically any other European language bar English

    It’s an educational pursuit, I assure you.

  161. Deaf Spy wrote, “Comparing any Pascal IDE to a modern IDE like Visual Studio or Eclipse is like comparing a Russian Lada to a Volvo.”

    Some folks use Pascal with Eclipse. The limitations of Pascal are actually limitations of Deaf Spy’s imagination.

  162. Deaf Spy wrote, “it is absolutely wrong from educational point of view. Most other languages enforce arrays to be zero-based and with numeric integer indices for a reason.”

    Not an issue. FreePascal translates the indices with the offset implied in the declaration. Arrays aren’t 64k elements by default. e.g.
    pogson@beast:~/pascal$ cat array.pas
    program arrays;
    Var
    foo : array [ ‘a’..’f’ ] of Boolean;
    begin
    writeln(sizeof(foo))
    end.
    pogson@beast:~/pascal$ ./array
    6

    So, there’s no storage penalty and yes, this does make programmes more readable by humans. Characters are ordinal types and certainly do make good indices for arrays.

    More fun:
    pogson@beast:~/pascal$ cat array.pas
    program arrays;
    type colour=(red,green,blue);
    Var
    foo : array [ red..blue ] of Boolean;
    begin
    writeln(sizeof(foo))
    end.
    pogson@beast:~/pascal$ ./array
    3

    What’s not to love? Students have no trouble with this concept. All ordinal types are defined as integers counting from zero so there is no overhead of which to speak.

    If I set foo[green] to false, and write it out, this is all the code required:
    movb $0,U_P$ARRAYS_FOO+1
    call fpc_get_output
    movq %rax,%rbx
    movb U_P$ARRAYS_FOO+1,%dl
    movq %rbx,%rsi
    movl $0,%edi
    call fpc_write_text_boolean
    If I create a variable of type colour and use it to define an indexed element of the array, and write it out, all it takes is this bit of code, using simple indexing operations:
    movl $1,U_P$ARRAYS_F
    movl U_P$ARRAYS_F,%eax
    movb $0,U_P$ARRAYS_FOO(%rax)
    call fpc_get_output
    movq %rax,%rbx
    movl U_P$ARRAYS_F,%eax
    movb U_P$ARRAYS_FOO(%rax),%dl
    movq %rbx,%rsi
    movl $0,%edi
    call fpc_write_text_boolean
    No serious overhead beyond access by a constant index.

  163. Deaf Spy says:

    I just remembered one of the worst features of Pascal. Arrays.

    Look at this:

    Var
    foo : array [ ’a’..’f’ ] of Boolean;
    bar : array [ 42..47 ] of Boolean;
    baz : array [ ’0’..’5’ ] of Boolean;

    I know, I know, it was for good intentions. However, it is absolutely wrong from educational point of view. Most other languages enforce arrays to be zero-based and with numeric integer indices for a reason. Memory. In memory, arrays are always zero-based.

    Here, Pascal tries to make arrays look like dictionaries. This is misleading. It leads to hideous bugs at run-time, including security issues. Or you can use range-checking but it kills performance.

  164. Deaf Spy says:

    From “Why use Pascal?” (in general, a childish writing):

    Pascal is a very clean programming language, which looks more like real languages in the sense that it uses real English words as keywords rather than random ASCII characters. This is important in understanding existing code as well as debugging because people don’t read individual characters but whole words.

    This is, hm, not exactly correct. Having words for scope identifiers is definitely not a good thing. It reduced readability because it adds too much noise to the code. Nest a few if…else‘s and you end up with a unreadable mess.

    The worst keyword of all in Pascal is with. It can be the source of obscure bugs, and it makes any Pascal debugger totally helpless, because it cannot resolve properly the identifiers within a “with” clause.

    One feature I adored in Pascal is the limited support for closures. Pascal allowed local variables of a function to be visible in all nested functions. That was when there was no other such thing. Unfortunately, they didn’t make proper use of this and never implemented anonymous functions, until too late (Delphi in 2009, FreePascal – never).

    Thanks to the divine wisdom of Hejlsberg, Pascal gained many good features – properties and class methods (strongly typed procedural types). Then Hejlsberg was converted to Evil, and Pascal simply waned away to oblivion.

    This is to say that Pascal was kinda great for its time, but never evolved properly after 1995. It simply watched the world move on and leave it in the dust.

    The last nail in the coffin was the tools. No programming language is worth a dime nowadays without good tools and libraries. Pascal has none. Comparing any Pascal IDE to a modern IDE like Visual Studio or Eclipse is like comparing a Russian Lada to a Volvo. Libraries are at best inferior, not to say – pathetically inadequate to current requirements.

  165. Deaf Spy says:

    I particularly like Pascal as implemented in FreePascal because it is very clear and unambiguous, as a programming language should be.

    You awoke my curiosity, Robert. Tell me, how Pascal, implemented in FreePascal, is any more clear and unambiguous than Pascal, implemented in Delphi?

  166. DrLoser says:

    It is 8 times faster to learn one token for assignment than eight, for instance.

    Out of mild interest, Robert, what does this mean?

    Does it imply (as I assume it implies) that you are thoroughly incompetent both in the understanding of the C grammar and in the ability to teach this prehistoric language?

    Because, to be brutally honest, that’s what you seem to be implying.

  167. DrLoser says:

    Did Beast somehow fail to access Merriam-Webster, Robert? Perhaps you should rely on the online version, rather than your 1913 one.

    Pukka: genuine, authentic; also : first-class.

    Origin of PUKKA

    Hindi & Urdu pakkā cooked, ripe, solid, from Sanskrit pakva; akin to Greek pessein to cook.
    First Known Use: 1776

    There you go, mon frere — not only have I saved you the cost of an up-to-date Webster’s dictionary, but I’ve also quoted the relevant etymology!

    You can’t say fairer than that, can you?

  168. Dr Loser wrote, “It’s pukka.”, whatever that means.

    I like this paragraph from TFA, “Pascal is a very clean programming language, which looks more like real languages in the sense that it uses real English words as keywords rather than random ASCII characters. This is important in understanding existing code as well as debugging because people don’t read individual characters but whole words.”

    Amen! I taught Pascal to students because it is very easy to teach and to learn and students can get on with learning to programme instead of learning some dinosaur of a language like C. It is 8 times faster to learn one token for assignment than eight, for instance. Another example: In Alberta, I found teachers were taking years to get around to teaching students fundamental concepts of programming such as arrays, structures and functions because they were not using Pascal, but “visual basic”. You can’t do much at all with Pascal without making those introductions (no I/O for instance) and it only takes a few days. I had students complete the whole high school curriculum for programming in six weeks instead of three years. I particularly like Pascal as implemented in FreePascal because it is very clear and unambiguous, as a programming language should be. OTOH, folks argue about what C means on each release of a compiler. What’s with that?

  169. DrLoser says:

    One of the more hilarious cites, or indeed sites, I tripped over whilst researching the many, many, egregious errors that Fifi habitually makes, is Why Use Pascal?

    It’s pukka. It comes from the freepascal/lazarus site, which is about as up-to-date as Pascal is ever likely to be.

    And it’s monumentally stupid and uneducated and worthless.

    Surely an accredited Computer Scientist of longstanding, such as Mr Pogson, can see through this piffle?

  170. DrLoser says:

    Something fun here DrLoser just screwed up a basic term. Library. Library are linked in items not complier built/injected in items. Run-Time Library is exactly that. A function injected by complier is a complier generated function so not of part of a Library.

    You set a very, very low bar on the concept of “fun,” don’t you, Fifi?

    Something fun here Princess. You have just successfully underlined and confirmed my contention that the distinction between Pascal with a RTL and Pascal without is a purely circular convention.

    It doesn’t actually matter where the bag-o-bits comes from. People make a big deal about the C/C++ usage of a “linker,” but in fact a “linker” is purely an artefact of the way programs in these languages are built.

    Code executed from within a “linked” object is just as much “compile-time” code as is the “Hello World!” program one has just written. It is indistinguishable at runtime.

    Now:
    * Dynamically loaded libraries
    * Late bound libraries (eg COM)
    * Distributed libraries (eg CORBA)
    * Expression trees (cf .NET)
    * Anything generated via a run-time macro
    * Anything generated via a REPL

    … these are all plausibly run-time constructs.

    It’s just that they have nothing at all to do with what we’re talking about, do they?

  171. DrLoser says:

    Saying you made a mistake DrLoser says you did not know that Pascal 1991 refers to 2 standards. Of course I intentionally omited this fact.

    “Of course?”

    Hardly a testable observation, Fifi. You omit so many facts (and include so many non-facts) in your babbling that it’s hardly worth debating the trivial distinction you make between “intent” and “ignorance.”

  172. DrLoser says:

    DrLoser ISO/IEC 1991 1991 is the standard publication date. Standards is drafted/ratified 1990 then 1991 published. So a implementation of ISO 7185:1990 prior 1991 is invalid because the final form of the standard is published start of 1991. Interesting thing calling it Pascal 1991 does not just refer to ISO/IEC 7185:1990 it refers to ISO 10206:1990 as well.

    Blather. The official normative standard of Pascal is ISO 7185: 1990. To call this anything but “the 1990 standard” is an abuse of language, pure and simple.

    The “extended Pascal standard” is ISO/IEC 10206:1991. This may sensibly referred to as the “1991 standard.”

    Do not confuse the two.

  173. oiaohm says:

    DrLoser ISO/IEC 1991 1991 is the standard publication date. Standards is drafted/ratified 1990 then 1991 published. So a implementation of ISO 7185:1990 prior 1991 is invalid because the final form of the standard is published start of 1991. Interesting thing calling it Pascal 1991 does not just refer to ISO/IEC 7185:1990 it refers to ISO 10206:1990 as well. Neither get around to defining libraries for core functions. 10206:1990 defines functions with arrays of arguments. One is if you are referring to date of existence one is date of drafting and ratified.

    Saying you made a mistake DrLoser says you did not know that Pascal 1991 refers to 2 standards. Of course I intentionally omited this fact.

    Technically correct, I imagine, though you’d have to stretch your definition of a RTL to the point where it’s effectively circular. You can probably dig up an implementation circa 1970 or so where the RTL is emitted directly into the executable by the compiler.
    Something fun here DrLoser just screwed up a basic term. Library. Library are linked in items not complier built/injected in items. Run-Time Library is exactly that. A function injected by complier is a complier generated function so not of part of a Library.

    Fun point ISO 10206:1990 does not have “uses” or “units”. It does have modules and import but functions like write/writeln are not defined by any of the Pascal standards of 1991 of having to exist in RTL instead are meant to be Complier provided. The standard with “uses” and “unit” is where RTL in pascal is formally defined as existing. Yes standard that define RTL also defines that default write will be in unit system.

    Pascal RTL is built up of a set of Units. Until the Pascal has Units officially by standard RTL does not need exist and it a complier choice if has a RTL or not. Up until that point each of the pascal standards defines array of const, array of parameters and so on for functions with undermined number of arguments. All of the array of const, array of parameters and so on are RTTI style where the complier is meant to be using a structure to function that contains type and pointer to data. Fun point is if the structure chosen by the function does not contain the flag option for the type being attempt to be passed to the function by pascal standard the complier is meant to throw an error. Yes it part complier magic to fill in a structure with the type of data. Its delphi pascal that introduces Units and RTL and the solving single function to multi functions. Yes this is later in the on in the 199xs.

    Yes older pascal compliers have less complier magic options than newer pascal compliers.

  174. DrLoser says:

    The method of using multi functions for write and writeln is newer than Pascal complier implemented for the 1991 standard.

    I seem to have cut the second half of that text rather than copied it. My apologies.

  175. DrLoser says:

    Reality is Pascal exists before it has a Run-Time Library.

    Technically correct, I imagine, though you’d have to stretch your definition of a RTL to the point where it’s effectively circular. You can probably dig up an implementation circa 1970 or so where the RTL is emitted directly into the executable by the compiler.

    I’m not aware of any implementation of the 1990 standard — I see you’ve copied my mistake and are now calling it the 1991 standard — that acts this way, however.

    The method of using multi functions for write and writeln is .

    An extraordinary claim, which requires evidence. Cite at least one implementation of the 1990 standard that does not use a set of WriteXX() functions to implement WriteLn().

    And once you’ve done that, I shall cite at least one implementation of the 1990 standard that does implement WriteLn() this way.

    Which cite shall, fairly obviously, entirely invalidate your assertion that “newer than Pascal complier implemented for the 1991 standard.”

  176. DrLoser says:

    The set of identifying-values shall be dynamic, in that the variables and the values identifying them shall be permitted to be created and destroyed during the execution of the program.

    Evidently, reading more than one sentence in a row hurts your brain, oiaohm. The one you quote is followed by:

    Identifying-values and the variables identified by them shall be created only by the required procedure new.

    In C++ terms this is literally the same as:

    std::vector bagOfObjects = new std::vector(16);
    bagOfObjects[0] = new OneClass();
    bagOfObjects[1] = new AnotherClass();
    ...

    … with the limitation that (object) Pascal has singe-ownership semantics, so you can’t share pointers.

    There’s nothing remotely interesting about this, and it most certainly does not facilitate duck typing.

    Agreed, with the non-standard addition of TypeOf(), this does provide the RTTI behaviour you imply when discussing at which point writeln() (and co) infer the required action. Not really very interesting though, is it? The only difference between (if you like) a compile-time switch to WriteXX and a run-time switch to WriteXX is that you’re not actually guaranteed to have the appropriate WriteXX at runtime. Which I observe, in passing, is a most un-Pascal way of doing things.

    In any case, TypeOf() is a Borland/Gnu extension to the standard, and is not part of your cite.

    I can only work with what is in front of me, oiaohm. Find me a later version of the standard that defines this level of RTTI behaviour, and we can proceed from there.

    There’s one piece of metadata conspicuously absent in all this, and it’s an absolute requirement for duck typing. Can you guess what it is?

  177. oiaohm says:

    2. RTL and compiler magic are one and the same thing, little one. Compiler magic is not possible without RTL.
    Complier magic is possible without RTL. Run-Time Library only comes in newer versions of Pascal.

    http://www.pascal-central.com/docs/iso7185.pdf Did not read the standard did you before making this comment. 1991 pascal there is no such thing as a unit or uses.

    Reality is Pascal exists before it has a Run-Time Library. The method of using multi functions for write and writeln is newer than Pascal complier implemented for the 1991 standard.

    Complier magic for optimization and the like is possible without a Run-time Library. Its like pascal to C and pascal to other language transformations as well. Yes there are implementations where write/writeln end up in printf function. So not pascal runtime.

    So complier magic is more than possible on write/writeln without having runtime library.

    RTTI is defined into Pascal before Run-Time Library usage is. Before Run-Time Library the complier injected used functions straight into the executable code.

    Placing RTTI information on the pointer that is being passed to a writeln function is still a form of complier magic. This form of complier magic still exists in freepascal when you use array of const.

    As soon as someone says you need RTL to perform complier magic you know they are a idiot. There are two very clear forms of complier alteration that have been used to implement write and writeln. Problem is supporting older programs exploiting typed pointer arrays causes a form of writeln to be used that is not RTL but a function inserted straight into the binary code like old school pascal compliers solution.

    Reality is the 1991 standard shows lack of RTL. Claiming RTL is required purely means you don’t know the pascal standards or the implementations.

    DeafSpy sorry you are the incompetent one here. You have got complier magic completely wrong.

  178. DeafSpy says:

    http://www.freepascal.org/docs-html/ref/refsu70.html

    Fifi, you can’t even tell a variant from RTTI. There is an ocean between the two, little one.

    Depending on what Units you have loaded depends if Write/ln is complier magic, RTL or RTTI using array of const.

    Again, Fifiest Fifi, I will go bullet-list style. Works for you:

    1. You finally admitted that compiler magic is involved. Something you stubbornly and stupidly refused to accept for a long long time.

    2. RTL and compiler magic are one and the same thing, little one. Compiler magic is not possible without RTL.

    3. There is no Pascal compiler that uses anything but compiler magic for writeln(), and you fail to prove otherwise. And you will always fail, Fifi, because no such thing exists.

    4. You are an incompetent fraud, Fifi.

    The rest is just the usual crap. There is at least one gem of stupidity, though: ” RTL solve and the RTTI solve are both based on different ages of the Pascal standard. RTTI solve is the oldest version and the RTL solve is the newest. “. Dear, dear. How could you even come up with something that silly?

    You are an incompetent fraud, Fifi.

  179. oiaohm says:

    Deaf Spy
    1. No Pascal compiler emits RTTI for ordinary types such as char, int, string. Therefore, write(ln) can’t possibly use this.
    This is not correct and since this is not correct everything else you say is 100 percent bullshit and DrLoser lacks means to research to find it..
    http://www.freepascal.org/docs-html/ref/refsu70.html Remember this is 1986 when this comes into existence before the 1991 standard.

    There is a special trigger to have char, int and string RTTI at runtime. It is array of const.

    Write(ln) uses compiler magic.
    Depending on what Units you have loaded depends if Write/ln is complier magic, RTL or RTTI using array of const. Array of const function can pass arguements straight through to another Array of const function. Its the Array of const that breaks complier magic of write/writeln forcing it complier magic to build RTTI version of writeln using the RTTI information contains in Array of const.

    To know that freepascal contains a RTTI writeln is know the object pascal code that gives it absolutely no choice. Library containing functions with argument type of Array of Const there is absolutely no way for the complier magic to solve out at build time what the past type is. Type arguement is freepascal is another name for Array of const.

    DrLoser The overloading in pascal is special Arrayed function overlay is demoed in another place of Freepascal implementing writeln. Yes complier magic Function overloading in Freepascal and Delphi support 1 to many.

    function(a,b,c) comes functionfora(a), functionforb(b),functionforc(c) where a,b,c are different types. Yes function overloading option as per first Pascal standard to define RTL. So what FreePascal complier does breaking write/writeln down into individual function calls is Pascal defined RTL not random complier magic. Of course to perform that task means you must to have passed something like array of const that is unsolvable at build time. This in fact emulates C++ stream functionality. Of course this format of write/writeln exists in another section of the freepascal code base.

    No single reference to RTTI LOL in pascal 1991 Drloser. 6.4.4 Pointer-types read carefully.
    The set of identifying-values shall be dynamic, in that the variables and the values identifying them shall be permitted to be created and destroyed during the execution of the program How to say RTTI in waffle. Those who have not truly read the Pascal standard miss this. Sorry its above you skill level of research DRLoser because you never fully read stuff before commenting.

    Those who have read Object Pascal 1986 define that is before 1991 know that Array of Const is based on Typed Pointers. Typed Pointers are in 1991 standard using the same define. Its the overlap between the older Object Pascal standard and current. RTL rules of Pascal is newer than 1991. RTL solve and the RTTI solve are both based on different ages of the Pascal standard. RTTI solve is the oldest version and the RTL solve is the newest. Older programs will depend on the RTTI on pointers.

    Basically DrLoser and Deaf Spy have not had a leg to stand on. So really neither of you should comment on coding you don’t know enough to be even close to right.

  180. DrLoser says:

    Now then, Fifi.

    Let us chat a little while about your interesting concept of some sort of one-to-one correspondence between RTTI and duck typing.

    I believe we have established the fundamentals here:

    * ISO or equivalent standards
    * Pascal
    * C

    That should do for now.

    How’s the explanation for non-existent Quackable going, little one?

  181. DrLoser says:

    Now, the interesting part of oiaohm’s cite is as follows:

    procedure WriteLnF(const s: String; const Args: array of const);

    This, I imagine, is what leads the Delusional One to conclude that “standard” Pascal, for some value of “standard,” relies upon and uses RTTI. As always, oiaohm has got it wrong.

    As an aside, it’s a fascinating study in the pathology of mental aberration to watch oiaohm peremptorily insist that everybody else reads every single line of his cites, without (very clearly, in this case) reading a single line himself.

    Nonetheless, to a trained professional, this particular cite is easy. So here we go. Where does TManWriter:WriteLnf get used?

    Well, obviously, it shows up in the declaration:

    procedure WriteLnF(const s: String; const Args: array of const);

    And it shows up in the definition:

    procedure TManWriter.WriteLnF(const s: String; const Args: array of const);
    begin
    Write(Format(S,Args));
    Write(LineEnding);
    end;

    And it is used precisely once:

    procedure TManWriter.PageTitle(Const ATitle,ASection,ASource,Amanual : String);
    Var
    D : String;

    begin
    D:=FormatDateTime(‘mmmm yyyy’,Date);
    WritelnF(‘.TH “%s” “%s” “%s” “%s” “%s”‘,[ATitle,ASection,D,ASource,AManual]);
    end;

    We can follow this trail down through TManWriter:Write(), should you so wish, but what we are seeing here, oiaohm, is not <RTTI, much less metadata, much less duck typing.

    What we are seeing here is type elision.

    Args, which is a const array of const — no other type information available, which would suggest to me that FreePascal is a total breakage of the standard — is passed to TManWriter:Write() as nothing much more than a word-aligned, perhaps not even bounds-checked, contiguous set of raw pointers.

    To which the standard C formatting, “%s”, is applied.

    I see absence of type there, Fifi. But I see no “Run time type information.”

    Do you?

  182. DrLoser says:

    Object pascal documents from 1986 mandate RTTI.

    No they don’t. Cite a proof, otherwise.

    The 1991 standard document references it.

    A transparent lie. There is not a single reference to RTTI in your cited Pascal 1991 Standard, Princess.

    Not one, you ignorant little piece of dag.

    Array of const came out of Object Pascal.

    And is not evident anywhere in the 1991 Pascal Standard, is it?

  183. DrLoser says:

    If you go properly through the freepascal source code you will find a proper runtime writeln function not RTL translated in different sections of the code base. RTL is optional to implement writeln in Pascal.

    You will find no such thing.

    What you will actually find is the following:

    Type
    { TManWriter }

    // ... Skipping for brevity

    Protected
    // Writing support.
    procedure Write(const s: String);
    procedure WriteF(const s: String; const Args: array of const);
    procedure WriteLn(const s: String);
    procedure WriteLnF(const s: String; const Args: array of const);

    Of the forty five occurrences in your cite, Fifi, we need to consider those which refer to the system version. The others refer to this class-bound version. Nobody cares about the class-bound version. We are talking about the system version.

    Here is a list of the lines upon which you will find references to the system version:

    … crickets ….

    There are none. Every single reference to WriteLn (and incidentally I despise the FreePascal — possibly even Standard Pascal — case-laxity) is a reference within the TManWriter namespace.

    You’re a spineless ignorant buffoon, aren’t you, Fifi?

  184. DrLoser says:

    Did you not read <a href="https://github.com/graemeg/freepascal/blob/5121551686d999cedeb2b16e1b82b03c7c5ea9e9/utils/fpdoc/dw_man.pp&quot;? What sort of a tom-fool question is that, Fifi?

    Have you not read Finnegan’s Wake? (Actually, given the general meaninglessness of your comments, perhaps you have.) Tens of thousands of people have read Finnegan’s Wake. A few dozen will have read any random posting on GitHub.

    And the likelihood that either is necessary or relevant to the present discussion is minuscule.

    However, since you have offered this particular cite up, I have done you the courtesy of reading it. It’s a not-very-efficient RDP of the Free Pascal grammar, isn’t it? Attached to an Emitter that produces documentation. As Deaf Spy says, this proves nothing at all.

    I base my observation above on the following:

    procedure ScanModule(AModule: TPasModule);

    Should you wish to alert the eager multitudes to more exciting parts of the code that somehow, in some inscrutable fashion, and certainly in a fashion not yet properly alluded to by you, demonstrate your point …

    … Please do so.

    Oh, and while you’re at it, you could do us all the courtesy of addressing my points on the grammar in the Pascal Standard, if you please.

    The Pascal Standard that you, yourself, cited.

  185. Deaf Spy says:

    Fifi, you are so wrong that it hurts. On top of that your reading comprehension skills are in very rudimentary, at most. Non-existent might be more accurate. Therefore, I will present the summary of my points in a bullet list. That is definitely helpful for people like you.

    1. No Pascal compiler emits RTTI for ordinary types such as char, int, string. Therefore, write(ln) can’t possibly use this.

    2. You are an incompetent and ignorant fraud, Fifi.

    3. Write(ln) uses neither RTTI (because it is not there), nor function overloading (because it is also not there). Write(ln) uses compiler magic.

    4. You are an incompetent and ignorant fraud, Fifi.

    5. All you examples are totally wrong and irrelevant.

    6. You are an incompetent and ignorant fraud, Fifi.

    7. You can’t read and understand Pascal source code.

    8. You are an incompetent and ignorant fraud, Fifi.

    9. You can’t write Pascal code.

    10. You are an incompetent and ignorant fraud, Fifi.

    11. You know absolutely nothing about programming.

    12. You are an incompetent and ignorant fraud, Fifi.

    13. Last, but not least: you are an incompetent and ignorant fraud, Fifi.

  186. oiaohm says:

    Write such one, Fifi. I dare you. Because, Fifi darling, such “comforming” compiler does not exist.

    Deaf Spy you just dared me to write one that was included in the example I provided. As I said freepascal is conforming and non conforming. For writing write and writeln as only a single function using only pascal code freepascal in fact supports this and you will see if you look at the example file I pulled.

    Depending on the code base you are in with freepascal will depend if writeln is RTL solved or a real function solving from RTTI array.

    Why should I read the source of some external tool designed to generate documentation, oh Fifiest Fifi Ever?
    I picked something where I 100 percent bet you would be too much of idiot and avoid reading. So like a moron you were going to ask me to provide an example of exactly the same source code I provided.

    If you go properly through the freepascal source code you will find a proper runtime writeln function not RTL translated in different sections of the code base. RTL is optional to implement writeln in Pascal.

    Deaf Spy basically the idea that you need RTL to implement write or writeln in Pascal is wrong. Two different methods have been used. RTTI and RTL. RTTI exists in gnu pascal, p-pascal and freepascal todo writeln. Of course freepascal has RTL as well. So if you have a use case in freepascal needing a RTTI write/writeln you can do it. Now inside borland no such option of the RTTI forms.

    https://github.com/graemeg/freepascal/blob/21932102a8dc80b9e470b936c72b807ea56d37c6/compiler/ncgrtti.pas
    Yes there is a rtti generator in the freepascal complier.

    Basically I have not been wrong. Deaf Spy. Freepascal a function passed an args array can truly look up against the pascal generated rtti what type is each arg.

    Object pascal documents from 1986 mandate RTTI. The 1991 standard document references it. Array of const came out of Object Pascal.

    Compliers do all kinds of optimization magic but to be conforming to Pascal standards introduce RTTI before RTL. In fact Object Pascal does not have RTL. This is where it gets particularly fun with freepascal without coding sections of you own runtime you cannot build with it any more in particular historic language lock modes.

    This is why its important to have read the standards before commenting that someone has it wrong. Also really old versions of freepascal used RTTI interface for the system writeln and they were able to build properly locked in object pascal mode.

    Only thing is you have caught me out for not being 100 percent current on how current day freepascal works. Of course due to the fact freepascal has the full RTTI engine nothing stops the RTTI write or writeln being used in more places. The older code base areas of freepascal that have not been updated as much still have their private forks of the old core implementation of write and writeln.

  187. Deaf Spy says:

    Deaf Spy did you not read this.

    Why should I read the source of some external tool designed to generate documentation, oh Fifiest Fifi Ever?

    Result complier that depends on complier magic to do write and writeln alone in pascal is non conforming..

    Write such one, Fifi. I dare you. Because, Fifi darling, such “comforming” compiler does not exist.

    You are an incompetent and ignorant fraud, Fifi.

  188. oiaohm says:

    https://github.com/graemeg/freepascal/blob/5121551686d999cedeb2b16e1b82b03c7c5ea9e9/utils/fpdoc/dw_man.pp
    Deaf Spy did you not read this.

    Cases inside freepascal depending on what Units you have loaded you do have real write and writeln functions even mangled versions.

    The RTL arguement of write is wrong. Due to freepascal support type arguments you can have functions like above where freepascal cannot static solve so has to use a runtime write and writeln functions. The RTL stuff Deafspy the idiot think he has a case with would be looking at gcc static solve for printf to puts then attempting to say printf does not exist in C runtime. Yes bogus on top of bogus.

    The pascal standard defines what a function arguments should be if it has a particular name. The standard does not say in a particular unit. Reality to write pascal conforming code if you create a write or a writeln function in pascal it should follow the standard. Result complier that depends on complier magic to do write and writeln alone in pascal is non conforming.

    True test of if a pascal complier is conforming or not is can you implement write and writeln as per standard using pascal alone. It only take minor modifications to the file from freepascal I linked to to make a conforming implementation.

    If was you who brought in FreePascal to defend your dimwitted claims, you poor waste of DNA.
    Sorry you are a waste of DNA.

  189. DrLoser says:

    Is it just me, or does anybody out there think that the following is extremely peculiar?
    1) The Pascal assignment operator is, most unusually, and yet perfectly correctly, :=
    2) And yet, according to the Standard, the grammar is specified via the simple operator =.
    3) I note that Niklaus Wirth was responsible for EBNF. Which uses the simple operator =.

    Not something to keep us up at night, nibbling on the fronds of our pillows. But still. What was Wirth thinking?

  190. DrLoser says:

    Two extra points, to avoid confusion.
    1) No, under no circumstances are C macros the equivalent of “type-safe” macros in a functional language. Nor indeed in Rust, fwiw.
    2) You can only really use explicit “type-safe” macros if they are actually built into the grammar. Clearly this is not the case with Pascal, even though, equally clearly, this is what they were aiming at with those seven different flavors of parameter lists.

    However, I’ll give the guys a break. This standard dates from 1991 … even getting the grammar half-way provably correct was difficult in those days. Adding explicit “type-safe” macros was pretty much out of the question.

    So, implicit type-safe macros, under carefully controlled circumstances, it is, then.

    Otherwise known as “Compiler magic.”

  191. DrLoser says:

    Anyway — and apologies for posting twice in a row, oiaohm; I know how much you detest this miscreancy when it is anybody but yourself doing it — the thing about the standard Pascal grammar having seven separate lhs targets for parameter lists (I conflated write/writeln and read/readln) is … well, it’s the whole point here.

    Look again at:

    procedure-statement = procedure-identifier ( [ actual-parameter-list ] | read-parameter-list | readln-parameter-list | write-parameter-list | writeln-parameter-list )

    One immediate thought springs to mind. This is a rotten grammar fragment, isn’t it? Because what it actually means is:

    procedure-statement := vanilla-proc-statement | read-proc-statement | readln-proc-statement |
    write-proc-statement | writeln-proc-statement
    vanilla-proc-statement := proc-identifier ( [actual-parameter-list])
    read-proc-statement := proc-identifier (read-parameter-list)
    readln-proc-statement := proc-identifier (readln-parameter-list)
    write-proc-statement := proc-identifier (write-parameter-list)
    writeln-proc-statement := proc-identifier (writeln-parameter-list)

    Let’s not trouble ourselves right now with the apparent (yet not obvious to the naked eye) difference between write/writeln and read/readln. The point is, commisceration of these five separate parameter list types is not really a good thing, is it?

    However, it works. Because of, as Deaf Spy has pointed out, “Compiler magic.” (I have seen it described as “linker magic” in other cites, but the difference is hardly important.)

    Anyway, to that writeln-parameter-list. Here’s the standard grammar for that (6.9.4 The procedure writeln, the title of which section rather gives the game away to anybody but Fifi):

    writeln-parameter-list [ ‘(‘ ( file-variable I write-parameter
    { ‘,’ write-parameter } ‘) ‘ ] .

    Aha! We now descend (recursively, if you please) to 6.9.3 The procedure write:

    write-parameter-list = ‘(‘ [ file-variable ‘,’ ] write-parameter
    { ‘,’ write-parameter } ‘) ‘

    write-parameter = expression [ ‘:’ expression [ ‘:’ expression ] ] .

    From the point of view of specifying a grammar in a Standard, I’m not convinced that this is optimal. It does, however, make one thing very plain.

    See those curly braces? Those curly braces mean “repeat zero or more times.”

    Which is what you do when you are writing out more than one value to the output stream.

    And each value can be of any basic Pascal type whatsoever.

    And the set of such values, naturally, is of variable length.

    How does Pascal manage this trick? Does it do it via duck-typing? (No it does not. No such thing as duck-typing in Pascal.) Does it do it via function overloading? (No it does not. Even in degenerate forms of Pascal, you’d be hard-pressed to produce enough function overloads for the task.)

    It does it via compiler magic, Fifi. There is no way around this fact.

    Now, arguably, this “compiler magic” is actually “type-safe macros” a la various flavors of Lisp. (Or you could refer to Rust for a C-like language that relies on pervasive type-safe macros.)

    But … that isn’t what you actually managed to Google at all, is it, oiaohm?

  192. DrLoser says:

    Is this better or worse than being a “poor waste of carbon”, aka what I was called? Or it’s about the same?

    Always a difficult question to answer, Kurks. But I have no reason to doubt that the residual hydrogen and oxygen in your DNA would fetch fair market value.

  193. kurkosdr says:

    you poor waste of DNA.

    Is this better or worse than being a “poor waste of carbon”, aka what I was called? Or it’s about the same?

  194. Deaf Spy says:

    Fifi wrote:

    You have just pointed out that internally freepascal is not following standard.

    ?
    after he had written:

    gnu pascal and freepascal and Pascal-P system uses a completely different solution

    If was you who brought in FreePascal to defend your dimwitted claims, you poor waste of DNA. You, Fifi. You are so clueless that you can’t even properly pick your arguments. Of course you can’t. You whole statement is totally false.

    Fifi also wrote:

    Free-pascal runtime library only has 2 writeln and 2 write functions functions.

    A statement again I refuted totally by showing the source of FreePascal’s RTL.

    You are an incompetent little fraud, Fifi.

    Pogson, why, why do you sometimes pretend Fifi has any technical skills whatsoever?

  195. DrLoser says:

    Deaf Spy and if you have not noticed the standard is clear. All those extra write functions should be put functions. So you should not have mountain of write statements. If you runtime has a mountain of write statements someone has screwed up. Put is mandated to exist by standard.

    You were absolutely correct, Deaf Spy. It’s well worth sitting back and watching the fool Fifi dig himself an ever-deeper hole.

    OK now, from the standard (6.8.2.3 Procedure-statements):

    procedure-statement = procedure-identifier ( [ actual-parameter-list ] j read-parameter-list j readln-parameter-list j write-parameter-list j writeln-parameter-list )

    Evidently our resident Googling Clown either
    a) cannot understand a trivial formal grammar construct or
    b) does not understand the implications of write-parameter-list and writeln-parameter-list.

    Very possibly, both.

  196. olderman says:

    Perhaps my dear Doctor Fifi will do us all the pleasure of “greasy” monkey’ing us all out of existence, so we can get back to the task of comment on what Robert Pogson Posts, as opposed to Fifi’s expert drooling.

    Funny though, I didn’t know that declaring a win followed by the technological equivalent of sticking ones fingers in ones ears and shouting “Nya, Nya, Nya can’t hear you!… constituted a win.

  197. DrLoser says:

    DrLoser warning my gressy monkey script is on if you do more than 1 post I will not be answering any.

    An abject admission of defeat, via the noted greasy monkey tool? Well, there’s novel for you.

    I’d like to say that I will miss your wit, erudition, and all-round incisive and well-informed commentary, oiaohm.

    But since your commentary is none of those things, I can’t, really, can I?

  198. oiaohm says:

    DrLoser warning my gressy monkey script is on if you do more than 1 post I will not be answering any.

    Deaf Spy and if you have not noticed the standard is clear. All those extra write functions should be put functions. So you should not have mountain of write statements. If you runtime has a mountain of write statements someone has screwed up. Put is mandated to exist by standard.

    So the system define is correct. You have just pointed out that internally freepascal is not following standard.

    Deaf Spy again you did not read the standard. Instead you go and read a implementation and say is correct.

    The standard defines that solve out is use put statements not use write statements for write/ln. So the RTL stuff is wrong.

    https://github.com/graemeg/freepascal/blob/5121551686d999cedeb2b16e1b82b03c7c5ea9e9/utils/fpdoc/dw_man.pp

    Yes it does help if you open the right files. Yes FreePascal has some very wrong complier optimizations. There are write/writeln using array method inside FreePascal. FreePascal conforms to standard in places then does not conform in others.

    Person who does not know the standard will go off like a idiot because they will not know to look for the correct to standard stuff to find it in freepascal.

    https://github.com/graemeg/freepascal/blob/master/rtl/inc/text.inc basically trap for a idiot that Deaf Spy.

    Now freepacel could be a lot clean code base if items like text.inc were nuked and standard conforming processes were placed it place.

  199. DrLoser says:

    Obviously I may have misconstrued the grammar defined in ISO 7185.

    I have no practical experience in Pascal whatsoever.

    Robert? Your experience in this area would be most valuable, I think.

  200. DrLoser says:

    ISO 7185 Pascal does not include function overloading magic.
    http://www.pascal-central.com/docs/iso7185.pdf
    So basically everything you just said is implementation extension and not required in a Pascal conforming complier.

    It’s still “COMPILER,” Jane, you ignorant slut!

    Just call me Dan, OK? Now, as Dan, I have taken the trouble to examine your pathetic, weedy, and inconsequential cite. There are thirty two mentions of WriteLn in your cite. I shall omit the “drive-by” ones (eg in the “simple Pascal program — fair enough, but not relevant to current purpose) and deal with the other ones.

    the procedure-identifier in a procedure-statement containing a writeln-parameter-list shall denote the required procedure writeln.
    procedure-statement = procedure-identifier ( [ actual-parameter-list ] j read-parameter-list j readln-parameter-list j write-parameter-list j writeln-parameter-list )

    We are already at the level of the Pascal grammar. And what do we see? We see a writeln-parameter-list. (And, in fact, a readln-parameter-list, which is also interesting.)

    Now, assume the following functions in the standard Pascal library:
    1. SquareRoot(X)
    2. Concatenate(X1, X2)
    3. ToString(X)
    4. CreatePair(X1,X2)

    These are merely examples. But for each one, you would expect — in the grammar — an equivalent LHS to write-parameter-list, wouldn’t you?

    Otherwise it wouldn’t be a comprehensive grammar. And yet ISO7185 is a fully-comprehensive grammar.

    Which leads us to deduce that, as Deaf Spy says, Pascal treads writeln and readln differently. And that it does so via “compiler magic.”

    6.9.4 The procedure writeln

    This one is fascinating, Fifi. Perhaps you have an adequate explanation as to what the “pre-assertions” and “post-assertions” might involve, and at what point during the compile-link-run process they occur?

    Or perhaps not.

    Now, I admit that this is not an exhaustive examination of all the cases where the grammar fragment parameter-list occurs in the Pascal ISO7185 Standard you so helpfully quoted — without a scintilla of understanding — Princess, but I can only find five variants:

    1. procedure-parameter-list
    2. formal-parameter-list
    3. actual-parameter-list
    4. read-parameter-list
    5. write-parameter-list

    Funny, that.

    Would you care to speculate on why the first three are so obviously completely different to the last two, Princess?

    Please go ahead. Debase yourself even further.

    All of us, secretly, enjoy a good laugh at the expense of the more worthless members of society. It’s sad, but then again, so is Reality TV.

  201. Deaf Spy says:

    This “limit” you speak of, Deaf Spy. Are you entirely sure that oiaohm will be completely unable to dig out even a single other example, to go along with Pascal’s Write(XX)?

    Oh, he doesn’t need to go much father, but let us sit back and enjoy.

  202. DrLoser says:

    DrLoser doing 7 posts in row means I will not answer you

    Only four this time, oiaohm, and even this fourth one is a regrettable necessity if I am to offer the following challenge:

    Don’t bother your pretty little head with the two most difficult posts below.

    Just pick the one you are deluded enough to believe you can “win” on.

    Surely one out of the three offers you an opportunity to gloat?

  203. DrLoser says:

    Anyway, about duck-typing in C, Fifi.

    It does not exist. It cannot exist. For good and sufficient reasons, refer to the post by Luvr, directly below.

  204. DrLoser says:

    When you call Writeln, the compiler, knowing the correct ordinary type at compile time, replaces your line with appropriate routine there, on spot. In the resulting executable WriteLn, as you see it in your Pascal code, simply does not exist.

    But, how confusing!

    Surely that is duck typing, is it not?

    Bwahahahahahahahahahahahahahahahahahahahahaha!

  205. DrLoser says:

    1. In FreePascal, as in every Pascal out there, Write(Ln) is magic. It is replaced at compile-time with the appropriate method.
    This is not function overloading, because it is applied to a limited set of routines only.

    One of which is Quack, obviously.

    Or, should we wish to venture into the Wacky World of Non-Standard Fifi C Pointers, QUACKABLE.

    This “limit” you speak of, Deaf Spy. Are you entirely sure that oiaohm will be completely unable to dig out even a single other example, to go along with Pascal’s Write(XX)?

    He’s an enterprising little lad. Ignorant, deceitful, unqualified, spiteful, and deluded.

    But still and all. Enterprising.

  206. Deaf Spy says:

    gnu pascal and freepascal and Pascal-P system uses a completely different solution.

    Really, Fifiest Fifi Ever? Dear, dear, dear…

    Let’s examine FreePascal. (Hey, Pogson, you may find this interesting!)

    You quote this:
    http://www.freepascal.org/docs-html/rtl/system/writeln.html
    which is the documentation only. Let’s look at the actual code, shall we?

    system.fpd (https://github.com/graemeg/freepascal/blob/master/rtl/inc/system.fpd) says:
    Procedure WriteLn (Var F : Text; Args : Arguments);
    the file contains no implementation whatsoever.

    Where is it, where is it? I was tempted to let you, Fifi, go and find it. Then I decided it would be a waste of time, because you won’t.
    Answer: https://github.com/graemeg/freepascal/blob/master/rtl/inc/text.inc

    There, you have a bunch of routines fpc_Write_Text_XXX, such as fpc_Write_Text_Boolean, fpc_Write_Text_Float, and so on, and so on. My gosh, doesn’t it look familiar? To Object Pascal!

    Indeed, Fifi. FreePascal’s compiler is replacing Write(Ln) with appropriate RTL routine at compile time, just like Borland / Object Pascal’s compiler. Plain and simple. This destroys your whole wall of text.

    Fifi, the sad (for you) conclusion is:

    1. In FreePascal, as in every Pascal out there, Write(Ln) is magic. It is replaced at compile-time with the appropriate method.
    This is not function overloading, because it is applied to a limited set of routines only.

    2. You are a clueless, ignorant fraud.

    Explain to us again, Robert, why you occasionally indulge in the frivolous pursuit of believing anything that oiaohm says.

  207. oiaohm says:

    luvr language standard can clearly define everything including linking and runtime.

    To be truthful deaf-spy stupidity is going to be helpful here luvr compilers. The Section deaf-spy thinks he has a win with in Pascal standard in fact defines what runtime implementation should do.

    Writeln, Fifi, is what in Pascal-land they call “compiler magic”. It is not declared in System.pas, it simply does not exist in the run-time library. Instead, the run-time library has a bunch of _WriteXXX routines, like _WriteBool, _WriteLong, _WriteStr, etc.
    Deaf Spy sorry to say that is borland delphi- pascal with object overloading.

    gnu pascal and freepascal and Pascal-P system uses a completely different solution. What you have referenced you idiot.

    ISO 7185 Pascal does not include function overloading magic.
    http://www.pascal-central.com/docs/iso7185.pdf
    So basically everything you just said is implementation extension and not required in a Pascal conforming complier.

    write

    Let f denote a file-variable and el,…,en denote expressions (n>=2); then the procedure-statement write(f,el,…,en) shall access the file-variable and establish a reference to that file-variable for the remaining execution of the statement. The execution of the statement shall be equivalent to
    begin write(ff,el); write(ff,e2,…,en) end
    where ff denotes the referenced file-variable.
    Let f be a file-variable and e be an expression; then the procedure-statement write(f,e) shall access the file-variable and establish a reference to that file-variable for the remaining execution of the statement. The execution of the write statement shall be equivalent to
    begin ff”:= e; put(ff) end
    where ff denotes the referenced file-variable.
    NOTES
    1 The required procedures read, write, readln, writeln, and page, as applied to textfiles, are
    described in 6
    .10.
    2 Since the definitions of read and write include the use of get and put, the implementation-defined
    aspects of their post-assertions also apply.
    3 A consequence of the definition of read and write is that the non-file parameters are evaluated in
    a left-to-right

    Deaf Spy this is what the standard in fact says. Stupid enough solving out to overloaded functions is in fact disobeying ISO 7185 Pascal .

    http://www.freepascal.org/docs-html/rtl/system/writeln.html

    Implementing as a typed arguement array is matching to ISO7185 Pascal. Why ISO7185 did not allow multi-able write functions or was intended to have major complier magic to do write functions.

    Basically Deaf Spy you are another F wit like DrLoser who looks at a program language implementations instead of the standard then go around claiming that is how things should be done. Borland pascal breaks Pascal standard in quite a few places so is a non conforming complier and you idiot DeafSpy has used that as a reference.

    Free-pascal runtime library only has 2 writeln and 2 write functions functions. GNU Pascal only has 1 writeln and one write function exactly like p-pascal. Only Pascal with the overloaded nightmare for write and writeln functions are borland made ones. Basically _WriteXXX routine crap is not part of the Pascal standard and limited to very few implementations. The arguement list is way more common version.

    Yes the standard defines the run-time stepping threw the array at runtime. Guess what borland pascal does not do. Then the standard does not tell you how you use the correct type information. Only method for matching to the standard is RTTI the arguement type into the array of arguments is your only option for write and writeln.

    Deaf Spy basically Pascal standard is a lot clearer on how stuff should be implemented. Even that Pascal standard is clear this has not prevented the existence of non conforming compliers.

    Deafspy function overloading is 100 percent not part of most of the Pascal Standards so you have to be able to implement everything in the most Pascal Standards without requiring function overloading.

    luvr a more strict language standard defines than C can say that return values between programs must transfer unharmed. Can say no hidden behaviors before main program other than to perform a following list of prescribed tasks.

    luvr the items you said that you could not see how it the compilers problem are not the compiler problem because the C standard does not contain strict conditions making it the compilers/runtime problem. Basically C Standard is highly not restricted so you can get away with almost murder and be conforming. Pascal Standard is not the most strict programming language standard out there but it way more strict than C standard so its a lot simpler to end up non-conforming as borland managed todo.

    Freepascal is built to standard. I referenced a standard conforming Pascal compiler and idiot Deaf Spy used a standard non-conforming Pascal compiler as reference. Yes I had check the standard before I referenced freepascal.

  208. luvr says:

    oiaohm said, “C standard does not in fact define what happens before main gets called does it DrLoser. So if before main it formats harddrive it can still be a valid c complier.”

    I’m a bit at a loss as to how “what happens before main gets called” has anything to do with the quality of the ‘comp’s/li/il/’er’ vis-à-vis the C standard (whichever standard you wish to choose). Whatever happens at runtime is not for the ‘comp’s/li/il/’er’ to worry about, but is purely a function of the libraries with which the program gets linked. Even the linker doesn’t care: as long as the library routines can successfully link to the compiled object code, everything is fine from a technical point of view.

  209. Deaf Spy says:

    Deaf Spy: you haven’t really looked into how Pascal’s WriteLn() works in five or more years, have you? In fact, what it does is [cite here]

    Let’s be fair with the poor Fifi. As a matter of fact, he did answer:

    Simple statically generated RTTI so a structure goes into Writeln in pairs 1 part defines type other part is the object.

    Thank you for your answer, Fifi. Sadly though, your answer is wrong.

    There is no popular version of Pascal (one known to anyone else but our Fifiest Fifi Ever) that supports RTTI for ordinary types (which are the only types supported by writeln). In Pascal, RTTI is implemented strictly for classes, and to a limited extend depending on the compiler. RTTI for ordinary types? No, zero, nada, yok.

    Now, back to how writeln works. Since our kind host Robert is not eager to jump into this discussion, surely not for ignorance, but for having more important matters to deal with, I will take the futile effort to enlighten you.

    Writeln, Fifi, is what in Pascal-land they call “compiler magic”. It is not declared in System.pas, it simply does not exist in the run-time library. Instead, the run-time library has a bunch of _WriteXXX routines, like _WriteBool, _WriteLong, _WriteStr, etc. When you call Writeln, the compiler, knowing the correct ordinary type at compile time, replaces your line with appropriate routine there, on spot. In the resulting executable WriteLn, as you see it in your Pascal code, simply does not exist.

    I really want to second. Explain to us again, Robert, why you occasionally indulge in the frivolous pursuit of believing anything that oiaohm says?

  210. oiaohm says:

    DrLoser doing 7 posts in row means I will not answer you

    What you are doing is nothing more than spamming. I confine my self to a max of 4 on a topic. DrLoser is pure troll behavour to start spamming when you don’t have any means of winning the arugment.

    The reality is the undefined behavior of C allows implementations to have complier supported duck typing.

    Deaf Spy: you haven’t really looked into how Pascal’s WriteLn() works in five or more years, have you? In fact, what it does is [cite here]
    DrLoser I have already done that. So please don’t tell me to do stuff I have not already done.

  211. oiaohm says:

    DrLoser no point repsonding to a moron who is taking 5 posts to say the same things over and over again.

  212. DrLoser says:

    Deaf Spy really has no clue.

    This is a repeated assertion of yours, Fifi. (With X substituted for “Deaf Spy.”)

    It’s an interesting assertion, because it implies a (wholly justified) utter lack of self-confidence.

    You see, the rest of us (saving Dog-Brain and Luvr and various other Yahoos) do not respond to a contradiction in this way. Let me show you the polite way to do this:

    Deaf Spy: you haven’t really looked into how Pascal’s WriteLn() works in five or more years, have you? In fact, what it does is [cite here]

    There now. Not only polite, but also probably factually correct. And it advances the argument.

    Your repeated and completely unfounded assertions that anybody who contradicts you is ipso facto entirely ignorant of the facts, Fifi

    … do nothing else but show yourself up as an ignorant and undomesticated moron.

  213. DrLoser says:

    And … oiaohm … you have some sort of credible answer to that QUACKABLE issue I posed earlier, I assume?

    (Not)

  214. DrLoser says:

    And just to repeat the C program at issue:

    Well, no, actually.

    Here’s the actual program, which isn’t quite what Fifi specified:

    <code#include <limits.h>
    #include <stdio.h>

    int main (void)
    {
    printf ("%d\n", (INT_MAX+1) < 0);
    return 0;
    }

    The Fifi proposition here … which before she reconsidered, was that actually her degenerate version of this program somehow featured what an unspecified version of the C Standards would define as “unspecified behavior” … is that this program features, in C Standard terms, “unspecified behavior.”

    In support of this abject lunacy, Fifi points out that there is a possibility … somehow … that your hard drive may have been reformatted before main() is called.

    This is of interest, apparently, because, and I quote Fifi on this one:

    C standard does not in fact define what happens before main gets called does it DrLoser. So if before main it formats harddrive it can still be a valid c complier.

    … Dear, dear, dear …

    Explain to me again, Robert, why you occasionally indulge in the frivolous pursuit of believing anything that oiaohm says?

  215. DrLoser says:

    DrLoser sorry 15 years experience using C does not mean you know anything about Standard C.

    I can hardly demur from this, can I, Fifi?

    On the other hand, the discussion over ~300 posts in this thread alone (I shall advert the interested reader to other Fifi-dominated threads, such as her completely loony efforts on UTF-8) would suggest two basic things:

    1) I have spent 15 years learning the ins and outs of the language, amongst others. I know what I am talking about. I can chuck together a quick demo in C that completely demolishes any preposterous idea that you have just come up with.

    2) You have spent the hours between when the lamp-post shuts off and your trade ambles back home, and when it switches on again at 7 am, Googling frantically for something that supports your non-existent knowledge of the C language.

    Feel free to ask a dispassionate expert to read through this thread, Fifi, and then be ready for him or her to tell you that you are being an abject ignorant moron. At least when it comes to the C standards.

    (I assert that the abjectness of your utter ignorance is rather more universal. However, for now I’m sure the C standards will do.)

  216. DrLoser says:

    The problem I have referenced is in the Halt and Catch Fire camp of CPU/Platform issues. C code causing Halt and Catch Fire issues is purely valid C code.

    A hilarious and blatant attempt to Google for an answer to my original point that, at least in theory, the Turing Halting Problem can be construed as a universal case of “undefined behavior” for Turing-Complete languages.

    It’s even more hilarious, Fifi, because you evidently have no clue what the “Halt and Catch Fire” issue really was …

  217. DrLoser says:

    C standard does not in fact define what happens before main gets called does it DrLoser. So if before main it formats harddrive it can still be a valid c complier.

    COMPILER, Fifi, you persistent moron.

    This is not actually what “undefined behavior” means when the C Standards use that term.

    A moment’s thought, coupled with your interesting yet utterly false assertion that C and C++ are two of the very, very few Turing Complete languages that do not feature “undefined behavior” as part of their standards, should convince you of this.

    Fifi’s Nutter Theory: “… if before main it formats harddrive it can still be a valid c complier.” A sentence directly after, and therefore used to justify the equally absurd “Saying nothing was undefined in my first example says that you really don’t know the Standard C DrLoser.”

    Reality Chimes In: There are very few programming language environments on Earth, little ragged-trousered ninny, that either specify or are capable of controlling what happens before entry to the equivalent of main()

    And by “very few” I mean none whatsoever.

    How many more sharks do you propose to jump on this particular non-issue, Princess?

  218. DrLoser says:

    [Malapropriate Fifi-ism] How format harddrive happens in the (INT_MAX+1) case is the interger overflow handler happened to be pointing to function format harddrive.

    [Deaf Spy, understandably incredulous] Bwahahahahaha!

    Tell us, Fifiest Fifi Ever, how would that function happen to be there as an exception handler? Gosh, in this way any run-time error can lead to formatting your hard-drive. Even in a much more sophisticated language … etc

    I can go one better than that.

    Suppose, Fifi, that somehow this “function format harddrive” of your splendidly diseased imagination is, in fact, being pointed to by, oh, I don’t know, say printf()?

    Let us now pause and take a moment to contemplate the possibilities.

    Now then. Is there a good reason to assume that this fptr substitution is any more or less likely with the integer overflow “handler” — whatever one of those might be in a language (or compiler with relevant switches) that does not understand integer overflow because it does not deal with checked integer arithmetic — of which you speak?

    As a matter of fact I would contend that it is far more unlikely that you would find such a substitution in this putative integer overflow handler. I’m happy to explain my thinking here. But be that as it may.

    Let us now pause and take a moment to contemplate the relative likelihoods.

    Following which, let us now pause and take a moment to re-appraise the possibilities of this substitution ever happening in the first place.

    And as a grand finale, let us all contemplate the likelihood of a simple call from userland, via some finagled function pointer, which we shall further assume does not check any parameters or similar desiderata, actually making it through the OS security layer and erasing the hard drive?

    Yes, let us do that, Fifi. In fact, I encourage you to try it in practical terms. Log in to your Linux desktop (or more probably on the dumpster-dived effort you borrow from your neighbor about ten miles down the road) with a standard user account, and try to reformat the disk drive.

    Give it a shot and report back, Princess.

  219. oiaohm says:

    Tell us, Fifiest Fifi Ever, how would that function happen to be there as an exception handler?
    Deaf Spy really has no clue. CPU built in exception handlers are not your code.

    C++ try/catch does not promise to connect to every single way a platform can raise exception. So triggering a integer overflow in C++ or C# or anything else on a CPU that has integer overflow handling you could be in for any random code running next. C and C++ this would be conforming behavior.

    Some cpus due to the way their floating point is setup can also do extreamly strange things when you have a floating point error.

    The problem I have referenced is in the https://en.wikipedia.org/wiki/Halt_and_Catch_Fire camp of CPU/Platform issues. C code causing Halt and Catch Fire issues is purely valid C code.

    Deaf Spy please note I was asked about duck typing in C not C++. The reality is due to the huge amount of undefined that is classed as C normal. If C uses metadata in it C library or if it provided is purely undefined part of C. So some platforms have stuff some platforms don’t.

    How printf is implemented is not 100 percent identical. How writeln in pascal is implemented is not 100 percent identical.

    Tell Fifi how Pascal’s writeln works properly for a rather strictly typed language such as Pascal?
    Sorry you are asking Robert to answer this because you cannot deafspy.

  220. Deaf Spy says:

    How format harddrive happens in the (INT_MAX+1) case is the interger overflow handler happened to be pointing to function format harddrive.

    Bwahahahahaha!

    Tell us, Fifiest Fifi Ever, how would that function happen to be there as an exception handler? Gosh, in this way any run-time error can lead to formatting your hard-drive. Even in a much more sophisticated language:

    try
    {
    int = checked (2147483647 + 10);
    }
    catch
    {
    Format("\hda0"); //Pseudo-code for the nit-pickers
    }

    And tell us, Fifiest Fifi Ever, what does that has to do with duck-typing in C++? And when you explain to us how printf works?

    Hey, Pogson, come to rescure! Tell Fifi how Pascal’s writeln works properly for a rather strictly typed language such as Pascal?

  221. oiaohm says:

    DrLoser sorry 15 years experience using C does not mean you know anything about Standard C.

    I will give a even simpler example.
    int main(){
    return 0;
    }

    Saying nothing was undefined in my first example says that you really don’t know the Standard C DrLoser.

    C standard does not in fact define what happens before main gets called does it DrLoser. So if before main it formats harddrive it can still be a valid c complier.

    Now of course you will presume that return to system value is 0. Bad news C standard did not define what happened after it got processed by exit function. So it could become 1024 or any other creative number and be conforming to C standard.

    The example on that blog is overly simple. The reality of C is undefined behavior trumps all.

    Well, me, I don’t see how (INT_MAX+1) is undefined. Which I presume makes that particular thing a red herring.
    Not defined in the standard what happens. Depending on the platform its a value overflow error or it loops around.

    1. The fairly obvious 0x7FFFFFFF, or whatever. Add one, and it either becomes a huge negative integer, or it becomes zero. (Twos complement versus ones complement.)
    No this is not true cpu some have Integer overflow detection and event handling. So answer from some one with cross cpu usage. Huge negative, zeroed, random number, Platform error due to interger overflow happening, cpu lockup because you did not declare anything to handle interger overflow before triggering one.

    How format harddrive happens in the (INT_MAX+1) case is the interger overflow handler happened to be pointing to function format harddrive. A new platform would be free to add more possibilities to what happens when you trigger an integer overflow.

    DrLoser this comment says you lack experience using different cpu types particularly secure types. Cross platform C can turn into complete disaster when key platform dependant items are missing like defining float point and integer error handling to sane locations. Its not common CPU that raise integer errors.

    Yes the example on the blog I quoted is full of red hearings. Yet DrLoser successfully chooses the one that was not the red hearing. Its the interger overflow error that makes <0 action as well possibly be some random number.

    Its like NAN platforms and 0/1 Yes on NAN platforms this is not a floating point error instead its special value NAN and it can get stranger with NAN pascal. x=0/1 = NAN y=x*10=NAN*10 z=y/x=10 . Yes functional operations on NAN platforms.

  222. DrLoser says:

    Just to short-circuit the next barking mad lump of drivel from Fifi via her exiguous cite, I’m going to guess at the shiny Jackdaw Jewel that caught her incompetent attention:

    And this:
    $ cc test.c -o test
    $ ./test
    Formatting root partition, chomp chomp

    One might say: Some of these compilers are behaving improperly because the C standard says a relational operator must return 0 or 1. But since the program has no meaning at all, the implementation can do whatever it likes. Undefined behavior trumps all other behaviors of the C abstract machine.

    Well, no, actually.

    Here’s the actual program, which isn’t quite what Fifi specified:

    #include
    #include

    int main (void)
    {
    printf ("%d\n", (INT_MAX+1) < 0);
    return 0;
    }

    Trivially, this program returns the integer value zero … at which point, it’s up to the runtime. But we’re not talking about the runtime here. Whether the runtime reformats your disk or not, on reception of a returned value of zero, is of no consequence whatsoever.

    Now, what about that Boolean comparison?

    Well, me, I don’t see how (INT_MAX+1) is undefined. Which I presume makes that particular thing a red herring.

    I’d be extremely interested to hear of the C Standards justification for considering, say, 0 < 0 to be, in some contorted and totally improbable way, an expression (when converted via printf to a runtime statement) that results in “undefined behavior.”

    Because, you know what? The C standards do not — as far as I am aware — define a memory model. At least before 1999. There is an assumption that the memory model is twos-complement, but quite honestly it could be ones-complement. Or even something stranger.

    But we can even assume a Bork-Bork-Borks complement here. The fact of the matter is that there are only two possible C standards compliant implementations of INT_MAX –a preprocessor construct — that will pass the compiler.

    1. The fairly obvious 0x7FFFFFFF, or whatever. Add one, and it either becomes a huge negative integer, or it becomes zero. (Twos complement versus ones complement.) Or, bork bork bork, it becomes any integer, positive or negative, that you like. Bork Bork Bork! It can still be compared to zero.
    2. Any non integer you prefer. (char*)”FIFI is a compulsive lying unprofessional cretinous fraud” for example. This one is more interesting. It won’t be a null pointer, so on most computer architectures, it will resolve to a pointer to “IFI is a compulsive lying unprofessional cretinous fraud”. Bork Bork Bork! It can still be compared to zero, which in C terms here substitutes as the null pointer.

    In short.

    There is nothing at all in Fifi’s example that can be construed as “undefined” by the C standard.

    And there is nothing at all in the program I have just listed from Fifi’s cite that can be construed as “undefined” by the C standard.

    Now, back to duck typing.

  223. DrLoser says:

    Worth repeating, since Fifi is trying to wriggle away from her insane belief that C supports duck typing. (Rather unsuccessfully, but her latest efforts are so hilarious that I applaud her efforts.)

    Consider the following:

    #define QUACKABLE typeof (void*)()
    void Quack();
    void BarkingMad();
    QUACKABLE FifiQuacks = Quack;
    QUACKABLE FifiIsBarkingMad = BarkingMad;

    A moment’s thought, Fifi, will tell you that you can pass either FifiQuacks or FifiIsBarkingMad through to the C run-time libraries, and they will not be able to discriminate between the two using typeof().

    But I forget. A moment’s thought is utterly beyond you, isn’t it?

  224. DrLoser says:

    Undefined behavior is defined acceptable in the C standard. Including insane things. int i=”test”; This is something not defined in C standard C complier is free to choose to build or not build this.

    No it is not.

    Ever wonder why the (int) cast — amongst others — was invented, little nincompoop?

    If not — well, now is your chance to wonder.

  225. DrLoser says:

    The word is still “COMPILER,” by the way.

    Have you ever considered using a modern word-processor for your epic driveling nonsense, Fifi? I understand they can help you these days.

    In fact, even LibreOffice 3.0 could help you. You really have no excuse for this, do you?

    Rant over. Here, in all its glory, is Fifi’s latest masterpiece of abject failure:

    If I wrote C complier that took
    #include
    int main(){
    printf(“hello world”);
    }
    And produced a binary that formated you harddrive instead of printing hello world it could still be a valid to C standard complier.

    There are so many things wrong here that I find it difficult to list them. But I shall try.

    * “Valid to C?” Meaningless. Try valid C.
    * If that program, compiled on any C compiler whatsoever, formats your hard drive, then I suspect you have cause for complaint.
    * But the company in question will not be able to defend itself on the grounds that this is Standards-compliant C compiler behavior.
    * BECAUSE IT ISN’T.
    * Nothing about that snippet is remotely near “unspecified behavior” in C.
    * Every last part of the syntax, the grammar, and indeed the compiled and linked (presumed to standard C libraries) is fully-defined behavior.

    You’ve really jumped the shark on this one, haven’t you, Princess?

    Now, to correct that little detail of yours regarding the assumption that “undefined behavior” can “format your hard-drive.”

    On a Ras-Pi, possibly. On anything with a modern MMU, no it cannot.

    “Formatting your hard-drive” was a useful bogey man put up by the likes of Scott Meyers and Herb Sutter and quite possibly Kernighan and Ritchie as an instructive joke.

    Only a twit in a tin-foil hat would take it literally.

    Et, voila! Ceci on se trouve Fifi!

  226. DrLoser says:

    http://blog.regehr.org/archives/213

    This is a good read for those who don’t know C.

    Leaving aside the obvious fact that one can know C, program in C for, say, fifteen years, and make a lot of money programming in C without ever having read this blog …

    … No, it isn’t, Fifi.

    It’s apparently a very useful crutch for somebody, like you, who doesn’t have the faintest ability as a C programmer, however.

    Naturally, as that particular crutch-dependent ignorant programmer, Fifi, it behoves you to pick, say, the most important paragraph of John Regehr’s argument.

    And also, if you please, to explain how it is relevant to the present discussion.

  227. oiaohm says:

    http://blog.regehr.org/archives/213

    This is a good read for those who don’t know C.

    If I wrote C complier that took
    #include
    int main(){
    printf(“hello world”);
    }
    And produced a binary that formated you harddrive instead of printing hello world it could still be a valid to C standard complier.

    C is that far undefined its not funny.

  228. oiaohm says:

    DrLoser the moron who wants to insulting insulting does not get to be undefined behavour it has have the possibility of being undocumented. Most programming language standard demand documentation of implementation dependent stuff. C and C++ standard evil says acceptable to have undefined behavour.

  229. oiaohm says:

    DrLoser sorry I do understand what the prcprocessor does in macro rewriting the code and cross complier support. But it secondary function by standard is to abort builds. The reason why fatal #error is included in the standard.

    The reality is you claimed duck typing could not exist in C. Next you don’t understand the purpose of the C preprocessor and how it effects how the standard is interpreted.

    Undefined behavior is defined acceptable in the C standard. Including insane things. int i=”test”; This is something not defined in C standard C complier is free to choose to build or not build this.

    Now try creating a undefined variable value set in Javascript and most other languages.

    Also read your bull shit link.
    http://stackoverflow.com/questions/14863430/does-javascript-have-undefined-behaviour

    Its not undefined behavior. Javascript in spec clearly defines implementation-dependent areas. So other than areas the spec says is implementation-dependent all javascript should perform exactly the same.

    So Javascript has defined implementation dependent behavior areas. Plan undefined behavour specs is anything not in the spec is undefined and can be implemented how ever you like.

    Also javascript standard mandates conforming implementations should document what they do in implementation dependent areas. Undefined behavior specs like C and C++ no such requirement to document.

    Sorry DrLoser you have everything wrong in this case not a single point correct.

  230. DrLoser says:

    Yes extensions to C are detectable by preprocessor for a reason. Checking what complier you have and only building on particular compliers is fully C standard conforming.

    Christ, Princess, you don’t even understand what the C preprocessor does, do you?

  231. DrLoser says:

    I tire of your pathetic nonsense, Fifi. Just to take your first paragraph:

    DrLoser most language standards says you should avoid undefined behavior this include javascript.

    Any particular “language standard” you have in mind, Fifi?

    I’m sure you’ll be glad to show some petticoat … oops, evidence … for this assertion of yours.

    Or, alternatively, being a habitual self-confessed unprofessional lying fraud …

    Not.

  232. oiaohm says:

    DrLoser most language standards says you should avoid undefined behavior this include javascript. C standard in fact says use Undefined behavior if you like and even provides the structures to deal with it.

    C and C++ are in the group of languages where using undefined behavior is acceptable. The standard tells you that you are meant to wrap undefined behavior in preprocessor macros so on platforms that don’t support enough of the undefined behavior your program need or you cannot work around with macros your code does not build.

    Javascript does not use the term undefined behavior instead uses implementation-dependent. Javascript tags where you have implementation unique behavior. C and C++ just has general undefined behavior so any section of the C standard is free to extend with implementation dependent features.

    Comparing to javascript means you have not read the javascript standards either. Because javascript is not one of the languages with officially with undefined behavior as part of the standard.
    #define BORKED typeof (void*)()

    BORKED = (BORKED)funcptr;

    Yep don’t know C DrLoser
    #ifndef __GNUC__
    #error No GCC Complier Program Not Building As Program Uses GCC extensions
    #endif

    Yes extensions to C are detectable by preprocessor for a reason. Checking what complier you have and only building on particular compliers is fully C standard conforming. This is why standard conforming C can still be such an ass to get running cross platform. There is a difference between platform neutral C and Standard conforming C and its huge.

    C accepts platform locked code and it part of it standard also acceptable by C standard is program refusing to run/build at all.

    DrLoser the C standard is a designed halting problem. Just using the C standard you are completely not sure what will or will not happen when you program runs due to undefined behavior being defined into the standard as acceptable for anything that is not defined. Simple things like buffer overflows and pointer maths mistakes are not defined in the C standard how they should be handed.

    Lot of issues blamed on C really should be fixed by demanding uniform complier extensions in the way pascal got function overloading.

    https://gcc.gnu.org/onlinedocs/gcc/Typeof.html
    Of course I let you hang self DrLoser. typeof in gcc is only preprocessor stuff.
    To access dwarf information you use libdwarf of course. I said dwarf rtti for a reason. Using dwarf is slow.

    If the metadata has been recorded you program/libraries are free to choose if they access it or not under C.

    All the excuses you are attempting to dream up are not part of the C standard. The C standard does not say there is anything wrong with creating a halting problem.

    DrLoser C standard lacks constraints on the input this is why saying C standard makes something impossible more often than not you are wrong.

    C Standard does not define how something has to be implemented is as about as far as you can go in most cases. C Standard does not define duck typing. C standard does not define how duck typing has be implemented. So duck typing is undefined by the C standard so up to implementations/compliers to choose how they will deal with that.

    When you start writing a list of everything C standard does not define it gets massive quickly. Then you have to remember everything you write undefined next to by C standard each implementation is free todo what ever it likes as long as they correctly preprocessor wrap the non cross platform code or put in a raise error #error.

    Speaking of alpha code, anybody has any idea when Windows 10 is supposed to reach alpha stage? :-0
    Alpha and beta are terms used for proper releases,and Windows 10 is a “rolling release” now.

    Technically Windows 10 has been through Alpha/beta stages already and complete them. Now it moved to rolling release maintenance mode.

    Please note debian is kind of a rolling release format yet it still has sid(alpha)/testing(beta) and stable(production).

    The windows 10 model suggest enterprise gets the option of Production or Beta grade rolling release and home users only get the option of beta grade production release.

  233. kurkosdr says:

    Speaking of alpha code, anybody has any idea when Windows 10 is supposed to reach alpha stage? :-0

    Alpha and beta are terms used for proper releases,and Windows 10 is a “rolling release” now.

  234. DrLoser says:

    It’s all bollocks I say!

    So much so that you would prefer to be a blatantly obvious troll?

    Well, each to his own, I think.

  235. DrLoser says:

    I do say, Computer Science theory in general is VERY boring. Speaking out one’s own ass and degrading Linux zealots is what I do best.

    But blokes today are disingenuous with Windows 10, and I for one have decided not to partake in Microsoft’s shenanigans any longer

    It’s all bollocks I say!

  236. DrLoser says:

    Speaking of alpha code, anybody has any idea when Windows 10 is supposed to reach alpha stage? :-0

    I’m so glad you asked that, Luvr.

    Now, back to basic Computer Science theory.

  237. luvr says:

    DrLoser said, “I’m happy to offer consultancy on the alpha-ness, or otherwise, of any FLOSS suite you care to name.”

    Speaking of alpha code, anybody has any idea when Windows 10 is supposed to reach alpha stage? :-0
    (Not that I really care—just curious.)

  238. DrLoser says:

    As a matter of small import in the current discussion, I would in fact maintain that it is possible to evade the “undefined behavior” of the Halting Problem by a simple mechanism.

    This simple mechanism boils down to constraints on the input. If one can restrain the set of possible inputs to those that cannot possibly lead an algorithm to proceed ad infinitum without halting, then obviously one has produced a lemma (I’m not entirely sure that it is a sufficient lemma) which will be useful in proving, or disproving, the possibility that a Turing-Complete computer language can be specified that does not require the specification of “undefined behavior.”

    A bit beyond my pay-scale, I am afraid. And certainly beyond the competence of mindless gibbering idiots like Fifi.

    But, should anybody care to pursue this interesting theoretical line — you should probably read Marvin Minsky along the way — then may I recommend a study of Finite Automata?

    Or Pascal. Whichever one rocks your boat.

  239. DrLoser says:

    Yes DrLoser C and C++ is two of the few languages that as part of standard defines Undefined behavior as acceptable.

    You are being far too hard on two languages, neither of which you understand, in juxtaposition to every other language, none of which you understand, Fifi.

    Let’s just take a random example here. JavaScript “defines Undefined behavior as acceptable.” If two implementations differ — and this is true of all languages, everywhere — then the result is “undefined.”

    How could it be otherwise, Princess?

    From a PL point of view, I might be tempted to assert that all Turing-Complete languages definitionally exhibit “undefined behavior.”

    Consider the Halting Problem. I’d say that’s about as “undefined” as behavior is ever likely to be.

  240. DrLoser says:

    BORKED borked = (BORKED)funcptr;
    (Just before anybody picks nits.)

  241. DrLoser says:

    Aha! Think again, Dr Loser! (If only to summarise what would be a week’s worth of Fifi whining in a short paragraph.)

    The RTTI use of typeof() would be via the cast operator, wouldn’t it? Thus:

    #define BORKED typeof (void*)()
    ...
    BORKED = (BORKED)funcptr;

    Just one teeny tiny problem with this.

  242. DrLoser says:

    Actually, and bizarrely, I’m not even sure that typeof() provides any sort of RTTI whatsoever. (I wouldn’t know — I’ve never had the need to use it.)

    Is it assignable to any C construct whatsoever?

    Because, if not, it’s not clear to me how one would pass it to the run-time libraries.

  243. DrLoser says:

    Anybody out there wish to map the (closed) range [1..256] to the appropriate range, and help oiaohm out?

    This is genuinely trival.

    I’m surprised the question is still unanswered, given that it’s been about a week since Deaf Spy brought up Pascal’s WriteLn and I admitted, off the back of this, that the C function I have in mind is printf().

    Presumably at least one of you has used printf() at some stage?

  244. DrLoser says:

    Because, you see, Fifi, the Standard quite clearly states that M is not a requirement for X. As in, M is not mentioned even as an option for X.
    You go this route because you are too much of idiot to properly read the c standard and notice it mentions undefined behavior for these cases.

    Since M is (by my definition) meta-data, and since no C standard even troubles itself to mention meta-data, the logical conclusion, Fifi, is that this is not “undefined” behavior. Rather, it is non-existent behavior.

    For obvious reasons, what with them being standards and all, the C standards go to considerable trouble to enumerate the cases where “undefined behavior” ensues. They are really quite comprehensive in this respect. Almost draconically so.

    I therefore assume that you can provide us with a paragraph number, or similar cite, to a C standard (preferably with a real name, and not one that you just made up on the spur of the moment), that stipulates the following … not necessarily in these exact words, of course:

    “Where X expects M, and M is not available to X, the result is undefined behavior.”

    I say “assume.”

    Bwahahahahaha!

    Not a chance in Hell. Prove me wrong, Fifi.

  245. DrLoser says:

    Read here you did admit to Dwarfs RTTI in this post.

    Ah yes, indeed I did, Fifi. Thank you for the reminder — although I don’t quite see how I was doing anything so dramatic as “rewriting history.” I also said the following in that post:

    * Well, it’s not standard behavior.
    * And it allows the same degree of RTTI metadata that, for example, C++ has had since about 1997.
    * But unfortunately it doesn’t actually facilitate duck typing, a la my Python example.

    For all three of these reasons, I presume, you didn’t return to the subject until your usual “hahaha I can google better than you” mindless triumphalism.

    typeof() does indeed permit RTTI — not especially useful RTTI, if you ask me, but tastes differ. Unsurprisingly, this being C, it doesn’t even operate at the class level … because C does not have the concept of class.

    As you may observe in the cite I provided (but which you did not, Fifi), the general idea behind Dwarf’s typeof() is to sanitize hash-defines in the preprocessor. Which is a good thing. It may also be used as syntactic sugar for typedefs, which is arguably also a good thing.

    But both of these “good things” are entirely to do with the compiler.

    I was being generous in accepting that this construct is a form of RTTI. In reality, it’s an almost completely useless one. The best it can really do is to facilitate a switch statement on type — which I will readily admit would be “useful” in your monstrous concoction of a struct with a void pointer. (It certainly eliminates the mess of bare integers and/or enums.)

    Unfortunately typeof() is definitionally limited to, well, types. And the C language — any flavor — is not a particularly type-rich language. typeof() has no way of discriminating between identifiers. And without such discrimination, it is utterly useless for duck typing.

    Consider the following:

    #define QUACKABLE typeof (void*)()
    void Quack();
    void BarkingMad();
    QUACKABLE FifiQuacks = Quack;
    QUACKABLE FifiIsBarkingMad = BarkingMad;

    A moment’s thought, Fifi, will tell you that you can pass either FifiQuacks or FifiIsBarkingMad through to the C run-time libraries, and they will not be able to discriminate between the two using typeof().

    But I forget. A moment’s thought is utterly beyond you, isn’t it?

  246. oiaohm says:

    DrLoser
    http://mrpogson.com/2015/10/22/life-in-all-its-forms-with-gnulinux/#comment-327882

    Read here you did admit to Dwarfs RTTI in this post. Now you say I am attempt to defame you by saying you did. Sorry don’t attempt rewrite history.

  247. oiaohm says:

    DrLoser
    I hereby assert that there is not a single case where the C standard library function printf uses any sort of RTTI whatsoever.
    There are runtime debugging editions of C standard libraries that do use Dwarf RTTI for checking if when you said something is a string in printf define string that is exactly what it has at runtime. Also some C compliers also check this kind of stuff at build time e ven that the C standard does not define that you have to check. C library standard does not say you have todo either.

    How, exactly, does Pascal handle the arguments to WriteLn in a type-safe way?
    Simple statically generated RTTI so a structure goes into Writeln in pairs 1 part defines type other part is the object.

    variadic list with mandated type recording every time the function is called. this is not function overriding and this is how the Pascal language define as it should be done. You see two forms on freepascal but two forms os variation away from official standard allowing overloading.

    Now then. What happens when M is not available to X?
    C standard is very clear about these cases. They are called undefined behavior. Anything that is undefined behavior implementations are free to implement how they see fit. So implementations with metadata are free to use metadata at runtime to check like printf(“%s”,hopefullystring) that hopefullystring is a string. Also a string that is not null terminated printf is free to look up the size of string if the metadata exists instead of going off into buffer overflow. C library standard does not in fact define what the out come of putting a non null terminated string into printf.

    Because, you see, Fifi, the Standard quite clearly states that M is not a requirement for X. As in, M is not mentioned even as an option for X.
    You go this route because you are too much of idiot to properly read the c standard and notice it mentions undefined behavior for these cases.

    https://en.wikipedia.org/wiki/Undefined_behavior
    the implementation will be considered correct whatever it does in such cases, analogous to don’t-care terms in digital logic.
    Yes DrLoser C and C++ is two of the few languages that as part of standard defines Undefined behavior as acceptable. So if the standard does not define something or even mention it implementations of C that are fully conforming are allowed todo what ever they so like to the pure nightmare of coders.

    So DrLoser you idea that it undefined it wrong is upside down to the C standard. Its undefined it correct as per the C standard.

    Have a guess what X will do! Crash city!
    Yes C is cross platform crash city because of C standard define of Undefined being Undefined Implementation is free todo what every it likes in those cases and be 100 percent valid to standard. The trap of the C standards.

  248. DrLoser says:

    Anybody out there wish to map the (closed) range [1..256] to the appropriate range, and help oiaohm out?

    Robert? luvr? ram? oe?

    I’m not sure oiaohm can be expected to manage this on his own.

  249. DrLoser says:

    So again C standard Library define does not mandate metadata also does not forbid implementations from using metadata.

    I’ve had a little bit of a think about this one. Unlike Fifi, I have the ability to consider the evidence in front of me. And this little piece of nonsense is particularly interesting.

    Replace “C standard Library” with X.
    Replace “metadata” with M.

    Thus:
    “X does not mandate M also does not forbid implementations from using M.”

    Undeniably true, Fifi. For any given M and any given X.

    Now then. What happens when M is not available to X?

    Because, you see, Fifi, the Standard quite clearly states that M is not a requirement for X. As in, M is not mentioned even as an option for X.

    Therefore a standards-compliant X has to figure out what to do with the non-standards compliant M.

    Have a guess what X will do! Crash city!

  250. Dr Loser says:

    I hate to leave Mr Pogson out of this.

    I realise, Robert, that you have no interest in how the C language and run-time environment handles duck-typing. You are wise (in ways that Fifi is not) not to have any interest in that. Mostly, because it doesn’t happen. C is a dinosaur language, compared to say Pascal.

    On the other hand, you are well-versed in Pascal, on a very practical level. So, leaving this nonsense about “duck typing” to one side …

    … How, exactly, does Pascal handle the arguments to WriteLn in a type-safe way?

    I’m genuinely curious. The details are hard to find. I’m assuming you can help out here.

  251. Dr Loser says:

    Perhaps oiaohm is also on Sabbatical. There’s a sad lack of response to my challenge to him: pick one choice out of the range of one to two hundred and fifty six (careful, careful, map that range!) that is the only reasonable candidate for duck typing in C.

    Oh well.

    Tomorrow, kiddies, tomorrow. You cannot rely on oiaohm, apparently. But you can rely on kindly old Dr Loser.

    The C standard library is a very interesting one. There are versions of the C standard library that do use dwarf RTTI look up on functions like printf. So again C standard Library define does not mandate metadata also does not forbid implementations from using metadata. So without stating what C standard Library you are talking about you cannot say it does not consume metadata as there are C standard libraries that do consume metadata. So DrLoser here is off on a huge stack of presumes without research.

    This “without research” gubbins is hysterically funny, Fifi. Kindly provide us with your qualifications as a “researcher.”

    They don’t seem to amount to much. Over the last five years and more, your “research” has come up with little more than regurgitated gibberish.

    Just one small point out of all that gibberish I just quoted, if I may?

    “There are versions of the C standard library that do use dwarf RTTI look up on functions like printf. ”

    Bwahahahahahahahahahahahahaha!

    I hereby assert that there is not a single case where the C standard library function printf uses any sort of RTTI whatsoever.

    Not one..

    Cite me that unexpected precedent, Fifi.

    Now.

  252. Dr Loser says:

    Idiot Loser sayeth that all FOSS applications never make it past the Alpha stage.

    On a small point of information, Dog-Brain, “sayeth” is both archaic and pretentious. Very suitable in your case, no doubt. How’s the “sabbatical” going? Learning anything?

    On the salient point, no, I have never said any such thing. I have admitted to using most of the gnu tool-chain, to good effect. I would under no circumstances call either flex or bison “alpha.” Both are not only production quality, but in fact superior to their alternative commercial equivalents, viz. lex (AT&T) and yacc (either AT&T or Sun, I forget which).

    In this very thread, I have recommended (with enthusiasm!) SWiG and OpenCV and PySonar.

    I’m happy to offer consultancy on the alpha-ness, or otherwise, of any FLOSS suite you care to name. You see, Dog-Brain, I am open to any usable technology. Not so sure about you, though.

    Well, I lied. I’m completely convinced that you, basically, don’t give a toss about the quality of the software that you used to “sell” before you went on “sabbatical.”

  253. dougman says:

    Imagine that!

    “Windows 10, Microsoft’s latest upgrade to its flagship operating system comes bundled with telemetry and tracking services enabled by default. A new open-source application is now available to stop all telemetry and tracking services used by Windows 10.”

    Idiot Loser sayeth that all FOSS applications never make it past the Alpha stage.

    Give it time though, M$ will remove this app and call it dangerous.

    https://lifars.com/2015/08/app-to-disable-windows-10-tracking-features/

  254. luvr says:

    DrLoser said, “You lot are a laugh a minute, aren’t you.”

    Lucky you…

  255. dougman says:

    “Just how many people had their settings returned to default, before MS “discovered” this problem? How many know they need to reapply those settings?”

    http://arstechnica.com/information-technology/2015/11/windows-10-november-update-was-pulled-for-forgetting-privacy-settings-its-now-back/

  256. dougman says:

    “Microsoft declined the opportunity to comment on this story. But the company has previously explained to GamesBeat that it would remove software that it considers dangerous. That includes not just programs that will cause issues.”

    Perhaps the OS will remove itself? I mean, it is dangerous in that it transmits back personal information to M$, and updates seem to cause nothing but a slew of headaches.

    One thing that bone-headed M$ users fail to realize is the EULA, of which they agreed to in the first place. No way around that bud, you AGREED to it. By using Windows 10, you agree to give Microsoft the power to make those changes.

    “The Microsoft Services Agreement allows Microsoft to change or discontinue certain apps or content where we deem your security is at risk,” a Microsoft spokesperson told GamesBeat in August. “Software that is pirated or botted places the safety and security of our customers at risk, including a higher risk of malware, fraud, public exposure of personal information, and poor performance or feature malfunction. We remain committed to protecting our customers from the risks of non-genuine software and protecting the intellectual property of developers of all types of content.”

    Think of the children!..LINUX…LINUX…LINUX!!

    http://venturebeat.com/2015/11/23/windows-10s-fall-update-is-deleting-certain-apps-without-asking/

  257. dougman says:

    Win-Dohs, perfectly reasonable OS!?

    LOL….excuse me while I throw-up!!

    So in Losers belief, having to endure malware and constant rebooting is perfectly reasonable. Sorry, but that’s bullocks, Linux has no such problems.

    I for one, am glad this is the LAST version of Windows that the world will ever have to face. Perhaps in following decade they will be able to fix all the bugs in the OS: http://www.windows10forums.com/forums/crashes-bsods-and-debugging.17/

  258. DrLoser says:

    You don’t get why somebody should give you a perfectly good laptop with a perfectly reasonable OS, upgradeable to another perfectly reasonable OS?
    To be honest, Luvr, I don’t get it either. It sounds too good to be true. Which leads me to believe that you are leaving several crucial details on the transaction out, not to mention the context and the back history. Which is odd, considering that you are offering up a single and singular example of personal gain as some sort of globally significant phenomenon.
    What is even more odd is that you chose this thread, and this time (~200 comments in) to offer this supremely dull observations up. I’m sure you have a good reason to do so.
    And I’m sure that Fifi will welcome that good reason, even though Fifi has gone on record as threatening people with law suits simply because they are “crossing threads.”
    You lot are a laugh a minute, aren’t you.
    Now, back to duck typing and the C runtime.
    Whenever you want to make that choice, Fifi. I am not merely a reasonable man, but also a patient one.
    Incidentally, Robert, no comment on the Pascal conversation? For shame! You are no longer the go to expert on the language, apparently.

  259. luvr says:

    DrLoser wrote, “And a back-quote to this very site is hardly adding anything to the discussion, Luvr.”

    Even so, I still don’t get it. 😉

  260. luvr says:

    DrLoser wrote, “Goodness me, you’re seriously enamoured of Fifi, aren’t you, Dougie?”

    Goodness me, are you jealous, maybe?
    What was it that first attracted you to him? Sure sounds like you would miss him, badly, if he ever decided to leave.

  261. DrLoser says:

    Very enlightening! Who owns the computer? You do! Who owns the software? You don’t!

    Goodness me, you’re seriously enamoured of Fifi, aren’t you, Dougie?

    What was it that first attracted you to him? The red leather miniskirt, or just the fact that your “sabbatical” is driving you mad?

    Either way, I sympathise. Perhaps you could help him out here?

    One choice out of two hundred and fifty six.

    Roll those under-educated dice, Dougie!

  262. dougman says:

    Very enlightening! Who owns the computer? You do! Who owns the software? You don’t!

    https://www.gnu.org/proprietary/malware-microsoft.html

    Try a operating system that you can own and be free of malware.

    http://www.linuxmint.com/about.php

  263. dougman says:

    A new variant of the nasty banking malware Dyreza has been updated to target Windows 10 and the Microsoft Edge web browser…this strain has also developed a new module: ‘aa32’ (x86) for 32 bit or “aa64” (x64) for 64-bit. This module is used by attackers to terminate a long list of processes associated with security software. The module injects itself in ‘spoolsv.exe’ and continuously tries to implement ‘kill processes’

    Dyreza can hook its malicious code to the following browser processes: “chrome.exe”, “chromium.exe”, “firefox.exe”, “iexplore.exe”, “microsoft edge”.
    The data-stealing Trojan can also support the following operating systems:
    Win 7
    Win 7 SP1
    Win XP
    Win 8
    Win 8.1
    Win Server 2003
    Win Vista SP2
    Win Vista
    Win Vista SP1
    Win 10

    http://www.ibtimes.co.uk/windows-10-edge-now-targeted-by-dyreza-password-stealing-botnet-binding-malware-1530134

    https://heimdalsecurity.com/blog/security-alert-new-dyreza-variant-supports-windows-10-edge/

  264. dougman says:

    Doh!

    “Apparently, according to some users posting on the TechNet forum (spotted by Neowin), if you do a clean install of Windows 10 build 10586 (the new November update), you can’t enable BitLocker encryption.”

    http://www.techradar.com/us/news/software/operating-systems/major-bitlocker-encryption-security-fail-caused-by-new-windows-10-update–1309492

  265. dougman says:

    “Earlier this week I wrote about Microsoft apparently pulling the recent November update for Windows 10 from its Media Creation Tool (MCT). This meant that anyone installing the new OS from fresh, would have to go through the long process of downloading and installing the November update. This could add hours to your average fresh install.”

    http://www.forbes.com/sites/antonyleather/2015/11/25/microsoft-admits-bug-in-windows-10-update-fresh-installs-now-fixed-too/

  266. DrLoser says:

    I mean, obviously, there are lots of people out there who use Python.

    If not for full-bore Enterprise stuff, then at least for useful scripts … say, configuring systemd. Python is the tool of choice for these things.

    Then again, there’s nothing at all wrong with being a dinosaur and relying on the undocumented and non-standardized happiness of bash.

    I am a big fan of dinosaurs. They keep my 13 year old niece very happy.

  267. DrLoser says:

    I am, as always, a reasonable man, and I aim to further the education of the more disadvantaged members of the present community. It’s an up-hill battle, I can tell you.

    But since oiaohm was generous enough to discuss static analysis during the Python phase of this discussion on duck-typing, and since oiaohm therefore led me to do my own little bit of Internet Research, I thought I’d share the results with you.

    Pysonar appears to be a splendid little tool. It’s FOSS, it’s heavily used by St Google, and as far as I can see it’s academically solid, PL-speaking.

    Without reservation, I recommend all of you to give it a try.

  268. DrLoser says:

    dougman said, “[Speaking of lack of control of your IT,] its a wonder how people even put up with M$ these days.”

    It certainly is. I don’t get it either.

    Nobody was speaking of lack of control of your IT, Dog-Brain.

    And a back-quote to this very site is hardly adding anything to the discussion, Luvr.

    Are we defending our dear little friend Fifi, on the basis of a shared pool of total technical ignorance? How sweet. Do please continue to do so.

    Meanwhile, back to our regular channel of duck typing conversation.

    Here’s another little clue, Fifi. You have precisely two hundred and fifty six choices.

    Pick one.

  269. luvr says:

    dougman said, “its a wonder how people even put up with M$ these days.”

    It certainly is. I don’t get it either.

  270. dougman says:

    Speaking of lack of control of your IT, its a wonder how people even put up with M$ these days.

    Updates removing programs? Golly gee…that sounds like a virus to me!

    http://www.pcworld.com/article/3008227/windows/windows-10-november-update-apparently-deleting-some-third-party-programs.html

  271. DrLoser says:

    I presume, oiaohm, that you have at some stage in your professional career had recourse to the printf function?

    This trivial little exercise should be a doddle for you, then.

  272. DrLoser says:

    It behoves me, as an enthusiast for any programming language which could possibly be considered relevant to the present day,
    to present the following facts from Wikipedia*:
    1) Designed by AT&T Labs
    2) First appeared: 2006
    3) Stable release: 1.0 / May 8, 2006, 9 years ago
    4) Website: cyclone thelanguage.org
    5) Influenced by C

    Not really at all relevant, is it, Fifi, you preposterous red miniskirted fool?

    * And let’s all recognize the obvious fact that all Fifi did here was to trawl Wikipedia. He’s never used the thing. He has no idea what advantages it offers. He has no idea what problems he might encounter. In short, Fifi is as usual a complete ignoramus on the subject.

    I imagine we can leave this item to one side in the present discussion, presumed never to be a necessary cite ever again.

    I mean, let’s face it, it’s been nine years.

  273. DrLoser says:

    And for anybody with a genuine interest in Computer Science, as opposed to either freeloading or conspiracy theories, I regretfully admit that my question:

    “When does Pascal evaluate expressions?”

    … was entirely disingenuous. Of course, Pascal evaluates expressions at precisely the same point that any other computer language evaluates them, which is to say at the point of need. There are no side-effects. That, basically, is the difference between an Expression and a Statement.

    I thought I’d make this plain, just in case anybody felt I was deceiving them. Pascal or C expressions have no part whatsoever in the duck typing discussion.

    printf, one way or the other, does.

    Over to oiaohm. I rely on the lad to bring some coherent, well-expressed, authoritative sense into the discussion at this point.

  274. DrLoser says:

    It should by now be abundantly clear to even you, oiaohm, that my proposed example of the only Standard conformant case of “duck typing” in C relates to the clear equivalent to Pascal’s WriteLn, a commonality helpfully provided by Deaf Spy. (To whom many thanks. Clearly, one very useful scenario for “duck typing” is I/O of some type.)

    This clear equivalent, which has somehow eluded your magnificent overarching genius for the entirety of seven days, being printf.

    Now, I have no wish to show you up as a totally incompetent buffoon and a bar-room lawyer, oiaohm. It’s quite possible that you considered printf and discarded it, for one reason or another. You may have been distracted for an entire week by some unaccountable need to post gibberish on completely unrelated subjects of which you also comprehend nothing.

    But all of that would be, in the truest sense, accidental. Nobody will hold that against you, oiaohm.

    Just answer me this:

    Can printf in Standards compliant C — your choice of Standard! — be considered to support duck typing, or not?

    And if so, why? And if not — be very, very careful here — why not?

    The student is allowed to use both, either, or neither of the terms metadata and RTTI in her answer.

  275. DrLoser says:

    You admitted that dwarf provided RTTI to C yet then you go and says C Complier produces no metadata.

    I forget your bog-standard pitiable “poor little me” response to supposed (by you, yet never very obvious to anybody else) misrepresentation, Fifi. What was it again? Oh, now I remember. Call the Lawyers!

    Now, what I actually said was:

    1) “Extended” implies not conformant to the C standard.
    2) Show me an example of how “Dwarf extended compilers” — and it would behove you to spell that god-damned word correctly for once — have metadata that applies to duck typing.

    And that is all I have ever said about Dwarf extended compilers. I have most certainly never admitted that Dwarf “provides RTTI to C.”

    Once again, Fifi, you have been caught out in a lie. Or, in this case, to use your own febrile terminology, a libel. Not that I care much.

    Interestingly enough, you never did show me that example, did you?

  276. DrLoser says:

    I didn’t really think that Fifi was so utterly clueless as to fall for this one, but apparently I overrated his technical chops. Or possibly underrated his almost infinite capacity for technical ignorance. One is the flip side of the other:

    The official standard of the Pascal language there is no such thing as Function overloading but it has no clause forbidding it. So the result almost every modern implementation of Pascal includes Function Overloading because coders want it.

    I’ll leave the specifics on function overloading in Pascal to Robert. He has a current and ongoing interest in the subject, so I’m pretty sure he’s more up to date than either Fifi or myself.

    But here’s the thing. I mentioned function overloading in reference to Pascal’s WriteLn. At this point, anybody with half a brain would mentally fire up a few scenarios. Here are four, featuring Pascal expressions, as per the grammar, identified as A, B and C:

    WriteLn(myFile, 'Here is your menu: ', A, B, C);
    WriteLn(myFile, A, B, C);
    WriteLn(myFile, A, B, C);
    WriteLn(myFile, A, B, C);

    Now, obviously the first of the four is degenerate. One could easily imagine a version of the Pascal grammar that includes the two alternatives:

    writer_func1:= [FDESC], [LEADER], [EXPR], [EXPR], [EXPR]

    and

    writer_func2:= [FDESC], [EXPR], [EXPR], [EXPR]

    (I’ve used square brackets for clarity and also omitted the LL or LR choice between the two parses, because that is obvious and is not relevant to the current discussion.)

    Now, what is relevant here is how WriteLn consumes the three expressions, Fifi. The last three [EXPR]s may look the same, but they can represent any given Pascal type. And of course this is a variadic list, which means that there is an arbitrary number of expressions, and each expression can represent any arbitrary type in the Pascal language.

    How do you think that WriteLn does this, Fifi? And if your answer is “by function overload …”

    Bwahahahahaha!

    I’m beginning to think that half a brain is more than Fifi can ever aim for.

  277. DrLoser says:

    There is no such thing as “type safe C.”
    As usual, an incompetent Fifi link
    Sorry DrLoser there is such things as type safe C.

    Forgive me for asking, Fifi, but what bizarre drugged experience leads you to believe that Cyclone is C in any meaningful sense?

    Besides which, to be honest, it doesn’t look very type-safe to me.

  278. oiaohm says:

    Function overloading in pascal is interesting.
    http://www.freepascal.org/docs-html/ref/refse83.html
    The official standard of the Pascal language there is no such thing as Function overloading but it has no clause forbidding it. So the result almost every modern implementation of Pascal includes Function Overloading because coders want it.

    Original Pascal does demand RTTI so that is how writeln was solved in original pascal and most current day pascals.

    http://www.freepascal.org/docs-html/rtl/system/write.html
    In freepascel you see something fun for write and writeln. You don’t need massive overloading when you can just do an array of arguments that you can do type look up on. So one function writeln(args:arguments) can do it all.

    The difference pascal mandated something useful. So yes implementing duck typing in pascal is truly possible because of mandated RTTI and some interesting types like arguments(that is basically duck). The interesting point is C has variable arguments options as well but lack the mandated by standard RTTI so you are depending on implementation of the C complier to provide RTTI data and matching runtime.

    Yes Function Overloading that is a common pascal complier implemented feature is not a Pascal Standard feature. Reality of how much is in old program language compliers that is not documented in the Standard of languages but is include anyhow is quite interesting.

    Its these extensions in Pascal that taught me not to judge what was possible just by the standard for a programming language.

  279. oiaohm says:

    There is no such thing as “type safe C.”
    https://en.wikipedia.org/wiki/Cyclone_(programming_language)
    Sorry DrLoser there is such things as type safe C.

    As a matter of fact, any C program at all that uses pointer arithmetic is immediately not type safe.
    Absolutely not true it depends on the complier as the C standard does not mandate pointer protection it also does not forbid it either. Undefined is the super big nightmare of C Standard. What Cyclone and other type safe C did was define many of the undefined conditions in the C standard.

    There is no metadata in C. The C compiler does not produce metadata. The C linker does not produce or consume metadata. The C standard library (which for all practical purposes is the C runtime) does not consume metadata.
    You admitted that dwarf provided RTTI to C yet then you go and says C Complier produces no metadata. C complier only building to what is define in the C standard there is no metadata is correct. But C compliers are not forbidden from extensions.

    https://en.wikipedia.org/wiki/AddressSanitizer
    Some things make me want to vomit.
    Adjacent buffers in structs and classes are not protected from overflow, in part to prevent breaking backwards compatibility.
    So yes C could be a lot safer than it is. But hey we want to be able to run old busted Unsafe code so we will not allow C complier to implement proper address auditing. Yes the C standard does not say you cannot implement proper address auditing it also does not say you have to. Yet this has not stopped C compliers implementing some of this.

    The C standard library is a very interesting one. There are versions of the C standard library that do use dwarf RTTI look up on functions like printf. So again C standard Library define does not mandate metadata also does not forbid implementations from using metadata. So without stating what C standard Library you are talking about you cannot say it does not consume metadata as there are C standard libraries that do consume metadata. So DrLoser here is off on a huge stack of presumes without research.

    Reasonable alternatives would be either C++ 14
    LOL C++14 can still perform pointer maths and does not mandate proper pointer address auditing.

    The C standard does not say metadata has to exist. The issue is it does not say it cannot exist so it does exist in the cases like dwarf and cyclone and many other cases.

    Consider the following pseudo-code for a duck-typed language:

    function calculate(a, b, c) => return (a + b)*c

    example1 = calculate (1, 2, 3)
    example2 = calculate ([1, 2, 3], [4, 5, 6], 2)
    example3 = calculate (‘apples ‘, ‘and oranges, ‘, 3)

    print to_string example1
    print to_string example2
    print to_string example3

    This is your normal pseudo-code for a duck-typed language. Is this possible to pull if using a C standard conforming complier. The answer is yes. Is it possible to pull of using a C standard complier without extensions like dwarf the answer is no because written a generic add and multiply function is a problem without RTTI. The python example you pulled DrLoser is able to be done in C as well as long as you don’t have exceptions.

    http://www.infoworld.com/article/2683259/python/pyston-compiler-cranks-up-python-thanks-to-llvm.html

    Like it or not there is a lot of research into getting python to go faster. One of the big issues found by dropbox research is the presume that duck typing has to have metadata and runtime parts all the time causes massive performance hindrance.

    Where cython differs from standard Python behavior, it becomes for all intents and purposes a separate language.
    Sorry cython is the version of python that leads to pyston that is aiming to replicate all of cpython behavior but intelligently.

    The idea that ducktyping requires runtime and runtime metadata all the time was first dis-proven by smalltalk compliers now being dis-proven by python compliers. Yes there are cases with ducktyping where you must use runtime and runtime metadata but its not every single case. Processing meta-data at runtime costs a lot of CPU time so every chance to skip it adds up.

  280. DrLoser says:

    Thinking about Deaf Spy’s question concerning writeln in Pascal, it goes deeper than I originally understood it to go.

    Not only does it involve the interesting question of when Pascal evaluates an expression, but as Deaf Spy will no doubt concur, it invites the obvious question:

    Does Pascal allow function overloading?

    Because, if so, one can clearly implement — if rather tediously — writeln in Pascal without the need for any metadata at all.

    Assuming that all the relevant bits and pieces are in the same source file, of course.

    Over to you, Robert. You understand this stuff.

  281. DrLoser says:

    Type safety is an interesting topic of discussion, as it happens. I have a few thoughts on the subject, in re C++.

    But I think I’ll leave them for a little later, while Fifi flails around trying to figure out what is basically the only case, in C, of metadata being embedded in the programming language environment.

    (And thus, duck typing.)

  282. DrLoser says:

    I’m not wholly convinced by the Pascal example, Deaf Spy. Perhaps Robert, who has far more experience with Pascal than either of us, can check out the grammar (to which I have helpfully linked, above) and answer the following important question:

    When does Pascal evaluate an expression?

    I imagine that this is a trivially simple question for Robert, although as usual Fifi will be floundering at this point.

    And btw Fifi, this is indeed a close approximation of the duck typing example in C I have been nagging you to guess.

    One day left.

  283. Deaf Spy says:

    Duck typing is the ability to use a different type.

    No, it is not, Fifi.

    I would like to keep Robert involved in this discussion. For the purpose, let’s investigate Pascal’s writeln

    Tell me, Fifi. Does writeln in Pascal use duck-typing? Robert, you are also welcome to discuss how Pascal’s writeln copes with the otherwise mostly strict type system of Pascal?

  284. olderman says:

    make that…

    Actually my dear doctor Fifi…

  285. Oldfart says:

    Actually my dear doctor Fifield makes some
    Great contributions. ..
    As comedy relief
    As a foil that allows who actually know what
    They are talking about the space to correct him
    As an obect lesson in how not to argue for FOSS.

  286. DrLoser says:

    See, Robert? That’s the sort of intelligent discussion that occurs simply because you have an admirably open mind and encourage the likes of Kurks to contribute.

    I’m firmly behind you on not banning Fifi just because he is an incompetent idiot. But you’d have to admit that he contributes nothing of note to the site, does he?

  287. DrLoser says:

    The only scenarios C is a suitable programmer language are OS kernels and some low-level real-time stuff, where not having enforced type-safety is sometimes an advantage.

    A welcome diversion from Fifi, and an interesting question. Who would want a type safe C?

    Your question presupposes that there is a significant performance cost attached to type safety (bounds checking, etc), or that there is a significant advantage to dicking around with the type system (again, presumed performance related. Casts spring to mind).

    I don’t think either is the case these days.

    1) Kernels have always been written in C because kernels have always been written in C. That’s basically it. Linus will argue the virtues of goto in tight loops (and has done, at least once), but this isn’t a sufficient validation of the language.
    2) The main reason to use C for either kernels (or drivers or real time) seems to me to be the vast hinterland of library functions, most of which come complete with source code. (Unless of course you are a neckbeard called Christian in Germany and you don’t want VMWare to reuse your source code.) Also of course the tools like gcc and gdb. And it’s worth noting the very large number of talented software engineers who are comfortable in this environment.

    There are cases where this stuff gets written in assembler, but we can discount them. Essentially, these cases should have been implemented in C in the first place.

    Now, the question is, would a hypothetical type safe C be of any advantage in these scenarios?

    Answer: Of course not. The libraries would still not be type safe. And only a loonie — a far more qualified loonie than Fifi, I might add — would plough through the lot of them to make them hypothetically type safe.

    Type safety is all very well, but at this level you really want safe ownership semantics. I would claim (without having used the language in anger) that what you really want here is Rust.

    But of course the sort of Loon who bangs on about “type safe C” would rather footle around in their own cess-pit than actually put any real thought into the issue.

    Reasonable alternatives would be either C++ 14 or conceivably D.

  288. kurkosdr says:

    @DrLoser

    What would anyone want a type-safe C anyway? The only scenarios C is a suitable programmer language are OS kernels and some low-level real-time stuff, where not having enforced type-safety is sometimes an advantage.

    The only people who want a type-safe in C are neckbeards who use it for userland tools and CLI utilities, because they think more modern languages are for weaklings and programming everything in C makes you l33t.

  289. DrLoser says:

    Its like type safe C. It still C standard conforming but it has extra meta data around everything.

    There is no such thing as “type safe C.” There is no metadata in C. The C compiler does not produce metadata. The C linker does not produce or consume metadata. The C standard library (which for all practical purposes is the C runtime) does not consume metadata.

    Any C program at all that uses void* is immediately not type safe.

    Any C program at all that uses casts is immediately not type safe.

    As a matter of fact, any C program at all that uses pointer arithmetic is immediately not type safe.

    We can add several more evidences to the effect that C is not and cannot be made to be type safe (unchecked arithmetic, even type promotion), but I think this is enough to be going on with.

    You cannot write type safe C without throwing away practically every feature that makes C a usable programming language.

    Consequently, nobody ever does so.

    Being able to “use a type safely” through programmer intervention does not equate to being “type safe.” Type safety is an artefact imposed by the programming language environment.

  290. DrLoser says:

    DrLoser go and read the define of duck typing again.

    Certainly. Point me at a cite that defines duck typing in a manner you feel acceptable.

    Duck typing is the ability to use a different type.

    No it isn’t. If that sentence means anything at all — and it’s vague enough to mean nothing whatsoever — it is confusing “duck typing” with “type casting.” I’ve never seen anybody do this. Have you achieved a new height of absurdity here, oiaohm, or would you prefer to express your thought here in a more coherent and testable fashion?

    Dig out the python language define you find it says in case of Duck typing issue an error must be raised.

    Once again you are welcome to enlighten me with a cite here, oiaohm. I have taken the trouble to search down this thread for every occurrence of the word “raise,” and it does not appear that you have yet done so.

    In Python, “raising an error” is always raising an exception. And it is always the runtime that “raises an error.”

    This should be very obvious even to you, oioahm, because the syntax for “raising an exception” uses the keyword raise.

    Properly constructed computer languages, of which group Python is most certainly one, do not confuse two wholly separate concepts by reusing a keyword.

    And no, I don’t care what cython does. Nobody cares what cython does. It is a side project, currently on version 0.23.4. Where cython differs from standard Python behavior, it becomes for all intents and purposes a separate language.

    The Reference Implementation for Python is, unsurprisingly, Python.

    Use the Reference Implementation for your further musings, please, oiaohm.

  291. oiaohm says:

    (a) a compiler error — which would not have anything to do with duck typing — and
    (b) an exception.

    DrLoser go and read the define of duck typing again. Duck typing is the ability to use a different type. Dig out the python language define you find it says in case of Duck typing issue an error must be raised. Does not say this has to be an exception. Duck typing has existed in complier built languages since forever.

    Please note check Smalltalk Compilers. Yes a language know for duck typing.
    The reality since the first language with Duck typing its been static and dynamic.

    pseudo-code for a duck-typed language never include error handling. This is important what duck-typing is does not say error handling.

    If you use the llvm python complier it goes hyrbid. So where ever the llvm complier can static solve out and prove itself that the duck typing is safe by by runtime checking and meta-data in those sections. So your original example in python without exceptions built with llvm python there is no runtime checks or meta-data because the complier would have deterred that those would have been a waste of time. Of course you example with an exception in llvm python will in fact generate runtime checking and slower code.

    The issue with saying duck typing has to have a runtime part is that it has resulted in items like cpython not doing static solves so under performing.

    duck typing is both static and runtime cases. Complier mode can chose to implement 1 or both.

    X3.159-1989 has a publication date because it was revised.
    X3.159-1989:1990 and X3.159-1989:1991 they are different.
    X3.159-1989:1991==ISO/IEC 9899:1990.
    c89:1990 and C1989:1990==X3.159-1989:1990. It is the errors in this document that kills of void var; usage.

    Order of printing.
    X3.159-1989:1989 This is the draft edition sent out to ANSI memebers. Very rare to find has even more errors.
    X3.159-1989:1990 This is first publication found still to contain errors .
    ISO/IEC 9899:1990 This is rewritten into ISO format at the stage of this document being rewritten a huge stack of faults is found in X3.159-1989:1990.
    X3.159-1989:1991 is the fixed edition with all the errors found when X3.159-1989:1990 was rewritten to ISO format fixed. ANSI will not sell you X3.159-1989:1990 instead will only sell you X3.159-1989:1991. So the only way to get your hands on X3.159-1989:1990 is 1 own a copy or find a library that has it. Stating X3.159-1989 without a publishing date is a error and as long as you keep on doing that you will not be able to see the case that the document was officially published twice. So there is first and second editions of it and just like normal first and second editions there are differences between the two.

    In short, with type elision, you are throwing away all the support offered by the program language environment, which in Python includes an arbitrarily rich type set, possibly including annotations — yet more metadata. And you are replacing it with, what?

    A 32 bit or 64 bit integer.
    I never bothered answer this because it pure stupidly on your part. I said C is freeform polymorphism did not. This means the complier could implement a lot of this and store in meta-data or programmer can create what structures they want to store the meta-data their application needs.

    Its like type safe C. It still C standard conforming but it has extra meta data around everything.

    When you have one programming language demanding meta data abc and another demanding xyz freeform allows you to create a bridge between the two.

    Nothing in the C standard forbids extending the complier to cover more cases. So a C complier with dwarf is in fact C standard conforming because its not doing anything the C standard forbids. So how safe or unsafe polymorphism options are in C come down to implementation details because the C standard itself says nothing to 100 percent clarify the matter.

    Serous-ally you could choose to implement classes as independent .dll/.so files or use something else that provides a dynamic loading overlay in C. That would allow you to catch an error at runtime if the function does not exist. Yes you can under Linux dlopen the application you are running. Question is overhead. The issue here is the C standard does not forbid doing this. The C standard does not define how to-do it so if you are after any cross platform support you look to other standards like dwarf and posix.

  292. olderman says:

    Hmm…

    I’ve been thinking. Given that hint about K&R my dear Doctor, I see what you mean about C duck typing!

  293. DrLoser says:

    I’m going to assume (and I am open to correction) Fifi that you are about to explain how Dwarf-compliant C compilers implement typeof().

    Well, it’s not standard behavior. And it allows the same degree of RTTI metadata that, for example, C++ has had since about 1997.

    But unfortunately it doesn’t actually facilitate duck typing, a la my Python example.

    As always, I would be gratified should you prove me wrong.

  294. DrLoser says:

    But, hey, once again, I am a fair and generous man. And unlike you, Fifi, I am a professional. Which attribute precludes me from withholding the truth and spewing intentional lies — a tactic that you have, earlier, adopted in re your “professional/not under a lamp-post” mode.

    So here’s another guidance on that time-limited discussion of duck typing in C.

    We have already considered typeof() and determined that it is not standard C.

    However … sizeof() is.

    Now, it’s only fair to say that sizeof() has nothing at all to do with my point on the limited runtime ability of C to implement duck typing.

    It is, however, what with the way it is used in C++ metaprogramming, rather interesting.

  295. DrLoser says:

    In short, with type elision, you are throwing away all the support offered by the program language environment, which in Python includes an arbitrarily rich type set, possibly including annotations — yet more metadata. And you are replacing it with, what?

    A 32 bit or 64 bit integer.

    Now, tell me, oioahm, who but an uninformed ignorant doofus would even contemplate doing that?

    Oh … wait …

    You have no answer to that at all, do you, Fifi?

    Unless, of course, you wish to claim that type elision and duck typing are functionally equivalent.

    Go ahead and make that claim. Otherwise, admit that they are not functionally equivalent.

  296. DrLoser says:

    Oh, and whilst we’re reminding everybody of your blatant lies, Fifi, remind me again which name you give to the 1989/1990 C standards?

    Everybody else but you refers to them as either X3.159-1989 or ISO/IEC 9899:1990.

    You, Fifi, persist with the idiotic and nonexistent C1989:1990.

    Enough lying and deception and rampant stupidity. To which do you refer?
    1) X3.159-1989
    2) ISO/IEC 9899:1990

    To make it even easier for an idiot who cannot even spell the word “compiler” right, I’ll simplify that question.

    Don’t even bother with the long form next time. Just say (1) or (2). Give us a chance to decrypt your useless uninformed gibberish, please.

  297. DrLoser says:

    Static checker program for python will also complain about duck type miss matches over functions because if you are calling a function it believed the coder wants an action performed not nothing.

    Show us one.

    That’s a blatant lie, isn’t it?

  298. DrLoser says:

    As I said there was 3 difference places the error could be raised. Complier, Runtime or Static. Static checker program for python will also complain about duck type miss matches over functions because if you are calling a function it believed the coder wants an action performed not nothing.

    You said no such thing.

    1) There is no such independent thing as Static. Fail, right there.
    2) Per definitionem, the Python compiler is never going to complain about a duck typing issue that occurs at runtime. Otherwise the runtime would not be dealing with a duck typing issue.
    3) The python compiler does not raise exceptions.
    4) The python runtime raises exceptions.
    5) Consequently we are talking about the runtime.

    You really cannot argue your way out of this.

    It’s the runtime, stoopid!

  299. DrLoser says:

    DrLoser in fact you are not proving advanced knowledge at all. Like you claim C compliers does not have meta-data. Dwarf extended compliers down right do.

    1) “Extended” implies not conformant to the C standard.
    2) Show me an example of how “Dwarf extended compilers” — and it would behove you to spell that god-damned word correctly for once — have metadata that applies to duck typing.

    I have a sneaky suspicion that you can’t. Because if you could, you would never have brought up void* in the first place, Fifi, would you?

  300. DrLoser says:

    DrLoser the python language define to be classed as a conforming implementation does not demand a runtime exception be raised in case of duck type miss match on a function instead a complier error or exception is allowed. cython is in fact conforming.

    You appear to be distinguishing between
    (a) a compiler error — which would not have anything to do with duck typing — and
    (b) an exception.

    Conformant Python demands the latter.

    Show me otherwise.

  301. DrLoser says:

    DrLoser duck typing is part of C same with dynamic types

    There is no such concept as “dynamic types” with Standard C, Fifi. There never has been.

    Prove me wrong.

  302. oiaohm says:

    DrLoser the python language define to be classed as a conforming implementation does not demand a runtime exception be raised in case of duck type miss match on a function instead a complier error or exception is allowed. cython is in fact conforming.

    If cython doesn’t have duck typing, then it isn’t really Python.
    cython does have duck typing. Does not raise exceptions in case of duck typing over functions errors instead raises complier errors. Because cython does the duck type structure checks in the complier stage. Structure miss match is fail.

    As I said there was 3 difference places the error could be raised. Complier, Runtime or Static. Static checker program for python will also complain about duck type miss matches over functions because if you are calling a function it believed the coder wants an action performed not nothing.

    Python language define allows this so cpython future versions could choose to go this path. The default implementation of python is called cpython because its only a reference implementation. Worse its only a reference implementation of 1 possible form the python language define allows. Yes catching exceptions on duck functions from classes is not a future safe item to depend on in python.

  303. oiaohm says:

    DrLoser in fact you are not proving advanced knowledge at all. Like you claim C compliers does not have meta-data. Dwarf extended compliers down right do. Dwarf allows unrolling and all kinds of other evils from C using complier generated data.

    C langauge is not clear cut. There is a lot of platform dependent stuff when you get into C and polymorphism.

    Sorry DrLoser I think your example in C will be full of so many holes it not funny.

  304. DrLoser says:

    DrLoser you have …

    Won this argument, apparently. Your two counter-assertions here are factually incorrect.

    I haven’t tried cython, nor do I have any particular desire to do so.

    Python proper has duck typing, as extensively discussed below.

    If cython doesn’t have duck typing, then it isn’t really Python.

  305. DrLoser says:

    DrLoser time limited requests on me are always ingored. You have not worked this out already. So as soon as put a time limit in it I don’t respond to that comment.

    I imagine that anybody, no matter how stupid and incompetent, can devote a large enough portion of their life to figuring out how my simple example in C represents the best effort that the C runtime can manage in terms of duck typing.

    I am a fair and reasonable man. I have no wish to subject anybody to such an immense effort, even if they make the clearly spurious claim that they understand duck typing where C is concerned.

    This is not a time limit based upon my intention to somehow assert my superior knowledge over yours, Fifi. (There’s never been a need for a time limit on that.)

    This is a time limit based solely on my allowing you to have a guess. After which I will explain my thinking. I can hardly do that without a time limit, can I?

    Oh, and by the way.

    Your “tuples” guess was fatuous.

    DrLoser time limited requests on me are always ingored. You have not worked this out already. So as soon as put a time limit in it I don’t respond to that comment.

    Except when that response involves tuples, as mentioned in parallel with the time limit.

    Excellent, Fifi. Bone-headed as always, but excellent.

  306. oiaohm says:

    My point is that there is a significant and very obvious difference between duck typing in a language that supports it and type elision in a language that does not.

    DrLoser you have changed you point. You first start off that duck typing was not possible in C. Reality it has been since K&R on.

    So no DrLoser you have lost this arguement the reality is your python example using exceptions is highly risky code if you don’t know what type of python will be running the code. Depending on exceptions happening is a very fast way to run into problems.

  307. oiaohm says:

    DrLoser duck typing is part of C same with dynamic types. Always has been part of C. Ok just not safe without decent compliers.
    Opps I typed an extra p the python to c is Cython and standard python is Cpython. Nothing like making the names so close it not funny.

    DrLoser its a performance tweak of cython checking for particular things in advance so they don’t have to be checked at runtime. So valid non error raising duck typing go through no problems. But you do code like you just did it an problem.

  308. DrLoser says:

    I just noticed -Wenum-compare is broken. I use cppcheck anyhow so never noticed.

    It doesn’t matter, you driveling idiot.

    I don’t care what static analysis tools are available to you. I don’t even care if they are broken.

    My point is that there is a significant and very obvious difference between duck typing in a language that supports it and type elision in a language that does not.

    At no point so far have you even addressed this fairly simple observation.

  309. DrLoser says:

    DrLoser the problem here is except only works if it a runtime error.

    Fascinating.

    Your original assertion, Fifi, was as follows:

    DrLoser there is a catch. Not all forms of Python throw identical exceptions. Writing code depending on that a exception will be thrown python will fail in different implementations and that is the way the cookie crumbles.

    My rebuttal was that there is no legitimate difference between “forms of Python” when an exception is caught via except:.

    And your supposed counter is that “it only works if it is a runtime error?”

    I presume that any form of consistent argument is totally beneath you?

  310. oiaohm says:

    I just noticed -Wenum-compare is broken. I use cppcheck anyhow so never noticed.

  311. DrLoser says:

    Please note Cpython would have refused to build the code. So the code failed in compilation because there was a code path leading to no function.

    Fascinating.

    Point us all at a version of cpython that substantiates this remarkable observation of yours, Fifi.

  312. oiaohm says:

    Which was on 16th November. Five days ago. Time is running out, oiaohm.
    DrLoser time limited requests on me are always ingored. You have not worked this out already. So as soon as put a time limit in it I don’t respond to that comment.

  313. oiaohm says:

    There is no legitimate implementation of except: anywhere that does not allow you to resume this way.

    DrLoser the problem here is except only works if it a runtime error. Issue with python and duck.feathers() and the like is this can evolve to a complier time error with different types of python so no runtime error at all because the program did not build. Yes cpython does complier time checking for particular faults.

  314. oiaohm says:

    -Wenum-compare
    DrLoser do you know what this complier flag does. Yes tells gcc to statically check the enum values that they are valid.

    DrLoser just demonstrated that he does not know how to use compliers correctly to validate that code is correct.

    C standard says that enum is a int value so yes you can set it as anything. The complier at your directive can by c standard check if the enum values are valid. In fact to be a valid C complier by C90 the complier should have a enum check flag of some form. enum is only highly dangerous if complier is operated by a idiot or non conforming since C90.

  315. DrLoser says:

    DrLoser there is a catch. Not all forms of Python throw identical exceptions. Writing code depending on that a exception will be thrown python will fail in different implementations and that is the way the cookie crumbles.

    def in_the_forest(duck):
    try:
    duck.quack()
    duck.feathers()
    except:
    print "The duck of %s has no quack!" % (duck.name())

    No Quack, Fifi. No catch, either.

    There is no legitimate implementation of except: anywhere that does not allow you to resume this way.

    Or, for that matter, given an equivalent dynamic construct in any other language whatsoever … there is no legitimate implementation of that language anywhere that does so, either.

    Frankly, you are plumbing the depths of your own considerable ignorance here.

    When in a deep hole — stop digging.

  316. DrLoser says:

    Your silly little tuple theory, btw, Fifi? That’s not the answer to my question, either.

    I didn’t ask for an explanation of how C does tuples. I asked for an explanation (or indeed comment) for my assertion that C does, indeed, have a very limited ability to do duck typing, which is to say that the C runtime can, under very limited circumstances, handle whatever compile-time type you throw at it.* In other words, in a very limited sense indeed, C does have duck typing.

    You don’t even have to pass metadata as an unstable int! In fact, the duck typing example I am thinking of is literally baked in to the C language, and has been ever since K&R first defined C!

    No, Fifi. It’s nothing at all to do with tuples. I merely used the concept of tuples to refer you back to my relevant post.

    Which was on 16th November. Five days ago. Time is running out, oiaohm.

    *Of course, in extremis, C handles this particular form of duck typing by crashing with a core dump. But then again, it has no real alternative. No exceptions in C.

  317. oiaohm says:

    It does not matter which Python target you use. Cpython, Jython, IronPython, any of them. You will always see an exception being thrown
    DrLoser there is a catch. Not all forms of Python throw identical exceptions. Writing code depending on that a exception will be thrown python will fail in different implementations and that is the way the cookie crumbles.

    Yes you put exception code in python if something goes wrong. But exceptions paths in python should not be designed to be used due to the differences in implementations of you are wanting cross implementation support.

    Kindly explain how that exception is not noticed during compilation, but is noticed at runtime.
    Please note Cpython would have refused to build the code. So the code failed in compilation because there was a code path leading to no function. So you have JIT python and built to native binary python. Both behave differently. One is doing lots of the duck typing checks in the complier. Of course the JIT python cannot do all the checks in advance because it did not built the complete program.

    Python and all its forms has the 3 types of duck type error detection. Complier, Runtime and static code analysis. Of course each python implementation is free to choose it method and weigh the performance cost vs operational gains.

    Doing function existence checking at runtime is overhead if you can solve this at build time its a performance boost. Different versions of python forbid different things. Yes exceptions on missing functions is one of those features that disappears from some implementations of python.

    Sorry the does not matter claim of yours DrLoser on python is so far wrong its not funny.

  318. DrLoser says:

    Interesting enough the c standard define how enum is generated so this error if the linker alters it and your language is C hello broken complier because its not standard conforming in any way. This is something from K&R to the latest versions of C is defined exactly the same way.

    Poppycock. Balderdash. Drivel.

    Here, try this:

    #include "stdio.h"

    int main(int argc, void** argv)
    {
    typedef enum {
    fee = 1,
    fi = 2,
    fo = 3,
    fum = 4
    } GIANT;

    GIANT fifi = 0;

    if (!fifi) printf ("Fifi is a big fat zero!\n");
    }

    Output? Fifi is a big fat zero!

    OK, that just proves that the compiler isn’t going to complain if you use a value that is invalid for the enum in question. Let’s try this puppy over linker boundaries. And this time let’s make sure that the value is constrained to be a valid integer within the set of integers represented by the enum:

    #include "stdio.h"

    // This bit goes into a separate object file

    typedef enum {
    zero = 0,
    fee = 1,
    fi = 2,
    fo = 3,
    fum = 4
    } GIANT;

    void Giant(GIANT fifi)
    {
    if (fifi == zero) printf ("Fifi is a big fat zero!\n");
    }

    // This bit is the main file

    typedef enum {
    wocketa = 0,
    zero = 1
    } GIANT;

    int main(int argc, char** argv)
    {
    GIANT twit = wocketa;
    Giant(twit);
    }

    Once again. Fifi is a big fat zero!

    After which we are left to contemplate the concept of static analysis — always a Fifi fallback when he knows he’s been whipped like a mangy cur — and to wonder precisely how it applies to a situation where the two enum definitions are in separate files, and there is no guarantee that the analyser in question can see both of them.

    But all of this is beside the point, because it just proves my assertion that type elision is dangerous — and is clearly distinct from duck typing.

    Interesting enough the c standard define how enum is generated so this error if the linker alters it and your language is C hello broken complier because its not standard conforming in any way.

    Of course, as a welcome side-effect, it proves that Fifi has no clue whatsoever when he’s talking about C standards.

    Nobody even mentioned the idea of “the linker altering” anything, Fifi. Once again, you are simply playing with yourself.

    Stop it. You’ll go even more blind that you already are.

  319. DrLoser says:

    Yes that exception you just gave the example of if you depend on that and you use cpython hello to splat.

    You genuinely have no idea about Python exceptions, do you?

    It does not matter which Python target you use. Cpython, Jython, IronPython, any of them. You will always see an exception being thrown. It will always exhibit the duck typing behavior that I cited.

    It isn’t a question of “depending” upon anything, Fifi. This is how the language works.

    To repeat:

    Now, Fifi.

    Kindly explain how that exception is not noticed during compilation, but is noticed at runtime.

  320. DrLoser says:

    Please remember python has cpython that is python converted to C then built.

    What has that got to do with anything?

    By your definition here, absolutely any language at all is one-for-one equivalent with an assembly language. Which is true, but not remotely a useful or relevant observation.

  321. oiaohm says:

    Please remember python has cpython that is python converted to C then built.

    Yes that exception you just gave the example of if you depend on that and you use cpython hello to splat.

  322. oiaohm says:

    DrLoser you need to read the term duck typing again. Duck typing term does not say runtime enforced.

    1. Supplying the wrong encoding at the compilation stage. To take the example of your storage typedef, you need to get the “type” int right in each case. Which of {0, 1, 2} is it to be? It’s easy to get this wrong. In fact, it’s actually difficult to detect when it’s wrong by eyeballing it.
    Static Code Analysis can detect this error right DrLoser. This is something sparse for the Linux kernel does in places. To make sure declared type and assigned type match. You are right if you are using a large section of C code using the polymorphic options should invest in having a Static Code Analysis that knows it because human eyeballing is limited. Its also why you would normally use wrapper functions or macros.

    2. Misinterpreting the encoding at the runtime stage. This is again quite easy to do.
    Please look at sparse again. Detection for these errors is able to be done by static code Analysis.

    3. Relying on support via an enum. Here, we can imagine an enum for { foo = 0, bar = 1, baz = 3 }. Sadly there is no guarantee that this enum is consistent across the linker. Bam! There you go again. Crash city!
    Interesting enough the c standard define how enum is generated so this error if the linker alters it and your language is C hello broken complier because its not standard conforming in any way. This is something from K&R to the latest versions of C is defined exactly the same way.

    Not to mention architecture differences, word alignment, all the usual gotchas in C. They are unimportant when duck typing. They are of crucial importance if type eliding.
    Sorry these errors you just described can show up in python as well.
    http://bugs.python.org/issue7201
    Sorry those platform gotchs don’t magically disappear just because you are using a language like python. Yes using a language duck type does not stop you from having those gotches.

    Whereas, in the case of C’s void*, the compiler and runtime offer no metadata assistance whatsoever.
    This is wrong. C complier can generated metadata to assist with doing polymorphic code but its not mandated by the C standard. Also having runtime of dwarf is also optional. Not all compliers have decided to leave you hanging with no meta-data on pointer types. Yes if you C complier is Dwarf conforming it has the meta-data.

    Debugging its highly useful to know what a pointer was defined as. Yes (int[])/(int *) casting stuff can nicely be imprinted in complier generated metadata for C. A complier with dwarf will store fundamental type information you can look up.
    const void storage []*={“physics”,”chemistry”, (int []){1997},(int[]){2000},0};
    So you do a dwarf information request on the (int[]){1997} pointer you will get that it a int array from the value in the void * pointer and if you do a dwarf information request on”physics” you will get that it is a (char []) .

    So is the platform/complier you using that is C dwarf conforming or not. If it dwarf conforming the meta-data is complier generated so killing the issues you many of the listed of human error problems. Of course its not cross platform to non dwarf MSVC complier. Gcc under windows can optionally be built with or without dwarf. So building cross platform to platforms that are not dwarf you have to work harder in C to do polymorphism.

    The reality here DrLoser you don’t have a clue what you can do in C. C is not a black or white place. C standard does not forbid the existence of the meta-data. Of course some platforms/compliers have declared it useful.

    The runtime finds no Quack, and throws an exception.
    By the define of ducktyping there is no requirement to throw exception in case of something completely missing. This is a trap not all duck types in all languages do this. Some the program goes forwards as if the request was never made others the program crashs and then ones like python throw exceptions.

    Basically the fact that python runtime throws exception at that point is python language standard define for what happens when that kind of error is hit. Other languages define that missing function events have to be found in the build stage. Others the language define does not clearly define so implementation can do anything.

    LOLOL super idiot DrLoser is presuming that all implementaitons of duck typing behave like pythons. Reality here they don’t.

  323. DrLoser says:

    The reality is void * is C duck type. Because as soon as you start doing anything in C of the duck type class void * usage appears.

    You don’t get to redefine what “duck typing” means, oiaohm. What you show here, and indeed what any usage of void* would show, is not “duck typing.” It is type elision.

    Duck typing occurs at runtime, and is facilitated by metadata within the programming language environment.

    Type elision can occur at any time. It can be completely unsafe (which void* is, unless it is accompanied by what amounts to its own metadata) and it usually is. It definitionally has no support within the programming language environment.

    This is a very important distinction. The only way you can go “wrong” with duck-typing is if the type metadata supplied at compilation does not match the type metadata assumed at runtime. Thus, in the Python PeterD example, no Quack metadata is supplied during compilation. The runtime searches the metadata supplied with PeterD to see whether the class was compiled with a Quack. (Or in some dynamic languages, such as Perl, can be otherwise associated with a Quack.)

    The runtime finds no Quack, and throws an exception. For some reason you seem to think that this is “safe” duck typing, which is a questionable thesis. It’s actually no more and no less safe than not throwing a specified exception. You don’t have a clue how Python works, do you? Not a single clue.

    The point about this is that the metadata contains structure, and that structure is immune to meddling by the programmer. Therefore this is an example of duck typing. The type information persists between the compilation stage and the runtime stage.

    Whereas, in the case of C’s void*, the compiler and runtime offer no metadata assistance whatsoever. Type elision means precisely what it says. When you elide a type, you throw away all structure and all metadata associated with that type.

    In the case of type elision, it is not only permitted that the programmer “meddles.” It is absolutely essential. In fact, it’s the only way that the type can be “rehydrated.”

    The problem with this is that meddling programmers, as we all know, get it wrong quite often. Some mechanisms by which they get it wrong:

    1. Supplying the wrong encoding at the compilation stage. To take the example of your storage typedef, you need to get the “type” int right in each case. Which of {0, 1, 2} is it to be? It’s easy to get this wrong. In fact, it’s actually difficult to detect when it’s wrong by eyeballing it.
    2. Misinterpreting the encoding at the runtime stage. This is again quite easy to do.
    3. Relying on support via an enum. Here, we can imagine an enum for { foo = 0, bar = 1, baz = 3 }. Sadly there is no guarantee that this enum is consistent across the linker. Bam! There you go again. Crash city!

    Not to mention architecture differences, word alignment, all the usual gotchas in C. They are unimportant when duck typing. They are of crucial importance if type eliding.

    There is no way around this, oiaohm. If you perform this sort of grotesque — and incidentally totally pointless — type elision at compile time, it is entirely up to you, the programmer, to rehydrate the object (loosely so described) at runtime.

    In short, with type elision, you are throwing away all the support offered by the program language environment, which in Python includes an arbitrarily rich type set, possibly including annotations — yet more metadata. And you are replacing it with, what?

    A 32 bit or 64 bit integer.

    Now, tell me, oioahm, who but an uninformed ignorant doofus would even contemplate doing that?

    Oh … wait …

  324. oiaohm says:

    The duck of PeterD has no quack!
    That is error handling. The define of Duck typing does not demand that a miss match will not just result in a crash. Because what ever type you ask to be able to perform like a duck should walk like a duck if it don’t its up to implementation to choose what happens.

    Sorry you python example just shows python uses safe ducktyping. Not what ducktyping is. Sparse running over the Linux kernel in equal ducktyping errors on kernel source would have presented an error to fix.

    Please read my complete reference DrLoser. I did not say sparse finds all duck typing errors.

    Imaginary, definitional, utter nonsense. Static analysis on a runtime eventuality, indeed.
    So this is bullshit by you so pull you head in you idiot. Function structures in side the Linux kernel do change. These are overlayed over each other in ducktyping pattern. Spares does check this.

    The duck of PeterD has no quack!
    This kind of error where a miss matched type is pushed threw something using duck typing is something static checking by complier and third party tools can find. So having this error at runtime means you have run code that you have not audited properly. So this error is the sign of unprofessional code.

  325. oiaohm says:

    Python duck type tuple
    tup1 = (‘physics’, ‘chemistry’, 1997, 2000);
    One of the ways you can replace it in C.
    typedef struct {
    void * data;
    int type;
    } storage;
    Nice
    const storage data[]={ {“physics”,1},{“chemistry”,1}, {(int[]){1997},2},{(int[]){2000},2},{0,0}};
    Do note that “physics” is (char[]) and (int[]) are 100 percent sure not void*.
    or Horrible.
    const storage data[]={ {“physics”,1},{“chemistry”,1}, {(void*)1997,2},{(void*)2000,2},{0,0}};
    Horrible because I have hidden the int value in the void pointer so saving some ram.
    That is the same duck structure I gave before. Tuple in C does not exactlyt have to be unsafe.
    C allows another solultion.
    const void storage [][]={“physics”,”chemistry”, (void*)1997,(void*)2000,0};
    const char typeinstore[]={1,1,2,2,0};
    Of course there is the what seams totally unsafe solutions of
    const void storage [][]={“physics”,”chemistry”, (void*)1997,(void*)2000,0};
    const void storage [][]={“physics”,”chemistry”, (int []){1997},(int[]){2000},0};
    That C will accept. Of course this might not be unsafe. Like it is possible to use dwarf debugging structures to look up type of a pointer. C standard does not say that the complier will or will not record the type information. Of course building cross platform code you are going to stay away from these last 2 in most cases.

    Of course the data could be patterned in way the program understands so you don’t need to declare any extra metadata either yet you are still using a type that stores mixed types and you are praying nothing can mess with the stored contents.

    The reality is void * is C duck type. Because as soon as you start doing anything in C of the duck type class void * usage appears.

    Because neither C nor ASM are “polymorphic” in any meaningful sense.
    Do you know where the term polymorphism and polymorpic comes from
    https://en.wikipedia.org/wiki/Polymorphic_engine
    the polymorphic engine for computer viruses that were written in asm. High level languages other than C and ASM normally attempt to restrict your polymorphism options.

    The reality is C and ASM allow more free-form Polymorphism than higher languages. But the price of more free-form polymorphism is having to type more code to explain to the complier what you are wishing for it todo. More code can equal more bugs.

  326. DrLoser says:

    Have you come up with some sort of defense for your embarrassing failure as a potential software consultant yet, Robert?

    I’d hate to have Fifi steal your limelight by his continual profession of total duck type ignorance.

    Go ahead. Explain what you meant by all that waffle.

  327. DrLoser says:

    Linux Sparse tool example a ducktype miss match is detected by static analysis tool.

    Imaginary, definitional, utter nonsense. Static analysis on a runtime eventuality, indeed.

    What a fool.

  328. DrLoser says:

    I’m going to open this one up to the floor.

    Metadata is about typesafety.DrLoser. Safe ducktyping you need Metadata. Big mistake here metadata is not required not 100 percent required by the runtime.

    Does that actually mean anything at all? And if so, what?

  329. DrLoser says:

    So you hope the monomorthism language has a polymorthism language like C or ASM at disposal.

    No I don’t, Fifi. Because neither C nor ASM are “polymorphic” in any meaningful sense.

    Neither of them are capable of carrying the necessary metadata to be “polymorphic.” Both raw .DATA and raw void* targets, sans metadata, are not “polymorphic.”

    Or did I forget to mention that certain categories of metadata are available during AST construction (compilation) and in certain programming categories can be passed on through the linker to the executable environment?

    And the executable environment is where duck typing does, or does not, happen.

    Now, I’m glad you bring C and ASM back up. Because it relates directly to my assertion back there on the tuples and tuple operator post. And it so happens that, in this case, the C runtime exhibits a (very poor) form of duck-typing.

    It’s been four long days, Fifi. You only have three more. Have a guess as to how the C runtime emulates tuples and the tuple operator, and thus achieves a very poor form of duck typing.

    I’ll even give you a Big Ole Clue for free. The way that the traditional C runtime does this is a massive security hole.

  330. DrLoser says:

    You missed a key bit DrLoser polymorthism. Monomorthism Language even if you create the meta-data you cannot build the runtime support or perform the most basic require runtime action.

    No I didn’t, Fifi. It’s in your original cite. And the rest of us spell it “polymorphism,” btw.

  331. oiaohm says:

    But, however you do it, the compiler is not the place to do it. You need both metadata and runtime support.
    You missed a key bit DrLoser polymorthism. Monomorthism Language even if you create the meta-data you cannot build the runtime support or perform the most basic require runtime action. So you hope the monomorthism language has a polymorthism language like C or ASM at disposal. Another example of Monomorthism language is Microsoft Basic the original. No matter how creative you get you cannot do duck typing in first versions of Basic.

    Metadata requirement is also kinda bogus.

    function(void * duck) {
    sometype * use= (sometype*)duck;
    /*then use as sometype. Now as long as duck can perform like sometype everything is fine. This is unsafe ducktyping. Unsafe ducktyping is screw the metadata and pray. */
    }

    Metadata is about typesafety.DrLoser. Safe ducktyping you need Metadata. Big mistake here metadata is not required not 100 percent required by the runtime. Instead metadata could be made and processed by the static analysis tool as sparse for the Linux kernel does. So there is there are ways of implementing duck typing type safety. Build, Runtime and analysis.

    Sorry DrLoser we cannot agree on the perl one. Duck typing between perl declared types is block by perl strict like $ to @. Now the type that allows different types of data to be contained in perl after enabling strict still allows type confusion. So strict in perl removes 1 form of duck typing. I will agree I was not clear enough on what it blocks. Blocking anyway but lose duck typing helps a lot.

    You had heard of SWiG, hadn’t you, Robert?
    DrLoser yes I have. But what SWiG is doing is building bridging struts between the language to C/C++ based. Before SWiG and C based tools their were tools for ASM for doing the same thing.

    Basically to bridge between program languages you want access to a Language like C or ASM at times without many rules limiting what can be implemented in it.

    The duck of PeterD has no quack!
    That is error handling. The define of Duck typing does not demand that a miss match will not just result in a crash. Because what ever type you ask to be able to perform like a duck should walk like a duck if it don’t its up to implementation to choose what happens.

    Sorry you python example just shows python uses safe ducktyping. Not what ducktyping is. Sparse running over the Linux kernel in equal ducktyping errors on kernel source would have presented an error to fix.

    Kindly explain how that exception is not noticed during compilation, but is noticed at runtime.
    It is a language and implementation choice if a miss matched duck shows a error at runtime or build time or static analysis tool. Linux Sparse tool example a ducktype miss match is detected by static analysis tool. So neither the runtime or the compilation shows the duck typing error inside the Linux kernel. Yes why Linus loses it with developers when it finds out they did not run sparse before submitting patches because nasty big hidden bugs can be in the code. Duck typing is used in many kernel structures.

    A python static analysis tool could have found that error right DrLoser. It was not need to be detected at runtime. Now if the error is detected before runtime it makes your life a lot simpler. Every extra step you perform at runtime costs you performance.

    Safe ducktyping language normally detects at runtime. Unsafe ducktyping solution error is either found with static analysis or fails badly.

  332. DrLoser says:

    Typically the best programmers/software designers will optimize the way somehow …

    I’m going to leave off the subsequent clauses to this quote, because they are too embarrassing to repeat. Now.

    Typically. Do you have what we Consultants call a “confidence interval” on this “typically” thing, Robert? Share.

    Best. Do you have what we Consultants call a “probability distribution of appropriate skills” on this “best” thing, Robert? Share.

    Optimise. Do you have what we Consultants call a “model for optimization,” Robert? Share.

    Somehow.

    Feeble as your comprehension of modern IT technology might be, Robert, I’ve never yet heard you give in completely.

    You don’t have a single clue how things are going to be glued together, but “somehow” they will be?

    Share.

  333. DrLoser says:

    Alternatively, SMEG could simply rely on Dougie for all their computing needs, which naturally include throwing all their M$ licenses into the dumpster. A task which is beyond most SMEs, but is a particular professional skill of Dougie.

    Sadly, Dougie is on “sabbatical,” so SMEG will have to choose between Pog and Me.

  334. DrLoser says:

    As an aside, consider the two consultants I auto-magicked out of nowhere a little earlier. Obviously they are simply avatars, meant as the basis for discussion, and not necessarily representative of either Robert or myself. But useful avatars for discussion, nonetheless.

    It occurs to me to ask the following question. Posit an SME “G” (I pick the letter G for no particular reason), have a typical legacy codebase with a heterogeneous mix of FLOSS-friendly languages such as C or Java and quite a lot of non FLOSS-friendly languages such as Cobol/Fortran and Visual Basic and C# and maybe even Objective-C.

    Two consultants are asked by SMEG to propose a way of unifying this heterogeneous code base.

    Do you want Consultant Pog, who will insist that you rewrite everything, and above all else chuck all non-FLOSS code into the bin?

    Or do you want Consultant Me, who is entirely agnostic on the supposed issue of whether a language and its hinterland is FLOSS or not, and will just get on with the job?

    A question worth pondering, I think. It might explain why quite a lot of SMEs are never going to touch FLOSS with a barge pole.

  335. Deaf Spy says:

    Typically the best programmers/software designers will optimize the way somehow improving performance/reliability/cost etc. but it’s just silly to tell a programmer there’s something that can’t be done because of the languages involved.

    A quick reality check:

    //
    // Dear maintainer:
    //
    // Once you are done trying to 'optimize' this routine,
    // and have realized what a terrible mistake that was,
    // please increment the following counter as a warning
    // to the next guy:
    //
    // total_hours_wasted_here = 42
    //

    and my personal favorite:

    //When I wrote this, only God and I understood what I was doing
    //Now, God only knows

    But dream on, Robert, dream on.

  336. DrLoser says:

    I was pointing out that Dr Loser is wrong.

    On the evidence so far, Robert, you are hardly making a persuasive case.

  337. DrLoser says:

    You had heard of SWiG, hadn’t you, Robert?

  338. DrLoser says:

    But just in case, I will offer a working definition of “interface” for the two subsystems (language A and language B) that I have just stipulated as examples.

    Do you really want to deal with 10,000 x 10,000?

    Or would you really rather deal with, say, 15 x 15?

    That, basically, is the resource issue here.

    And you solve that issue via judicious use of interfaces.

    I seriously cannot believe I have to point this out to an IT guy of 40+ years standing.

  339. DrLoser says:

    Note the word, “runtime”. A stored-programme computer is a general purpose machine. You can do anything with it given sufficient resources, even talking to another code written in any language. I suppose you could design hardware guaranteed to give random results or such nonsense to prove your point but I’ve worked on dozens of different hardwares and softwares and never seen an exception

    The key here is “sufficient resources,” Robert.

    I know you’ve always lived in a miserable resource-poor computing environment, so I can’t really blame you for figuring this out. But the problem with “sufficient resources” is that you have to define what “sufficiency” means. Just because your miserable current system is not “sufficient” does not allow you to dream of infinite resources.

    To take the restricted case of a subsystem in Language A (I will stipulate a minimum of 10,000 lines of Pascal-equivalent code) talking to a subsystem in Language B (I will make the same stipulation), your proposition is abject nonsense. The expense will be enormous.

    And I suppose there’s no need to mention “testing.” Because of course, in FLOSS, “testing” is what happens when you throw a broken Beta release at the poor sheeple who think it actually works.

    This is nothing to do with a random construct of hardware or software or indeed anything, Robert.

    It’s to do with interfaces.

    You do understand the concept of an interface, with or without metadata, don’t you?

    Because I see no such understanding in your comment.

  340. DrLoser says:

    And the Perl “strict” directive, Fifi?

    I think we can all agree that you were hopelessly wrong on that one.

    No shame, no blame. Just admit it, and we can continue this fascinating exposition of quite how completely ignorant you are when it comes to duck typing.

    Quaaaaack!

  341. DrLoser, moving goalposts again, wrote, “we’re talking about duck typing and linking Language A to Language A.”

    Nope. You wrote, previously, “Bindings from language A to language B via either a linking mechanism or the runtime are not guaranteed for any combination of A and B.
     
    This is fun. Let’s try linking Algol60 to Delphi Pascal. Oops! Doesn’t work.””

    Note the word, “runtime”. A stored-programme computer is a general purpose machine. You can do anything with it given sufficient resources, even talking to another code written in any language. I suppose you could design hardware guaranteed to give random results or such nonsense to prove your point but I’ve worked on dozens of different hardwares and softwares and never seen an exception. Indeed in one lab a guy thought so much of four different programming languages he linked all of them together, just for the elegance… Then again, when I must do some real tweaking of the hardware, there’s still machine language or assembler. I’ve done both. A programmer using FLOSS can get the hardware to do anything of which it is capable a huge number of ways. Typically the best programmers/software designers will optimize the way somehow improving performance/reliability/cost etc. but it’s just silly to tell a programmer there’s something that can’t be done because of the languages involved.

  342. DrLoser says:

    Which long observational fable has nothing at all to do with the issue of linking a compiled module from Language A to a compiled module from Language B. Unless you count SWiG, which I gave you for free as a useful tool. And don’t even think about linking a statically typed language like C to a functional language with a REPL like Haskell unless you really know what you’re talking about.

    And the initial discussion, to haul us all back to reality after Robert’s humorously-intended diversion, is indeed all about linking. Not even language A to language B, as it happens, although that involves IDispatch and is therefore as always a welcome opportunity for Fifi to open his kimono and flaunt his hairless innocent ignorance at us all via Googling.

    Nope, we’re talking about duck typing and linking Language A to Language A. Where Language A is (through an accident of Computer History) in fact the language C.

    One day has passed out of the seven proposed, and I note that Fifi hasn’t come up with even a wild guess at the implications of my observation re tuples and the tuple operator, directly below.

    Six more days of ignorance to endure. I promise to explain at that point. Just call me Mr Cliff Hanger.

  343. DrLoser says:

    I was pointing out that Dr Loser is wrong. You can link anything to anything if you have the source code and the data which, in a world of FLOSS, we have.

    What a very bizarre argument, Robert.

    One of the very few things in IT that do not pertain to the FLOSS/non-FLOSS dichotomy is computer languages. Not to put too fine a point on it, if you can publish a reference EBNF (or equivalent) for a language, you’re done. It’s not FLOSS. It’s not non-FLOSS. It’s just a computer language. If needs be, you can implement the parser in C (which is what Cfront did for C++), thus bypassing any question of Freedom or Portability whatsoever.

    Point me at a computer language whose secrets are jealously guarded by M$, Oracle, or even Google, and we can continue from there. Right now, however, and rather appropriately considering the context, your argument is a dead duck.

    Now, consider the cases put by two possible Consultants on connecting language A to language B.

    Me: In general, it isn’t worth the effort unless somebody else has done the work for you. I suggest you write sub-systems as appropriate in each language. Where they need to communicate, you might as well use interop via TCP/IP (or message queues if appropriate to your platform). Use XML if you must, JSON by preference, or whatever over-the-wire protocol is fully supported by both languages. CSV as a last desperate shot.
    Pog: “It is definitely possible to have both sharing in some way. It could be crude. It could be ad hoc, but it is possible if one wanted to waste lots of time. Rather, one should rewrite one code or the other in the other language. Then the result would be more portable.”
    Me: That would be an insane waste of time. You’re replacing a simple API with either a total rewrite of one or other code components (including dependent libraries) or an ad-hoc unspecified smooshing of stuff at the linker level. Clearly Pog has no relevant qualifications or experience when it comes to IT consultancy. Either idea is doomed, ultra-expensive, and farcical.
    Pog: “Who needs metadata when the data is there? PROGRAM = DATA STRUCTURE + ALGORITHM, so you can always have two algorithms access the same data in RAM or on disc or network, if you have access to the code, what FLOSS is all about.”
    Me: This isn’t a data issue. It’s an interface issue. Anything above a simple database program serving up recipes — which incidentally, per definitionem, requires a database schema, which is METADATA — involves a complex workflow, a lot of messaging, and basically a meeting of minds between language A and B on semantics. How to handle an exception on either side? Or, in CORBA terms, a type narrowing? Or object lifetimes?
    Pog (speculative words in mouth, I admit): OK, smart guy, what would you do?
    Me: I’d definitely put more thought into it than you have. I’d certainly check the domain out first. I’d talk to the stakeholders and figure out cost factors and dependencies and timescales and scalability and so on. But I forgot, you’re hopelessly unqualified as a Consultant, aren’t you?
    Pog (speculative as above): Yeah yeah yeah, smartass. I leave all the minor details like that to bean-counters. What’s your proposed technical solution?
    Me: My technical solution? Well, if I were you, I’d boil a frog. That seems to be your “technical” solution to almost everything. But I’m me, so I’m going to offer a more rational solution. It’s even a FLOSS solution! Use SWiG! It’s a solid foundation for interfacing between any two languages that can, each on their own, interface with C.
    Pog: I can’t believe I’ve never heard of New Miracule SWiG!.
    Me: I can’t believe you’ve never heard of it, either. But then again, you’re a preposterously inept and unemployable Consultant, aren’t you?

  344. Deaf Spy wrote, “Pogson, as an academic, perhaps you should have quoted Niklaus Wirt. Whatever.”

    As a side note, Wirth worked on Algol W and Pascal…

  345. Deaf Spy wrote, “We’re not discuss the data the program is processing. What we discuss here is that when you don’t have the (meta)data about types at runt-time, you cannot implement late-binding, or duck-typing in that run-time.”

    DrLoser, having no clue what computers are, wrote, “Bindings from language A to language B via either a linking mechanism or the runtime are not guaranteed for any combination of A and B.

    This is fun. Let’s try linking Algol60 to Delphi Pascal. Oops! Doesn’t work.”

    I was pointing out that Dr Loser is wrong. You can link anything to anything if you have the source code and the data which, in a world of FLOSS, we have. It’s only with the likes of M$ and Oracle that users are slaves and denied the knowledge to set themselves free.

  346. Deaf Spy says:

    Who needs metadata when the data is there? PROGRAM = DATA STRUCTURE + ALGORITHM, so you can always have two algorithms access the same data in RAM or on disc or network, if you have access to the code, what FLOSS is all about.

    Pogson, as an academic, perhaps you should have quoted Niklaus Wirt. Whatever.

    We’re not discuss the data the program is processing. What we discuss here is that when you don’t have the (meta)data about types at runt-time, you cannot implement late-binding, or duck-typing in that run-time.

    You don’t get the difference between data and metadata, do you? For your info, this is a very, very old concept. Well know and well-respected amount software engineers. Research “data dictionary”, it is a good starting point.

    The whole discussion has nothing to do with FLOSS. But hey, don’t let irrelevancy stop you.

  347. Deaf Spy wrote, “It’s because the metadata isn’t there, and the runtime consequently cannot support it.”

    Who needs metadata when the data is there? PROGRAM = DATA STRUCTURE + ALGORITHM, so you can always have two algorithms access the same data in RAM or on disc or network, if you have access to the code, what FLOSS is all about.

  348. Deaf Spy says:

    Sorry to step in, but I couldn’t resist.

    Pogson, not getting the point at all, wrote rather lightly:

    “Since both runtimes can run on the same hardware, it is definitely possible to have both sharing in some way”.

    Robert, you missed the whole point of the discussion. And it is:

    It’s because the metadata isn’t there, and the runtime consequently cannot support it.

    All your statement does is only support Dr. Loser’s cause in fullness.

    Btw, for your info, your pal Fifi tries to imply that there is some magical pixie dust that compilers can sprinkle over the code and you suddenly get late binding. He even claims worse things than that, but let’s not go there.

  349. DrLoser, having no clue what computers are, wrote, “Bindings from language A to language B via either a linking mechanism or the runtime are not guaranteed for any combination of A and B.
     
    This is fun. Let’s try linking Algol60 to Delphi Pascal. Oops! Doesn’t work.”

    Since both runtimes can run on the same hardware, it is definitely possible to have both sharing in some way. It could be crude. It could be ad hoc, but it is possible if one wanted to waste lots of time. Rather, one should rewrite one code or the other in the other language. Then the result would be more portable.

  350. DrLoser says:

    IDispatch in fact that is part of com/ole cannot be used from every programming language. Early haskell cannot.

    And why should it, Fifi?

    Bindings from language A to language B via either a linking mechanism or the runtime are not guaranteed for any combination of A and B.

    This is fun. Let’s try linking Algol60 to Delphi Pascal. Oops! Doesn’t work.

    Here’s an easier one. Let’s try linking Objective-C to Rust. Hey, both of them are based on C!

    Nope, that doesn’t work either.

    And guess why those and many other example don’t work, Fifi?

    It’s nothing at all to do with duck typing. And it’s nothing at all to do with IDispatch — although in every single case, given a Turing-complete language, you could implement a library to do that. “Early Haskell” chose not to do so. Mostly because there was no obvious need to do so. Can you give us all a use case for doing so? No, little red leather mini-skirted one — you can’t, can you? So why bring it up? It proves nothing at all.

    It’s because the metadata isn’t there, and the runtime consequently cannot support it.

    You really have no clue, do you?

  351. DrLoser says:

    Incidentally, Fifi, and I am surprised that one of your omniscience and awesome, overarching knowledge of C in all its forms has not yet noticed this, you will notice a little side-effect of that Python demonstration.

    You see how Python handles output via io and sys? Ignoring the necessity for a tuple, and hence for the tuple operator, it’s basically C, isn’t it?

    Well now. Guess what than means?

    As always, I will give you a week. As I recall, it only took you around ten false starts last time before you figured it out.

  352. DrLoser says:

    Well, Fifi, you seem to like concrete examples. I’ll give you one.

    Try running the Python script I showed earlier. (You’ll need to import sys and io, and fix up the indentation. None of this should be beyond you.) The output is as follows:

    Quaaaaaack!
    The duck has white and gray feathers.
    The person imitates a duck.
    The person takes a feather from the ground and shows it.

    That right there was an example of duck typing. Now let us show the counter-example. I’ve named the extra class for both of us, Fifi — you should be honoured. Here’s the only slightly modified code:

    import sys
    import io

    class Duck:
    def quack(self):
    print("Quaaaaaack!")
    def feathers(self):
    print("The duck has white and gray feathers.")

    class Person:
    def quack(self):
    print("The person imitates a duck.")
    def feathers(self):
    print("The person takes a feather from the ground and shows it.")
    def name(self):
    return "John Smith"

    class PeterD:
    def NoQuack(self):
    print("PeterD does not quack.")
    def name(self):
    return "PeterD"

    def in_the_forest(duck):
    try:
    duck.quack()
    duck.feathers()
    except:
    print "The duck of %s has no quack!" % (duck.name())

    def game():
    donald = Duck()
    john = Person()
    other = PeterD()
    in_the_forest(donald)
    in_the_forest(john)
    in_the_forest(other)

    game()

    And the output is as follows:

    Quaaaaaack!
    The duck has white and gray feathers.
    The person imitates a duck.
    The person takes a feather from the ground and shows it.
    The duck of PeterD has no quack!

    Now, Fifi.

    Kindly explain how that exception is not noticed during compilation, but is noticed at runtime.

    Could it be … (adopts Church Lady voice) … SATAN?

    Not really. It’s just duck typing.

  353. DrLoser says:

    Sorry dynamic types does not require complier language support as such.

    You keep saying this, oiaohm, as though we were somehow disagreeing with the proposition. In fact, we are the ones insisting that “duck typing” is not a compiler thing — nor a preprocessor thing, so you can throw that daft idea of yours into the bin. You are the one insisting that it is somehow connected to the compiler — cf your nutty idea that the Perl strict directive, a purely compiler-based construct, has anything to do with “duck typing.” It doesn’t, because … well, it just doesn’t. But even if it did, it wouldn’t work, because it is purely a compiler-based construct.

    How many times? Duck typing is a runtime thing. The runtime requires metadata to make it work.

    Now, your language environment of choice can do this in several ways. It can use a REPL, which is the way that functional languages do it. It can use slots, which is how Python does it (I think). It can use some form of the dynamic keyword, which is how C# does it and how GCC C does it — incidentally this is by no means standard C.

    In the case of Perl, it can even do it via a mind-mangling series of indirections through the inheritance tree, which eventually leads to UNIVERSAL. Arguably this is duck typing, although the quack that results is likely to be unintelligible.

    You could do it with mixins, as well. In principle, this is how IDispatch and family works.

    But, however you do it, the compiler is not the place to do it. You need both metadata and runtime support.

    Can we at least agree on this fairly obvious precondition for duck-typing?

  354. Deaf Spy says:

    So what I provided was is nothing more than 1 to 1 conversion of the example you put up DrLoser.

    Wow, Fifi, you nailed it! It is a 1 to 1 conversion. You must be proud of yourself! Sadly, this is not “duck-typing”.

  355. oiaohm says:

    DrLoser I never said doing duck-typing in C was exactly worth the effort.

    I don’t think that predefining all possible relevant types and methods really qualifies as duck-typing, Fifi.
    Problem structure and class are related. Very closely in fact.

    class Duck: <<That equals a vtable or in other words complier makes structure of format vtable of duck behind your back.
    def quack(self):<shove function into structure of vtable duck
    def feathers(self):<shove function into structure of vtable duck.
    typedef {
    void (*quack)();
    void (*feathers)();
    }duckstruct;
    So what I provided was is nothing more than 1 to 1 conversion of the example you put up DrLoser. Same with person structure I put up. C you manually build the vtable data that is how you OOP in C or ASM. Sad reality is the example in python you put up as ducktyping is 2 structures and 1 function ignoring type that is all it is. Since you have not done OOP manually you did not see through the python example to what it really was.

    Pick a language of your choice that deliberately supports duck-typing, aka dynamic types.
    https://developer.gnome.org/gobject/stable/chapter-gtype.html
    DrLoser glib on C implements dynamic types. Along with many other libraries or you could choose to implement yourself. Linux kernel that written in pure C contains dynamic types in places why it has sparse to static code check it. C language might not provide safe guard and auditing for the code I put up. Running a static Analise over it can. This purely comes down to where features has to be implemented.

    Sorry dynamic types does not require complier language support as such. Language support is a lot less painful to use. But to implement dynamic types you need a polymorphism language. monomorphism language dynamic types is a no go.

    Basically look for program languages that are monomorphism you will find languages where duck typing and dynamic types are both forbidden.

    Its fairly much a myth that duck-typing can be done on any programming language. Most programming languages are polymorphism based.

    Remember a polymorphism language can run monomorphism style code. Monomorphism code cannot run polymorphism code. So when checking the feature list of a language a serous question is if it monomorphism or polymorphism.

    Of course a language that directly support dynamic types and ducktyping will make your life simpler so requiring extra tools.

    Exactly why would something like the Linux kernel choose to use C created structs over vtable solution. vtable solution is what ever the complier decides todo. C structs are way more predictable. Yes insane you need portability between compliers you have to implement in C or asm. So at times it totally required to know how to bash up a duck type or a dynamic type in C so you have something for bridging between languages.

  356. DrLoser says:

    This is the thing with C. It has ducktyping with no safety net.

    How fascinating. No safety net, eh?

    Pick a language of your choice that deliberately supports duck-typing, aka dynamic types.

    Done that, Fifi? Good. Pick more than one, if you wish.

    Now, little red-leather miniskirted lamp-post dweller …

    … explain, in each case, what the “safety net” might be.

  357. DrLoser says:

    typedef {
    void (*quack)();
    void (*feathers)();
    }duckstruct;
    typedef {
    void (*quack)();
    void (*feathers)();
    int someextra;
    }personstruct;

    I don’t think that predefining all possible relevant types and methods really qualifies as duck-typing, Fifi.

    In fact, it’s hardly worth the effort. You might just as well let the compiler do the job for you directly.

    Now, tell me, little miserable pathetic one. How is this “duck-typing?”

    And for bonus points, if you did something like this in Perl — which you can — in what way does the “strict directive” enable it?

    Because, Fifi, as I remember, you claimed that the Perl “strict directive” somehow enabled “duck-typing” in Perl.

    Which it clearly does not.

    Do you wish to persist with this fraudulent ignorant lie, or do you wish to take the easy way out, as you so often do, and claim that you were “just testing” us?

    Your choice, little fraudulent habitual liar.

  358. DrLoser says:

    “monomorphism restriction”. This is defined in first Hacksel. This is where everything must solve to 1 type.

    It’s Haskell, Fifi. Although I appreciate your little pun there.

    And as usual you haven’t read your cite, have you? I’ll save you the effort:

    We need to enable type families and flexible class contexts to work with this library. And also it’s nice if we disable the monomorphism restriction. I don’t want mono, I want manymorphism!

    It’s hardly a surprise to learn that duck-typing, however defined, doesn’t work with monomorphism, is it?

    Now, I presume you brought Haskell — or, to quote your own name for it, “Hacksel” … which seems a little unfair for a functional programming language with hygienic macros … up for some reason. Let’s wait on your brilliance a while, shall we?

    Try that Python example I gave a little earlier,/a>.

    See if you can make that work with your C Preprocessor example, or indeed anything else written in C.

    You can’t can, you?

    Self-confessed habitual liar and fraud.

  359. DeafSpy says:

    Fifi, I never asked you which language supports COM via IDispatch. I only mentioned IDispatch as a nice way to implement late-binding (duck-typing) without requiring the compiler to inject any meta-data for you. Because, the model of IDispatch requires you to inject the meta-data into your code yourself. It is not exactly even meta-data, because it can’t be really accessed and used by others. A better description of it is perhaps knowledge about itself, so that you code can quack when asked to quack, if you decide you can quack at all.

    Now, oh misguided one, tell me which language will forbid me from injecting that into the code myself?

    Why you brought Haskell to the table is really beyond me.

    But it is nice to see how Pogson leaves you to sweat on your own and looks the other way when you need help. 🙂 Of course, he’ll eagerly rely on your blabbering when he needs to prove that MS will die a terrible death.

  360. oiaohm says:

    DrLoser read my link again about Hacksel.

    “monomorphism restriction”. This is defined in first Hacksel. This is where everything must solve to 1 type. So Hacksel in it first version duck typing is a no go . The option to remove the monomorphism restriction was added in later editions of Hacksel.

    Really the python example is so far bull its not funny.

    Classes become structure declares. void * skips type checking.

    typedef {
    void (*quack)();
    void (*feathers)();
    }duckstruct;
    typedef {
    void (*quack)();
    void (*feathers)();
    int someextra;
    }personstruct;

    personstruct person=personint();
    duckstruct duck=duckint();
    I will skip init up for duck and person that sets where the function pointers point.
    void in_the_forest(void * duck){
    (duck *)duck->quack()
    (duck *)duck->feathers()
    }
    Is one option
    in_the_forest(&duck);
    in_the_forest(&person);
    Will work some compliers will display warnings others will just build it. No preprocessor magic. Ok if you use an incompatible type it going to explode at runtime under C . This is the thing with C. It has ducktyping with no safety net. It you job to implement the safety net in C and that is normally adding some meta data so at runtime you can check you have the right type. Note that person and duck don’t 100 percent match. Python example if person and duck don’t 100 percent match it still works. True example has duck and person not 100 percent matching. The python example you gave other than naming the struct under it is absolutely identical so works in a monomorphism environment. Where the example I just gave that you can easily implement add to the python fails in a monomorphism environment.

    monomorphism is something slightly different to duck typing easy to mix up with each other. Walks like a Duck acts like a Duck it is a Duck is duck typing logic of course that does not mean just because something walks like a duck acts like a duck that it cannot do something not duck like(the not duck like option is the key difference). Monomorphism is more you X ray the duck and if the X ray matches a duck it is a duck. That the duck it brown white or any other fancy name makes no difference in Monomorphism. Basically it a common screw up mixing up Monomorphism for duck typing. Monomorphism does not require automatic type conversion as it is just ignoring the type name.

    The problem here is lots of duck typing examples given are in fact Monomorphism examples not true duck typing examples.

    Yes object based ducktyping using classes is emulated in C by using structures and init functions. Issue is no safety net.

  361. DrLoser says:

    Deaf Spy the core to duck typing is universal storage

    No it isn’t, you moron.

    The key (or core, if you prefer) to duck typing is metadata.

    NOT some weirdo concept of “universal storage.” Whatever that might be. And I notice that, other than void*, you have never once come close to defining what “universal storage” might be. (Void pointers do not contain or even reference metadata, I might add. Somewhat superfluously, under the circs.)

    Well, as I say, I am a reasonable man. Let us, Fifi, limit ourselves to the C preprocessor, the C compiler, the C linker, and the C runtime.

    Do you have a plausible method by which this “universal storage” — a thing that can easily be implemented via a C pointer — can somehow acquire the necessary metadata between the compile/link phase and the runtime?

    I think not, Fifi. You are a self-confessed habitual liar and a miserable ignorant fraud.

    But … but … there is one, just one, possible way out for you! Even in C, you can do this!

    I’ll let you figure it out. Huge clue: REPL.

  362. DrLoser says:

    Occasionally even a fraudulent self-confessed habitual liar whose brainwaves are also, self-confessed, somehow manipulated either from outer space or via an unspecified and unknowable genetic trait, possibly Prussian ancestry, possibly not …

    … can still come out with something resembling Pure Poetry.

    I mean, it’s senseless. It’s moronic. It’s not even any sort of defence of Fifi’s original claims, spurious as they were.

    But we should all, for once, sit back and admire the poetic glory of the following:

    Anything pure Strict Functional programming that is pure static typed you cannot do true duck typing or IDispatch/late binding cannot be implemented. Because to be a pure strict functional programming language that is pure static typed everything has type resolved to be resolved at build time or the language is not pure. To be true this really don’t allow for dynamically loading libraries either. Most languages that start off in these strict forms as they mature get options to avoid perfection to allow interfacing.

    A bravura performance.

    It’s a pity that not a single word makes any sense at all.

    But that’s potry fer ya.

  363. DrLoser says:

    An a priori false claim for all Turing-complete languages, courtesy of a fraud and a self-confessed habitual liar:

    There are a few programing language types that forbid late binding/type transformation.

    I’m afraid that’s not … quite … how programming languages work, Fifi.

    Not at all.

  364. DrLoser says:

    Deaf Spy Sorry I did give you example. Haskell did not have the feature it was added to the language in it latter forms.

    There isn’t a single statement in your example that even remotely suggests that Haskell did not have duck-typing from the year dot onwards, Fifi, you self-confessed habitual liar and fraudulent little red-leather miniskirted creep.

    I presume you refer to the following:

    So there you have it, duck typing in a statically typed way. We get to have our cake and eat it too.

    Either confirm or deny that this is the sentence that caught your misbegotten attention, and we can all proceed from there.

  365. DrLoser says:

    And now, Fifi, back to duck-typing.

    Haskell is kinda deceptive because if you don’t declare type complier solved out what type is when it builds the code.

    One simple acronym for you, Fifi: REPL. Read and weep. “Kinda deceptive?” Pah. We shall consider type inference at a later date, if you please.

    Deaf Spy the core to duck typing is universal storage please note the wrapper functions. Please note DrLoser said to implement duck typing you had to do it in the complier.

    I shall take it for granted that a habitual liar and an obvious fraud who cannot even spell the word “compiler” correctly has some vestigial and possibly useful or relevant knowledge of what a “compiler” might be.

    As I say, I am a reasonable and a generous man.

    Also a reasonable and generous man who never once claimed that “to implement duck typing you had to do it in the compiler,” in fact. This is not only an absurd claim. It is precisely the opposite of what I have claimed all along.

    What was that about “misrepresenting people,” Fifi, you lying fraudulent little coward? Seems to me that I have a prima facie cause for libel, right here.

    But I am a reasonable and generous man. Let us proceed, therefore, to a representative example of duck-typing, which happens to come from Wikipedia. It is a perfectly good example. It’s in Python, but that makes it clear for all to see.


    class Duck:
    def quack(self):
    print("Quaaaaaack!")
    def feathers(self):
    print("The duck has white and gray feathers.")

    class Person:
    def quack(self):
    print("The person imitates a duck.")
    def feathers(self):
    print("The person takes a feather from the ground and shows it.")
    def name(self):
    print("John Smith")

    def in_the_forest(duck):
    duck.quack()
    duck.feathers()

    def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)

    game()

    Now then, Fifi — how do you propose to use your C Pprocessor magic to make this work?

    (And for bonus points — why did you use the C Preprocessor in the first place? You could easily have written that drivel in pure C in the first place.
    (Knucklehead.)

  366. olderman says:

    “Deaf Spy keep on calling me fraud forget me giving you links or more information.”

    When you are a self admitted liar and you are caught in statements that are more often than not questionable, misleading, or at best wishful thinking. DO you really expect anyone after a while to take you seriously or think you are anything else?

    In my experience, most if not of your “proofs” that I have pursued were irrelevant if not downright deceptive to the point. And then there is the little matter of your claiming expertise in the IBM SAN Volume Controller, and when called upon to demonstrate it you gave a line of bullshit about it being secret information – its not! In fact IBM’s documentation including theory of operation, best practices papers and sample configurations are publicly available on line. This is something that you would have known had you actually worked with the technology as I did. INstead you bullshitted and bullshitted, until you were called out for a liar and fraud who I would not answer on any of your posts to me with anything other than the callout of your fraudulence, until you either demonstrated the requisite knowledge, or admit ed your fraud.

    And your ultimate answer was to declare that you had just forgotten it all.

    Well sir, if you had truly forgotten all about the details of the IBM SAN Volume Controller technology, who the hell do you think you are commenting on that technology, let alone calling someone who IS fluent in that technology “incompetent”

    You fraud…!

  367. oiaohm says:

    Deaf Spy Sorry I did give you example. Haskell did not have the feature it was added to the language in it latter forms. I included example There are a few programing language types that forbid late binding/type transformation. About this.

    Small one, you simply cannot even tell the difference between a compiler-supported feature and a feature you can simply implement in (any) code.

    IDispatch in fact that is part of com/ole cannot be used from every programming language. Early haskell cannot.

    Anything pure Strict Functional programming that is pure static typed you cannot do true duck typing or IDispatch/late binding cannot be implemented. Because to be a pure strict functional programming language that is pure static typed everything has type resolved to be resolved at build time or the language is not pure. To be true this really don’t allow for dynamically loading libraries either. Most languages that start off in these strict forms as they mature get options to avoid perfection to allow interfacing.

    Deaf Spy you would have seen my more correct explain if drloser had not gone thread crossing mad.

    Deaf Spy you made a big mistake early Haskell in 1990 could not interface with ole objects at all. You have a hack interface called Haskelldirect that allows you to interface with it that basically contains code with flags to say disregard sections of the languages restrictions. Basically 1990 Haskell you cannot link it to OLE as the language design does not allow it.

    I could have dug out a more modern language that will not interface with OLE but you would not know it. Its used in embedded controllers. Mostly for stuff where you don’t want failures so want to statically solve out the code as far as possible.

    Yes the so called example of duck typing on the wikipedia with Haskell is deception. Instead Haskell has solved out that the structs are the same so allowed them to be interchanged. In a solved a build you can get items that seam like its ducked typed. If person and duck had slightly different structures haskell complier would have rejected. This is where strict typed language comes a nightmare for interface with OLE and the like. As the complier wants to know in advance so it can solve because what ever it cannot statically analise is to be rejected.

    Haskell is kinda deceptive because if you don’t declare type complier solved out what type is when it builds the code. But it only ever solved to 1 type if it has code demanding something has two types build error. Now if that type happens to be identical in unamed form to another declared type they are inter changeable but this is not duck typing. Because Haskell is not asking if something can walk like a duck. Haskell asking if something exactly matches a duck in construction if so it interchangeable if not reject. Modern Haskell is interchangeability allowance flags to allow more polymorphism options. Interchangeability allowance is close to duck typing but not quite. Yes Haskell has allow polymorphism flag so it allows modern form allows duck typing where type 1 does not 100 percent match type 2 but all interface points of type 1 are in type 2. But this is modern form not original.

    Late binding and duck typing are both nightmares for statically solving out what code does. So there are languages designed forbidding both.

    Deaf Spy keep on calling me fraud forget me giving you links or more information.

  368. Deaf Spy says:

    There are a few programing language types that forbid late binding/type transformation.

    Bwahahahahaha!

    Tell me one such language, Fraud. One. And then give me an example how late binding can’t be implemented on it. Especially a rather universal form of it like in IDispatch.

    To implement duck typing you need something in the language like void * pointers that is allowed to be many types and you need to store extra meta data.

    No, you absolutely don’t.

    C contains the relevant apparatus in the program language to implement duck typing just not easily.

    No, it does not.

    Small one, you simply cannot even tell the difference between a compiler-supported feature and a feature you can simply implement in (any) code.

    Fraud.

  369. oiaohm says:

    Deaf Spy the core to duck typing is universal storage please note the wrapper functions. Please note DrLoser said to implement duck typing you had to do it in the complier.

    Deaf Spy you should have been getting up DrLoser for having duck typing completely wrong because DrLoser says over and over again it has to be a programing language/complier feature to have duck typing what is bogus. Me for writing it horrible I will except that.

    Deaf Spy agree with me that it can be implemented in the library with C.

    But, if you do it all yourself, then language doesn’t matter, plain and simple.
    There are a few programing language types that forbid late binding/type transformation.

    To implement duck typing you need something in the language like void * pointers that is allowed to be many types and you need to store extra meta data. There are a handful of languages where you cannot do this.

    Basically there are program languages that by default include duck-typing, Program languages where you can implement duck typing in a library or otherwise(ie C, asm…) and program languages where you cannot.

    http://chrisdone.com/posts/duck-typing-in-haskell
    haskell is a good example to compare to C. C you have to set no special flags to allow you to implement duck typing. haskell you have to in fact set flags to duck typing library can work because by default haskell by language design whats to always exactly have fixed types. Early haskell does not even have the processor option to allow the language extention.

    So yes duck typing does come partly to program language but its only part of the story.

    It is indeed. I also pointed out that it requires the relevant apparatus in the compiler
    Note this statement by DrLoser it wrong. Relevant apparatus in the program language. C contains the relevant apparatus in the program language to implement duck typing just not easily.

    This is why we have different languages, little one – to help us solve different problems easier.
    Deaf Spy I have never said that we did not have different programming languages to solve different problems easier. The reality is we don’t always have the choice of program language so you have to know how far you can push it. If you have a problem that is better solved by duck typing and you are suck to C program language and you are not aware you can implement duck typing you can end up creating worse code. Same applies to any other program language that does not include duck typing by default where you can implement duck typing manually.

    Deaf Spy C89:1990 standard you don’t have a copy either do you. Because if you did you would find that DrLoser complete arguement this time has be incorrect.

  370. Deaf Spy says:

    Do you know what declared duck typing in.
    typedef {int type;
    void * value;
    } duck;
    Right note that value can in fact be any type.
    setducktype(duck,type); function.

    Except that this is not duck-typing, little one. This is just a universal storage with a supplementary meta-data component. Which definitely does not solve the problems that duck-typing (which is just another way to say “late binding”) is used to solve.

    To use duck-typing, you need to have certain information available at run-time. Of course, in C you can create a library to implement late-binding. Gosh, you can do this even in pure machine code. But, if you do it all yourself, then language doesn’t matter, plain and simple. This is why we have different languages, little one – to help us solve different problems easier.

    A reference manual is not the C89:1990 standard.

    You are a clueless lying little fraud, aren’t you?

  371. oiaohm says:

    Call it what you will, Fifi. It does not quack like a duck. It is therefore not a duck.
    Do you know what declared duck typing in.
    typedef {int type;
    void * value;
    } duck;
    Right note that value can in fact be any type.
    setducktype(duck,type); function.
    So you tell the duck type what type it has to walk as.

    Declarative can be inserted by a preprocessor. PHP has a set type on a duck so you can operate it declarative. When manually doing duck typing in OOP C you are using the declarative type. If you want duck typing invisible to coder this is either hidden in a preprocessor/code generator. Notice something here. Duck type does not have to be a complier feature. Its only a complier feature because it contains a processor/code generator.

    Yes using #define void int with C1989:1990 code is fine. Using it on more modern code forget it.
    Please note building C1989:1990 code on more modern C you are depending on malloc and the like being int * not void * or the complier will not build the code.

    DrLoser nit picked this by using an example that would build fine with C1989:1990 without #define void int.

    Yes using #define void int with C1989:1990 code is fine. Using it on more modern code forget it.

    #include “stdio.h”
    void main (int argc, char** argv)
    {
    void fred = 1;
    printf(“Fred is %d\n”, fred);
    }

    Basically that is functional C89:1990 code. So you applied the flag with older code.

    Your anticipated result, Fifi, is a compiler or linker error.
    This is DrLoser who cannot read problem.

    Newer code does have issues at times when you start using #define void int.

    The widely accepted reference manual (which incidentally includes an excellent grammar for the language, based and annotated where relevant on all C standards, from C89 to C99) refutes your feeble efforts completely.
    Sorry DrLoser. A reference manual is not the C89:1990 standard.

    The catch here DrLoser is the use of VOID as a type was forbin in C90:1990 but still allowed in C89:1990. The trap for the not aware is a lot of reference books are written C89:1991/C90:1990 or latter. Type void in C89:1990 is that far screwed up the safest thing is to forbid it going forwards. The reason we don’t have a usable void var; option in modern C is C89:1990 screw up.

    A lot of different features in C have disappeared in this kind of way.

  372. Deaf Spy says:

    After all this I will be greatly surprised if Robert still considers Fifi a technically knowledgeable person.

  373. DrLoser says:

    And now, back to duck-typing (entirely a run-time thing) and your nitwit assertion that it is in any way either
    a) available using the C language, obviously via the compiler and the linker but not the run-time, because those are the only facilities that the C language offers you, or
    b) somehow facilitated in Perl using the strict directive, which incidentally is not even visible to the Perl run-time.
    You really are an abject clueless cretin, aren’t you, oiaohm?

  374. DrLoser says:

    Foetid ignorance upon foetid ignorance.

    Yes using #define void int with C1989:1990 code is fine. Using it on more modern code forget it.

    Well, let’s try the following on GCC 4.8.2, shall we? No special flags required.

    #include "stdio.h"

    #define void int

    void main (int argc, char** argv)
    {
    void fred = 1;
    printf("Fred is %d\n", fred);
    }

    Your anticipated result, Fifi, is a compiler or linker error.

    The actual result?

    Fred is 1

    A ten year old could have written this program, Fifi. A ten year old would have done so, in order to test his or her thesis. Evidentially, you lack the basic computational awareness of a ten year old.

    But wait up here. Your claim is even sillier! You claim that “using it on more modern code forget it.” I’m sure you’re right. I need to specify a “more modern standard.” C99 do for you, little red mini-skirted habitual liar with torn fishnet stockings?

    Good. Spot where I go wrong with gcc v3.4.3 on the following, where fifi.c is the program listed above.

    $ gcc --std=c99 -o fifi fifi.c

    drloser@REDSKIRTEDTRAMPLIAR
    $ ./fifi
    Fred is 1

    Wrong yet again, apparently.

    Do you ever give up and admit that you actually have no knowledge at all of any worth in any particular area, Fifi?

    If so … this would be a good time to make a clean breast of it.

  375. DrLoser says:

    Just to return to this small but important evidence of your total incompetence, Fifi:

    Problem here taking the modern idea of C appling it to C1989:1990 code bases leads you up garden path. Yes using #define void int with C1989:1990 code is fine. Using it on more modern code forget it. Yes you find remains of C89:1990 complier contact in lots of code bases with (void *) casting where it not required.. K&R and C89:1991 and C90:1990 does not require.

    First of all, we’re not talking about void*, which is and always has been a “type” (of sorts, though one requiring a cast before it is assigned to an lhs variable that will be used for anything other than void* purposes, which are … this is a little circular, isn’t it?).

    We are talking about void. Which is not an lhs type in C, no matter which standard you choose to use.

    Only an imbecile would claim otherwise. And, guess what, Fifi? You are that imbecile.

    Let me quote from the authoritative reference source on C (yes, it is authoritative on C1989:1990):

    THE VOID TYPE

    The type void has no values and no operations.

    void-type-specifier :
    void

    Type void is used:
    * as the return type of a function, signifying that the function returns no value;
    * in a cast expression when it is desired to explicitly discard a value;
    * to form the type void*, a “universal” data pointer; and
    * in place of the parameter list in a function declaratory to indicate that the function takes no arguments.

    And that’s all there is to it, Fifi.

    The widely accepted reference manual (which incidentally includes an excellent grammar for the language, based and annotated where relevant on all C standards, from C89 to C99) refutes your feeble efforts completely.

    Presumably, of course, you can identify this reference manual instantly. In which case you will admit your foul error.

    But, just in case … I can also quote the reference grammar at you.

    You fail, Fifi.

  376. DrLoser says:

    DrLoser do I really have to type out the complete code before you work out duck typing that complier it optional. C has the structures to allow you to create and manage your own duck types. Look again at the cite I gave it include something like this example under another name.

    Well, I don’t want you to hurt your fingers. I’m sure they are better used, manipulating your clients under the lamp-post.

    Let me therefore save you rubbing off those sensitive little whorls without financial gain by pointing out that all this talk of structures and so on is … well, it’s down to the compiler, basically. It has nothing at all to do with the run-time.

    And therefore it is not duck-typing.

    What it is, Fifi, is “type casting.”

    There are indeed type casting rules in C. And — surprise! — they are rules applied by the compiler.

    Which, by the way, has never, not in a single version of the C standard, allowed you to type-cast anything into void. Nor the other way around.

    The fact that, in some versions of the C standard (round about 1990), it is possible to declare the main routine as returning “void,” even though by the standard it actually returns int, is neither here nor there.

    This is not duck-typing.

    This is not type-casting.

    This is not even type coercion.

    It’s nothing more than imposed syntactic sugar. It allowed idiots like you, Fifi, to get it wrong, and the compiler would silently correct your imbecile mistake.

    And besides, this is an argument from 25 years ago. You were only about fifteen years old at the time, Fifi.

    Why do you persist with this futile nonsense?

  377. DrLoser says:

    Sorry DrLoser the book I cited did include duck typing under it prior name.

    Call it what you will, Fifi. It does not quack like a duck. It is therefore not a duck.

    And you still have no clue what a duck is, do you? And you still maintain that the Perl “strict” directive is relevant, don’t you?

    You are completely ignorant and deluded.

  378. oiaohm says:

    void* GetFred(void* arg);

    char* bill = “a”;
    void* fred = GetFred(bill);

    Sorry to say this code fails in C1989:1990 compliers. Yes extra

    void* GetFred(void* arg);

    char* bill = “a”;
    void* fred = GetFred((void *) bill);

    Notice the type cast. You find this kind of crap in C1989:1990 complier built. code.

    Problem here taking the modern idea of C appling it to C1989:1990 code bases leads you up garden path. Yes using #define void int with C1989:1990 code is fine. Using it on more modern code forget it. Yes you find remains of C89:1990 complier contact in lots of code bases with (void *) casting where it not required.. K&R and C89:1991 and C90:1990 does not require.

    No, you cited a book that claimed to include that feature. It did not.
    Sorry DrLoser the book I cited did include duck typing under it prior name. Just you lack knownledge of the history of duck typing means you don’t know it.

    Deaf Spy I know exactly how stupid #define void int is. Problem here I know exactly how stupid C89:1990 was. When someone miss writes a standard then people implement as per the error you get a lot of stupid things include finding unrequired (void *) defines in code bases because of it.

    I did indeed. It is indeed. I also pointed out that it requires the relevant apparatus in the compiler
    LOL. Sorry duck typing does not require complier. Duck typing requires structure yes, Computer is nice but not a requirement.
    typedef {
    int type;
    void *value; } duck;
    char * duck tostring(duck a);
    int * ducktoint(duck a);
    void setduckint(duck a,int b);
    void setduckstring(duck a, char* b);
    DrLoser do I really have to type out the complete code before you work out duck typing that complier it optional. C has the structures to allow you to create and manage your own duck types. Look again at the cite I gave it include something like this example under another name.

    olderman
    Fair Enough. I have a contact in one of the regional Gold Partners. All you would have to do is provide the URL to the special page that describes this special version of windows 2016 and I will have it verified. If it checks out, I will acknowledge so.
    Does not work that way. Protected Gold and higher Microsoft partner pages are one off generated URLs. One of the clue that you are on page for something gold and higher is the fact every time you go back to it the URL has in fact changed. So not shareable by email or website. Only a person who has never been in the Gold Partner section of Microsoft web pages would ask for this.

    Reality tell them to check out production deployment of windows docker. They will find the Azure version. CTP is time locked the Azure version for Gold and higher partners is not.

  379. DrLoser says:

    Type to type conversion is a preprocessor thing.

    And here we hit at the very nub of Fifi’s lamentable, yet total, ignorance.

    Bwahahahahahahahahahahaha!

    Not so, little one. Let me gently introduce you to two parallel subjects: type theory, and the evolution of “macros” through the ages.

    Now, as to type theory. I strongly recommend googling Lambda The Ultimate for this one. It’s a bit beyond your limited cognitive ability, Fifi, so let’s aim lower, yet still offer a magnificent source of relevant information: google Alexander Stepanov instead.

    The thing to take away here is that you do not have the ability to duck-type unless either:
    a) You have metadata associated with the compiler output for a given variable. (There is no such metadata available from a C compiler. Indeed, there cannot be.) … or
    b) The environment in which you execute your program is a REPL. In which case you gather metadata as you go.

    So much for type theory. Now, to the rather simpler task of completely demolishing your pathetic attempt at understanding “macros.”

    This is actually a very interesting subject, although far beyond your pay-scale, Fifi, and to be honest slightly beyond mine. I’ll give it a go, anyway.

    “Macros” have existed quite literally since Lisp was first brought to public attention. Since Lisp is, at heart, a set-based calculus, the idea behind Lisp family macros is that one can transform one list into another one, via a “macro.” Now, since both algorithms/programs and data are considered to be equivalent first class objects in any functional language you care to name, this essentially means that a “macro” is nothing more than a map.

    Unfortunately this is not true of non-hygienic macros in functional languages. The problem with “unhygienic macros” is that it is not possible to control the inadvertent capture of identifiers. It’s basically a theoretical problem with workflow, which in languages like Haskell is dealt with by judicious use of monads to produce what are, theoretically, and I couldn’t prove it one way or the other myself, “hygienic macros.”

    I believe the “funarg” problem is associated with the “(un)hygienic macro” problem.

    Anyway, back to C.

    The C preprocessor is about as unhygienic as it is possible to be. It’s filthy. It’s disgusting. It is an ancient relic that should be consigned to the dustbin. In any possible sense — theoretical, linguistic, practical — it’s fucking dangerous.

    And the absolute worst thing about the C preprocessor is that it has no means whatsoever of communicating lexical or syntactic information to the C compiler.

    None whatsoever. It was a horrible brain-fart by either Kernighan or Ritchie, I suspect the former for no good reason, and it persisted for thirty or forty years of pain. Bury the wretched thing at a cross-roads with a silver bullet in both eyes and a stake through its heart.

    Given what I have written above, no sane person would advocate what amounts to type subversion via the C preprocessor, would they?

    Then again, Fifi, you’re not remotely sane, are you?

  380. DrLoser says:

    Leaving aside, Fifi, your ridiculous claim that “use strict” in Perl is in some bizarre way involved in duck-typing.

    How can I put this politely?

    You are an uninformed idiot. It is not.

  381. DrLoser says:

    I wonder if Pogson is proud to have you beside him here.

    A very valid question.

    Over to you, Robert. Do you regard oiaohm as a valued, possibly even knowledgeable, perhaps even a professionally informed contributor?

    Or do you just see him as the deranged ignorant dingbat that the rest of us see him as?

  382. DrLoser says:

    Oh, and Fifi? Darling?

    This is still you crossing threads

    I believe we have already established that only a maniac trying to escape the consequences of his own habitual lying would care, Fifi.

    I gave a book that demo OOP in C that include duck typing implemented in C.

    No, you cited a book that claimed to include that feature. It did not.

    Doing duck-typing in C is harder than a language that supports it natively

    Harder, as in impossible.

    …but nothing about C design prevents you from implementing duck typing using your own functions.

    Yes it does. Specifically, duck-typing requires metadata. Kindly explain how “using your own functions” can somehow magic metadata out of thin air.

    As an exercise for the student: consider the C++ operator, typeof.

    Sorry the cannot possible exist in C arguement is wrong.

    Easily contradicted by a small code fragment, then. Have at it, you fraudulent habitual liar!

    Can exist in C using libraries and other things.

    “Other things?”

    Oh well. A reference to a single C library, please. Otherwise you are self-admittedly full of it, as usual.

    As you said you self Duck-typing is a run-time thing.

    I did indeed. It is indeed. I also pointed out that it requires the relevant apparatus in the compiler … but somehow that obvious requirement seemed to elude you, little red-miniskirted torn fishnet stockinged one.

  383. DrLoser says:

    I hereby confess to insufficient reading attention.

    I literally came up with the cretin idea of pre-processing voids to ints on my own. I beg your forgiveness, Deaf Spy.

    And what a very interesting concept that is. Let us take, for example, the standard way of passing, or receiving, a variadic pointer. (It’s about as close as C gets to dealing with objects, but it’s been popular for 40+ years, so I guess we need to support it.)


    #define void int

    void* GetFred(void* arg);

    char* bill = "a";
    void* fred = GetFred(bill);

    Yeah, that's gonna work real well.

  384. DrLoser says:

    Of course you can even do:
    #define true false
    and enjoy.

    Naturally one can only “usefully” do that by adding it ahead of all other headers. Isn’t the C pre-processor (I shall take the concept of pre-processing up in the immediate future, for Huge Benefit Of Fifi) a wonderful thing?

    Interestingly enough, I suppose — for some vanishingly small value of “interesting” — one could also do the following:

    #define void int

    Hey presto, Fifi “wins!”

    But, not really. For fairly obvious reasons.

  385. Deaf Spy says:

    The reality the bug in C1989:1990 means void to complier does not exist at all.

    Oh, I see. Fifi knows the standard better than all compiler writers in the world. Nice. Just like Fifi knew the architecture of NT better than Dave Cutler himself.

    Even in current day C doing a “#define void int” is valid. This is how to make C1989:1990 code work in modern day compliers.

    Bwa-ha-ha-ha!

    Fifi, do you even realize how stupid this is?

    Of course you can even do:

    #define true false

    and enjoy.

    You are a fraud and a liar, Fifi. I wonder if Pogson is proud to have you beside him here.

  386. olderman says:

    “DrLoser the problem here to provide information on the Azure version of Window 2016 is behind Gold Partner or higher login. ”

    Fair Enough. I have a contact in one of the regional Gold Partners. All you would have to do is provide the URL to the special page that describes this special version of windows 2016 and I will have it verified. If it checks out, I will acknowledge so.

    I am waiting Mr. Oiaohm…

  387. oiaohm says:

    DrLoser the problem here to provide information on the Azure version of Window 2016 is behind Gold Partner or higher login. If things go as normal the information about it existence will become more findable after the 2016 full release. This was the same with Windows 2008 core usage before Windows 2008 release.

    Lets take one of the claims you believe has to be 100 percent false. My wifi jamming. I have so very bad news for you please watch “Stan Lee’s Superhumans Series 2 Ep 6” You will notice an ability that cannot be explained. The detection method for the ability connect up eeg gamma spike when ability is used. So Telekinesis is real. Russian Scientists works out this method for detecting Telekinesis. Mind you they were luckily they had a girl with the Telekinesis ability that strong it was insane. She could bend a spoon inside a sealed glass box. She never touched the spoon. From her they found the eeg signature. Most other studies depended on video footage looking for cheating and putting enough pressure on someone to perform they cannot perform so they cheat basically self full filling test results. So Telekinesis is like gravity. There formal scientific methods to detect Telekinesis ability absolutely because particular brain activity is required but we cannot 100 percent explain how it works. Interesting point is a person with Telekinesis who fails to perform it due to pressure or otherwise will normally still show spike in the right brain types waves at the right time just not large enough. Failure or success to perform Telekinesis against a eeg does not matter the a single attempt is enough to work out if the person is real or not.

    My case some can be explained due to the different in proteins I have that allow me to effect 2.4 Ghz and 5Ghz. But those proteins don’t explain how I can turn the ability on and off. Only explain how I turn the ability on and off is the fact I have the same spike as those who truly use Telekinesis yet I don’t appear to have any Telekinesis ability. So I might be a clue how Telekinesis works.

    This is like the deep sea radar information about it has not be out there in a consumable form. Until recently.

    Notice trend here I talk a lot about topics before the information is fully out there. Of course DrLoser you have presumed they are false.

    3. Habitual fraudulent claims.
    The reality is this is false. Habit of making claims that are hard to confirm is true. Making a few human errors is true. But the reality is 80 percent of the claims you call false are in fact not false DrLoser. I guess you would have never guess that the wifi ability one is absolutely true and that its linked Telekinesis and Telekinesis is real. I am not the only person on earth with that ability and its truly a baffling ability.

    DrLoser I do have professional qualification. I am not required to present them on-line.

    DrLoser Total incomprehension when faced with the concept of “duck-typing.” A thing that cannot possibly exist in C.
    This is still you crossing threads I gave a book that demo OOP in C that include duck typing implemented in C. Doing duck-typing in C is harder than a language that supports it natively but nothing about C design prevents you from implementing duck typing using your own functions. Sorry the cannot possible exist in C arguement is wrong. Can exist in C using libraries and other things. As you said you self Duck-typing is a run-time thing. Its possible for a language to be designed to be 100 percent duck-typing incompatible but that is not C. C as standard does not support duck-typing but does not contain anything forbidding programmer implementing it.

    Pathetic refusal to believe that the C 1989 standard does not permit void variables.

    Please note statement is correctly C1989:1900, C1989:1991, C1989:1994 and C1989:1996. Yes there are 4 editions. The reality is C1989 is not a standard unless you include a year. To be correct DrLoser is kinda right and kinda wrong. Due to C1989:1900 errors void vars don’t technically exist in it. To be correct type void in C1989:1900 does not exist because type void in C1989:1990 is a alias for type int. Instead every where you do void x; is translated to int x;. So complier excepts void x; It all because of void main() with a return int value statement. This is all caused by the K&R compatibility clauses in C1989:1900 that are completely removed in C1989:1991.

    Errors in C standards just get wrong.
    void x=10;
    int i;
    i=x;
    Perfect type match in C1989:1900. This behavior will fail in K&R compliers.

    Basically DrLoser if you have the C1989:1990 standard you have looked for terms saying use of void are blocked. What you did not check for is if void exists at all. The reality the bug in C1989:1990 means void to complier does not exist at all. To programmer void exists. This is why there is only 4 months between the release of C1989:1990 and C1989:1991. Type to type conversion is a preprocessor thing. Even in current day C doing a “#define void int” is valid. This is how to make C1989:1990 code work in modern day compliers.

    4. Total inability to read beyond the first paragraph of a googled cite, and to understand the context and relevance.
    This is mostly when I am responding to you DrLoser because you have performed deformation against me so don’t deserver good quality links.

    But I’m going to ask you to meet me half-way.

    Name three of those six that you don’t object to being carried forward to another thread.
    Sorry DrLoser. I don’t have to agree to any. Legally I am not required to negate with a person performing harassment. Legally I don’t even have to contact you. Instead you contained the host what in the case is Robert/Roberts provider with aiding and abetting charges. If you have not worked out this is why troll homes started disappearing after 2012.

    Most of the claims against me are bogus DrLoser and I am not going to give you any justification to keep on disrupting threads. If something happens to be on topic that Robert set out then you can raise it other wise shut up.

  388. DrLoser says:

    Any particular aspect of my summary that you wish to complain about, Fifi?

    I’m offering you the opportunity to do so on this thread. I fully accept that it causes you agonies of the spirit when, for whatever reason … normally because you fail to answer on the original thread … the matter in question has to be carried forward to another one?

    Terrible, isn’t it? But unless you are prepared to defend yourself on this particular thread, I’m afraid there are several issues still outstanding.

    1. Habitual lying (self-admitted)
    2. Complete lack of any professional qualifications or employment whatsoever.
    3. Habitual fraudulent claims.
    4. Total inability to read beyond the first paragraph of a googled cite, and to understand the context and relevance.
    5. Pathetic refusal to believe that the C 1989 standard does not permit void variables.
    6. Total incomprehension when faced with the concept of “duck-typing.” A thing that cannot possibly exist in C.

    I am a fair and equitable man, Fifi. I don’t expect you to reply on this thread, basically because you don’t have a leg to stand on in any of those six instances.

    But I’m going to ask you to meet me half-way.

    Name three of those six that you don’t object to being carried forward to another thread.

    I promise you that I will leave the other three behind, as simple archaeological evidence that you are an ignorant buffoon.

  389. DrLoser says:

    You are, of course, entirely welcome to refute my claim that:

    [Fifi] is just a hopeless little pathetic liar and fraud without a leg to stand on.

    Peter Dolding is a very valuable member of your online community here, Robert.

    Protect him against my false accusations!

  390. DrLoser says:

    An interesting answer, however, Robert.

    Why, precisely, do you think that “nobody demanding proof from Donald Trump” is in any way whatsoever a good idea?

    Or even any sort of a defense whatsoever to anything at all?

    And if you don’t see it that way … what on earth was the point of your interjection?

  391. DrLoser says:

    No one demands proof from Trump. Why be such a pest here?

    Because, Robert, and unlike The Donald, you and I are both rational human beings who demand proof in the normal scientific way.

    Fifi, alas, does not.

  392. DrLoser says:

    Here’s an interesting little thought.

    Robert Pogson can justifiably, I think, claim to be a professional in the fields of practical nuclear physics, teaching (maths and science), and plausibly structural engineering.

    What precise field would you claim to be a “professional” in, oiaohm?

    Remember your claim. It’s a ludicrous claim, but still. You claim, with a straight face, that it is “in certain circumstances” permissible for a “professional” to lie.

    Tell us all, little one. Tell us. Does this apply to all professions? Or merely to a subset thereof?

    And once you’ve reached whichever conclusion is relevant to that question …

    Tell us why you think anybody in their right mind would ever once consider you to be a “professional?”

    And, for bonus points:

    In which particular field do you consider yourself, oiaohm, to be a professional?

  393. DrLoser wrote, “Obviously a single solitary cite to that effect is entirely beyond your almost supernatural powers of Googling”

    No one demands proof from Trump. Why be such a pest here?

  394. DrLoser says:

    The tests cases have happened against Facebook olderman and Facebook lost. That was attacks on Facebook attacking a professional lier being a politician. The law is 2010 the test cases are 2012 and 2013. Sorry laws are tested.

    Obviously a single solitary cite to that effect is entirely beyond your almost supernatural powers of Googling, Peter.

    Or, alternatively, you are just a hopeless little pathetic liar and fraud without a leg to stand on.

    Tell you what, me little bushwhacking maniac, how’s about you test your theory out on me?

    You know who I am. I know who, and indeed what, you are.

    It’s beyond a shadow of a doubt that I have posted “annoying comments” regarding:
    1. Your incessant habit of lying, to which you admit in part.
    2. Your total incompetence on any technical subject whatsoever.
    3. Your lack of any knowledge whatsoever on any linguistic matter you choose to pick — Ancient Greek, Anglo-Saxon, you name it.
    4. Your weirdo belief that your brain, owing to certain “genetic” abnormalities, can somehow control externalities via what, as I recall, you claimed were “disturbances in the microwave field” at certain specified frequencies.

    You can even include my “annoying posts” that compare you to a pathetic little creep in a red miniskirt and torn fish-net stockings who hangs around a lamp-post after dark in a small town in the outback, either for additional income or just because, you know, there’s nothing wrong with that. Many of my best friends hang around lamp-posts and prostitute themselves for small change to random passers-by.

    I mean, if that’s not going to annoy you, what will?

    Go ahead. Find a lawyer. Sue me. Because, apparently, Free Speech means nothing whatsoever to you, does it? Let me know the contact details for your lawyer, and I will freely co-operate with my own contact details.

    Which rather undermines your purported belief in Free Software, as in FLOSS, doesn’t it, my little brassy cheap thrill cozen?

  395. DrLoser says:

    Windows Server 2016 Technical Preview 3
    I see olderman does not have a gold partner or higher login. Yes as it states here the technical preview license forbids production usage. So correct CTP cannot be used in production usage.

    What fresh new gibberish is this, Fifi? The claim was that you were a lying fraudulent incompetent unprofessional waste of everybody’s time when you claimed that:

    …they get 2016 with oddities like ASP.NET 4.5 not working.

    Your cite has nothing to do with this claim, does it?

    Your cite does not substantiate this claim.

    As always, Fifi, you were merely being your own cuddly little red-miniskirted lamp-post dwelling self, weren’t you?

    * Lying
    * Fraudulent
    * Without a hope in hell of being considered even remotely professional.

    In short, a completely worthless source of incompetent vicarious googling.

  396. oiaohm says:

    Windows Core 2018 typo meant Windows Core 2008

  397. oiaohm says:

    Wanna hear a secret? ASP.NET 4.5 does work with 2016 CTP.
    Deaf Spy this statement is correct.

    https://azure.microsoft.com/en-us/marketplace/partners/microsoft/windowsservertechnicalpreview/
    I see olderman does not have a gold partner or higher login. Yes as it states here the technical preview license forbids production usage. So correct CTP cannot be used in production usage.

    The azure version of windows server 2016 is feature stripped. The Azure version of Windows Server 2016 exists because people who have Gold Partner level or higher registrations run into a particular problem. Some companies passed polices that all services has to be managed by docker. This means 2012 is no longer usable by them.

    Please note this is not the first time Microsoft has done a stripped down version of server before final release. When Microsoft first released Windows Core 2018 for production usage it was 12 months before the release of Windows Server 2018 for embedded usage by Gold and higher level partners. People don’t pay for the high level partner access without getting some perks.

    The July 15th, 2016 expire date of the CTP means its not usable in production.

    Basically 2 editions of Windows Sever 2016 exist at this stage because they have to. Some people make sites have noticed bigger customers asking for 2016 support for production deployment. They are not asking for the CTP version it because they are gold or higher and have access to the stripped back version for production usage. By the way the azure edition is that far cut back it does not even have ADS.

    Basically the CTP has all features and is not fully tested so not for production usage and the Azure addition only has the features that are full tested with the catch its only usable on the Azure servers but is for production.

    The CTP contains the draft license in it image. Because you are meant to read the draft license now and submit any complains/requests for modifications before the final release.

    Microsoft is not a idiot. Only release the license when the product is finally released could mean that some term makes the license unable to be used by Microsoft customers so not good for business. The reality with Windows Server is as soon as the tech previews start the draft editions of the final server license starts. So the claim that I have to wait until Microsoft fully releases an edition of Windows Server before talking about the licensing terms is wrong.

    Now is in fact the time to talk about Windows Server 2016 licensing terms while they still open for some debate at Microsoft. After release normally the terms are set in stone and we have to live with them until the next Windows Server release.

    DrLoser the real name limit in that law covers using fifi instead my handle as well. The reality its a crime todo that. USA deformation laws are based on UK deformation laws like most of the world. Calling people by names that are not theirs is illegal unless you have their consent. Implied consent does not hold. That right to assign someone a nick name you need to ask if the person approves of that nick name. I have never approved fifi.

    DrLoser please note Robert asked for your real name not for you to tell mine. Robert is the owner of this site. CA/USA/UK law means he does have the right to ask for it. If you don’t provide it (you don’t have to post it in the open you can email him with it) he can be forced to delete all your posts if he has been legally questioned about your actions.

    USA/CA/UK laws has the right to free speech does not have the right to anonymous speech.

    Because even the article acknowledges that the law is probably unenforceable.
    The tests cases have happened against Facebook olderman and Facebook lost. That was attacks on Facebook attacking a professional lier being a politician. The law is 2010 the test cases are 2012 and 2013. Sorry laws are tested.

  398. DrLoser says:

    On a matter of scientific curiosity …

    When you people google for “supporting links,” presumably using multi-syllabic terms that are far beyond your comprehension … you know, semantics and all (I regret, Fifi, that I have to cross-link to a different posting on this blog regarding semantics — it was just a bit of wholesomely inaccurate fun by Robert, as I recall) …

    Do you even bother to read past the first paragraph?

    It’s not an actual requirement as such, but upon occasion it can be most beneficial.

  399. DrLoser says:

    And, incidentally, where does the concept of “annoying messages” fit in with your idea of Free Speech, Robert?

    You know, Free Speech as in Free Software?

    Or are you just being a pathetic hypocrite here?

  400. DrLoser says:

    How lovely to see you step up in the defense of your lying fraudulent little toadie Fifi, Robert. Your loyalty is to be applauded.

    Now, down to the brass tacks here.

    You folks are sending annoying messages and your name isn’t DrLoser. Is it?

    No, my name isn’t DrLoser. As it happens, oiaohm’s real name is Peter Dolding. My name is well known — in fact, I have published it on this very site.

    Which pretty much demolishes that entirely irrelevant link you just cited:

    It’s no joke. Last Thursday, President Bush signed into law a prohibition on posting annoying Web messages or sending annoying e-mail messages without disclosing your true identity.

    Since my true identity is out in the open, this particular bit of “Big Government Interference” … something, Robert, that you normally rail against, but why let small details of conscience stop you? … does not apply.

    Not to mention the very obvious fact that your cite is pouring scorn on the whole enterprise:

    This ridiculous prohibition, which would likely imperil much of Usenet, is buried in the so-called Violence Against Women and Department of Justice Reauthorization Act.

    Try a little harder to defend Fifi, Robert.

    It’s difficult, I know. Defending a fraudulent self-confessed habitual liar is always going to be difficult.

    But I’m sure you have it in you to give it your best effort.

  401. olderman says:

    “See Create an e-annoyance, go to jail

    You folks are sending annoying messages and your name isn’t DrLoser. Is it?”

    Nice to see that you have finally taken an interest in this thread Robert Pogson. My question is, did you read the article, or did you just google something so that you could help out oiaohm? Because even the article acknowledges that the law is probably unenforceable.

    And while you are into checking into our liability, have you looked at relevant Canadian Law? Not just for us so called trolls, but for its implications for you as proprietor of this site, eh?

    And a more interesting question is, why would you wish to help someone who has trolled you on occasion?

  402. DrLoser wrote, “you would care to cite the relevant statute or case law for this assertion?”

    See Create an e-annoyance, go to jail

    You folks are sending annoying messages and your name isn’t DrLoser. Is it?

  403. DrLoser says:

    Yes crossing threads the way olderman and Drloser do falls under harassment and is illegal.

    Perhaps, oiaohm, you would care to cite the relevant statute or case law for this assertion?

    I’ll make it really, really easy for you. Pick anywhere in the world. Anywhere your little heart desires.

    You’re being fraudulent again, aren’t you, little one?

  404. DrLoser says:

    I have in the past admitted that I don’t always tell the truth. This will never stop me from posting. I said the same thing to DrLoser 6 years ago and you missed is and he was not paying attention.

    So, Fif, you admit that you have been lying for the last six years? Admirable consistency, if nothing else particularly worthy of admiration.

    Unless of course you are lying about having been lying for six years. It’s difficult to tell with habitual liars, isn’t it?

  405. Deaf Spy says:

    they get 2016 with oddities like ASP.NET 4.5 not working

    Liar and fraud.

    Wanna hear a secret? ASP.NET 4.5 does work with 2016 CTP. Other stupid ideas, lying fraud?

  406. olderman says:

    Nice summary of your latest spiel. Unfortunately, it doesnt change much. As far as server 2016 on azure is concerned, here is the URL to the only reference that comes up.

    https://azure.microsoft.com/en-us/marketplace/partners/microsoft/windowsservertechnicalpreview/

    And from that URL the following is clearly displayed.

    “By clicking the Create button, I acknowledge that this VHD contains a preview release and should strictly be used for testing purposes . The VHD won’t be serviced or supported for production use and the trial period expires on July 15th, 2016”

    And NOWHERE are the final and definitive terms for windows server 2016 licensing listed.

    Now you can break this by providing the URL to the page on the Azure web site that covers the “other” version of Windows Server 2016 that is supported in production.

    If you can not, or will not, O will take that as an admission that this was either another lie or the latest bit of technical incompetence of your own.

    Have a nice day!

  407. olderman says:

    “alderman so far you have not apologized for the deformation you have performed or the illegal harassment. The reality is asking me to play the truth for you olderman is go to jail. ”

    I am not alderman sir, and you are not innocent by any means of bullying. If you think that you have a case sir, then go for it. Unfortunately for you there is more than enough of your lies and nastiness in the public record of just this site in particular, to more than to have any complaint that you think that you might have laughed out of court.

    In short more lies from someone who is trying to talk his way out of admitting his lies.

  408. olderman says:

    Have a nice day.

  409. oiaohm says:

    0lderman the problem here is you are a committing crimes. Cyberbulling harassment is illegal in most countries.

    I have in the past admitted that I don’t always tell the truth. This will never stop me from posting. I said the same thing to DrLoser 6 years ago and you missed is and he was not paying attention.

    alderman so far you have not apologized for the deformation you have performed or the illegal harassment. The reality is asking me to play the truth for you olderman is go to jail.

    Personally attacking me will never push me away olderman.

    The reality is all these attacks on me illegal by olderman is to cover up this post where he screwed up completely. Sorry its olderman who cannot bare to be caught out lieing so will personal attack instead of accepting the fact he did not have his information in order.

    olderman again showing your incompetence. The docker section of Azure shows you are 2016 without technical preview. Yes Azure Marketplace. People using Visual Studio to make applications for the Azure Marketplace docker section that are Windows not Linux find out to their surprise they get 2016 with oddities like ASP.NET 4.5 not working.

    Basically olderman there are two copies of 2016 on Azure. The technical Preview and one branded Azure. The one branded Azure is marked for production usage of Windows Docker Containers. The Azure branded also appeared before Azure Market place started offering Docker Containers the Microsoft staff had something to offer to attempt to prevent Windows server application makers from pressuring their staff to make Linux versions.

    So a set of events have happened that are kinda odd olderman. The old of the Windows Server release after 2016 that we will have solid license details before the full server release is most likely zero. Yes 2016 is a major exception because has not happened with all the versions prior to 2016 either.

    DrLoser
    We’re talking about the desktop here. Buy license. Create container. Spin up VM on the desktop. (I recommend VMWare — lots of juicy Hellwig code to rip off!) Result — JOY!
    5 percent of cases you even in something like VMWare you activate hardware pass threw for performance reasons. So high performance virtual machines using GPU and the like for acceleration of functions.

    You solve kernel/driver issues by, well, choosing the right kernel and drivers. The “Unbearable Lightness of Instances” is neither here nor there.

    Live is not that simple DrLoser. Hosting and you can have two different makers versions of the same video edition video card. Result is X nvidia driver works on your system Y Nvidia is required for theirs.

    Why would someone put themselves through this hell. The difference in performance using Nvidia or FPGA or other acceleration tech can be a factor of 100+ times faster from using it.

    Containers and VM don’t rule out connecting and using real hardware with hardware particular instructions. The problem is once you do this you have opened the driver hell Pandora box back up. Thinking virtual machines and containers solve driver hell is very foolish. Both allow you to avoid it in 95 percent of cases. The 5 percent of cases where you need performance driver hell is not avoid able. Just to be really stupid like Windows in AWS Xen you can have horible cases where Windows in a virtual machine is faster than on bare metal of those this only happens on hosting locations using Xen, Vmware and other hyper-visors with compression.

    Also experiences with docker and multi location hosting tells you that for performance using a docker hosting image optimized to the location that you install a universal docker container into to get the best over all performance for the least amount of work. But each of those hosting images and locations has to be in alignment particularly when using solutions using hardware acceleration.

  410. olderman says:

    “Yes crossing threads the way olderman and Drloser do falls under harassment and is illegal. 90 percent of what trolls do is criminal offenses.”

    Now we have utter nonsense from an admitted liar. You just keep digging yourself in deeper oiaohm in your attempts to explain away your admission of being a liar. Soon you will have nobody giving you or your stream of nonsense even a second thought.

    I no longer do.

    Have a nice day.

  411. oiaohm says:

    The fastest way to find out if someone is a professional or not is have them think you are a lier. A professional should handle themselves a particular ways avoid deformation and harassment.

    Yes crossing threads the way olderman and Drloser do falls under harassment and is illegal. 90 percent of what trolls do is criminal offenses.

  412. oiaohm says:

    DrLoser you cannot tell my lies from my truths. The underwater radar thing that you saw Robert pull me up on was in fact mistake by Robert.

    There as been a recent documentary release of a female archaeologist working in Egypt searching by Sat radar. But the method she is using is not exactly new. Having enough computer power and sat data you are able to perform like a 1 pixel camera producing a high resolution image.
    Rules for the method
    1) target objects have to be stationary. Crashed aircraft matches this.
    2) Need access to a huge volume of sat radar data. 3 + months worth. So a sat radar detection had to be months after the crash. Please note the + goes to infinity.
    3) you need the processing power time todo it.
    The parties who will perform this is Treasure hunters, military and rare archaeologists. Of course Treasure hunters and military call the methods they use to perform it trade secrets so don’t talk about it.

    The military usage is making sure underwater paths for submarines have not become obstructed. Think it could be decades between when a sub or a ship physically passes along each route.

    DrLoser every time I tell the truth you attack me for it. The reality here 4 out of 5 times you call something I said a lie it is in fact the truth. Why should I bother being 100 percent truthful with you when you are going to call it a lie anyhow. C89:1990 is another one when you have have in fact attacked the truth DrLoser.

    Please note olderman has stopped replacing my handle DrLoser. You have no right under Professional conduct or legal requirements to replace someones name when you call them out for being a lier. So DrLoser you are repeated calling fifi a lier who as the right to sue you for this deformation.

    The rules for Deformation is not fair. Deformation make no allowance for how many lies the person has said in past. All a person has todo to win a Deformation case for someone calling them a lier is prove the example the person uses against them as truth. DrLoser I have tones of examples where you have done exactly that. In fact every time say that I am lieing in those cases you are lieing Drloser. Legally being an admitted lier means nothing.

    You lies render you an irrelevant and unwanted participant to conversation here and elsewhere because of your lies.

    Now you try to claim that professionals lie as a normal part of their job. But since you are an admitted liar, that is most likely also a lie.
    Thank for admitting that you are not a professional olderman. I provided documented example of fact so you did not have to take me at my word.

    Anyone who has had training at advanced diploma or up should have done a course on the legal covering deformation so should know better than to make these open claims..

    You see oiaohm, you lie so much you can be assumed to never to tell the truth. So the only reason we talk to you at at all from now on is to remind you of your being an admitted liar, and therefor to be dismissed without further comment.
    This falls under another legal offense called harassment/stalking.

    Basically olderman is totally not professional and as absolutely no problem breaking the laws.

  413. DrLoser says:

    Basically DrLoser you have formed a completely incorrect idea of how a professional has to behave. So when you strike a professional behaving how they are allowed you call them a fraud.

    Not really, Fifi. I can call you a fraud any time at all. It’s fun and instructive! Here I go again: You are a total fraud and a miserable creepy little liar.

    There, wasn’t that fun?

    Now, as to this other-worldly concept you have of “professionals behaving how they are allowed…”

    Let me swiftly disabuse you of that cretinous concept.

    Not all “professionals” belong to a chartered organization. But every single person who regards themself as a “professional” adheres to a code of conduct suitable to that profession. Without exception in fields related to science … and I would imagine that both of us can agree that Medical Trials are in some substantial way related to science … the code of conduct DOES NOT PERMIT YOU TO LIE.

    Simple as that, really.

    Of course, if you hang around in a red leather miniskirt and torn fish-net stockings under an ill-frequented lamp-post somewhere on the fringes of a small town in NSW, that would be different.

    In that case, you would indeed be a professional. Hoorah! In fact, you’d be a proud, yet tatty little member of the oldest profession in the world!

    And almost certainly the only profession whose basic code of conduct consists of lying to their clients.

    Congratulations on finally coming out with the truth, Peter. When I started to call you “Fifi,” I considered the idea of you being, basically, a prostitute as a mere jeu d’esprit.

    Apparently I hit on a fundamental truth.

  414. DrLoser says:

    What did I tell you about googling irrelevant links, Fifi? You weren’t listening at all, were you? It’s not the mark of a professional.

    DrLoser heck science professionals in the medical field are documented quite a lot making up false results. Right up to generating data for trials that never happened because it cheaper.

    I think you’d seriously have to consider what you mean by “professional” there, Fifi. Because, you know what? That doesn’t sound like “science” at all.

    In fact, “generating data for trials that never happened” sounds pretty much like blatant lying to me.

    Lying has no part in scientific trials. Lying, in these particular cases, is nothing more than abasing your supposed “profession” to marketroids and sales geeks.

    You want to do that, Fifi? Feel free. You clearly don’t have a single professional bone in your body.

    You’re not even a professional liar. To be that, you would need qualifications.

    You’re just a pathetic amateur. But you’re still an habitual liar.

  415. olderman says:

    “The reality not telling the complete truth is normal part of a professional job in many fields.”

    So now oiaohm the liar continues to lie to cover up his lies…

    Thats right you are oiaohm, and you are an admitted liar.

    You lies render you an irrelevant and unwanted participant to conversation here and elsewhere because of your lies. Now you try to claim that professionals lie as a normal part of their job. But since you are an admitted liar, that is most likely also a lie.

    You see oiaohm, you lie so much you can be assumed to never to tell the truth. So the only reason we talk to you at at all from now on is to remind you of your being an admitted liar, and therefor to be dismissed without further comment.

    Have a nice Day!

  416. oiaohm says:

    http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1182327/
    DrLoser heck science professionals in the medical field are documented quite a lot making up false results. Right up to generating data for trials that never happened because it cheaper.

    The reality not telling the complete truth is normal part of a professional job in many fields.

  417. oiaohm says:

    DrLoser
    Professionals do not lie, Fifi. At least, not professionals involved in the sciences and related endeavours. By lying you are practically breaking the equivalent of the Hippocratic Oath.
    Again I am not FIFI. Sorry Professionals in the sciences do lie. Protecting patents in process of application and trade secrets would be very hard without means to lie. Hippocratic Oath only applies to Medical.
    https://en.wikipedia.org/wiki/Hippocratic_Oath

    Please this shows DrLosers level of incompetence. You have made a completely fatal mistake claiming Professionals cannot lie. That I am answering you with Google garbage is party that I don’t respect you at all DrLoser.

    This is why you are in so much trouble with me. I am truly a Professional.

    The fact you are not using my correct handle and thinks that sciences has equivalent of the Hippocratic Oath what is completely bogus. There is a reason why science says all experiments have to be repeatable. Nothing written by another scientist should be presumed to be fact until validated because scientists are allowed to lie.

    The history of scientific documented deception go back to Leonardo da Vinci.

    Sorry DrLoser you lost this arguement from the point you decided not to use my correct handle. Now no matter the professional we all also do make a percentage of human error. Of course you over look where I have pointed out errors in Robert as well.

    Basically DrLoser you have formed a completely incorrect idea of how a professional has to behave. So when you strike a professional behaving how they are allowed you call them a fraud.

  418. DrLoser says:

    Even that I have not been 100 percent truthful I have stuck to professionalism.

    You’re not a professional, Fifi. You’re a rank amateur with a side-line in googling for largely irrelevant links. Over the years you’ve been proven wrong on practically everything you’ve said. Even Robert has chipped in to point out that, for example, your knowledge of the efficacy of radar underwater is essentially zero.

    Professionals do not lie, Fifi. At least, not professionals involved in the sciences and related endeavours. By lying you are practically breaking the equivalent of the Hippocratic Oath.

    Professionalism allows for lieing by the way to probe if a person knows what they are talking about or not.

    Or, much more plausibly in your case, lying is an attempt to cover up the fact that you are not a professional and that you have little or no clue what you’re talking about.

    I mean, either proposition is sound, on the face of it.

    But the weight of evidence in your case is in favour of my interpretation, Fifi.

  419. oiaohm says:

    Basically DrLoser, DeafSpy and olderman have been standing in a glass house throwing stones.

    Reality if you want to go after people you have to do it with professionalism.

    Have you never notices that I normally don’t mess with peoples handles this is because I knew as soon as you do that you have lost all right to challenge them.

    Even that I have not been 100 percent truthful I have stuck to professionalism. Professionalism allows for lieing by the way to probe if a person knows what they are talking about or not. So being a self-confessed lier does not mean I am not a Professional.

    Nothing I have admitted to is outside what a Professional is allowed todo. Just a Professional not playing fair.

  420. oiaohm says:

    TMR idiots have never cared about being legal.

  421. oiaohm says:

    DeafSpy have not not been paying attention. FIFI is not my handle it has never been my handle. If you go and read LHB you will find FIFI is a person who attacks oiaohm not oiaohm. The reality is you need to stop that as well.

    Sorry you say its not fine to lie. Its about time you hold yourselves to that standard. Using the wrong name for a person. Particular a handle that in fact owns to a completely different person is not on in any way shape or form.

  422. DeafSpy says:

    I warned you a long time ago olderman that I don’t play fair. Lies have allowed me to map out the sites trolls are using because the repeat the miss truth

    Sweet, Fifi. Not only are you a fraud, but you are also a self-admitted liar

    Hey, Pogson, do you feel proud to be with such a miserable creature on the same side of the fence? 🙂

  423. oiaohm says:

    olderman sorry you muddied the waters yourself.
    More lies. You have been caught and now you try to talk yourself out of it and try to muddy the waters with nonsense words like “deformation”.
    Sorry its not more lies.

    The reality if you wanted to attack me you should not have been a idiot and used someone elses handle.

    The reality is what you have been doing is a criminal offense olderman. The level of deception I have used is not a criminal offense.

    So you are a pot calling the kettle black. So you have no standing to attack me at all olderman. Next time you think about calling someone names wake up it a very fast way to find yourself in court partially if that name owns to someone else.

    I have no reason to show anyone performing deformation any respect.

    You asked for me to tell the truth. The worst nightmare for you olderman is when I do. There are so many things you say over and over again about people that are bogus is not funny.

  424. olderman says:

    “Not at all. I want to draw you out so I could in fact tell you to stop being performing deformation.”

    More lies. You have been caught and now you try to talk yourself out of it and try to muddy the waters with nonsense words like “deformation”.

    “I warned you a long time ago olderman that I don’t play fair. Lies have allowed me to map out the sites trolls are using because the repeat the miss truth. The funny part is it is normally a truth a troll calls wrong.”

    What is even funnier is that no matter how you attempt to twist and walk back your words, you just make yourself look, to anyone who has followed y0ur posts, like a tinfoil hat wearing kook who apparently thinks he can say what he wants and the declare victory, even when shown to be off the wall.

    Have a nice day!

  425. oiaohm says:

    Only an idiot thinks that he is going to get anywhere by lying about the topics he posts on and then by bragging about his lies to those he lies to.
    Not at all. I want to draw you out so I could in fact tell you to stop being performing deformation.

    I warned you a long time ago olderman that I don’t play fair. Lies have allowed me to map out the sites trolls are using because the repeat the miss truth. The funny part is it is normally a truth a troll calls wrong.

  426. oiaohm says:

    DrLoser besides I have answer point in many threads and you keep on crossing threads to keep the point live instead of responding on the thread it was from. This is also very unprofessional behavior and it way you care calling me out for fraud for something I have explained in other threads so making a complete goose out of yourself.

  427. oiaohm says:

    Your Problem is Lil’Hammie who calls himself oiaohm
    This is wrong. So far wrong it not funny.

    You really need to go and read LHB carefully olderman. Lil’Hammie use to attack oiaohm. You got rid of my competition by defaming him out of existence.

    olderman reality here Lil’Hammie has every right to sue you out of existence if she ever finds you real address.

    The is no excuse for a professional todo what you have done olderman and there is no way to justify it. All you are doing is digging a deep and deep hole for yourself.

    DrLoser note that olderman has not stated that you are correct on you c89:1990 claim wake up you are wrong. It does in fact state void support and it was part of K&R compatibility in it. To be correct posix C compatibility. K&R compilers very old by the time Ansi and the Posix standard turned up. Early standards tried to be backwards compatible to hell.

    While you call me FIFI don’t expect any links. Go back and read the blogs notice that FIFI is a user who use to also attack oiaohm. Again defaming a name that use to attack oiaohm out of existence.

    Like it or not olderman and drloser both of your lack unprofensionalism is disrupting debates and reducing the number of people who can take part in debates. I would not mind going head to head with fifi and Lil’Hammie again at least that had basic professionalism of not modifying a persons handle.

  428. DrLoser says:

    And Olderman you have just proven youself as a incompetent fud backer because C89:1990 in fact supports VOID vars and DrLoser is too much of a Idiot to know this.

    No it does not.

    Just because you glory in habitually telling lies, Fifi, does not mean that you are not going to get called out on your lies every time you lie. This is a lie. I am calling you out as a liar.

    Absolutely nothing in the C89:1990 standard “supports” void variables.

    You are a lying fraud.

  429. olderman says:

    “Every human tells lies olderman. Only a idiot says they don’t say lies. So being a self confessed lier is nothing. ”

    Only an idiot thinks that he is going to get anywhere by lying about the topics he posts on and then by bragging about his lies to those he lies to. Your Problem is Lil’Hammie who calls himself oiaohm, that no matter how you try to divert your lies, they remain lies. And your continuing insistance in engaging in the behavior renders ANYTHING that you have to say irrelevant in this or any debate. You and your evidence will simply not be believed and you will be dismissed out of hand.

    So in the end, Lil’Hammie who calls himself oiaohm, how are your lies working for you? Have your lies garnered you respect at the sites were you post as yourself. Or are you just derided and ultimately ignored?

    Have a nice day.

  430. oiaohm says:

    Every human tells lies olderman. Only a idiot says they don’t say lies. So being a self confessed lier is nothing. Only a complete idiot as well attempts to get somewhere by attempt to make out that the other person is a lier.

    The words of a self confessed liar are meaningless.
    Sorry you asked for me to be truthful. You should have understood that admitting to not tell the truth all the time is part of this.

    There is one thing olderman there is absolutely no excuse for provable unprofessional behavior by a professional. Sorry the way you have been attacking me over and over again has been proving you are totally unprofessional.

    The reality you are so far unprofessional that you want to make out your opposing side is telling liers instead of presenting documentation.

    Troll behavior is to attack other person credibility instead of presenting documentation. Sorry olderman you want to claim to be a professional but then you go and do everything a professional should never do.

  431. olderman says:

    “Because using my correct name is professional respect you should show everyone and you are not professional.”

    The words of a self confessed liar are meaningless.

    Have a nice Day…

  432. oiaohm says:

    olderman again I am not Lil’Hammie.

    Its not that I am being hit by my own words really. The reality is you are such a unprofessional person that when person complains about because force to be respond to a fraud name you think you have something.

    You have earned the names that the good Doctor and I have bestowed on you.
    Sorry IDIOT those names you have assigned are in fact people who were in the Linux Hates Blog. Reality you have got so much in the habit of fraud that you have forgot that both start with DrLoser and you say oiaohm must be fifi or Lil’Hammie without any correct evidence.

    .You lie because you want to want to win your argument no matter what.
    Not at all. In fact in this case olderman you are stacking lie on top of lie to justify using the wrong name. Because using my correct name is professional respect you should show everyone and you are not professional.

  433. olderman says:

    “The reality here is DrLoser and olderman are both being liars by calling me someone who I am not. So by responding to them I have to be a lair.”

    Now Lil’Hammie is getting funny. What’sa matter Lil Hammie, can’t handle being hit with your own words. You have earned the names that the good Doctor and I have bestowed on you. You lie because you want to want to win your argument no matter what. So you pile lie on lie and attempt to evade responsibility for your lies.

    But it is too late, we have your number and others have as well. You stand exposed as someone who will lie to win, and whose words should not be believed ever.

    Liar…and fool!

  434. oiaohm says:

    The reality here is DrLoser and olderman are both being liars by calling me someone who I am not. So by responding to them I have to be a lair.

    And of course Olderman and DrLoser are too much of idiots to work that out from the past bit of text so took it the way their ego wanted.

  435. oiaohm says:

    And olderman you are constantly doing false representation calling me someone who I am not.

  436. oiaohm says:

    olderman I will repeat I am not Lil’Hammie.

    So You are demarding that I say bull crap to respond to you because you cannot get my handle correct. Since you are saying I cannot be a liar in any form I will not respond to you any more until you use my correct handle. Basically it you and DrLoser who are demanding I lie.

  437. olderman says:

    “Do you know that olderman that Lil’Hammie is not in fact me. You are aways wanting me to answer a handle that was not mine. So you have wanted me to be a lair. I have been exactly what you have been requesting of me.”

    Once again I direct you to your own words…

    “Part of the reason I believe could say what ever bull crap I liked to people like DrLoser is the fact they go around making arguements without any homework so deserve to be responded to in kind.”

    You stand by your own words as a liar. You can try to explain it away but the admission of lies remain. You are a fool Lil’Hammie (for that is who you are as far as I am concerned). You lie to our faces, tell us that you lie to our faces, and expect to be taken seriously enough to be debated. It doesn’t work that way. and it hasn’t worked that way. I have watched as you have been laughed at on other sites. THey have your number and so do I.

    Liar.

  438. oiaohm says:

    “Part of the reason I believe could say what ever bull crap I liked to people like DrLoser is the fact they go around making arguements without any homework so deserve to be responded to in kind.”
    This block of text was particular targeted at DrLoser to stroke is over inflated ego.

    And as soon as DrLoser gets over inflated ego he goes around calling everyone fraud when he has his facts incorrect.

    olderman I have never said that I play fair. Like me teaching exploit guy and other people at TMR about the fact greese monkey could block out from seeing particular users posts.

    Due to trolls being copycats without original ideas they will copy hazardous ideas and blow apart their own communities.

  439. oiaohm says:

    Do you know that olderman that Lil’Hammie is not in fact me. You are aways wanting me to answer a handle that was not mine. So you have wanted me to be a lair. I have been exactly what you have been requesting of me.

    And Olderman you have just proven youself as a incompetent fud backer because C89:1990 in fact supports VOID vars and DrLoser is too much of a Idiot to know this. You should have told him to pull his head in on this point right now. Unless you don’t have the Unix experience you have claimed.

    Reality is olderman is a idiot who comes in and backs DrLosers screw ups all the time and never learns from his mistakes.

  440. DrLoser says:

    Sorry olderman I have many examples of you spreading FUD.

    Whilst we’re at it, little ninny, how’s about actually citing a single example of olderman spreading “Fear, Uncertainty, and Doubt.”

    Let alone “many”.

    You don’t have one, do you? Senator Joe McCarthy was actually more honest than you are.

    Fraud.

  441. olderman says:

    “Nor is it against the spirit of discussion here, as far as I can see.”

    AH, my dear Doctor,you do not understand.

    Lil’Hammie thinks that he can make it up as he goes, even to the face of anyone he “debates” with, whenever he wishes, all in the service of whatever his cause may be at the moment.

    But what he does not understand is that once the cat is out of the bag by his own admission, those he targets will stop debating and stop getting irritated by his high handed name calling, and just ignore him.

    After all, why debate anyone who admits that he will just lie to you no matter what you say.

    Have a nice day Lil’Hammie, self admitted liar, and fool.

  442. olderman says:

    Lets have that quote again…

    “Part of the reason I believe could say what ever bull crap I liked to people like DrLoser is the fact they go around making arguements without any homework so deserve to be responded to in kind.”

    So now you justify your lies by lying about others.
    Nice try but no cigar.

    Have nice day Liar…

  443. DrLoser says:

    Speaking of “crossing State Lines,” Fifi, I hereby challenge you once more.

    One single implementation of the C89 or C90 standard please.

    One single Standards compliant implementation that does not throw up a compiler error when you try to define a variable as void.

    Just one.

    Fraud.

  444. DrLoser says:

    olderman the troll intentionally crossing threads.

    Weird way to accuse somebody of being a “troll” as far as I can see. Apparently, Fifi, you have run out of even your own simplistic attempts to deny the obvious fact that olderman is, not merely not a troll, but is actually far more proficient on any subject whatsoever than you are.

    As trolls go, then, at least a troll you should listen to. Feel free to define your own microwave frequency, tin hat, preferred denier for torn fishnet stockings, and other suitable paraphernalia.

    In Minnessota, “intentionally crossing the road against red lights” — you may have knowledge of red lights, Fifi, you appear to spend most of your spare time in those localities — is illegal. It’s called “jay-walking.”

    You can accuse olderman of “jay-walking” on this site if you wish, Fifi, but I think you’ll find it’s not actually illegal.

    Nor is it against the spirit of discussion here, as far as I can see.

  445. oiaohm says:

    Besides DrLoser says garbage olderman and you never one post a message that he is saying crap. The reality here is olderman is 100 percent discrimination based so should never be given any job of authority. Sorry the fact that you single me out says that you are not as professional as you attempt to claim olderman.

  446. oiaohm says:

    olderman the troll intentionally crossing threads. I have never said that I would not lie to troll bastards like you olderman.

    Sorry olderman I have many examples of you spreading FUD. So you are a liar. So you are just the pot calling the kettle black.

    This time around you did not have your facts in order and this is majority of the cases when you have attacked me in the past olderman. When you lose you cross threads because you don’t want to admit you are a incompetent idiot.

  447. olderman says:

    “olderman again showing your incompetence. ..”

    And I quote from one of your own posts…

    “Part of the reason I believe could say what ever bull crap I liked to people like DrLoser is the fact they go around making arguements without any homework so deserve to be responded to in kind.”

    Have nice day Liar…

  448. oiaohm says:

    olderman again showing your incompetence. The docker section of Azure shows you are 2016 without technical preview. Yes Azure Marketplace. People using Visual Studio to make applications for the Azure Marketplace docker section that are Windows not Linux find out to their surprise they get 2016 with oddities like ASP.NET 4.5 not working.

    Basically olderman there are two copies of 2016 on Azure. The technical Preview and one branded Azure. The one branded Azure is marked for production usage of Windows Docker Containers. The Azure branded also appeared before Azure Market place started offering Docker Containers the Microsoft staff had something to offer to attempt to prevent Windows server application makers from pressuring their staff to make Linux versions.

    So a set of events have happened that are kinda odd olderman. The old of the Windows Server release after 2016 that we will have solid license details before the full server release is most likely zero. Yes 2016 is a major exception because has not happened with all the versions prior to 2016 either.

    DrLoser
    We’re talking about the desktop here. Buy license. Create container. Spin up VM on the desktop. (I recommend VMWare — lots of juicy Hellwig code to rip off!) Result — JOY!
    5 percent of cases you even in something like VMWare you activate hardware pass threw for performance reasons. So high performance virtual machines using GPU and the like for acceleration of functions.

    You solve kernel/driver issues by, well, choosing the right kernel and drivers. The “Unbearable Lightness of Instances” is neither here nor there.

    Live is not that simple DrLoser. Hosting and you can have two different makers versions of the same video edition video card. Result is X nvidia driver works on your system Y Nvidia is required for theirs.

    Why would someone put themselves through this hell. The difference in performance using Nvidia or FPGA or other acceleration tech can be a factor of 100+ times faster from using it.

    Containers and VM don’t rule out connecting and using real hardware with hardware particular instructions. The problem is once you do this you have opened the driver hell Pandora box back up. Thinking virtual machines and containers solve driver hell is very foolish. Both allow you to avoid it in 95 percent of cases. The 5 percent of cases where you need performance driver hell is not avoid able. Just to be really stupid like Windows in AWS Xen you can have horible cases where Windows in a virtual machine is faster than on bare metal of those this only happens on hosting locations using Xen, Vmware and other hyper-visors with compression.

    Also experiences with docker and multi location hosting tells you that for performance using a docker hosting image optimized to the location that you install a universal docker container into to get the best over all performance for the least amount of work. But each of those hosting images and locations has to be in alignment particularly when using solutions using hardware acceleration.

  449. DrLoser says:

    And it’s worth quoting this:

    If you make a container on Windows, or any OS for that matter, you do not copy the OS. You just create a clean, isolated environment that runs on top of it. A very nice and clean way to avoid library dependency hell for legacy Windows app and for Linux apps.

    We’re talking about the desktop here. Buy license. Create container. Spin up VM on the desktop. (I recommend VMWare — lots of juicy Hellwig code to rip off!) Result — JOY!

    Or, if not, spin VM down. Do something else with the license. After all, if you’re licensed, you’re licensed.

    I am unaware of any Microsoft EULA that forbids one from using a licensed Microsoft product in any way, shape or form on my personal desktop.

    Naturally, I expect a cascade of disagreement on this point.

  450. DrLoser says:

    Combining X, GPL, chroots, etc. I just don’t see any need for containers like this in my operation.

    It isn’t even obvious that you need a chroot, Robert.

    Clearly you don’t need it for security purposes. Therefore I assume (and am open to correction) that you need it to support a different configuration of apps and possibly even libraries and, who knows, a different version of the Debian/Linux/Gnu kernel.

    Thing is, none of that is security related, unless you can explain otherwise.

    One big thing about Containers and similar solutions — and there is no reason for you to need them, nor is there (as is always the way) any reason at all for you to impose their absence on others who have a genuine need — is that they give you that theoretical sandboxing security.

    Whether or not it works is another matter.

  451. DrLoser says:

    Basically Containers don’t solve Kernel/Driver hell issues. VM instances are not resources light.

    Neither does the Tooth Fairy, Fifi. Nor would electing a Pope with purple skin. I think you might just be aiming your formidable leather miniskirted artillery at the wrong target here.

    You solve kernel/driver issues by, well, choosing the right kernel and drivers. The “Unbearable Lightness of Instances” is neither here nor there.

    If you will allow me this single bleeding obvious observation — Containers are not supposed to do that. Containers are completely orthogonal to “driver hell”, whatever that might be. (Never seen it myself, so I cannot comment.)

    Remind me. Did you have a basic point here, or was it just your usual random blather?

  452. olderman says:

    “The License terms for the usage of Windows Server 2016 on Azure are already known. Why Windows Server 2016 has been on offer for production docker on Azure since 5 of May 2015.”

    Ah, so we have found Microsofts offering to host windows server 2016 technical preview on Azure for its customers, have we Lil’Hammie…

    The fact that Microsoft offers terms to run the TECHNICAL PREVIEW (as in non production preview) of server 2016 on azure (like any virtual machine) does not tell you anything official and definitive about the final terms for licensing Windows server Server 2016 itself, nor does it provide the final and definitive terms for running containerized applications on top of the windows Server 2016 host. The final and definitive terms for licensing windows server 2016 and for running containerized applications on linux will only become finalized when Server 2016 is released.

  453. oiaohm wrote, “every service under systemd or openrc is placed in a container”

    OK, as long as they stay out of my way. Perhaps they improve security a bit too. That’s certainly easier than having to build a chroot for every sensitive application running on a server.

  454. oiaohm says:

    Robert Pogson please remember systemd and openrc both use containers for process tracking. xdg-app is also look at using containers for Desktop applications.

    Containers are slowly replacing where we use to use Chroots as well.

    Basically I would not say you would not run Containers some point in the future as it may end up simpler than setting up chroots.

    Something to remember Deaf Spy every service under systemd or openrc is placed in a container. Ok it not a docker container but it still a container under Linux. Properly designed containers should handle 95% of all services without working around and 100 percent with work around. Yes it the 5 percent where all the headaches with containers is.

  455. Deaf Spy wrote, “You may find containers a great tool for your Beast”.

    I use a couple of chroots, one for The Little Woman’s thin client which is 32-bit and another for a print server which does not have a 64-bit driver. Unfortunately her remodelled desktop died again. It has intermittency of some kind. Damned nuisance figuring that out… So, the old thin client is back for a time, otherwise Beast would not need such stuff. The print server is on an Atom somewhere else.

    Combining X, GPL, chroots, etc. I just don’t see any need for containers like this in my operation. I only run a virtual machine occasionally for testing and the chroot for the thin client. I guess if I had a more diverse operation I might see a need for containers.

  456. oiaohm says:

    Imagine a Docker container based on Debian Whatever, on which you install Postgre. You cannot use this container on any other Linux for pure technical reasons. (Well, perhaps you may be able to get it running, if you go through needle’s ears, fire traps and alligator pits.)
    Deaf Spy This shows you have not used Docker under Linux and spreading bull shit and unable to give the correct example.

    Since each container in docker contains it own runtime the only overlap point is kernel.

    Its not needles in ears or fire traps or alligator pits. Issue is if you use something in your container that happens to depend on kernel memory settings or driver settings being set exactly right cause issue.

    So a fedora/Ubuntu/Debian/… made container on any other distribution is fine 95 percent+ of the time. Its the 5 percent where the trouble comes in. The 5 percent could be a different kernel driver version of Nvidia for example because your container was using opencl/cuda/directx compute. Now Windows Containers will not be magically safe from these issues.

    Deafspy here is the valid example
    Postgresql stock does not use opencl/cuda. Postgresql customized for GPU acceleration uses opencl/cuda can be placed in containers. Postgresql stock has no trouble contained up running on any Linux Distrobution at worst performance not exactly right due to buffer and memory block size settings and the like being different. Now the opencl/cuda one is going to have issues if video card driver in kernel does not line up. Yes as long as all the nvidia gpu using containers on a single Linux host are on the same Nvidia version everything is ok for them using cuda acceleration. Remember every Nvidia driver version has different bugs. Can you now issue the dragon of containers.

    Basically there are valid examples of Linux docker containers lacking portability but those portability issues are not Distribution linked but kernel feature and driver linked. Nothing will make Windows magically able to avoid all of these issues unless it comes with one hell of a performance cost at times.

    People have placed orcale db in docker instances
    https://technology.amis.nl/2015/03/22/next-step-with-docker-create-image-for-oracle-database-12c-using-puppet/ So the idea of not putting a heavy database in a container is wrong. Containers have very light overhead.

    Us Linux users have been using docker and containers for longer we know where the teeth are. Of course Microsoft might avoid the Linux Docker teeth by not allowing containers to fully exploit provided hardware.

    If, however, the license is for a single device, well, then you can run it either on the host, or in a single container, but not on both.
    Lets play this example out using redhat vs Windows. Both you and client only have a single device license. Yes you and client are independent entities.

    Redhat support deregistration and transfer. So my virtual machine if it RHEL you go in run the deregistration then package up send to client. Deregistered version of RHEL will run just will not update. If they client applies their key the instance you sent across starts updating and working exactly the same as it did for you. Now if they need to send a image back to you they do the same thing of deregistering and you register it when you get it back. This is also advantage of active instance licensing since hardware change your end on what the License is being used on will not raise any issues under RHEL licenses.

    Yes RHEL is one of the most restrictive Linux Licenses.

    Windows deregistered is not allowed be transfered. Now if Microsoft changes this with 2016 it would be nice but the draft version of the license still does not allow this. Also Microsoft Server does not like hardware configuration changes too much. Windows Licensing is a lot more restrictive.

    Deaf Spy containers and VM instances have different problems.

    Basically Containers don’t solve Kernel/Driver hell issues. VM instances are not resources light.

    Even Oracle DB supports deregistration by one party then registration by another.

    You just create a clean, isolated environment that runs on top of it.

    No matter how much you try the environment running on top of a kernel is not 100 percent isolated from it. Same with a kernel running on top of a hyper-visor. Every layer brings a bugs.

  457. Deaf Spy says:

    I see no issue. Imagine you purchase a single license for a program, which let’s you run it on any number of devices you own. That means you have no issue to run it on as many containers as you wish. If, however, the license is for a single device, well, then you can run it either on the host, or in a single container, but not on both.

    Simple as that. No problem even with the EULA or whatever…

    If you make a container on Windows, or any OS for that matter, you do not copy the OS. You just create a clean, isolated environment that runs on top of it. A very nice and clean way to avoid library dependency hell for legacy Windows app and for Linux apps.

    You may find containers a great tool for your Beast, which now has the unfortunate fate to be a db server, a web server, a personal computer, a terminal server and God only knows what other role.

  458. Deaf Spy wrote, of containerization making copies, “No, it is not.”

    Spoon, a container outfit, writes, “Spoon does not modify the licensing behavior of any applications running virtualized or within a container. Running on Spoon is identical to running on a regular PC, or running on virtual hardware such as Virtual PC or VMware. And Spoon runs on a single instance of a base operating system.”

    Compare that with M$’s EULA which usually states, “you may not:
    (i) use or virtualize features of the software separately;
    (v) use the software as server software, for commercial hosting, make the software available for simultaneous use by multiple users over a network, install the software on a server and allow users to access it remotely, or install the software on a device for use only by remote users;”

    Now, about containing SQL server or M$’s office suite or …

    The plain reading of the EULA seems to disallow containers containing any of M$’s software. I don’t see many applications on TOOS that don’t use some of M$’s stuff. It’s a tar-pit. Why waste time thinking about it? Use GNU/Linux and be free of the tar.

  459. Deaf Spy says:

    It’s still a copy.

    No, it is not.

    It is a superset.

  460. dougman quoth, “Taken together, Red Hat Enterprise Linux systems provided an annual TCO savings of 34% over Microsoft Windows.”

    Yep. Imagine the savings with Debian GNU/Linux. That’s one of the main reasons I use Debian’s stuff. It’s easy to maintain and doesn’t require M$ or Red Hat to keep us running.

  461. Deaf Spy wrote, “You do not give someone a container just like that. You deploy it as a part of your system.”

    It’s still a copy. M$ has gone after people just for allowing remote connections, not even a copy…

  462. Deaf Spy says:

    You may not legally distribute it without permission.

    This is irrelevant, Pogson.

    Btw, please do not listen to Fifi and Dougie, both are too incompetent on the subject. Any subject.

    Containers, Pogson, are not intended to be distributed, just like you distribute CDs. Containers serve a major purpose – facilitate deployment of pre-configured environments. Environments that build on top of other environments. Simple as that.

    Imagine a Docker container based on Debian Whatever, on which you install Postgre. You cannot use this container on any other Linux for pure technical reasons. (Well, perhaps you may be able to get it running, if you go through needle’s ears, fire traps and alligator pits.)

    You do not give someone a container just like that. You deploy it as a part of your system.

  463. dougman says:

    Win-Dohs server licensing costs a lot of money. What idiot uses Win-Dohs for servers?

    When you consider stability, security, performance and lower hardware requirements with Linux, you are APT to save yourself a huge expense.

    “Based on expenses measured per year per user, the study recorded significant annual savings for Red Hat Enterprise Linux versus Windows in three cost categories: server infrastructure costs (29% lower), IT staffing costs (41% lower), and costs from lost user productivity (64% lower). Taken together, Red Hat Enterprise Linux systems provided an annual TCO savings of 34% over Microsoft Windows.”

    https://www.redhat.com/en/about/blog/how-red-hat-enterprise-linux-trims-total-cost-of-ownership-in-comparison-to-windows-server

  464. oiaohm says:

    Lil’Hammie is full of crap. The reality is that nothing official is known about license terms for windows 2016, period.
    olderman is the one full of crap.

    The License terms for the usage of Windows Server 2016 on Azure are already known. Why Windows Server 2016 has been on offer for production docker on Azure since 5 of May 2015.

    So a good section of the Windows Server 2016 on site license design is already set in stone unless for some mad reason Microsoft want to make Azure Windows 2016 have different license to on site Windows 2016 and risk regulator trouble. So at least 80 percent of the draft license for on-site usage of Windows 2016 is not changeable without legal risk to Microsoft.

    Sorry olderman your incompetence is showing through there are full official license terms one form of Windows 2016(being the Azure version) this gives as part official terms on the rest.

  465. olderman says:

    “The reality here is docker on Windows 2016 will make Windows in the cloud even more restrictive.”

    Lil’Hammie is full of crap. The reality is that nothing official is known about license terms for windows 2016, period.

    Have a nice day.

  466. oiaohm says:

    Really the key point was that ASP.NET 5.0 does install on Ubuntu from Visual Studio. Now this means its not the usage of ASP.Net that mandates usage of Windows any more. Its the database selection and other hangers on.

    Of course the fact that ASP.NET 5.0 no longer mandates Windows means that ASP.NET web developers also have to get use to supporting more than SQL Server as a database or be restricting their client deployment options.

  467. oiaohm says:

    olderman and Deaf Spy boy are you both incompetent.

    This, Fifi, you don’t know. You don’t know it because information about what licenses for containers will be required is not published yet. You just speculate. As usual. Fraud.
    You have the draft of the 2016 Windows License DeafSpy. Its in the technical preview. Its also covered in the Microsoft containers 101 video you did not watch.

    Docker deployment containers on Windows are different to VM images.

    Now, tell me, apart from googling a few blogs, how many containers have you created in Windows 2016? No, don’t, tell me, I know. Exactly zero.
    This is another lie I have created and deployed 12 on Asure as testing for different things as well as another 20 locally. And I can tell you that 2016 on Asure behaved differently to 2016 locally. Those are just product benching. None are still left in place.

    So fairly much deformation. You can 30 dollars a month if you like to use 2016 in Asure right now for docker.

    The licensing around docker is already formalized docker containers are being treated exactly like Application+runtime time. No OS Kernel included.

    Anyone who has been working in the cloud over the last 5 years has noticed the change. 5 years ago you up load a Windows VM image to a cloud services provider get almost no questions. Do that today and you will be questioned and more often than not demanded to use their Windows Images so they know they are legally licensed.

    The reality here is docker on Windows 2016 will make Windows in the cloud even more restrictive. If you are wanting to be able to tweek driver and core OS settings and be in the cloud you better get to know non Windows solutions.

    Well, that’s a pretty convincing cite for the existence of void variables in K&R C, Fifi.
    Sorry that DrLoser you getting the answer that I have given you a link before and I am not crossing the thread. Deafspy had also been given the link as well on a different thread. So I did not give the link again. Please note DeafSpy called me Fifi as well so by doing this you lose the right that I will be coming forwards with most useful links. Also calling me Fifi makes me more likely to use blog instead of correct references.

    You want me to stop using blogs all the time stop calling me FIFI.

  468. DrLoser says:

    Here’s a little poser for you, Fifi. Let’s ignore void variables in C for a moment, and simply consider void pointers.

    How do you suppose the C compiler can support duck-typing with void pointers?

    Or, for that matter, the C runtime?

  469. DrLoser says:

    Deaf Spy void variables existed in K&R C. Like it or not.

    Questions about Server Core

    Well, that’s a pretty convincing cite for the existence of void variables in K&R C, Fifi.

    Oh, and by the way, little tattered red-leather miniskirted incompetent — learn how to quote links on a blog, please.

    The a-href tag is your friend.

  470. DrLoser says:

    It’s copyright. You may not legally distribute it without permission.

    Remind us again, Robert, what the difference between “copyright” and “patented” is.

    My memory fails me, but I seem to recall that the one form is Good, whereas the other form is Pure Evil.

    Which is which, I wonder?

  471. olderman says:

    “It’s copyright. You may not legally distribute it without permission. That kind of

    It might restrain cheapskates like yourself who expect something for nothing from just using it. But that is not what was Lil’ Hammie was being taken to task for. NOBODY including Lil’Hammie knows what the terms for using dockerized windows images on server 2016 will be now. Server 2016 is not a shipping product.

  472. Deaf Spy wrote, of M$’s licensing, “You don’t know it because information about what licenses for containers will be required is not published yet.”

    It’s copyright. You may not legally distribute it without permission. That kind of restrains people from doing it…

  473. Deaf Spy says:

    Windows licensing is what gets in way of bundling stuff up and migrating it around like mad. Windows core/Server core is still a normal Windows license. So bundling up your solution with your Windows license and sending to client is not on

    This, Fifi, you don’t know. You don’t know it because information about what licenses for containers will be required is not published yet. You just speculate. As usual. Fraud.

    Now, tell me, apart from googling a few blogs, how many containers have you created in Windows 2016? No, don’t, tell me, I know. Exactly zero.

    Fraud.

  474. oiaohm says:

    Deaf Spy void variables existed in K&R C. Like it or not.

    http://windowsitpro.com/windows/questions-about-server-core

    I took the effort to run the current CTP of Windows Server 2016, and run containers via PS and via Docker, and create Docker containers with Windows Core.

    https://blog.docker.com/2015/08/tp-docker-engine-windows-server-2016/

    Really idiot who does not know the tech.

    Windows licensing is what gets in way of bundling stuff up and migrating it around like mad. Windows core/Server core is still a normal Windows license. So bundling up your solution with your Windows license and sending to client is not on. Ubuntu and other Linux distributions on the other hand Licensing you can bundle up everything.

    Comes kinda important when client deploys you docker image on their system and it does not work.

    Sorry Deafspy if anyone is the fraud in this case it you. Yes you might be able to do what you said internally but when you start dealing with cloud providers where you have your own local Windows OS and their provided Windows OS and the differences you learn very quickly its a main in ass. Then you use Linux and you can upload the instance you tested locally to cloud everything is nice.

  475. Deaf Spy says:

    Is 5.0 ASP.NET from VisualSudio deploy on Ubuntu not Windows Server Core.

    Sorry docker images don’t in fact bundle Server core.

    Ha-ha-ha, Fraud! You may read as many blogs as you wish, fraud, but you will never escape the fact that you have never, ever done what you claim you have. Just like with void variables in C.

    You see, little one, I have done it. I, personally, myself. I took the effort to run the current CTP of Windows Server 2016, and run containers via PS and via Docker, and create Docker containers with Windows Core. Then I created a second container on top of it on which I installed and ran a nginx web server.

    You are fraud, aren’t you?

    Windows docker images run on top of a Windows Host OS. Linux Docker images on the other hand can be complete with tested OS platform packaged up. The difference in OS licensing is the factor.

    And the sun rises from east. Any other obvious and irrelevant truths you want to bring up to spoil the discussion?

    Fraud.

  476. oiaohm says:

    Please note Deaf Spy supporting Orcale and SQLServer you will still be able to present at Orcale database conferences because Orcale does not class Microsoft as a threat. Postgresql by Oracles own actions does Orcale see it as a threat.

  477. oiaohm says:

    Deaf Spy sorry you are the fraud my link
    http://www.hanselman.com/blog/PublishingAnASPNET5AppToDockerOnLinuxWithVisualStudio.aspx
    Is 5.0 ASP.NET from VisualSudio deploy on Ubuntu not Windows Server Core.

    And what does Docker has to do with that, cutie? Docker also bundles with Server Core. And with anything for what matters.
    Sorry docker images don’t in fact bundle Server core. Windows docker images run on top of a Windows Host OS. Linux Docker images on the other hand can be complete with tested OS platform packaged up. The difference in OS licensing is the factor.

    No one with its senses would bundle a production relational database in a container.
    This is in fact wrong for Postgresql is a few ways.

    http://blog.bulte.net/08-25-2013/docker-databases-as-a-service.html

    Basically since 2013 on there have been relational databases in active production deployments in Docker setups.

    For NoSQL databases it makes sense to simplify horizontal deployment.
    Postgresql is a interesting beast.
    http://www.linuxjournal.com/content/postgresql-nosql-database

    The fun part about Postgresql database is that is relational database or nosql based on configuration. The hybrid state of Postgresql is what makes it more suitable to be in Docker than normal relational database solution.

    Postgre is going to cannibalize MySQL first, long before making a notable incursion into Oracle, SQL Server.
    LOLOLOLOLOL IDIOT Oracle has banned some of their clients from presenting at their conferences due to them supporting Postgresql. Yes salesforce is one of the victims of this. Salesforce never used Mysql. This was a Orcale client jumping ship to Postgresql due to lower costs.

    Postgre is still an indifferent guest in .NET land.
    Funny
    http://www.npgsql.org/ Its not that much of a guest problem.

    https://msdn.microsoft.com/en-us/library/dd363565.aspx

    Someone here has not read the MS Documentation.

    For a migration, supposed to be completed in 2009, two major departments of the municipality still use only Windows.
    Sorry idiot. The first project only had a target of 80 percent migration so it was never meant to have 100 percent migration at the end of 2009.<
    Come on list the departments that were Windows only. Big bad news come forwards to 2015 and every Munich department had a percentage Linux.

    Yes a Public Relations and City Marketing at Munich happened to be covered in the 2015 debian conference. Sorry so the idea that any department in Munich does not have some Linux is not based on facts.

  478. Deaf Spy says:

    Speaking of Munich, let me tell you something: Public Relations and City Marketing have never used LiMux, even to this very day. For a migration, supposed to be completed in 2009, two major departments of the municipality still use only Windows.

  479. Deaf Spy says:

    I laughed so hard that I missed the next gems by our prominent Fraud:

    Docker images of course bundling postgresql is possible.

    And what does Docker has to do with that, cutie? Docker also bundles with Server Core. And with anything for what matters.

    And, fraud, for your info, bundling a database in a container is good only for development and staging testing. No one with its senses would bundle a production relational database in a container. For NoSQL databases it makes sense to simplify horizontal deployment.

    This is the nasty problem of FOSS is that it can attack like a hydra so there is no single competitor to neutralize.

    Postgre is going to cannibalize MySQL first, long before making a notable incursion into Oracle, SQL Server. It needs to catch up with them on too many levels, that enterprises, not startups, require.

    Postgre is still an indifferent guest in .NET land. The toolchains simply lack support for it, and there is no such thing on the horizon coming. And there is SQL Server Express. Go fight with it, good luck.

    Fraud.

  480. Deaf Spy says:

    New/Old kid on block postgresql is starting to cause issues

    Bwahahaha!

    Fraud.

  481. oiaohm says:

    http://www.businessinsider.com.au/oracle-doesnt-notice-ibm-sap-2015-10

    Of course it pays to read where the complete quote comes form. Note it mentions newer competitors like salesforce.

    https://www.pgcon.org/2015/schedule/speakers/343.en.html
    Interesting presentation right.

    Also Oracle is extremely worried about Dell more than they are about Microsoft.

    http://www.techrepublic.com/article/oracles-biggest-database-foe-could-it-be-postgres/

    New/Old kid on block postgresql is starting to cause issues. Salesforce is integrating support for postgresql. Companies are putting serous development teams into Postgresql because it cheaper than paying for SQL Server or Oracle.

    Docker images of course bundling postgresql is possible.

    This is the nasty problem of FOSS is that it can attack like a hydra so there is no single competitor to neutralize.

  482. Deaf Spy says:

    Let me quote a smart person:
    “Of its traditional competitors, Microsoft is the “only one” that has “crossed the chasm” and is “now competing aggressively in all three levels of cloud.”
    Larry Ellison, Oracle CTO

  483. Deaf Spy says:

    The cash cows could dry up within a few years but it will probably be a slow decline…

    Funny thing is that in overall, Microsoft grows.

    Unfortunate as it is for you, Pogson, Microsoft is an airplane with many engines. When one is slow, others step it to make the plane go faster.

    Let me tell you of an airplane with a single engine: Google.

  484. oiaohm says:

    https://addons.alfresco.com/addons/openmigrate

    kurkosdr saying sharepoint is a locking have a mistake. Remember alfresco appears to MS Office/Libreoffice to be Sharepoint.

    http://www.hanselman.com/blog/PublishingAnASPNET5AppToDockerOnLinuxWithVisualStudio.aspx

    ASP.NET 5.0 and up is Linux and Windows. So as a lock-in not that great. Issue is poorly designed ASP.NET applications that don’t support native Linux Databases or ASP.NET applications that have gone legacy.

    Why has Microsoft been forced todo this to ASP.Net is that not all hosting that web developers are forced by clients to use have a Windows option. All web hosting everywhere has Linux. Web developers = Support Linux.

    Please learn to look a bit closer before you declare Microsoft has a lock-in.

    kurkosdr building a functional identical using FOSS to the old SBS 2003/2008 Servers is more than possible these days.
    Sogo/openchange replaces Exchange
    Alfresco replaces Sharepoint.
    Samba ADS is more complete than SBS 2003/2008 ADS was.

    Question what do business need. With libreoffice online things could get even more interesting.

    The clock is ticking until Samba ADS can do all the forest structures that MS ADS can.

  485. ram says:

    “I don’t think I even know anyone who has a PlayStation.”

    Come to think of it, I haven’t seen a new one of those in quite some years, not since they were doing that chip development thing with IBM. Universities were buying PlayStations wholesale and using them to build Linux clusters. Sony became “cheesed off” since they sold the PlayStations below manufacturing cost and thought they would make it up on game sales which, of course, did not happen with such a large fraction of PlayStations being repurposed as hardware.

  486. kurkosdr wrote, “Microsoft could make beeelions for decades from their Office, win32, Sharepoint and ASP.NET lock-ins alone.”

    Well, they have cache of ~$100 billion so they can just retire and live off the interest, but those products all depend on lock-in and we’ve seen that disappear quite quickly. The cash cows could dry up within a few years but it will probably be a slow decline like -10% per annum, so we’ll have to live with them some years more and the layoffs will continue.

  487. kurkosdr says:

    Still, waterheads like dogbrain can’t understand that Microsoft could make beeelions for decades from their Office, win32, Sharepoint and ASP.NET lock-ins alone. Their mobile ambitions are, shall we say, for expansion and pride reasons.

    #deal_with_it

  488. kurkosdr says:

    I don’t think I even know anyone who has a Windows mobile device.

    I have seen a Windows Phone device in the hands of a user… twice. In my entire life.

  489. dougman says:

    I don’t think I even know anyone who has a Windows mobile device.

  490. kurkosdr says:

    I don’t think I even know anyone who uses MS-Office.

    I don’t think I even know anyone who has a PlayStation.

  491. ram says:

    I don’t think I even know anyone who uses MS-Office.

  492. DrLoser wrote, “Cite the relevant study for that 80-90 percent, please.”

    I’ve often referred to IBM’s Linux Migration Cookbook, for 80% being cool with GNU/Linux desktops. LibreOffice being just part of the term should bring the threshold well over 80%. In schools where I’ve worked it was over 90%. In the last place I worked, a teacher wanted TOOS to play a collection of DVDs on one PC and another teacher who was hired after our migration to GNU/Linux insisted on TOOS even though her printer would no longer work, nor SMB shares. That was 2 0ut of 80, so 97.5% were cool with GNU/Linux and no one had any problem with LibreOffice except for some forms that took an hour to replace with ODF.

  493. oiaohm says:

    DrLoser something horible here relates to interoperability. There have been many long term bugs in MS Office where a single document results in MS Office being not functional.

    IBM employees have a very basic requirement to communicate with the outside world, in a non-negotiable way.
    If you had read the IBM white paper on their migrations to Lotus you would have find reduce failures when dealing with documents from outside sources by opening with Lotus first and if that fails then attempt MS Office.

    Dirty little secret here is that MS Office is only stable if everyone is using the same version.

    Interoperability failure is how Microsoft has kept people buying the new versions of MS Office.
    https://msdn.microsoft.com/en-us/library/office/jj229903.aspx
    This here is only a tip of a very huge iceberg of MS Office compatibility issues.

    Cite the relevant study for that 80-90 percent, please.
    Please note the 80-90 percent is not from one study. I have give you the 12 studies in the past showing that somewhere between 80 to 90 percent only need basic Office functionality in a Office even if they are dealing with outside customers.

    And due to the fact DrLoser you have called me FIFI you have lost the right that I will be giving you those links again.

    MS Office 2016 word, excel and powerpoint can completely destroy its default state so they don’t open by attempting to open 2013 and 2007 word, excel and power-point documents.

    Libreoffice fail to render a document correctly is way less of a issue than what MS Office suffers from. MS Office also suffers from failure to render correctly on a different computer due to different type of default printer and this goes back to MS Office 97 and exists in every version of MS Office since then. Yes so 97-2016 all suffer from the same bug. Libreoffice does not suffer from this bug because it uses the printer metrics stored in the document instead of the default printer as MS Office does.

    Yes the sad reality is MS Office is more likely to render incorrectly than Libreoffice is.

    DrLoser if you want to see references you will address me correctly. If you call me FIFI dont be shocked when I tell you to get stuffed.

  494. DrLoser made some noises like, “IBM are not Munich. IBM are not the French Gendarmerie. IBM employees have a very basic requirement to communicate with the outside world, in a non-negotiable way.”

    Perhaps this is relevant. Perhaps not. It’s hard to understand innuendo sometimes…

    • Wikipedia:”During the Lotusphere event in 2009, IBM confirmed its cost-reduction effort using Lotus Symphony, with the company migrating its 400,000 users from Microsoft Office to Lotus Symphony. In June 2008 IBM urged its 20 000 ‘strong-techies’ employees to use Symphony instead of Microsoft Office and later in September 2009 IBM forced all 360 000 employees to use Symphony.”
    • IBM:”IBM Lotus Symphony 3.0.1 was released in January 2012 and is the final version of Lotus Symphony from IBM. Support for Lotus Symphony ends on 30 April 2015.
       
      IBM has contributed the Lotus Symphony code to the open source Apache OpenOffice project. Apache OpenOffice, the leading open-source office software suite, includes word processing, spreadsheet, and presentation software very similar to Lotus Symphony and supports the same open document formats (ods, odt, odp) supported in Symphony.”

    IMHO if openoffice.org is good enough for IBM, LibreOffice is absolutely wonderful.

  495. DrLoser says:

    I think it’s safe to say that IBM has a head-count of roughly 300,000 or so, Fifi.

    IBM are not Munich. IBM are not the French Gendarmerie. IBM employees have a very basic requirement to communicate with the outside world, in a non-negotiable way.

    80-90% does not fulfil that very basic requirement.

    Or perhaps I am wrong. Perhaps you have evidence that IBM word-processing documents, IBM spreadsheets, IBM “powerpoint” or presentations or whatever, and IBM email servers are 100% FLOSS, and under no circumstances would ever touch the filth that is, for example, Outlook.

    I am so looking forward to your definitive cites on this one.

    I bet not a single one of those 300,000+ employees ever soil themselves with the likes of Active Directory either.

  496. DrLoser says:

    If you business happens to be using thunderbird or kontact everywhere as email client

    And the key word here, Fifi, is everywhere.

    Allow me to introduce your tiny little broken mind to the concept of “interoperability.”

  497. DrLoser says:

    DrLoser stop saying this bullshit. French Police, Munich, IBM….. studies have found the same stuff over and over again.

    Those are not studies, Fifi. They are (for better or worse, and in the context of a study it doesn’t matter which) an abrupt switch from one paradigm to another.

    The reality is for 80-90 percent of a business staff machines as long a click on document and it opens for word, excel and power-point everything is good.

    Cite the relevant study for that 80-90 percent, please.

    Now this is what is insane. If you business happens to be using thunderbird or kontact everywhere as email client and someone by mistake overwrites windows with Linux image you have a 80-90 percent chance that you will not hear a single complaint about it.

    Cite the relevant study for that 80-90 percent, please.

    Oh, and not at all incidentally, all I am saying here is that the nitwit Linux Desktop evangelist never got back to the lady in question and asked what the outcome was. The nitwit in question simply went on and drooled over his own choice of desktop option. (Twenty button mice, woo-hoo.)

    I’d be immensely surprised if the lady in question didn’t quietly go back to Slave Status, what with Outlook actually working and all. But we will never know, because the nitwit didn’t follow up, did he?

    I wonder why the nit-wit didn’t follow up?

  498. oiaohm says:

    1) It’s hard to see how Microsoft Office “looked so different” when it wasn’t even installed. Presumably the young lady now opens docs, spreadsheets and so on by double-clicking on them and therefore experiences the horrors of LibreOffice.
    DrLoser stop saying this bullshit. French Police, Munich, IBM….. studies have found the same stuff over and over again.

    The reality is for 80-90 percent of a business staff machines as long a click on document and it opens for word, excel and power-point everything is good. They will notice that Libreoffice interface is different from normal MSOffice yes to be extremely bad they will call Libreoffice MS Office.

    Due to Libreoffice and MSOffice using similar terminology basic users move between both programs with absolutely no training.

    Now this is what is insane. If you business happens to be using thunderbird or kontact everywhere as email client and someone by mistake overwrites windows with Linux image you have a 80-90 percent chance that you will not hear a single complaint about it.

    The reality is the main reason Libreoffice is not more installed is FUD.

    DrLoser being part of TMR you claim to be anti Linux FUD but you are one of the biggest spreaders of Linux FUD.

  499. DrLoser says:

    A choice bit of idiotic “defense” for Linux on the Desktop:

    For me Linux is about choice, control, and learning something new. I think that’s one reason it’s not as “easy” for some people. Some prefer a mouse with just one button because there’s less to confuse. Personally, I’d rather have a 20-button mouse for more flexibility and spend two hours making it work my way.

    A twenty-button mouse? Very flexible. Shoes and socks off before using, please. (Richard, we know you don’t need to take your socks off. Just the sandals, please. And do please stop chewing at your toe fungus — just bathe your feet every now and again. Your twenty-button mouse will thank you!)

    I suspect that “two hours” is, on the whole, a very slightly grotesque underestimate even if you are the maniac Tony Maro. If you’re the poor sod on the other end of the help-line he provides …
    … You’re basically screwed, aren’t you?

  500. DrLoser says:

    The system surprised us one day when a user’s Windows install went corrupt on her laptop and she accidentally installed Linux.

    Gotta admit, accidentally installing Linux is a bundle of laughs. Shall