Hacker News new | past | comments | ask | show | jobs | submit | nanodano's comments login

¯\_(ツ)_/¯


> C Is Not a Low-level Language Anymore

Pretty sure C was always considered a high-level language.


"High" and "low" are relative adjectives. The meaning of "high-level language" has changed. C was considered a high-level language, and it is now considered a low-level language. Not by everyone, of course. There are still a pair of definitions for "high-level language" and "low-level language" that draw the line right above assembly. I won't say "nobody" uses those definitions anymore; lots of people learned them and many still use them. I will say that it is pointless to act as if those are the only definitions of the terms anymore.


I think I'm confident in saying that K&R saw C as lower-level language. As you say, it is relative [1]. I just don't think enough people considered C to be a high-level language (given that Smalltalk, APL, and Lisp were about) to make your broader characterization that "C was considered a high-level language."

Here's my reasoning:

From "The C Programming Language" book (1st. ed., 1978) at https://archive.org/details/TheCProgrammingLanguageFirstEdit... we can read 'C is not a "very high level language"' (p. ix) and 'C is a relatively "low level" language' (p. 1).[1]

They describe what "low level" means to them: "This characterization is not pejorative; it simply means that C deals with the same sort of objects that most computers do. namely characters, numbers, and addresses."

And on page 2 we see how they don't regard C as the lowest level: "Of 13000 lines of system code, only about 800 lines at the very lowest level are in assembler."

I also found "The C Programming Language" paper in The Bell System Technical Journal (1978) saying "All three languages [BCPL, B, and C] are rather low-level", at https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6770408... .

Now to the [1], I found the paper "Implementing LISP in a high‐level language" from 1977, where that high-level language is BCPL, which is a precursor to C, so clearly a good number of people at the time would have considered C a high-level language, at the very least in the context of developing a Lisp.


K&R are not the last word on this. They made their comment in 1978, and now it's 2021, and computing is very different.

"Characters, numbers, and addresses" are very much not what CPUs deal with internally today. Most languages no longer reference addresses directly, and "characters and numbers" live behind abstractions of their own.

The point is that C assumes a certain model of computing that was baked into both hardware and software from the late 70s onwards. That model has been superseded, but hardware and software still lose a lot of cycles emulating it. The claim is that this is both inefficient and unnecessary.

But the advantage of the C model is that it's simple, comprehensible, and general.

If you expose more of what goes on inside a modern CPU, programming becomes more difficult. If you build a CPU optimised for some specific other language abstractions you bake other assumptions and compromises into the hardware, and other languages become less efficient.

So if you want to replace the C model you'd first have to define an industry standard for - say - highly parallel languages with object orientation. That is not a small or simple project. And previous attempts to tie hardware to more abstract languages haven't ended well.

So C persists not because it's high or low level, but because it's general in a way that other potential abstractions aren't.

This is not to say that alternatives couldn't be both more general and more performant. It's more a reminder that designing performant alternatives is harder than it looks, and this is not a solved problem.

My guess (FWIW) is that nothing credible will emerge until radically new technologies become more obviously better for general purpose computing - whatever that looks like - than current models.


> K&R are not the last word on this. They made their comment in 1978, and now it's 2021, and computing is very different.

Yes, but K&R back then are relevant to refuting GP's contention that

>> C was always considered a high-level language.


Thank you for clarifying my intent!


People don't call C high-level, but I also don't see people call it low-level even in a casual setting with newer programmers. Instead I see it called a system-level language.


Kernighan and Ritchie referred to C as a 'relatively "low level" language' in their 1978 book.


sounds like system language is a nice way to say "relatively low level" then?


K&R write:

> It has been closely associated with the UNIX system, since it was developed on that system, and since UNIX and its software are written in C. The language, however, is not tied to any one operating system or machine; and although it has been called a “system programming language” because it is useful for writing operating systems, it has been used equally well to write major numerical, text processing, and data-base programs.

https://archive.org/details/TheCProgrammingLanguageFirstEdit...


So it sounds like they're endorsing that concept, and just don't want it to be a limiting term in terms of what people expect in regards to portability and scope?

"System level" does that just fine right? There's not much confusion about if C is tied to Unix anymore after all...


I really don't understand the aim of your inquiry.

Yes, I see it called a systems programming language.

