Welche Programmiersprache?

KLOD

Active Member
#1
Hallo Leute, ich bin schon alt. Ich möchte es aber trotzdem noch programmierenlernen. Ich würde gerne maschinennah programmieren.
Es gibt so viele Programmiersprachen, doch alles kommt mir vor wie "Bömische Dörfer", wie man so sagt. Die komischen Scriptzeichen verwirren mich.
Ich würde gerne richtig herangeführt werden. Es fällt mir schwer, bei den (von oder in) Schlüsselworten Programmbefehle und Formate zu unterscheiden - oder überhaupt worum es gerade geht. Also bitte wundert Euch nicht, wenn ich seltsame Fragen (u. a. zu seltsamen Zeichen stelle). MfG. Klod.
 

AGGROStar1991

Well-Known Member
c-b Experte
#2
Was meinst du mit "maschinennah"? Betriebssysteme? Maschinensteuerungsprogramme in Lochkarten stanzen(durchaus ne coole Sache die man mal gemacht haben sollte)? C64?

Generell hat jede mir bekannte Programmiersprache Sonderzeichen. Gewöhn dich besser dran.
 

Patrik Graf

Well-Known Member
c-b Team
#3
Mit Google findest du ein paar gute Tutorials für x86 Assembler. Mehr Maschienennähe würde ich persönlich nicht empfehlen.

Ich finde es gut, dass du erst mal auf totaler Low-Level-Ebene loslegen willst... allerdings sollte noch gesagt sein, dass sich das Maschinennahe Programmieren von der Herangehensweise grundlegend zu modernen, problemorientierten Programmiersprachen unterscheidet.

Solltest du also doch mal von Assembler auf C umsteigen wollen, kannst du das zuvor Gelernte nur noch geringfügig einsezten. Das Programmieren in Assembler gibt dir zwar den totalen Überblick bezüglich der Architektur, für moderne und größere Anwendungen ist es allerdings (meiner Meinung nach) zu kompliziert.

Viel Spass dabei. :)
 

Zhavok

Well-Known Member
#4
Vielleicht solltest du mal sagen was du genau machen möchtest. Du sprichst zwar von maschinennah, aber vielleicht hast du falsche Vorstellungen wie weit du mit maschinennaher Programmierung kommst. Natürlich verwirren einen die ganzen Sonderzeichen und Keywords am Anfang. Das ist völlig normal. Du solltest auch nicht geschriebenen Code anschauen und versuchen ihn wie ein Buch zu lesen, sondern über gute Quellen langsam in das Thema eingeführt werden.
 

KLOD

Active Member
#5
Vielen Dank für Eure Antworten. Ich möchte wissen was der Computer tut. Verwandeln von Dezimal in Hexadezimal, Logische Schritte machen, vergleichen, addieren, Komplementär-Zahl bilden, subtrahieren, multiplizieren, potenzieren, Winkelfunktion, Verwandeln von Hexadezimal in Dezimal, Texten, (intern ohne Rechtschreibregel). Einfache Bildschirmbearbeitung für ein einfaches Monitor-Bild. Keine Spiele.
 

Mat

Well-Known Member
c-b Experte
#6
Das alles kann fast jede Programmiersprache bewerkstelligen (teilweise auch Excel). Nichts davon benötigt Maschinennähe, geht aber natürlich auch in Assembler.

Maschinennähe wäre zum Beispiel nützlich, wenn du Hardware programmierst oder einen Betriebssystemkern von grundauf mit C + ASM basteln möchtest.
 
Gefällt mir: KLOD

KLOD

Active Member
#7
Oh, diese Antwort finde ich gut und schön. Tatsächlich habe ich mit Excel einen Addierer (2 Zahlen) für 64 Bit geschrieben. Jede Zelle trägt eine: "1" oder eine: "0". Immer Zeilenweise für das jeweilige Resultat an: "1" oder "0" und dann jeweilige Zeilen fürs Carry. Die Unterste Zeile enthält das Resultat. Es ist nur eine Spielerei. LG KLOD
 

KLOD

