6 ms·
C is a 3-rd level of abstraction language. Currently, there is no 4-th level of abstraction, so C is a high-level language by definition of «level of abstractio
by drran 5y ago
C is a 3-rd level of abstraction language. Currently, there is no 4-th level of abstraction, so C is a high-level language by definition of «level of abstraction».
Language levels of abstraction:
1. Machine code
2. Assembler
3. A high-level language
C does allow low level things, e.g. access of machine registers or embedding of assembler or machine code, but it is also capable of quite high level of abstraction.
Some of 3-rd level languages allows higher level of abstraction, or hide low level abstractions, e.g. memory management, stack, byte order, bits per number, etc., hover none of them improves programmer productivity by an order of magnitude.
- rndm_access 5y agoWhich layer is Forth? xD
- endymi0n 5y agoWhich layer is an embedded Lua script controlling execution of a Java program running on the JVM within Rosetta2 and then getting translated into ARM microcode within the M1 CPU?
- astrange 5y agoM1 doesn’t have microcode; that’s an AMD/Intel implementation detail.
- drran 5y agoWTF is layer? If you are asking what level of abstraction is used by Forth, then the answer is: 2nd. It directly exposes stack, memory, and machine code and provides a thin wrapper on top of that. Developers can build higher levels of abstraction then, of course. It's possible to do an object-oriented programming in machine code, because compiler can. The trickier question is: What level is Lisp? Is it assembler for Lisp machine (because of opcodes like car, cdr, etc.)? Or, maybe, it is a 4GL because of it advanced meta-programming possibilities?
- von_lohengramm 5y agoThat does not describe all Forths. A Forth running on a Forth CPU would certainly be a 2nd level, but depending on how the Forth is implemented and designed, it could easily be seen as a 3rd level. Arguably, Forth is (can be) more abstract than C and almost a quasi-FP.
- drran 5y agoIt's possible to implement high-level abstraction in machine code, or compile a high-level language into low level machine code, however it's not possible to hide low-level, machine dependent details in a low level language. It's not possible to hide machine opcodes in machine code, or CPU registers in assembler, or stack in Forth, so a developer must learn these things and deal with them, which makes the development process slower. So, it's expected to see an order of magnitude improvement in development speed, on average, when jumping from machine code to asm, or from asm to a 3rd level language. Forth doesn't improve speed of development by an order of magnitude comparing to asm, because of the steep learning curve and low level stack management. I tried to learn Forth multiple times, but still cannot program in Forth freely, which makes it unique among 20+ other programming languages I know.
- lebuffon 5y agoIMHO Forth has a longer learning curve than other languages and requires a significant mental model shift if you are use to conventional languages. It does not suit everyone. It seems more like learning a new human language with a large number of words. Chuck Moore created Forth to improves his productivity versus conventional tools and there is some anecdotal evidence that it worked for him and those that worked with him, particularly where direct hardware control on new hardware could be interrogated and validated via the interpreter rather than an Edit/Assemble/Link/Test loop.
- marcus0x62 5y agoI don't know about layer, but according to this book[1], it is a fourth-generation language. I've never associated it with RPG and FoxPro, but I guess you learn something new every day. [1] - https://www.discoverbooks.com/Forth-The-Fourth-Generation-Language-Steve-Burna-p/0830604871.htm https://www.discoverbooks.com/Forth-The-Fourth-Generation-La...
- saberience 5y agoI would define fourth level languages by what they allow you to do, or what foot-guns they provide you with. For example, surely languages like Typescript are "level 4" as you cannot manipulate memory directly but only use the languages higher level type structures.
- drran 5y agoOn fourth level of abstraction, no procedures or functions are used. Copilot is at 4th level.
- hyperman1 5y agoThe 1980's want their marketing back. https://en.wikipedia.org/wiki/Fourth-generation_programming_language https://en.wikipedia.org/wiki/Fourth-generation_programming_... They considered things like excel 4GL: You program some formulas and excel magically finds out what the necesarry steps are to do the computation. A lot of vendors created graphical programming languages and declared them 4GL. The term mostly died because nobody could stop laughing.
- galangalalgol 5y agoThe term died, the dream festered on. It got rebranded as model driven development andany in the embedded world bought into it in the late 90s, some have only ditched it in the last year or two, while plenty more have followed a second rebranding and keep drawing... There are some good graphical languages, lego mind storm, code spells, gnu radio companion, simulink, and maybe, sometimes, labview. Those languages aren't object oriented, they represent data flow. I suspect that makes a difference. But mostly they are for quick prototyping or small designs. And that makes an even bigger one. Diagrams don't scale well.
- drran 5y agoLevel of abstraction ≠ Generation of languages. The first 3 generation of languages were powered by higher levels of abstraction, which were possible because of better machines. However, further increase in level of abstraction did not make developers an order of magnitude more productive, except for niche areas. Switching to a better development process (Scrum) can achieve order of magnitude improvement in developer performance, while switching of programming language cannot. Anybody can claim that their product is a next gen revolutionary market shaking breakthrough. It's the self-promotion, not a science.
- bee_rider 5y agoThat, in the conventional classification, C is considered a high level language, is definitely what I learned in some languages class. This seems like an odd result given that it is probably the least abstract language that the vast majority of programmers might ever encounter, outside the exercise or two on assembly that they might see in an architectures class. Sort of how, as far as I know, most (all?) PIC and AVR microcontrollers would be considered "very large scale integration" chips. This the best possible outcome, though -- since they used up these kind of "biggest classification that doesn't sound totally silly" labels in the 70's and 80's or whatever, we don't have to worry about classifying languages anymore, which was not really all that productive to do anyway. Although I do wonder what level Verilog should be considered.
- Ginden 5y agoSuch definition is just useless and therefore should be abandoned. > hover none of them improves programmer productivity by an order of magnitude. I disagree. I can write efficient SQL statement in 2 minutes, but implementing efficient multiple "table" join with spill to disk took me much longer than 20 minutes.
- delusional 5y agoAgreed. I can't really believe I am reading this discussion. Languages are just user interfaces. It's OBVIOUS that there's a difference between the granularity of the Java UI and the C UI. It's also OBVIOUS that such a difference would greatly impact the speed of use. I could write a garbage collector in C, in Java it's already there. The whole point is discussing those differences, so anyone saying they are the same has completely missed the point of the discussion. It's like saying Windows 11 and OS/2 are the same because they are both Operating Systems.
- coliveira 5y agoWhat you're missing is the level of comparison. Everything is different from everything else if you're looking only at differences. But if you want to classify concepts, you need to determine what are the similarities. So, yes, if you're talking about objects in the category of operating systems, W11 and OS/2 are in the same category. If you're looking at languages that offer high level constructs, C and Java are at the same level. Languages that offer only direct machine instructions (assembly) are at an inferior level.
- loup-vaillant 5y agoSQL is a special purpose language. Special purpose languages can be amazing (and SQL certainly is), but here we’re comparing general purpose languages. In this context, the question is more, are Lisp or Haskell, or Python 10 times as productive as C? I used to think so, but now I seriously doubt it. I mean, the reason I’m so much faster at writing small Python programs than I am at writing equivalent C programs, is because Python’s standard library is so damn huge. This is not a case of the language being more productive, this is a case of the work already being done.
- saagarjha 5y agoRespectfully: are these levels just something you created for this comment, or are they actually something you can back up with literature that agrees that they are the right levels or that they even exist at all?
- drran 5y agoThese levels are learned by software engineers on introduction to compilers. «A Compiler is a software that typically takes a high level language (Like C++ and Java) code as input and converts the input to a lower level language at once.» «Assembler A translator from assembly language programs to machine language programs. Compiler A translator from “high-level” language programs into programs in a lower-level language. Transpiler A translator from high-level language programs into programs in a different high-level language.» «The compiler is software that converts a program written in a high-level language (Source Language) to low-level language (Object/Target/Machine Language).»
- jug 5y agoI'd argue that the class of languages running within a virtual machine like Java (JVM) or .NET (CLR) ought to be placed in a higher level of abstraction. These are so detached from the physical reality that they become cross-platform, which in itself is also the goal.
- junon 5y agoErr... what? Did you make these terms up yourself, or are these established in some literature already? Because they make no sense. C isn't converted into assembler language unless you ask the compiler to. For example, LLVM lowers IR AST structures into target specific machine code. Assembler is never involved. ASM is just a human readable representation of machine code for a particular ISA. So in your mental model, C and ASM exist at the same level. Further, Java bytecode would exist above the the machine code level (again, alongside C then, since the VM is compiled to machine code) and Java on top of that. It just doesn't make any sense to define languages like this. I don't see any benefit, and I don't even see it as being correct.
- rezaprima 5y agoperhaps he/she meant 3rd generation language. https://en.wikipedia.org/wiki/Third-generation_programming_language https://en.wikipedia.org/wiki/Third-generation_programming_l...
- junon 5y agoJust because it's on Wikipedia doesn't mean it's a real thing. The only source for that page is some bizarro, circa-1998 website about "computer jargon". These are not academic terms that I've personally ever heard of. Happy to be wrong, but I'm not going to pretend they have any utility or legs.
- uxp100 5y ago3gl 4gl 5gl were common terms 30 years ago or so. More industry and advertising terms than academic. And 5gl was more like a Japanese government grant program than any particular set of language features IIRC.
- marcus0x62 5y agoMy memory of the whole "nGL" language thing was that it was more a marketing term than anything you would find in an academic paper. It was particularly common in the IBM world, for example in books[1] and advertisements[2] [1] https://www.oldcomputerbooks.com/pages/books/R504/james-martin-inc-joe-leben-the-arben-group/4gl-fourth-generation-languages-volume-iii-4gls-from-ibm-adl-adrs-ii-apl-as-csp-dms-gis-ic-1-sql-qbe-and https://www.oldcomputerbooks.com/pages/books/R504/james-mart... [2] I can't find a good example, but I remember seeing ads for "4GL" tools in Dr Dobbs regularly in the mid-90s.