|
I agree.
Having been through a Fortran, Cobol, PL/I, C cycle, the baby steps for each were fewer and fewer as one transitioned.
"A little time, a little trouble, your better day"
Badfinger
|
|
|
|
|
Well except for pure Lisp maybe. That one always seemed way different to me.
|
|
|
|
|
Yeah, Lisp was way different. I remember a time when it was really being pushed hard as an application language for expert systems, etc.
"A little time, a little trouble, your better day"
Badfinger
|
|
|
|
|
Once you've learned one of the "curly brace languages", you've learned nearly all of them because you've learned the concepts behind them. All the same concepts apply to all languages. After you learn the concepts, it's just a matter of semantics in describing what you want the code to do.
|
|
|
|
|
Seems like you asked ChatGPT to create questions for you to ask here nice try. NEXT !!!
Caveat Emptor.
"Progress doesn't come from early risers – progress is made by lazy men looking for easier ways to do things." Lazarus Long
|
|
|
|
|
I don't think of them as much the same. They're both C family so the syntax is similar, but that's about where the similarities end.
The datatypes for example, appear the same but they are not. A C int is not equivalent to a C# concept of an int as C's word size is not fixed, but varies by machine. Floats and doubles are the same but that probably has as much to do with IEEE as anything.
Using pointers in C# raises the question of why not use C? More importantly, the unsafe context only works on code that is fully trusted, greatly limiting where and how it can be deployed. There's almost nothing you can do with unsafe that you can't do with the marshalling infrastructure. Finally, using pointers often harms GC performance because you have to pin memory addresses so they don't get relocated during a collection.
I don't know how hard it is to grasp OOP. I picked it up in the 1980s. It has been too long, but I don't remember it being especially difficult - particularly once you understand how C++ implements classes and that you can make virtually the same constructs in C, just more verbose.
C is cross compatible source code. C# is cross compatible binary code. C# requires a VM. C does not. C runs in far more places - places where C# will never run.
Check out my IoT graphics library here:
https://honeythecodewitch.com/gfx
And my IoT UI/User Experience library here:
https://honeythecodewitch.com/uix
|
|
|
|
|
Agree, except: C# requires a VM ... unless I misunderstood your statement
|
|
|
|
|
C# requires a VM. C does not.
I wrote that. I can defend it. The CLI is a virtual machine. Its instruction set is IL. Its runtimes are the CLR.
Check out my IoT graphics library here:
https://honeythecodewitch.com/gfx
And my IoT UI/User Experience library here:
https://honeythecodewitch.com/uix
|
|
|
|
|
But it will compile finally to the target machine native processor code
|
|
|
|
|
It's JIT compiled, which is an implementation detail of the VM, similar to javascript on a modern browser.
Furthermore, setting aside that, it still cannot manage memory without the CLI, even compiled to native code. It requires the virtual machine in order to do basic operations. That machine is not simply part of the run time library like C's heap stuff. It's garbage collected - a process.
Check out my IoT graphics library here:
https://honeythecodewitch.com/gfx
And my IoT UI/User Experience library here:
https://honeythecodewitch.com/uix
|
|
|
|
|
honey the codewitch wrote: it still cannot manage memory without the CLI
This, along with some other 'limitations', is a limitation of the runtime, not the language.
And in relation to compiling, there is nothing in the language that prevents it being compiled.
=
|
|
|
|
|
Well said. Good words.
"A little time, a little trouble, your better day"
Badfinger
|
|
|
|
|
As OriginalGriff said the similarities between C and C# are pretty superficial. It's really just syntactical: braces for for blocks, semicolon statement separators, simple data types (int, char, float, etc.) and simple control statements (if, for, while, etc.), other things I can't think of right now.
C, C#, C++, Java, Go, Rust, Kotlin, others? All share much of this same basic syntax. It makes it somewhat simpler to learn or move between them.
My understanding is C# was Microsoft's answer to Java after losing it's court case against Oracle over the future of Java in the late 1990's.
|
|
|
|
|
As an old member here answered once...
Do not forget that my compiler compiled your compiler.
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpful answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
A proper C compiler is implemented in C and compiles itself.
|
|
|
|
|
Doesn't that hold for the great majority of languges/compilers since around 1970?
Usually you need to create a small bootstrap in some other language. I was told (so I have no URL to back it up) that Nick Wirth attempted to write a compiler for the very first, super simple core Pascal (1970) in Fortran, but gave up and reverted to assembler - I don't know for which machine. Once this was running, all following extensions to full Pascal was written in the simpler Pascal dialect, as is the common strategy for all language/compiler bootstrapping.
I guess that languages deviating a lot from the algorithmic style (such as APL, Prolog, SNOBOL, Lisp, ...) have compilers / interpreters written in other languages, at least for production work. (I would be sort of surprised if no APL programmer has written an APL interpreter in APL!) But for the algorithmic languages group, the great majority have compilers expressed in themselves. This, of course, does not prohibit compilers written in other languages - I guess one main reason for that is that the compiler developer knows C only.
I know of one case where no bootstrapping in another language was required: The compiler was written in itself. Its developer put the compiler source up on the document holder by his keyboard, and compiled each statement in his head, typing in the machine instructions he knew that the compiler would generate. Of course he knew - he had written the compiler! This was in 1974.
Admittedly, this was a rather simple language - abstraction level was lower than K&R C. Yet it illustrates the principle of writing a compiler in its own language.
Religious freedom is the freedom to say that two plus two make five.
|
|
|
|
|
To the best of my knowledge, the Multics PL/1 compiler was pretty much entirely written in PL/1. Of course, so was the great majority of the Multics operating system, from which sprung that which was called UNIX (formerly UNICS, a play on the Multics name).
In other, older, systems, compilers were quite often written entirely in the assembler of the host/target machine. I remember poring through the source of a COBOL-68 compiler trying to find a solution to what I thought was a rather stupid bug in the parser. The entire compiler was written in assembler, and printed out the source was over a foot thick.
|
|
|
|
|
trønderen wrote: I know of one case where no bootstrapping in another language was required:
The Forth Language, at least as originally created, was written like that. It requires a stack and very little beyond that.
|
|
|
|
|
You can end any initializer list and enumeration with a comma, just as in C.
... = { 1, 2, 3, };
Dennis M. Ritchie (may God rest his soul in peace) wrote that he was always forgetting to include a comma at the end of a row, when editing/extending such a list, and therefore changed the underlying grammar so that the C compiler accepts a last comma.
40 years later and many derived languages, nobody dared to change this.
It would be interesting to check if this syntax still applies to "modern" languages like JavaScript, Rust etc.
|
|
|
|
|
I learned C# many years ago coming from a Delphi background.
I found C# not that different from Delphi if you substitute begin and end with { and }
After all they were both developed by the same person. (Anders Hejlsberg - Wikipedia[^])
|
|
|
|
|
C# also supports pointers, malloc/free as well.
The Roslyn compiler supports code-generators, IDE analyzers, etc. C# is a much more productive & powerful language for most tasks. C is like portable ASM and is great to make component libs in.
|
|
|
|
|
zezba9000 wrote: C# also supports pointers, malloc/free as well. If those are significant elements in your C# programming, I think you should consider returning back to C++.
Religious freedom is the freedom to say that two plus two make five.
|
|
|
|
|
No, I really should not.
As C# productivity far exceeds that of C++ IMO. And normally code like this is rare. The compiler speed, Roslyn code-generators and compiler reflection is far better than C++ which is of huge value in todays world. Even for game dev. Is C# perfect, no but neither is C++. I actually use C way more than C++.
|
|
|
|
|
lol, no. So many reasons for a hard no.
|
|
|
|
|
As I remember it, C was the new kid on the block when I got out of college, designed and developed for the new UNIX operating system being promulgated by the Bell Telephone Company. Unlike FORTRAN, COBOL, and PL/1, each line of code compiled into only a few assembler instructions. But it had it's shortcomings. Because of the lack of strong typing and need to use explicit pointers, it was also an error prone language. Programmers had to really understand the hardware and how to use pointers effectively.
Advances in language theory and the advent of visual interfaces, such as Vermont Views, Windows, and OS/2, C was enhanced with strong typing, creating C++, and the Windows Forms visual UI libraries were added by Microsoft, creating C#.
__________________
Lord, grant me the serenity to accept that there are some things I just can’t keep up with, the determination to keep up with the things I must keep up with, and the wisdom to find a good RSS feed from someone who keeps up with what I’d like to, but just don’t have the damn bandwidth to handle right now.
© 2009, Rex Hammock
|
|
|
|
|