Active Member
#8
Grade war ich schon dabei, zu beschreiben, warum es so schwierig ist. - Nur hat das keinen Zweck. Früher lernte ich noch BASIC mit den Zeilennummern. Heute gibt es so viele schlaue Leute, und ich komme nicht mehr mit. Die Vorstellung, wie ein Programm funktionieren könnte, - ist anders. Vielleicht, habe ich noch nicht den richtigen Prozessor. Es gibt das Blockdiagramm, und neuerdings hörte ich, dass man Prozessoren selber bauen kann. - Ich las mal, vor langer Zeit, von einem 15-järigen Jungen, der hatte die Idee. Das fand ich gar nicht schlecht! Leider waren die Antworten dabei, gar nicht so gut. Schade. - Ich hatte nur gestaunt. - Nun zur Sache: - Die Datendichte in den Schaltelementen wird immer größer. Diese Schaltelemente könnte man von außen beschalten. Gibt es so etwas zu kaufen. Oder ich las, sah und hörte von einem 1-Bit-Computer des WDR.
Er ist extra für Schulen gebaut, weil es sonst so schwer zu verstehen ist (Das ist nicht: "Das Rad, - neu erfinden."). Wo kann man so etwas kaufen?

Um bei der Programmierung, besser in das Lernen hineinzukommen, würde ich gerne viele Fragen stellen. Ich fange jetzt schon mal an.
Es gibt Schlüsselwörter, und davon sehr viele. Aber was sind davon Befehle und was (gewissermaßen) Befehle. Ich bekam einen Vorschlag für die Programmiersprache C. Wie funktioniert der Compiler für C?
 

AGGROStar1991

Well-Known Member
c-b Experte
#10
Wie ein moderner Compiler funktioniert zu verstehen braucht locker den Stoff eines Informatikstudiums, erhebliche Mathematik usw. Wenn dich das wirklich interessiert ist das Dragonbook was für dich : https://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools, aber ganz generell kann ich ziemlich davon Abraten bis du ein solides Verständnis für abstrakte Sprachen, Graphentheorie, Automatentheorie etc hast, das bringt ohne nicht besonders viel Spaß. So leid es mir tut, der Hauptteil deines längeren Posts ergibt für mich keinen Sinn. Ich nehme an du wirfst so viele Dinge durcheinander dass es extrem schwer ist dir zu folgen. Ich schlage vor wir konzentrieren uns mal auf eines nach dem anderen.

Betriebssysteme werden üblicherweise in C oder Ableitungen von C geschrieben( C++ oder ObjC). Wenn Assembler vorkommt( und das sollte er so wenig als irgendwie möglich!) Ist der Anteil üblicherweise deutlich 500 Zeilen und wird dank UEFI wohl noch weiter zurück gehen, da UEFI gleich in den 32 bit Protected Mode bootet und uns wenn man es richtig macht auch noch abnimmt, selbst Bootloader zu schreiben. Das minimiert den Anteil noch deutlich weiter. Ich habe übrigens nichts gegen Assembly an sich und halte mich sogar für deutlich in der besseren Hälfte der ASM-Programmierer. Dennoch würde ich von einigen Grenzfällen grundsätzlich davon absehen, in ASM irgendwelchen Produktivcode zu schreiben, zumindest auf allem das über mini-CPUs a la AVR hinaus geht. Einfach schon weil die Massen an Spezialwissen die man zum Optimieren braucht und die Massen an Zeit die das kostet auch nur so schnell zu sein wie das was ein neuer Compiler aus gut geschriebenem C oder C++ macht und die absolute Unlesbarkeit des Ergebnisses kaum zu rechtfertigen sind.

Kann man selbst Compiler schreiben/Betriebssysteme schreiben/Prozessoren bauen? Klar, genug Zeit und Kapital vorausgesetzt. Es gibt für all das auch Hobbyszenen. Bei Compilern und Betriebssystemen ist die übliche Schätzung ohne Vorwissen so bei 8-10 Jahren bis man so weit ist etwas nicht absolut banales zu schreiben, zumindest mit einem Job nebenher. Ohne Job gehts unter Umständen schneller, aber weniger als 5 Jahre wirds wohl nicht werden, einfach weil Erfahrung Zeit braucht. Prozessoren kann man am PC einfach so designen, die Umzusetzen wird hart( weil du wen brauchst der dir Silcium-Wafer bespielt per Lithographie) und auch hier ist der Teufel im Detail, zum Beispiel in der Verifikation, Optimierung (so daß man die Verkabelung per Lithographie darstellen kann und die Wege nicht zu lang werden ...). Ja, theoretisch kann man die aus NAND- oder XNOR-Gattern zusammen basteln, aber sie haben dann Monumentale Ausmaße. Ich hab vor Jahren mal einen 8-Bit Addierer gebaut, der passte mit etwas Testaufbau ungefähr auf ein A4-Blatt.

mfg
 
Gefällt mir: Mat

KLOD

Active Member
#11
Hallo, vielen Dank für die Antwort. Du schriebst, wenn ich "Du" schreiben darf, folgendes: "aber ganz generell kann ich ziemlich davon Abraten bis du ein solides Verständnis für abstrakte Sprachen, Graphentheorie, Automatentheorie etc hast, das bringt ohne nicht besonders viel Spaß." Diesen Rat, durch diesen Satz, nehme ich gerne an. Denn: Insbesondere, habe ich wenig Verständnis für "abstrakte Sprachen" - es sei denn, weniges abstraktes einer jeweiligen Sprache kommt vor. - Ich bin ein Befürworter für eine: "Eindeutige definitive Sprache". Na ja, Graphentheorie, - da wird man nicht dran vorbeikommen; - bleiben wir erst einmal bei den einfachen Graphen. - "Automatentheorie", an Automaten, habe ich im vergangenen Leben gearbeitet. Das war keine: "Theorie", das war Praxis, ... "etc"., da bleibt immer vieles, was man noch nicht weiß, - das ist eben so. - Dankeschön, ich lese gerade, dass das erlernen eines Compilers, keinen Sinn macht, - dem stimme ich auch zu, wenn ich eh nicht verstehe, was der Compiler herausgeschrieben hat. - Wie sieht es mit Phyton aus? Kann man das Assemblierte des Interpreters lesen? - Na, ich sehe schon, ASM ist auch nichts für mich. Im Moment - scheint - Assembler, noch das nahliegenste zu sein. Ich möchte verstehen was ich tue, - und was der Computer tut.

Gut gemacht! Du hast einen Adierer gebaut. Mit Hexadezimal-Zeichen? Binär reicht auch. Ehrlich, das finde ich eine gute, Sache!

Gestern hatte ich einen 64-Bit-Addierer in Excel geschrieben, nur aus "1"sen und "0"len geschrieben. Das heist, da waren:
1 Eingabe-Register für je 64 Zellen, plus einer Zelle für ein mögliches N-Bit, und noch
1 Eingabe-Register für je 64 Zellen, plus einer Zelle für ein mögliches N-Bit, und ein obligatorisches Carry-Bit.
Darunterfolgend sind sie so logisch verknüpft, dass sich am Ende (ganz unten nach 130 Zeilen)
1 Ausgabe-Register für je 64 Zellen, plus einer Zelle für ein mögliches N-Bit befindet oder eine höhere Zahl 2^65 (statt N-Bit) anzeigt.
Jetzt sind die weiteren Verknüpfungen so verbunden, dass jede 2. Zeile, die Carry-Bits anzeigen, (und ein ...)
Für Schulen, als Elektronik mit Leuchtdioden, wäre das eine schöne Sache.

Natürlich, ein Computer kann mehr. LG KLOD
 

AGGROStar1991

Well-Known Member
c-b Experte
#12
Es ist im Internet immer "Du". Grundsätzlich.
Abstrakte Sprachen ist nicht das Gegenteil von "Einfache Sprache", die sind ein Forschungsgebiet der Mathematik/Informatik (ggf. liest man auch die Bezeichnung "formale Sprachen"). Da gehts um Fragen wie welche Programme bestimmen können, ob ein Ausdruck Teil der Sprache ist, wie man die mit formalen Grammatiken ausdrücken kann, was man mit welchen Grammatiken ausdrücken kann und ähnliches. Auch Automatentheorie hat in der Mathematik eine feste Bedeutung. Da geht es um bestimmte formale Maschinen wie Turingmaschinen, Stackmaschinen, Registermaschinen und so weiter und die werden untersucht. Graphen im Sinne der Graphentheorie haben übrigens auch nichts mit gemalten Linien zu tun. Im wesentlichen sind das Mengen von Objekte mit bestimmten paarweisen Relationen.

Falls du die Programmiersprache "Python" meinst kann man das natürlich nicht lesen, das ist ja gerade der Zweck eines Interpreters. Obwohl ich mich wundere warum du das überhaupt willst. Das soll nun wirklich nicht böse klingen - aber du bist nicht einmal im entferntesten so weit, aus Bytecode den man eventuell aus dem JIT kriegt irgendeinen Mehrwert ziehen zu können.

Du möchtest verstehen was der Computer tut... Lass es. Das ist ein Ziel das nicht zu erreichen ist. Nehmen wir nur mal einen modernen amd64 Prozessor. Die sind seit Jahrzehnten zu komplex für einen einzelnen Menschen, nicht einmal die Planung dafür kriegt ein Mensch noch allein hin, das Layout etc. machen alles Computer( die Manuals für moderne Intel-Prozessoren sind ohne Sekundärliteratur und Zeug für spezifische einzelne Prozessoren , die nur da Interface definieren, sind 5000 Seiten lang). Darüber wie genau ein Programm ausgeführt wird durch Multi-Level-Caching, Branch-Prediction, Hyperthreading , dynamische Taktung, multiple ALUs, Vector-Processing, Multicore... kann man für einzelne Prozessoren für einzelne Programme gleich ein dutzend Doktorarbeiten schreiben( Ja das ist auch das Level das man da braucht). Also vielleicht ein Level höher? Betriebssysteme. Allein über Threading- und Schedulingstrategien sind Bibliotheken geschrieben worden. Über Sicherheitsaspekte noch mehr. Dateisysteme und Treiber sind da noch komplett unerwähnt. Compiler? Sind wir schon drüber und haben riesig viel ausgelassen. Nur so viel : Compiler sind das eine Programmierprojekt, das vmtl noch komplexer ist als Betriebssysteme.

All in All : die Idee wirklich, mehr als nur grob und spezifischen kleinen Gebieten, die Funktion eines heutigen Computers noch irgendwie zu durchblicken ist genauso eine Illusion, wie die komplette moderne Physik oder Mathematik verstehen zu wollen. Nobel, aber nicht entfernt realistisch.

Was du gebaut hast ist die simpeltste mögliche Umsetzung einer 64 bit Addition in einem Programm, hat aber mit einem physischen Adder aus Logikgattern nichts zu tun.

Und erneut : leg dich bitte erst einmal auf einen deiner Themenkomplexe fest, zum einen macht das uns die Diskussion leichter, zum anderen Anderen sie später zu lesen.

mfg
 

KLOD

Active Member
#13
Hallo
AGGROStar1991 Du schreibst:
"Was du gebaut hast ist die simpeltste mögliche Umsetzung einer 64 bit Addition in einem Programm, hat aber mit einem physischen Adder aus Logikgattern nichts zu tun." Allerdings hat das mit Programmiersprachen (zwar etwas, aber) nur wenig zu tun. Doch ich denke, ich darf dich hier widersprechen. Falls es Dir recht ist, können wir hier, oder in einem neuen Thread besprechen. Die Gatterschaltung die Du gebaut hattest, ist ja im Prinzip das Gleiche, ob es nun 8 sind oder 64. Allerdings, der Exel-Befehl: "=WENN(BN3=BN4;0;1)" stellt ein XNOR-Gatter dar.
Hierbei wird Bit "0" des 1. Registers mit dem Bit "0" des 1. Registers verglichen. Für das Cary gilt: "=WENN(UND(BO3;BO4)=WAHR;1;0)"
Hier handelt es sich um ein ein einfaches UND-Gatter; - und so wiederholen sich die Gatter (in der entsprechenden Anordnung) gegenseitig immer wieder, bis im Ergebnisregister die Antwort steht. Aber ich glaube, dafür braucht man keinen neuen Thread eröffnen. Im Prinzip ist es die gleiche Schaltung, die Du bautest.

