Celebrating 30th Anniversary of the First C++ Compiler: Let's Find Bugs In It 153
New submitter Andrey_Karpov writes: Cfront is a C++ compiler which came into existence in 1983 and was developed by Bjarne Stroustrup ("30 YEARS OF C++"). At that time it was known as "C with Classes". Cfront had a complete parser, symbol tables, and built a tree for each class, function, etc. Cfront was based on CPre. Cfront defined the language until circa 1990. Many of the obscure corner cases in C++ are related to the Cfront implementation limitations. The reason is that Cfront performed translation from C++ to C. In short, Cfront is a sacred artifact for a C++ programmer. So I just couldn't help checking such a project [for bugs].
Hardware requirements... (Score:4, Funny)
Re: (Score:2)
Just in case you need a space heater?
That must be some huge closet. The first VAX 11/780 I was was the size of two side by side ovens.
Re: (Score:2)
Re: Hardware requirements... (Score:1)
Shit, I was an ENIAC once back in the forties. You should have seen me. I was freaking huge!
Re: (Score:2)
3B2, porting (Score:2)
I am going to bet you that the 3B2 [wikipedia.org] was that primary computer architecture for cfront.
However, it does appear that cfront was extremely portable [wikipedia.org]:
Re: (Score:3)
Re: (Score:2)
not the SCSI...i can't bear to throw away those cables....god what a pain in the ass they were....
Speaking as a C++ programmer... (Score:1)
"Sacred Artifact"? Are you kidding?
I will happily agree that the language and compilers were both pretty awful back then. The worst warts have been beaten out now, and it's a pretty capable language in the main but this is now. 1990s C++ was horrible.
Blogspam (Score:1)
This "new submitter" is the "science adviser" of the company who wrote that blog post, of which the main point is to sell you their product.
Re: Blogspam (Score:1)
The funny thing is that on reddit, this guy and his employees have been blogspamming his product for years, hiding it in posts like "analysis of this project", or "finding bugs in that project."
Despite having multiple shill accounts like "Coder_CPP" and "resistor54" (among others), the community barely catches on and we have to suffer through cleverly placed product placement every few days.
Part of how they got away with it for so long is their reputation is so high as they have their own subreddit http://r
Re: (Score:2)
That's true, but even if I wanted to throw money at them, I can't. They don't offer a stand-alone product. It's a Visual Studio plug-in. I don't use Visual Studio, other than for the compilers, so - meh.
Isn't C just a glorified macro assembler? (Score:2, Funny)
Before C++ came around, wasn't C just a glorified macro assembler?
Re:Isn't C just a glorified macro assembler? (Score:5, Interesting)
Before C++ came around, wasn't C just a glorified macro assembler?
Not exactly. It was intended to be an actual compiled language but one with as little overhead as possible and the ability to touch the hardware easily. It's considered a "middle level language". Where low level languages would be various assemblers and what not. High level languages (i.e. most other compiled language) deliberately abstract away the low level functionality to make writing applications easier. C was designed specifically as an in-house tool at Bell Labs for rewriting Unix and escaped sometime in the late 60's/early 70's. It was and always will be a compiled language, albeit one with only a very small base of core functionality.
When they wrote it, Kernighan and Ritchie discarded most of the overhead that came with other languages. The linking of pointers to arrays and array arithmetic simplified the compiling while providing the bare minimum of array functionality. The lack of pretty much any built in functions made the language simple and compact. Putting all that functionality in libraries means you only needed to include just the pieces you used. And if you didn't need something, the language didn't force you to link it in. The language gave you just the few pieces that were absolutely necessary and you were responsible for the rest. The standard libraries that evolved after that are what gave C the ability to be a general purpose language.
C is a great language for writing small, tight, efficient, low level programs as long as you know what you're doing and are willing to work with just a few small, sharp tools. It still has it's place in embedded systems and for writing operating systems (or at least the kernel). Beyond that, it's really quite limited. But no, it's not just a macro assembler. It is more than that.
Re: (Score:1)
Mwh, the only thing C gives you over a good macro assembler is parsing of arithmetic expressions, and a somewhat processor-independent syntax. It's a nice layer of abstraction now that compiler optimization is so good, but originally was a real pain if you needed performance. (No one hand hand-code optimal assembly against a modern architecture, so you the performance arguments have swapped ends these days).
Re: (Score:2)
When C was first created, there was little to no compiler optimization available. The lack of overhead in the C language meant that the compiler added little to no bloat over the code that was written. What you wrote is what you got.
Of course, that meant the inefficiency and bloat came in when average programmers started to implement more complex data and algorithms without knowing how to do it efficiently...
Re: (Score:2)
The abstraction in C made writing hand-optimized code a guessing game in the early days. Rather than just writing what you wanted, you had to guess what would be compiled into what you wanted, and check the object code to see if you guessed write. How to rotate a register, how to get both the result and remainder of a single division instruction, that sort of thing. Often people just inlined the desired assembly.
"What you wrote is what you got" was not how veteran assembly devs saw it - there was a lot o
Re: (Score:3)
Re: (Score:2)
Sure, I get your point, but there were plenty of fast low-level (or "mid-level" if you want to call it that) languages back in the day, which have mostly faded into obscurity or oblivion now*. C was popular and lasting IMO because it was straightforward, because it felt like a sort of cross-platform macro-assembler. Just a few arcane quirks to figure out for the instructions C didn't represent directly.
*My worst coding project ever was supporting legacy PL/S [wikipedia.org] code. (Made extra fun since IBM never released
Re: (Score:2)
Yeah, I still don't know what made C stand out over other languages. I never really got to know other languages that were around at the time. I bet the ability to cross compile between platforms was a significant contributor. That and it didn't obfuscate much on you so you could mostly know what was going on for every line of code you wrote.
It still amazes me the legacy that an escaped Bell Labs experiment like C has had with syntax of so many languages. C++, Java, C#, csh, Perl, Ruby, et al trace their
Re:Isn't C just a glorified macro assembler? (Score:5, Interesting)
Way back when, there were lots of different architectures, and they had their own C-level languages (CDC system programmers used Cybol, for example). C is the one that survived, because it was the language of Unix, and Unix caught on. It's multiplatform because Unix is. That gave it staying power. Nobody uses Cybol anymore, because it was tied to an architecture that just died.
Re: (Score:2)
There's sizeof(), but that may have been a later addition.
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Yea, so? But it hid the details of the processor programing model from the programmer. So C programs became CPU independent, all you needed to do is create a cross compiler for your new CPU. It's just abstracting away the hardware dependence of Macro assemblers...
Java is just a way to abstract away the memory management issues of C++ (well it's at least partly that..)
Re: (Score:3, Interesting)
You do realize there are no "memory management issues" in modern C++, right? Java abstracts away the memory management issues of C, and of C++ written like C.
The advantage of Java and C# is the easier learning curve. C++ can be bizarre and arcane, while the managed languages are simpler to get right, and so you can far more easily hire programmers who won't screw everything up.
Re: (Score:3)
Oh yes there are memory management issues in C++, you still have to take care of it unless you only use stack and static storage. There are memory management issues in Java too, but most don't understand why they exist or how to avoid them (thankfully most don't run into the issues, but they are there).
What you are talking about is that we have ABSTRACTED memory management tasks by going through libraries and templates. The "problem" hasn't been "fixed", all we've done is make it easy for programmers to n
Re: (Score:2)
What you are talking about is that we have ABSTRACTED memory management tasks by going through libraries and templates. The "problem" hasn't been "fixed", all we've done is make it easy for programmers to not think about it if they wish.
Yeah, sure, that's all any programming language ever is: layers of abstraction over assembly. My point was, from a practical perspective, you don't worry about memory leaks in modern C++ code any more than you do in modern Java code. But of course Java only offers the "no leaks" way, which in C++ you must discover the "no leaks" way, giving Java the easier learning curve. (You can still get memory leaks with anything, of course, if you try hard enough, but I'm talking about the 99% case here).
But that doesn't mean C++ is old and arcane, nor is it bizarre
Placement ne
Re: (Score:3)
What you are talking about is that we have ABSTRACTED memory management tasks by going through libraries and templates. The "problem" hasn't been "fixed", all we've done is make it easy for programmers to not think about it if they wish.
Yeah, sure, that's all any programming language ever is: layers of abstraction over assembly. My point was, from a practical perspective, you don't worry about memory leaks in modern C++ code any more than you do in modern Java code. But of course Java only offers the "no leaks" way, which in C++ you must discover the "no leaks" way, giving Java the easier learning curve. (You can still get memory leaks with anything, of course, if you try hard enough, but I'm talking about the 99% case here).
Um, like it or not, memory leaks still exist in Java and it's not that hard to stumble into code that causes them. The problem is that most people don't understand the parts that are abstracted away, they don't think they need to, so it's easy to stumble over your shoelaces and not know why. Yea, Java makes it a bit harder to bleed memory, but it doesn't eliminate the problem.
But that doesn't mean C++ is old and arcane, nor is it bizarre
Placement new. Weak references. Static initialization quirks (so many lock management and reference counting bugs caused by that over the years!). A Turing-complete templating language, so that you can turn your compiler run into a game of Tetris. Heck, just the fundamental need to understand that vectors will copy their member as they grow, and so you need to use the appropriate kind of smart pointer for that (which has changed, what 3 times now over the life of the language).
Bizarre and arcane. All there for good reason, to solve problems that can't otherwise be solved, but bizarre and arcane.
One man's garbage is another's treasure. You need to understand what you pay for all this convenience. I'm not saying Java doesn'
Re: (Score:2)
Dude, you need to be less sensitive if you think I was running down C++ at the expense of Java. Don't make it a religious issue, you won't find happiness along that path.
Re: (Score:2)
There are memory management issues. Passing around auto_ptr and unique_ptr is tricky. shared_ptr can be a performance drag, as its memory accesses aren't necessarily local. Smart pointers can create a circular data structure just like in Java, except that good garbage collection in Java will collect that structure once it's inaccessible. If you're doing more than just mechanically using smart pointers (placement new, for example), there's other hassles.
I love the language, but I can't recommend using
Re: (Score:2)
except that good^H^H^H^H every garbage collection in Java^H^H^H^H any language will collect that structure once it's inaccessible.
FTFY.
Re: (Score:2)
auto_ptr doesn't exist, as far as anyone sane is concerned. unique_ptr is not passed around, it's moved around. shared_ptr is supposed to be used with make_shared.
I fully agree that using C++ without understanding of what's going on will catch up with you, sooner or later. I have an engineer to train in C++ with very little programming background and all I can say is that it requires that I pay a lot of attention to detail, so as not to teach destructive overgeneralizations or oversimplifications, while tea
Re: (Score:2)
Ie, you can hire dumber programmers in order to make dumber programs.
Re: (Score:2)
A can see why you're anonymous.
Re: (Score:2)
Yes, it was. However they did not call it "glorified macro" but "portable".
No idea why so many answers to you pretend it wasn't.
The inventors of C defined it that way.
OTOH: what is wrong with that :D
The timeline in the first link: (Score:1)
1979 - Work on "C with classes" started
At that time, "Object Oriented programming was considered too slow, too special purpose, and too difficult for ordinary mortals."
Well, I'm glad C++ fixed that last problem!
Re: (Score:1)
C backend would not impose limitations (Score:2)
Translating to C would not impose a limitation on the language features of C++, its possible to generate whatever C code you need to support C++ features. Using an LALR parser would introduce limitations on language design, however. This was once very common.
Re:C backend would not impose limitations (Score:4, Insightful)
Translating to C would not impose a limitation on the language features of C++
Practical limitations, for one guy banging out a language implementation in a hurry. C syntax was kept intact wherever possible, so that no translation would be needed. Which in turn led to quick adoption of C++ by C coders (which doomed C++ code to forever be ruined by C-style coding).
Re: (Score:2)
doomed C++ code to forever be ruined by C-style coding
This is very true. The especially troubling aspect of how C++ is usually taught is that they start with the C feature set and then "build" on top of that. It's completely ass-backwards, and I hate these teachers with a passion. I then have to undo the damage they've done to the impressionable students that then work with me...
Re: (Score:2)
I've basically given up professional C++ over this. I'd love a smaller project where I get to set the coding standards for a team small enough that I could actually CR everything and keep the rot from setting in, but somehow I've migrated to the big guys where that sort of team doesn't exist.
CFront wasn't a compiler (Score:5, Informative)
CFront wasn't a compiler, it was a preprocessor that spat out C code that was subsequently compiled by whatever C compiler you happened to have.
Looking at CFront output was the best way to understand how C++ actually worked at the time, since it was all mapped to pretty straightforward C constructs. I don't think anyone around today knows what a vtable and ptable is, but back then it was how you could tell the programmers who really dug in to the language from those that didn't.
Re: (Score:2)
Looking at CFront output was the best way to understand how C++ actually worked at the time, since it was all mapped to pretty straightforward C constructs. I don't think anyone around today knows what a vtable and ptable is, but back then it was how you could tell the programmers who really dug in to the language from those that didn't.
A ptable I got no idea, but a vtable is used whenever you use a virtual function and invokes an extra pointer dereferencing as opposed to a plain function. And I never learned C, but I had to learn that much to make inheritance work like I wanted in C++.
Sadly, I don't remember either (Score:2)
I don't remember what the ptable was for anymore either.
I do remember name mangling, which I suppose doesn't happen anymore?
Re: (Score:2)
Certainly every professional C++ programmer I've ever worked with knows what a vtable is. I have no idea what a ptable is though - never heard the term before.
Re: (Score:2)
Looking at the article, there are Pclass, Ptable, Pname... there's no real documentation explaining them, but it's probably just a reminder to the programmer that the variable represents a "Pointer to" something.
It's frowned on today to put a variable's type in the name (look up Hungarian Notation), but in the old days, C allowed implicit type casting, which meant that the compiler would not blink if you assigned a non-pointer variable to a pointer variable. It made for some...interesting bug hunting back
Re: (Score:2)
Re: (Score:2)
Re: (Score:2)
Terrible compiler error messages (Score:2)
I don't know if it was CFront, but the first C++ programs I wrote were for homework assignments in the late 1980's. The compiler output was unreadable, of course, because it wasn't compiling my code. It was compiling a C++ to C translation of my code. All I really knew was that there was a problem with my program *somewhere* at the line, or above it, where the first error message appeared. It was an exercise in agony management.
I remember thinking, "what an awful language!" at the time. Of course
Re: (Score:2)
I was a bit luckier, in that I learned the language using Turbo C++. It was a fantastic compiler/IDE for DOS. I actually still have very fond memories of working on my hobby projects in that environment. Later in my schooling, using gcc on Unix workstations felt really primitive by comparison. By the time I turned pro, it was pretty much all MSVC.
What's funny (or sad, I suppose) is that, to this day, template-generated error messages are as horrible as ever. Hopefully we'll either get concepts or some
Re: (Score:2)
The only really big problem in C++ error message is template errors. It's possible to rewrite them into clarity, but that's awkward. I'm not aware of anything in Modern C++ that made error messages harder, so they've been improving since templates were introduced.
Re: (Score:2)
Guess we should pull up the old joke (Score:2)
I remember when it first came out. Back in the days of BBS's
The old joke was
"Have you seen the new C+++"
I wonder how many will still get the joke?
Re: (Score:2)
Hmm, slashdot ate the punchline.
"Have you seen the new C+++ No Carrier"
Had to drop the grater than and less than signs. Wow how times have changed. lol
Re: (Score:2)
I needed the "No Carrier" reminder and then I got the joke...Wow, yes I remember those days.
Re: (Score:2)
Times haven't changed, <things> are exactly the same as they were previously. ><
It is a tradition for users, regardless of how long they've been here, to forget something simple like how to use < and > in a forum post. I don't know how many times I've seen someone complain that Slashdot ate this or that bit of their post. Should have used the preview button...
Just use < instead of typing a < and you'll be fine. You can also use > in place of simply typing a >, i
PVS-Studio slashvertisement (Score:2)
Seriously, this is getting old.
Re: (Score:1)
Or features :
https://www.youtube.com/watch?... [youtube.com]
Re: (Score:1)
C++ can have, and has had, bugs.
The standard for C++ could specify something impossible, for example. Like, make std::string impossible. This is similar to having a program that fails to compile, but as the standard is interpreted, it only causes problems when someone actually interprets it.
It could also have mistakes (as opposed to bugs), like mandating that your sort routine take at least O(n^3) time.
You can examine the defects and fixes in the C++ standard; they are published publicly. A defect is usu
Re: (Score:3)
Only if you know what you are doing...
Re: (Score:1, Troll)
If you know what you're doing, you probably are already using another language.
Re:C++ is... (Score:5, Interesting)
If you know what you're doing, you probably are already using another language.
Such as? I doubt that there's anyone not relying on C++. Never mind that every major browser (and a few minor ones) are written in C++. Many language implementations are in C++. And for those that are in C, well, all the major C compilers (LLVM, VisualStudio and now GCC of course) are written in C++.
Personally, I like the language. Oh I can whine about it all day and it has many warts, but the combination of efficiency, expressiveness, flexibility and static typing fit well with me.
Re:C++ is... (Score:5, Interesting)
Nope, C++ is still a thing when you need to create really large, complex programs, and when efficiency still really matters. Here in the videogame industry, C++ absolutely reigns supreme. Nothing else even comes close. Large applications like MS Office are still written in C++, from what I'm told, as are *many* large applications. It's not just legacy stuff either.
C++ has the native performance of C, but is able to use powerful zero-cost abstractions that allow programs to scale up safely. For instance, if you write modern C++, it's almost impossible to write code that will stomp on random memory or leak resources, a real issue with C or older style C++ programs, yet that protection is completely optimized away and costs *nothing* at run-time (which I think is something many programmers don't properly appreciate).
An easy language to master? Absolutely not. It's a language that takes a long time to learn well, and it can be rather unforgiving at times, but it's great for what it does. C++ 11/14 has also really breathed new life into things as well, IMO. It's really amazing how much the language feels almost like it's using managed memory (e.g. garbage collection) now that I'm using smart pointers ubiquitously.
C++ is incredibly portable as well. My game engine works across several platforms, only a smallish percentage of the code is different between platforms, mostly for low-level graphics, audio, windowing, or other system calls.
It's stability as a language is legendary as well, and that's important for real-world projects that depend on it. You can probably still compile most the earliest C++ code on a modern compiler and expect it to still work, not to mention most C code as well.
I'd never claim C++ is the end-all, be-all of languages (I sound like I'm gushing, but I have plenty of complaints as well), but it most assuredly has a very long future with us, and for some very good reasons.
Re: (Score:2)
nonsense, plenty of large complex projects are written in C. Open source kernels or apache for example. Any C++ data structure or algorithm has a fairly straightforward C equivalent, "objects" in pure C are easy. No real reason to use C++ for anything, just introduces difficulty in debugging and maintenance.
Yeah, 20 years experience in c++ development here
Re: (Score:2)
nonsense, plenty of large complex projects are written in C.
Where did I say they weren't? Obviously a lot of great stuff is written in C as well.
Any C++ data structure or algorithm has a fairly straightforward C equivalent, "objects" in pure C are easy.
Oh? I'd love to hear how you'd implement a ref-counted smart pointer in C. Or perhaps a scope based auto-lock/unlock mechanism. Tell me how you implement a reusable, generic container like a key-value map while remaining typesafe? How about any way at all to guarantee that a resource won't leak if you miss a function call due to some unexpected control flow? How about a way to avoid clobbering memory if you forget tha
Re: (Score:2)
Tell me how you implement a reusable, generic container like a key-value map while remaining typesafe?
oooh! I know this one.
Please note, I'm not suggesting that it wouldn't be simpler and easier to do it in C++ with templates. Naturallt it would, but it's *possible* in C, and in fact I believe templates were part of the mechanism to formalise what people were doing in C anyway.
So basically, create a header: generic_vector.h
Do *not* give the header include guards.
Then do this:
#define VECTYPE float
#include "g
Re: (Score:2)
Congrats, you just sketched out a non working version of std::vector in 20 lines...
That was kinda the point: to show it's possible to do such stuff in C.
Re: (Score:2)
Re: (Score:2)
There isn't, but I think the OP asked for type safety and generality, not resource cleanup.
Seriously, why is everyone going full pedant overload on this? Generic programming is perfectly possible in C, if extremely unpleasant. Templates were in no small part designed to allow people to use something more pleasant and obvious than macro fuckery.
Re: (Score:2)
Re: (Score:2)
Resource cleanup is definitely part of generality. I would argue even part of type safety
No, I disagree. The generality and type safety was really about generic programming, as in can it be used on a variety of types without messing aronud with void*. Type safety is something quite specific and doesn't in any definition I've seen include resource cleanup.
Just because it's overlooked doesn't mean it isn't a crucial part of it.
I don't think it's overlooked but it's not a part of type safety. Type safety is a
Re: (Score:2)
Type safety is something quite specific and doesn't in any definition I've seen include resource cleanup.
Which is my point. Just because it's overlooked such that it doesn't figure into other people's definitions doesn't mean it isn't necessary. We have a lot of experience with generic programming, and resource cleanup has been found to be a requirement.
not whether you run out of memory because you forgot to free something.
Memory cleanup is only a small part of resource cleanup. This point has been repeated to death.
But C idiomatically tends to work with pointers more, which are really reference semantics. I mean sure you might leak if you're not super-super careful but you can get type safety and genericity in C.
Which is why actual generic programming isn't possible in C, because it can't emulate value semantics for complex types. If you have to be super-super careful, then i
Re: (Score:2)
Which is my point. Just because it's overlooked such that it doesn't figure into other people's definitions doesn't mean it isn't necessary. We have a lot of experience with generic programming, and resource cleanup has been found to be a requirement.
Resource cleanup is useful both with and without generic programming. You can write typesafe (this has a specific definition), generic code with manual cleanup or with automatic cleanup. For example, a std::vector is typesafe, in that you can't have type violat
Re: (Score:2)
Resource cleanup is useful both with and without generic programming. You can write typesafe (this has a specific definition), generic code with manual cleanup or with automatic cleanup.
But generic programming is not useful without resource cleanup. Generic programming algorithms, as I keep saying, relies on value semantics. If the algorithms are working on things that, say, have mutable state, then the generic algorithm breaks. Value semantics means type safe automatic resource cleanup becomes a necessity and thus should be included in the definition. People only resist it because it would mean their language can't be generic.
For example, a std::vector is typesafe, in that you can't have type violations (unless you screw with casting---C++ isn't the best example), generic in that it works for all T, but it won't clean up whatever those T*s point to.
No, that's why you store objects in vectors, not raw pointers.
Re: (Score:2)
But generic programming is not useful without resource cleanup
That's trivially false. std::sort does not cause any allocations or deletions of the type T objects.
Generic programming algorithms, as I keep saying, relies on value semantics
You can keep saying that and you'll keep being wrong. The definition of "generic programming" is parameterisation of types:
https://en.wikipedia.org/wiki/... [wikipedia.org]
No, that's why you store objects in vectors, not raw pointers. If you store objects in vectors, it will clean up all Ts
Re: (Score:2)
You are so funny, all those things you mention exist in the libraries of major scripting languages with constructs made in pure C
You're making an argument for why those that love needless complexity shouldn't be allowed to design languages
Re: (Score:2)
Zero-cost abstraction?
What?
Zero-cost abstraction?
Oh. Yeah yeah. It did give us that, that is true.
Oh yeah. Smart pointers Reg. Remember what programming used to be like?
Yeah, all right, I'll grant you, zero-cost abstraction and smart pointers are two things that C++ has done.
And the portability.
Well yeah obviously the portability, I mean portability goes without saying, doesn't it? But apart from the zero-cost abstract
Re: (Score:2)
Re: (Score:3, Informative)
Without C++ there would be no Java. Since my community college couldn't afford a new Microsoft site license, I had to learn every flavor of Java for all my programming courses. Meh...
GCC was free the last time I checked and a free graphical frontend should be possible to find as well. Notepad++ would do (not 100% of license for a college though). Using java instead of C++ for license issues sounds more like an excuse to me, partly because in my university days Microsoft donated licenses to the students and I got free windows and stuff. After all they wanted the new engineering students to be used to microsoft products when they joined the software workforce.
I learned Java as well, not d
Re: (Score:3)
Re: (Score:2)
The Express versions of Visual Studio
It is true that the Windows SDK does not in
Re: (Score:2)
Re: (Score:2)
If you know C/C++ but don't know MSVS, you're not going to get a job. The same thing for Java if you don't know Eclipse or Netbeans.
That is nonsense. No one cares what IDE I use.
And I switch to an unknown IDE immediately.
What the fuck should be the difference between them?
In Java there is basically none at all and if we use C++ all IDEs generate a makefile.
If you believe you did not get the latest job because you did not know the IDE you have a serious problem.
Re: (Score:2)
If you believe you did not get the latest job because you did not know the IDE you have a serious problem.
You have obviously never dealt with a recruiter or HR drone following a checklist. If you didn't have what's on the checklist, you didn't get the interview or job. I was once turned down for an interview because I didn't know "Red Hat GUI" for a Linux job that was 99% command line work, which I thought I was perfect for because the Linux command line 99% of the time. Since I didn't know "Red Hat GUI" and that box couldn't be checked off, the recruiter hung up on me.
Re: (Score:2)
I don't get called by drones like that.
When I have a phone interview I'm usually hired after it.
Next time simply cheat and face palm when you are sure it is just a drone.
Re: (Score:2)
Re: (Score:2)
Recruiters generally have no idea what they're talking about. You kind of have to pad your resume and language you use about yourself and skills against that.
This is OLD advice (I haven't had to make a resume in 15 years) was to list every possible interpretation of your skillset for the resume consumed by headhunters. Example:
- JDBC
- Java Database Connections
- C++
- Microsoft Visual C++
- Unix
- HPUX
- Solaris
- Linux
- PHP
- PHP4
- PHP5
The headhunters are just scanning and checking boxes. If you feel "icky" ab
Re: (Score:2)
Re: (Score:2)
Re: Imagine if it had never been done (Score:5, Insightful)
Re: (Score:2)
The Internet was created by DAPRA. The civilian application was a byproduct.
https://en.wikipedia.org/wiki/DARPA [wikipedia.org]
Re:what to be thankful for 30 years on (Score:5, Insightful)
But it's small and fast when you use it right..
C++ is but a tool we use to get our jobs done. Every tool has it's limitations, provisos, flaws and a purpose. When a tool is placed in the hands of a skilled craftsman using it for it's intended purpose it produces excellent results, but if it's used by somebody without the necessary skills, or for a task it is not designed to do, the results can be horrid. C++ may be dated, but for some problem domains it remains the tool of choice. You don't write device drivers in Java for a reason.
The wise programmer keeps as many tools in his tool box as possible. He sharpens them and maintains them and keeps adding the new and useful tools he finds. He knows the intended purpose and best use of his tools and selects the appropriate tools for the job at hand. All to often, young bucks show up to work armed with only ONE tool shiny and new, thinking that it is the only tool they need for any job. They deride the old salts who use the "old" tools well and make fun of the well warn, old tools they use. "Use this new shiny tool," they say, "It's the only tool you need." While the old experienced guys chuckle and shake their heads, remembering when they too said similar things and try to teach the younger ones that there is value in putting tools in the box...
Re: (Score:2, Insightful)
it is an unmanaged language that gives low level access without adequate tools to guard that access.
Uh, have you heard of smart pointers? Or RAII? Have you used C++ in the last 5-10 years... at all, actually?
C++11 is almost a different language (Score:1)
Uh, have you heard of smart pointers?
Yes, and the pre-C++11 std::auto_ptr was a confusing piece of crap.
Or RAII?
Isn't that the trade group that sues music fans? Oh wait, that's RIAA. But yes, I understand the advantages of automatic finalization.
Have you used C++ in the last 5-10 years
Last 4 years would be more honest, as C++11 added the smart pointers and other things that make modern C++ feel like modern C++ [amazon.com].
Re:C++11 is almost a different language (Score:4, Insightful)
Which is why you'll never get one through a code review at my company. std::unique_ptr does what auto_ptr did, only much more elegantly. std::shared_ptr is also useful.
I'm not sure you really do understand RAII, if you refer to it as "automatic finalization". It's far more useful than finalization in the languages I've seen that use it. It's a unified resource manager that can handle every type of resource uniformly.
Re: (Score:2)
That's correct. The oft overlooked aspect of RAII is that C++ has strictly defined order of object destruction. It forms the core language semantics and modern C++ would be useless without it. Calling it "automatic finalization" is completely missing the point.
Re: (Score:2)
Exactly. Modern C++ should mostly read like a high-level managed language would, not C.