But unlike you, I see people call it low-level. The easiest counter-example was to point to K&R, which was my textbook in college. (Yes, pre-ANSI). And there are many people who still say that, as I found in a quick Google Scholar search:

] Although the Java platform has been used as a multi-language platform, most of the low-level languages (such as C, Fortran, and C++) - (2016) https://dl.acm.org/doi/pdf/10.1145/2998415.2998416?casa_toke...

] Lifting these restrictions is primar-ily motivated by our desire to target low-level languages, such as C with pthreads - (2011) https://dl.acm.org/doi/pdf/10.1145/1929553.1929558?casa_toke...

] Use-after-free vulnerabilities have plagued software written in low-level languages, such as C and C++, - (2020) https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9152661...

Now that you've seen people call it low-level, you can't truthfully write a comment like you did at https://news.ycombinator.com/item?id=29710906 .


No, I can and I will, and it will still be truthful.

Because to most people with a firm understanding of the nature of English my statement means:

"When I, in current times not 40 years ago, hear people talk about C, they most often refer to it as a systems level language".

-

Of course, I forget this is HN and there are some people who think that it means:

I have never seen "C" and "low level" on the same line of text!

For these unfortunate cases, there is a belief that 40 year old K&R references (...) and some hastily assembled search results will change my reality... but that's a separate issue I'm not interested in.

Those people are definitely free to consider me a liar, the world will keep spinning for the rest of us.


I don't like responding to anecdotes with anecdotes, so rather than reply with a (IMO pointless) "what?! I hear people talk about C as a low-level language far more often than I hear them talk about it as a systems language", I prefer to give something more substantial.

Restricting my hastily assembled search to HN, I easily find comments from within the last few months referring to C as a low-level language ... and yes, as a systems language too.

HN is a casual setting with newer programmers.


C is the lowest-level language in common use, short of assembly language.

C lacks any high level abstractions. All the abstractions it does offer are hiding register and stack slot assignments (as local variables), code entry point addresses (as function names), ALU instructions (as operators), branching (as control-flow statements), and address arithmetic (as pointer operations). All of these are low, machine-level abstractions.

C was never a high-level language, even from its first day. It was specifically intended as a portable assembly language, by someone used to coding assembly language, to use porting an OS coded in assembly language to a new target host.


> C lacks any high level abstractions. All the abstractions it does offer are [...]

By that standard, practically all languages lack high level abstractions. Garbage collection? Hides pointer chasing and marking of memory locations. Dynamic dispatch? Hides a pointer to a function table. Functional programming? Hides pointers to closures. Closures? Hide pointers to data and function pointers.


And structures, unions, pseudo-meta programming via the macro processors, no exposure to IO unless on a CPU with MMIO.

JOVIAL and Algol dialects were also designed for creating OSes and no one calls them low level.


> And structures, unions, pseudo-meta programming via the macro processors,

Those exists in macro assemblers, for they are extremely thin abstractions, no thicker than jumping to a label instead of jumping to an absolute or relative address.

> no exposure to IO unless on a CPU with MMIO.

Well, since not all processors have I/O instructions (or dedicated I/O pins), the easiest way to implement portability is simply to not provide a direct access to them in the language, and let library functions handle it.


> Those exists in macro assemblers, for they are extremely thin abstractions, no thicker than jumping to a label instead of jumping to an absolute or relative address.

They’re much more than that because of type aliasing, which is what lets you write -> . = operations all day without each one literally being a memory access in asm.


Which kind of proves the point C doesn't provide all the necessary capabilities for a systems programming language.

As for macro Assemblers, IBM i one supports OOP constructs, so are OOP languages now low level?


Also functions, loops, conditional statements, and arrays are considered abstractions.


>C lacks any high level abstractions

macros


> Payment providers wont do business with private (personal) accounts, so you need a business bank account

Eh, I don't know where you've looked, but Stripe is one of the biggest around and you don't need a business bank account..


A couple thoughts after reading this. They aren't meant to be criticisms, just a reflection on my own experiences as well because I have had plenty of failures myself.

For one, failing is probable. Most small businesses fail. The chances that you get it right on your very first try is low. Sometimes it takes many failed business ventures before you learn all the lessons. A lot of the lessons can be learned from reading books though. The common and cliche things like "identify your target audience" and "researching competitors" and "see if there is an interest in the product" are mentioned in every book but still skipped by so many.