Ich suche weiter nach der Programmiersprache.
LG KLOD
 

AGGROStar1991

Well-Known Member
c-b Experte
#14
Es wird dich weder jemand an die Hand nehmen und dir alles erklären, noch gibt es eine gebräuchliche Programmiersprache ohne Sonderzeichen, weil die sich schlicht bewährt haben.
 

Code

Well-Known Member
#15
Hi KLOD,
völlig subjektiv würde ich C++ empfehlen. Damit ist maschinennahe Programmierung als auch eine Programmierung auf hohem Abstraktionsniveau möglich.
Grüße
 

lord_haffi

Well-Known Member
c-b Experte
#16
@Code Für Anfänger C++ empfehlen? Möchtest du die Leute vergraulen? :p Nein, jetzt mal im Ernst, für Anfänger ist C++ doch denkbar ungeeignet. Sitze da selbst schon 'n halbes Jahr lang dran und blicke kaum durch o_O
 

Zhavok

Well-Known Member
#17
Naja, ich lerne C++ auch als meine erste Programmiersprache. Das ist schon machbar, aber man muss auch denk ich etwas ehrgeizig sein. Aber wenn man wirklich will und sich über kleine Erfolge freut, als hätte man gerade im Lotto gewonnen, dann kann man da schon viel Spaß dran haben. Ich denke jedoch C geht noch eher in die Richtung die @KLOD sucht. Es ist noch etwas näher am Prozessor als C++ (zumindest denke ich das^^) und trotzdem nicht so Hardcore wie ASM, sodass man auch größere Projekte damit noch realisieren kann.
 

Code

Well-Known Member
#18
@lord_haffi
Wenn die Anforderungen wären ich will schnell was programmieren und schnell fertig werden hätte ich Python empfohlen aber die Empfehlung basiert ja auf den Anforderungen, er wolle "maschinennah programmieren" und "möchte wissen was der Computer tut" und da gibt es im Grunde keinen leichten Weg. Ich finde C++ ist zum "so richtig" programmieren Lernen perfekt geeignet. Man lernt durch diverse mögliche Stolperfallen zwangsläufig mehr, auch über CPU, Threading, RAM, Cache, usw. Wie die Sprache sich weiter entwickelt ist auch ziemlich beeindruckend wie ich finde.
@Zhavok, bei mir das gleiche, C++ war meine erste Sprache und habe ich nie bereut, klaro ist Arbeit und man braucht Ehrgeiz aber es lohnt sich so sehr :cool:
Wegen C, ich sag mal vorsichtig, es ist im Grunde in C++ enthalten, also fast alles was man in C schreibt kann man auch in C++ kompilieren.


Aber wie gesagt, mit C++ ist eine nur ganz subektive Empfehlung auf Basis der wenigen Angaben und weil ich persönlich damit gut fahre und ohne Limit alles was ich will umsetzen kann und dabei noch viel gelernt habe. Daher ist natürlich auch die Frage wie weit will man oder @KLOD es sich antun ins Detail von bestimmten Themen zu gehen. Die Frage ist was ist eigentlich das Endziel? dann lässt sich das mit der "passenden" Sprache vielleicht auch noch besser beantworten ;)
 
Zuletzt bearbeitet:

asc

Well-Known Member
c-b Experte
#19
Ich würde für einen guten Mix aus System und Applikation eher zu Rust oder Go tendieren.
Wenn es nicht ganz so Hardwarenah sein muss, dann ginge auch C#.
 

KLOD

Active Member
#20
Hallo lord_haffi

@Code Für Anfänger C++ empfehlen? Möchtest du die Leute vergraulen? :p Nein, jetzt mal im Ernst, für Anfänger ist C++ doch denkbar ungeeignet. Sitze da selbst schon 'n halbes Jahr lang dran und blicke kaum durch o_O
Vielen Dank, Du sprichst mir aus der Seele. Ein Lob ist fällig ;):):):)

Ich suche weiter nach der Programmiersprache. (Ich glaub' ich las da was, das muss ich mir erst noch angucken, ... . Ff.)

LG KLOD
 
Oben