There is a lot of talk about the things being built and the technology, but almost no discussion about the marketing side which is arguably more important. I wonder how much effort was put into that aspect.

It sounds like there was not a lot of product/market research before building the thing. I'm guilty of this too, building a product nobody wanted because I didn't do homework first to see if anyone cared.

Some of the ideas sound like they had no passion behind them. For example, the affiliate site for selling dresses. Was that something that was inspiring, or simply an easy-way-to-make-money thing? I think that can have a huge effect in quitting or sticking with it.

And it also sounds like there was a lot of quitting too early because things weren't growing fast enough. The marketing aspect may have played a factor here, but from my experience...solo startups DO NOT grow fast. Having that expectation in the first place might have been the reason for such disappointment. Running a business is a long-term thing that could even span beyond your lifetime.


Sounds like they were unhappy working there and did not like the CEO or their management. Kind of interesting they are suing in an effort to go BACK to work there.


Something sounds really suspicious about this offer. How does a company afford to pay people 3k/month without anything in return? They're paying 3k/month just so some people adopt their technology?

This just raises red flags and smells.

There's got to be some catch like they are going to start charging those companies a monthly fee to use their product or license it after they have already committed and it's too late to change.


Left-bad, I mean, the left-pad fiasco should have been the wake up call.


How do you not feel embarrassed using such low quality insults..?


It was just a bad joke, but in all seriousness, that was a big wake up call for a lot of people about the tangled web of npm dependencies.


Disagree, it was mainly a wake up call that npm shouldn't allow package deletion, a policy they changed as a result.

Every other 'these kids and their dependencies' opinion over the left-pad incident was highly subjective.


I think it is hilarious when people argue with Trump on Twitter, because I realize he is 71 years old. He's literally someone's old grandpa on Twitter. How many 71 year olds do you know on Twitter? How many people do you know would argue and talk shit with a 71 year old grandpa on Twitter?

I understand he's not just _any_ 71 year old grandpa, but it's so funny to think about it that way.


Honestly, I doubt they did it for _financial_ reasons. Likely an old division that is being closed or downsized, like they specifically mentioned last time (the old cable tv divsion was being downsized in favor of the online streaming divsion). Most companies do layoff rounds at the turn of the year. Honestly, I think firing people can be a good thing. How many people do you work with that are total dead weight and you wish they were fired? It's normal business practice to do this, and 500 people out of 153,000 is 0.0032 or less than half of a percent of employees.


> My career (and surely the career of the article writer and anyone else who is not a bro) came as a result of the other 50%, talented, generous men and women whose shared their expertise and encouraged me.

I guess the difference is that some people don't need the encouragement of others in order to succeed. Many great programmers are self taught and self motivated. How has being gay made it harder to learn to program? Did people tell you gays weren't allowed? Did they tell you to quit because gays aren't good at coding? Did they ask you, "Wait, you're a programmer, and you're GAY!?" Did other programmers make fun of you for being gay? Was the encouragement you got specifically about being gay? Is it because you are gay that you needed the extra encouragement? Just trying to understand...


Bullshit. At some point, someone encouraged you to succeed.

Maybe it was when you grew up and were encouraged by any given authority figure to do something, maybe it was finding common ground talking about your wife instead of your husband, maybe it was when you didn't need to wonder whether you were turned down for skill or skin color, maybe it was when you knew someone was interested in you not your tits, but you were encouraged.

Personally, I'm going to encourage you to actually listen to other people's perspectives instead of challenging them to justify their life experiences.


> maybe it was finding common ground talking about your wife instead of your husband, maybe it was when you didn't need to wonder whether you were turned down for skill or skin color

And maybe I am a self-taught gay Puerto Rican who disagrees that gay people need special encouragement in order to succeed.


Fair enough, mu apologies for getting all Reddit-y.

I'm in the camp that at some point, everyone needs help. The unfortunate fact is, a lot of people aren't going to get the same amount of help, or even help at the right time, and they're going to fail as a result. Worse, they're not going to realize they could have done better.

When we're talking about continuing to try, and being positive and always working towards a solution, part of the conversation should ideally be that getting to that place involves something different for different people. Fair?


Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: