# Programmiersparche



## QSR123 (16. Januar 2013)

Gibt es eigentlich eine Computer oder Programmiersprache mit der man sich in Betriebssysteme einschreiben kann? 
Wenn ja: Wie heisst sie und wie kann man sie erlernen?


----------



## cann0nf0dder (16. Januar 2013)

assembler
ich kenn nix was maschinennaher ist 

bekannte haben sich damit selber ein eigenes mini betriebssystem geschrieben, das war mir aber dann doch zu hoch


----------



## Leandros (16. Januar 2013)

cann0nf0dder schrieb:


> assembler
> ich kenn nix was maschinennaher ist
> 
> bekannte haben sich damit selber ein eigenes mini betriebssystem geschrieben, das war mir aber dann doch zu hoch


 
Doch es gibt noch was Maschinen näheres. Binär code.


----------



## taks (16. Januar 2013)

QSR123 schrieb:


> Gibt es eigentlich eine Computer oder Programmiersprache mit der man sich in Betriebssysteme einschreiben kann?
> Wenn ja: Wie heisst sie und wie kann man sie erlernen?


 
Was meinst du mit einschreiben? Betriebssysteme schreiben?


----------



## QSR123 (16. Januar 2013)

Dass man sich entweder ein eigenes Betriebssystem schreibt oder dass man sein bestehendes Betriebssystem "optimiert".


----------



## bingo88 (16. Januar 2013)

Du brauchst Assembler nur für bestimmte Teile eines Betriebssystems. Das meiste kann in einer Hochsprache wie C/C++ oder mit passender Runtime z. B. auch in Java gemacht werden. Ein (nutzbares) eigenes OS zu schreiben ist allerdings schon ein gewaltiger Aufwand.


----------



## taks (16. Januar 2013)

Um ein Betriebssystem zu optimieren brauchst du den Quellcode. Wenn du den hast weisst du ja welche Programmiersprache 
Sonst kannst du z.B. C, C# oder C++ nehmen.


----------



## Leandros (16. Januar 2013)

QSR123 schrieb:


> bestehendes Betriebssystem "optimiert".


 
Das ist meist in C oder C++ geschrieben, im falle von Linux, denn nirgendwo anders kommst du an den Source Code vom OS.


Bitte hört auf C# zu empfehlen, es gibt keine Schlimmere und Sinnfreierere Sprache.


----------



## taks (16. Januar 2013)

Leandros schrieb:


> Bitte hört auf C# zu empfehlen, es gibt keine Schlimmere und Sinnfreierere Sprache.


 
Ist Binärcode besser


----------



## QSR123 (16. Januar 2013)

Und wo kann ich das C oder C++ erlernen? Gibt es Webseiten oder Bücher?


----------



## bingo88 (16. Januar 2013)

Klar. Die Suchmaschine deiner Wahl mit "C Tutorial" oder "C Buch" füttern und du findest massig Material.


----------



## QSR123 (16. Januar 2013)

Danke und wie ich mich ein Betriebssystem abändere weiss ich ja jetzt aber brauche ich ein extra Programm um eines zu schreiben? (Ich weiss dass des viel Arbeit ist aber ich wills trotzdem mal versuchen)


----------



## Kotor (16. Januar 2013)

Hi,

Ich glaube es würde reichen wenn du dich für eine Linux Distribution entscheidest, die benötigten Sourcen beschaffst und selbst auf deiner Hardware kompilierst. Wäre zumindest "optimiertes" OS

Die Frage ist außerdem ... was hast du vor ... programmieren lernen ? oder ärgert dich irgendetwas an deinem Jetzigen Betriebssystem ?


----------



## QSR123 (16. Januar 2013)

Ich will Programmieren Lernen um mein eigenes Betriebssystem zu schreiben. (Einfach zu Spaß auch wenn es viel Arbeit ist)


----------



## Kotor (16. Januar 2013)

"Große Geister haben Ziele, andere haben Wünsche"


----------



## bingo88 (16. Januar 2013)

QSR123 schrieb:


> Danke und wie ich mich ein Betriebssystem abändere weiss ich ja jetzt aber brauche ich ein extra Programm um eines zu schreiben? (Ich weiss dass des viel Arbeit ist aber ich wills trotzdem mal versuchen)


 Um ein eigenes OS zu schreiben, brauchst du grob folgende Dinge:


Assembler-Kenntnisse, denn es geht nicht ohne!
Optional: Kenntnisse in einer Hochsprache wie C, sofern du nicht alles in Assembler machen willst (was man aber durchaus machen kann)
Sehr gute Kenntnisse der Architektur und wie man mit ihr arbeitet (CPU, PCI, Chipsatz, Controller, Grafik usw. musst du ja alles steuern können)
Verständnis von der Funktionsweise eines Betriebssystems (Architektur, Speichermanagement, Paging, Taskmanagement, Prozesskommunikation, Sicherheit, Dateisysteme, ...)
Viel Zeit 
Dabei habe ich bestimmt noch was wichtiges vergessen... es ist halt ein mächtig komplexes Thema und Programmieren können allein reicht da auch nicht. Wenn du beim Booten einfach "Hallo, Welt" ausgeben willst, ist das vergleichsweise einfach, aber das ist halt kein Betriebssystem.


----------



## QSR123 (16. Januar 2013)

Danke schön!
Jetzt mal ehrlich: Brauche ich dazu ein extraprogramm?


----------



## Leandros (16. Januar 2013)

QSR123 schrieb:


> Ich will Programmieren Lernen um mein eigenes Betriebssystem zu schreiben. (Einfach zu Spaß auch wenn es viel Arbeit ist)


 
Lern erstmal C, man sollte immer klein Anfangen, es ist noch kein Meister vom Himmel gefallen. Wenn du C kannst, schaust du mal in C++ rein. Danach kannst du dir eine Linux Distro deiner Wahl (ich empfehle z.B Arch Linux) auf deinen Computer laden und compilen, außerdem könntest du kleinere Kernel Mods machen. 
Aber denke nicht das, dass so simpel ist. In 3 - 4 Jahren kannst du dann halbwegs an Linux / Kernels sinnvoll coden und nach weiteren 10 - 20 Jahren bist du wirklich gut. das geht leider nicht von Heute auf Morgen. 




taks schrieb:


> Ist Binärcode besser


 
Auf keinen Fall, war ja auch nur ein Scherz, Assembler ist schon am Hardware nähsten, Binär Code ist ja im Prinzip Maschinensprache.




QSR123 schrieb:


> Danke schön!
> Jetzt mal ehrlich: Brauche ich dazu ein extraprogramm?


 
HaHa. Kling irgendwie gut. Du kannst nich direkt mit einem OS coden anfangen, lern erstmal C, das sollte Herrausforderung genug sein.


----------



## QSR123 (16. Januar 2013)

Des war grad auf den beitag von gerade bezogen


----------



## bingo88 (16. Januar 2013)

Du brauchst unter andrem einen Assembler (z. B. NASM) und ggf. einen Compiler (z. B. gcc bei C/C++) für die Hochsprache, sofern du eine nutzen willst. Dann ggf. noch verschiedene andere Tools, um zum Beispiel ein Image fürs Booten zu erstellen. Aber wie gesagt, erst mal Programmieren lernen ist Voraussetzung für alles andere.


----------



## cann0nf0dder (17. Januar 2013)

*AW: Re: Programmiersparche*



Leandros schrieb:


> Doch es gibt noch was Maschinen näheres. Binär code.


 
jo, aber das wird seit lochstreifen nicht mehr genutzt, seitdem ist  binär code keine programmiersprache (mehr) sondern maschinencode direkt  wenn du schon klugscheißen willst 
alles was ausserhalb der cpu analysiert werden soll etc... wird normalerweise in assembler übersetzt solange nicht irgendwelche register oder operationen der cpu debugged werden sollen


----------



## Leandros (17. Januar 2013)

Thread gelesen? Scheinbar nicht. 
Ich habe doch schon geschrieben das man damit nicht irgendwas entwickeln kann.


----------



## Ahab (17. Januar 2013)

@TE: 

Welche Kenntnisse/Erfahrungen hast du denn bereits?


----------



## cann0nf0dder (17. Januar 2013)

*AW: Re: Programmiersparche*



Leandros schrieb:


> Thread gelesen? Scheinbar nicht.
> Ich habe doch schon geschrieben das man damit nicht irgendwas entwickeln kann.


 
was auch falsch ist, es wird nur nicht mehr benutzt weil assemblert als zwischenschritt längst etabliert ist, das hab ich aber grad schon geschrieben ... hast aber anscheinend nicht zuende gelesen 

wobei ich mir nichtmal sicher bin ob das nicht sogar schon vor den lochstreifen schon überholt war, ich kenn die dinger nur aus den archivschränken bei meinem ausbildungsbetrieb


----------



## Leandros (17. Januar 2013)

Binär code ist nicht überholt, was denkst du denn wonach Assembler code compiled wird? Richtig, in 0 und 1 (0 -> Spannung liegt an, 1 -> Spannung liegt nicht an) . Er wird also immer noch verwendet, du kannst nur nichts damit programmieren.


----------



## bingo88 (17. Januar 2013)

Ich hatte während meiner Schulzeit mal so ein Entwicklerboard mit irgend so einer kleinen CPU (8 Bit oder so) drauf. Da musste man das Programm entweder per EPROM laden oder über eine HEX-Tastatur in Binärcode (also als HEX-Zahl) nacheinander eintippen. Schön war das nicht () und das Teil war damals schon uralt


----------



## QSR123 (17. Januar 2013)

Ahab schrieb:


> @TE:
> 
> Welche Kenntnisse/Erfahrungen hast du denn bereits?



Ich habe bis jetzt noch keine grosse Programmier Erfahrung. Nur die Lego-Roboter von nem Schul Wahlfach und ich hab mal einfache internetseiten mit html programmiert. Aber eigentlich wollte ich gar nicht so was machen weil ich wusste dass das viel  Erfahrung braucht. Doch ich wollte mal wissen was man dazu braucht und wissen muss und bin jetzt trotzdem am überlegen ob ich mich an dieses Mammut-Projekt wage.


----------



## Ahab (17. Januar 2013)

QSR123 schrieb:


> Ich habe bis jetzt noch keine grosse Programmier Erfahrung. Nur die Lego-Roboter von nem Schul Wahlfach und ich hab mal einfache internetseiten mit html programmiert. Aber eigentlich wollte ich gar nicht so was machen weil ich wusste dass das viel  Erfahrung braucht. Doch ich wollte mal wissen was man dazu braucht und wissen muss und bin jetzt trotzdem am überlegen ob ich mich an dieses Mammut-Projekt wage.


 
Ohne dir die Motivation nehmen zu wollen: du wirst kein Betriebssystem programmieren. 

1. macht man das nicht so einfach, es ist mehr nötig als Wille und Geduld. Wenn du noch nicht mal überlicken kannst, was dafür überhaupt notwendig ist, wirst du bereits an der Konzeption scheitern (ohne gehts nicht und da wird noch nicht mal programmiert...).

2. brauchst du ungeheuer umfangreiche Kenntnisse im Bereich Testing, IT-Security, Design, Software-Design, Projektmanagement, Hardware-nahe Programmierung, Objektorientierte Programmierung, Kernel-Programmierung, Oberflächen-Programmierung ich glaube ich könnte hier noch eine Weile weitermachen. Das sind alles absolut essentielle Bereiche die niemals, nie und nimmer eine einzelne Person übernehmen kann. Das ist bis jetzt auch nie vorgekommen. Kein komplexes Betriebssystem auf Augenhöhe mit Windows, oder Linux wurde bisher von Grund auf mitsamt aller Komponenten (nicht nur der Kernel) von einer einzelnen Person aufgezogen. 

Nichts für ungut, aber mit deinen Vorkenntnissen ein Betriebssystem programmieren zu wollen... das ist als ob man einen 5-jährigen in einen Formel 1 Wagen setzt, weil er mit einem Bobby Car heil einen Hügel runtergekommen ist.

Ich würde dir empfehlen viel kleinere Brötchen zu backen. Klar, ein plumpes Konsolenprogramm hat keinen großen Reiz, wenn man hoch hinaus will. Aber beschäftige dich doch einfach mal mit App-Programmierung für Android, oder mit Webapplikationen auf Basis von Javascript, HTML5 und CSS3. Damit lassen sich schnell schöne Ergebnisse erzielen. Du bist motivierter und kannst dich im großen und ganzen mit dem beschäftigen, was dich tatsächlich interessiert. Nämlich Programmierung. Und nicht mit tausend anderen Sachen, die für dich wahrscheinlich nicht mal interessant, oder relevant wären.

Gerade bei App-Programmierung hast du ganz grob betrachtet alle Komponenten, die man gleichfalls für ein Betriebssystem benötigt - nur einfach viel, viel übersichtlicher, weniger komplex und weitaus besser verständlich. Und wenn du irgendwann gut darin bist, kannst du dir sogar noch privat ein paar Kohlen damit dazuverdienen.


----------



## QSR123 (17. Januar 2013)

Gut, und danke an alle die mir Geantwortet haben! Ich werde deinem rat befolgen und einfachere sachen machen wie z.b. Apps. Danke nochmal an alle!


----------



## cann0nf0dder (17. Januar 2013)

*AW: Re: Programmiersparche*



Leandros schrieb:


> Binär code ist nicht überholt, was denkst du denn wonach Assembler code compiled wird? Richtig, in 0 und 1 (0 -> Spannung liegt an, 1 -> Spannung liegt nicht an) . Er wird also immer noch verwendet, du kannst nur nichts damit programmieren.


 
du liest genau das was du lesen willst, der rest interessiert dich einfach nicht oder dir fehlt es an textverständnis ....



> was auch falsch ist, es wird nur nicht mehr benutzt weil assemblert als zwischenschritt längst etabliert ist



was war vor assemlber ? oder war assembler auf den steintafeln die moses gefunden hat, also vor computern und binär ?


----------



## Leandros (17. Januar 2013)

*AW: Re: Programmiersparche*



cann0nf0dder schrieb:


> du liest genau das was du lesen willst, der rest interessiert dich einfach nicht oder dir fehlt es an textverständnis ....



Bisschen von beidem? 





cann0nf0dder schrieb:


> was war vor assemlber ? oder war assembler auf den steintafeln die moses gefunden hat, also vor computern und binär ?


 
Nein, das war nicht auf den Steintafeln von Moses, das ist doch totaler Humbug, jeder weiss doch das Jesus der Computer Experte war.


----------



## godfather22 (20. Januar 2013)

Ich würde dir empfehlen vielleicht lieber mit Java anzufangen. Ich bin auch grade dabei mir das anzueignen. Ist in meinen Augen einfach nützlicher als z.B. C und eigentlich recht simpel. Mein kleines großes Ziel ist es einen Mod für Minecraft zu schreiben.
Für Java macht Brotcrunsher echt klasse Tutorials, in denen er erst einmal die Grundlagen ausführlich erklärt, dann Dinge wie GUIs anspricht und sogar 2D-Spieleentwicklug erklärt


----------



## Leandros (20. Januar 2013)

Ich würde dir empfehlen nicht mit Java anzufangen. Java ist viel zu weichgekocht. Lieber mit z.B C oder C++ anfangen, wenn du die Sprachen nämlich kannst, kannst du fast automatisch auch Java.


----------



## bingo88 (20. Januar 2013)

Leandros schrieb:


> Ich würde dir empfehlen nicht mit Java anzufangen. Java ist viel zu weichgekocht. Lieber mit z.B C oder C++ anfangen, wenn du die Sprachen nämlich kannst, kannst du fast automatisch auch Java.


 Dafür ist der Einstieg schwerer. Ich habe das jetzt schon einige Jahre im Bildungsbereich (aka Uni) verfolgen können, mit Java kommen die Leute in der Regel besser klar. Oder direkt eine Skriptsprache wie zum Beispiel Python.


----------



## Leandros (20. Januar 2013)

bingo88 schrieb:


> Dafür ist der Einstieg schwerer.



Aber nicht wirklich extrem, der Syntax ist ungefähr der selbe, nur du musst halt dich bisschen reinarbeiten in z.B die Speicher Allocierung, das macht Java ja alleine.


----------



## bingo88 (20. Januar 2013)

Leandros schrieb:


> Aber nicht wirklich extrem, der Syntax ist ungefähr der selbe, nur du musst halt dich bisschen reinarbeiten in z.B die Speicher Allocierung, das macht Java ja alleine.


 Du sagst es. Die Syntax ist weniger das Problem, sondern das drumherum. Wenn du Pilot werden willst, fängst du vielleicht nicht unbedingt mit einem Airbus A380 als erstes Flugzeug an 

Naja, es muss jeder selber wissen, was er/sie für richtig hält. Meine Erfahrung ist halt, dass Java von vielen wesentlich schneller und besser aufgenommen wird als C/C++.


----------



## nay (21. Januar 2013)

Wenn man mit Windows arbeitet gibts es keine einfachere Sprache für den Einstieg als C#. Als Einsteiger wirst du sehr schnell Applikationen schreiben und Erfolge sehen können. Visual Studio 2012 als 90 Tage trial runterladen und der Spaß kann beginnen. Tutorials gibt es wie bei Java, C/C++ ohne Ende im Netz.


----------



## Leandros (21. Januar 2013)

Erfolge hin oder her. C# ist eine sinnfreie Sprache. 
Dann doch lieber Java, hat die selben eigentschaften und bringt dir mehr. 
Ich bleib aber bei meiner Meinung, Fang mit C an.


----------



## Skysnake (21. Januar 2013)

nay schrieb:


> Wenn man mit Windows arbeitet gibts es keine einfachere Sprache für den Einstieg als C#. Als Einsteiger wirst du sehr schnell Applikationen schreiben und Erfolge sehen können. Visual Studio 2012 als 90 Tage trial runterladen und der Spaß kann beginnen. Tutorials gibt es wie bei Java, C/C++ ohne Ende im Netz.


 Und du verhunzt dir direkt alles...

Ich hab mit Java angefangen, und mir einige "eigenarten" angewöhnt, die mir jetzt SEHR zu schaffen machen, und mich immer wieder ärgern, wenn ich in C programmieren muss... Ich sag dir, VisualStudio und erst recht C# lassen einem VIEL VIEL VIEL zu viele Fehler durchgehen, wo man wo anderse direkt fett auf die Fresse fliegt, und sich dann groß wundert, warum denn das nicht so funktioniert, wie man es erwartet...

Überhaupt ne IDE verwenden, sollte man erst, wenn man wirklich die Basics drauf hat. Dafür tuts aber linux mit vi(m) und dem gcc. Mehr braucht man nicht. Naja gut, make ist noch nützlich.


----------



## fadade (21. Januar 2013)

(Wenn ich mal etwas Halb-OT einbringen kann


Skysnake schrieb:


> ... einige "eigenarten" angewöhnt, die  mir jetzt SEHR zu schaffen machen, und mich immer wieder ärgern, wenn  ich in C programmieren muss... Ich sag dir, VisualStudio und erst recht  C# lassen einem VIEL VIEL VIEL zu viele Fehler durchgehen, wo man wo  anderse direkt fett auf die Fresse fliegt, und sich dann groß wundert,  warum denn das nicht so funktioniert, wie man es erwartet...


 Das verunsichert mich jetzt ein wenig ... ich habe im Studium nur mit Java zu tun und hobbymäßig nutze ich tatsächlich C#; auf der Arbeit dann C++ (allerdings in Kombination mit .NET weil gewünscht).
Was sind denn das für Aspekte z.B. in C#, die einem in ("real") C/C++ den Tach verhunzen können? 
-> Jetzt bitte nicht als Kritik/Anstiftung verstehen, würde mich wirklich mal interessieren; und vielleicht könnte ich mich dann sofort etwas umgewöhnen ^^


----------



## Speed4Fun (21. Januar 2013)

Mit C# ist die .NET Programmierung wesentlich erleichtert worden. So sind z.B. keine Typ-Umwandlungen mehr notwendig. Alle Datentypen werden nativ von den .NET Frameworks unterstützt.

Und durch den Wegfall der Mehrfach-Vererbung ist der Programmierer zu einem strikteren Klassen- und Objekt-Design gezwungen. Was die Objekt- und Klassenhierarchie wesentlich übersichtlicher macht.

Die Programmierung eines Betriebssystems ist in C# allerdings kaum sinnvoll, schon alleine aus Laufzeitgründen nicht. Und es gibt keinen nativ von der CPU ausführbaren Code mehr.


----------



## Skysnake (21. Januar 2013)

fadade schrieb:


> (Wenn ich mal etwas Halb-OT einbringen kann
> 
> Das verunsichert mich jetzt ein wenig ... ich habe im Studium nur mit Java zu tun und hobbymäßig nutze ich tatsächlich C#; auf der Arbeit dann C++ (allerdings in Kombination mit .NET weil gewünscht).
> Was sind denn das für Aspekte z.B. in C#, die einem in ("real") C/C++ den Tach verhunzen können?
> -> Jetzt bitte nicht als Kritik/Anstiftung verstehen, würde mich wirklich mal interessieren; und vielleicht könnte ich mich dann sofort etwas umgewöhnen ^^


 
Das fängt schon bei so trivialen Sachen an, wie Deklarierte Variablen, die VisualStudio immer mit 0 initialisiert. Wenn du aber nen anderen Compiler nimmst, dann ist das eben nicht so....

Es sind halt unzählige winzige Kleinigkeiten, die man sich erlauben kann. C ist da aber gnadenlos und dir fliegt alles um die Ohren, und bis du dann mal verstehst WARUM dass denn auf einmal so ist, wirst du sehr sehr sehr sehr sehr viel Zeit verbraten, einfach weil du NIE auf die Idee kommst, dass das plötzlich ein Problem sein könnte. Ist ja bisher auch immer gelaufen...

Das ist halt echt ein Problem, da absolut profan, und daher auch sehr schwer sich bewusst zu machen und daran etwas dauerhaft zu ändern.


----------



## Leandros (21. Januar 2013)

Skysnake schrieb:


> Das ist halt echt ein Problem, da absolut profan, und daher auch sehr schwer sich bewusst zu machen und daran etwas dauerhaft zu ändern.


 
Ganz simple sachen sind im code das schwerste zu finden. 
Kann da einige Beispiele bringen, wo ich Heute einfach nur mit dem Kopf schütteln würde.


----------



## Skysnake (21. Januar 2013)

OH JA!!!


----------



## fadade (22. Januar 2013)

Also ich hab bisher keine Probleme 
Definitionen mach ich auch immer direkt, also kein
int myInt;
...
Wert von myInt holen
Nöp^^
Schlimmer ist es dann schon bei den Generika ... da hab ich selbst in Java mit Sachen Probleme bekommen, die in C# noch gingen


----------



## Darkey (22. Januar 2013)

Es gibt ne Menge Bücher auf Amazon etc. einfach mal Googeln ;D


----------



## DarkMo (24. Januar 2013)

na der thread gefällt mir >< willst dein eigenes os bauen und kannst nichma hello world? ernsthaft - beschäftige dich erstma 4 5 jahre mit dem thema, bevor du auch nur an die grundzüge der os-programmierung denkst


----------



## Defenz0r (24. Januar 2013)

Nicht nur das, bevor du dich solchen Dingen widmest, solltest du auch Hintergrundwissen haben.
Beispiel:

Die 8080/8086 CPU ist eine von Neumann entwickelte Architektur, Sie arbeitet alles nacheinander ab, 
es werden "Register" benutzt die von unterschiedlicher Größe sind.

Performance Beispiel

Eine Multiplikation benötigt 10ns
Eine Subtraktion   benötigt  1ns

a*(b-c)

Gesamt = 21ns

Optimiere Gleichung A 

gegeben: a*(b-c)

Lösung: a*b-a*c

Gesamt = 11ns

Außerdem solltest du Analytische Fähigkeiten besitzen/antrainieren und über gewisse Logik-Kenntnisse beherrschen ...

lg


----------



## Z3rno (24. Januar 2013)

Fang klein an, wenn du am Ball bleibst, schaffst du wahrscheinlich trotzdem kein OS xD, aber es schon vieles anderes nützlich drin, mach erstmal sowas wie "Hallo World", dann mal nen taschenrechner und sowas halt und dann holst du dir mal ein Board mit nen paar LED und nem LCD und arbeitest dich da rein, vielleicht macht dir sowas ja schon Spaß und du machst was sinnvolles damit, aufjedenfall versuch es einfach mal... und je nachdem wie alt du bist, machst du vielleicht eine Ausbildung in so einem Bereich oder ein Studium.


----------



## Speed4Fun (24. Januar 2013)

Defenz0r schrieb:


> ...Performance Beispiel
> 
> Eine Multiplikation benötigt 10ns
> Eine Subtraktion   benötigt  1ns
> ...



Bitte mal das Beispiel korrigieren.

Gleich 3 Fehler in 4 Zeilen ist eine Leistung.

Vielleicht kommst du selbst darauf.



Spoiler



Eine Multiplikation benötigt 10ns
Eine Subtraktion   benötigt  1ns

a*(b-c)

Gesamt = *11 ns*

Optimiere Gleichung A 

gegeben: a*(b-c)

Lösung: *a*b-a*c*

Gesamt = *21 ns*



Und eigentlich müsste es lauten:



Spoiler



Eine Multiplikation benötigt 10ns
Eine Subtraktion   benötigt  1ns

*a*b-a*c*

Gesamt = *21 ns*

Optimiere Gleichung A 

gegeben: *a*b-a*c*

Lösung: *a*(b-c)*

Gesamt = *11 ns*


----------



## Defenz0r (24. Januar 2013)

Wie in meinem EDIT zu sehen ist die Lösung a*b-a*c

(Habs falsch aufgeschrieben)


----------



## Skysnake (24. Januar 2013)

kommt darauf an, was der compiler macht  

ein -O0 oder -O3 ist da schon viel interessanter 

auch, ob es einen unterschied zwischen a*(b-c) und (b-c)*a gibt. (Normal nicht, der Compiler sollte daraus den gleichen Code machen

Es macht aber einen unterschied, ob ich (a+b)/2 mache, oder (a+b)*0.5


----------



## Leandros (24. Januar 2013)

Skysnake schrieb:


> kommt darauf an, was der compiler macht



Ohh ja. Da hatte ich letzens auf StackOverflow auch wieder tolle Sachen gelesen, hat der Compiler von einem (Cpp) einfach cout(s) übersprungen.


----------



## Defenz0r (24. Januar 2013)

Leandros schrieb:


> Ohh ja. Da hatte ich letzens auf StackOverflow auch wieder tolle Sachen gelesen, hat der Compiler von einem (Cpp) einfach cout(s) übersprungen.


 
Mir ist es mal bei Strings mit Leerzeichen in C++ passiert Beispiel:

String Antwort;

cout<<"Was war der xyz von xy ... ?"<<endl;
cin>>Antwort;

if(Antwort=="ASWD JKLÖ");
{
cout<<"Richtig ";
}
else{
cout<<"Falsch ";
}

Allerdings wird in C++ nicht mit equals(); wie in Java verglichen, wenn man ein Leerzeichen hat, kann es sein das man Probleme bekommt,
wenn man Sie nicht richtig auffüllt.

Das cout wird danach einfach übersprungen (richtig oder falsch).


----------



## Skysnake (24. Januar 2013)

hmm sollte eigentlich nicht passieren, da man beide überspringt. 

Aber gibt schon SEHR viele SEHR "lustige" Fehler...

Ich portiere gerade nen Linux Kernel Modul (Treiber unter linux). Ich sag euch DAS ist ein "Spaß"


----------



## Speed4Fun (24. Januar 2013)

Defenz0r schrieb:


> Mir ist es mal bei Strings mit Leerzeichen in C++ passiert Beispiel:
> 
> String Antwort;
> 
> ...


 
Kein Wunder, da ist ein Semikolon zuviel hinter 'if(Antwort=="ASWD JKLÖ")*;*', was einer leeren Anweisung entspricht, die im Wahrheitsfall ausgeführt wird.

Der Block danach sollte immer ausgeführt werden. Allerdings müsste der Compiler den else-Fall anmeckern.


----------



## Defenz0r (24. Januar 2013)

Speed4Fun schrieb:


> Kein Wunder, da ist ein Semikolon zuviel hinter 'if(Antwort=="ASWD JKLÖ")*;*', was einer leeren Anweisung entspricht, die im Wahrheitsfall ausgeführt wird.
> 
> Der Block danach sollte immer ausgeführt werden. Allerdings müsste der Compiler den else-Fall anmeckern.



Vertippt, aber im Skript ist es ohne Semikolon...

Probiers mal selbst aus!
Das funktiniert so  trotzdem nicht
Ein Leerzeichen im String kann man so nicht schreiben, ich glaube man muss es auffüllen.

In Java gibt es eine equals(); funktion mit der es ohne Probleme funzt.


----------



## nay (24. Januar 2013)

Defenz0r schrieb:


> Vertippt, aber im Skript ist es ohne Semikolon...
> 
> Probiers mal selbst aus!
> Das funktiniert so nicht^^
> Ein Leerzeichen im String kann man so nicht schreiben, ich glaube man muss es auffüllen.


 
Reden wir über std::string?


----------



## Defenz0r (24. Januar 2013)

Ja, der Namespace ist std

Und ja, den Include zu string hab ich nicht vergessen.


```
#include<string>
using namespace std;

string x;
```


----------



## Leandros (24. Januar 2013)

Wenn du in einem cin leerzeichen haben willst, musst du mit 
	
	



```
getline(cin, string);
```
 arbeiten.


----------



## Skysnake (24. Januar 2013)

Jup, ansonsten hast du lustige Sachen mit den nicht druckbaren Zeichen wie \n usw.

Überhaupt, wenn man mit C arbeitet, kann SEHR viel lustiges passieren 

Ich hab z.B. mal was in den Kernel-Sourcen geändert, und nicht gerafft, dass die nicht neu compiliert wurden 

Das war ein Spaß, heraus zu finden, woran es liegt  manche Änderungen wurden nämlich compiliert...


----------



## bingo88 (24. Januar 2013)

Leandros schrieb:


> Wenn du in einem cin leerzeichen haben willst, musst du mit
> 
> 
> 
> ...


 Ich weiß noch, das war in Visual C++ 6 SP6 buggy und man musste im Code der Runtime rumpfuschen  Da freut man sich, wenn der Code auf System A einwandfrei funktioniert und auf System B passieren komische Dinge, obwohl man nichts geändert hat. Ich hab mir damals aufgeschrieben, was man ändern musste, vielleicht finde ich das sogar noch  Sind so kleine Anekdoten am Rande


----------



## Leandros (24. Januar 2013)

Skysnake schrieb:


> Jup, ansonsten hast du lustige Sachen mit den nicht druckbaren Zeichen wie \n usw.



cin hört doch einfach stumpf nach einem leerzeichen auf irgendwas zu rallen. 





Skysnake schrieb:


> Überhaupt, wenn man mit C arbeitet, kann SEHR viel lustiges passieren
> 
> Ich hab z.B. mal was in den Kernel-Sourcen geändert, und nicht gerafft, dass die nicht neu compiliert wurden
> 
> Das war ein Spaß, heraus zu finden, woran es liegt  manche Änderungen wurden nämlich compiliert...



Oh ja. Da sind C und C++ sehr eigen, es hängt auch viel vom compiler ab, es gab mal lustige verbuggte builds von gcc im umlauf. Mensch war das ein spass, wenn der compiler dir ein error wirft der nicht existiert oder compiled und die binary korrupt ist. 





> Ich weiß noch, das war in Visual C++ 6 SP6 buggy und man musste im Code der Runtime rumpfuschen  Da freut man sich, wenn der Code auf System A einwandfrei funktioniert und auf System B passieren komische Dinge, obwohl man nichts geändert hat. Ich hab mir damals aufgeschrieben, was man ändern musste, vielleicht finde ich das sogar noch  Sind so kleine Anekdoten am Rande



*Hust* Windows *Hust* Muss spass gemacht haben.


----------



## bingo88 (24. Januar 2013)

Leandros schrieb:


> *Hust* Windows *Hust* Muss spass gemacht haben.


 Ja, macht es immer noch  Überlege gerade, ob ich einen Treiber für meine alte Webcam schreiben soll. Die tut es eigentlich noch, wird aber seit Vista nicht mehr supportet und ne neue kaufen ist irgendwie doof. Das Treibermodell von Windows ist allerdings, gelinde gesagt, unübersichtlich


----------



## Leandros (24. Januar 2013)

bingo88 schrieb:


> Ja, macht es immer noch  Überlege gerade, ob ich einen Treiber für meine alte Webcam schreiben soll. Die tut es eigentlich noch, wird aber seit Vista nicht mehr supportet und ne neue kaufen ist irgendwie doof. Das Treibermodell von Windows ist allerdings, gelinde gesagt, unübersichtlich


 
Ich hab mir das einmal angetan ... daraufhin habe ich mir Linux installiert. Das ist so simpel hier Treiber zu schreiben.


----------



## bingo88 (24. Januar 2013)

Leandros schrieb:


> Ich hab mir das einmal angetan ... daraufhin habe ich mir Linux installiert. Das ist so simpel hier Treiber zu schreiben.


 Das habe ich auch gemerkt, als ich mir die Sourcen von dem Kernelmodul für die Kamera angesehen habe


----------



## Leandros (24. Januar 2013)

Linux > all. So einfach ist das. Ich entwickel / nutze auch nur auf Linux basierte Systeme. Android und Arch Linux.


----------



## Skysnake (25. Januar 2013)

Naja....

Nen Bus-System schreibst du auch nicht gerade mal an einem Tag.. auch nicht in einer Woche oder einem Monat


----------



## Defenz0r (25. Januar 2013)

Achso, wusste ich noch nicht, das mit dem

```
getline(cin, string);
```

Wir machen während der Ausbildung Java und C++, wobei wir in Java Meilen weiter sind als in C++


----------



## Leandros (25. Januar 2013)

Java und C++ sind ja vom syntax sehr ähnlich. Jedoch gibt es diverse kleine Unterschiede zwischen den Sprachen. 
C++ ist etwas komplexer und hat lustige twists wie mit getline.


----------



## Skysnake (25. Januar 2013)

Und man kann damit auch anfangen viel Schindluder zu treiben wie mit C 

Aber nur C ist da der echte König 

Ich "liebe" das umbiegen von Funktionspointern im Linux Kernel... Das ist sooooo "toll"... 

Man liest Code, und hat NULL Ahnung, welche der 30 Versionen der Funktion jetzt wirklich ausgeführt wird... YEAH Baby.... Da bekommt man richtig geil das Kotzen und graue Haare.


----------



## fadade (25. Januar 2013)

Skysnake schrieb:


> Ich "liebe" das umbiegen von Funktionspointern im Linux Kernel... Das ist sooooo "toll"...
> 
> Man liest Code, und hat NULL Ahnung, welche der 30 Versionen der Funktion jetzt wirklich ausgeführt wird... YEAH Baby.... Da bekommt man richtig geil das Kotzen und graue Haare.


 
Aber verfehlt das nicht irgendwie das Ziel der Konsistenz und den Prinzipien der Softwaretechnik? (Sofern man OS als Software bezeichnen kann ..^^)


----------



## Leandros (25. Januar 2013)

Das ist der Linux Kernel. Da gibt es solche regeln nicht. ^_^


----------



## Skysnake (25. Januar 2013)

fadade schrieb:


> Aber verfehlt das nicht irgendwie das Ziel der Konsistenz und den Prinzipien der Softwaretechnik? (Sofern man OS als Software bezeichnen kann ..^^)


 Jaein...

Du willst halt protabilität UND Geschwindigkeit. Vor allem Geschwindigkeit und Stabilität. Deswegen machst du so manche turnereien. Normal hantiert man an solchen Sachen auch nicht rum 

Wenn man es muss, wirds aber eklig. Man ist halt verdammt nah an der Hardware dran, und muss GENAU wissen, wie man sein Linux denn compiliert, und bei neuer Hardware, wo man das nicht genau weiß, wirds halt echt mega eklig...

Vor allem, wenn man mit den tiefsten tiefen der Kernels noch nie was am Hut hatte... Da rennt man nach jedem Schritt gegen neu neue Wand 

Wenn dann aber was funktioniert ist die Freude um so größer 

Und jetzt überleg mal, dein Name taucht in den offiziellen Linux Kernel Sourcen auf


----------



## fadade (25. Januar 2013)

Skysnake schrieb:


> Wenn man es muss, wirds aber eklig. Man ist halt verdammt nah an der Hardware dran, und muss GENAU wissen, wie man sein Linux denn compiliert, und bei neuer Hardware, wo man das nicht genau weiß, wirds halt echt mega eklig...
> Vor allem, wenn man mit den tiefsten tiefen der Kernels noch nie was am Hut hatte... Da rennt man nach jedem Schritt gegen neu neue Wand


Ich weiß schon warum ich von sowas die Finger lasse ^^
Aber es gibt auch Leute denen genau das Spass macht 



Skysnake schrieb:


> Und jetzt überleg mal, dein Name taucht in den offiziellen Linux Kernel Sourcen auf


Hab ich mir nie angesehen und werde ich auch hoffentlich nicht müssen 
Aber was man hat das hat man!

Was ich damit sagen wollte:
Wenn man ein OS programmieren möchte sollte man - wie schon so oft geschrieben - Erfahrung und Können sein Eigen nennen können. Wenn man aber einfach mal ein "simuliertes OS" zum probieren/Spass/Lernen/etc. machen möchte spricht doch da so nix gegen?!? 
Wollte ich auch irgendwann mal, aber dann kam das Studium ...


----------



## DarkMo (26. Januar 2013)

klar spricht da nix dagegen, aber allein die erste seite lässt einem geneigten leser irgendwie die haare zu berge stehen ^^

"wie schreibt man ein os? mit welcher sprache?"
"assembler oder c zum bsp"
"ok, gibts bücher/tuts um c zu lernen?"
...

ich frag doch auch ned, ob ich als bwl'er spaßenshalber mal ne cpu bauen kann und was ich dazu brauche. "sand? ah kuhl, schaufel und eimer hab ich, was nu?"  mir persönlich gings weniger darum ihn völlig zu entmutigen ("auch der längste weg beginnt mit dem ersten schritt"), sondern ihm nur ein wenig realität einzuimpfen ^^ selbst ein simples bsp os macht man nichma so nebenher, scho garnich, wenn man scheinbar noch garkeine programmierkenntnisse hat >< geschweige denn von den (grund)kentnissen über aufbau und aufgaben eines os.


----------



## Speed4Fun (26. Januar 2013)

Endlich mal jemand, der es klar formuliert. Völlig unsinnige oder sagen wir besser unzureichende Ausgangsvoraussetzungen.


----------



## ryzen1 (26. Januar 2013)

Ich frage mich echt wie hier 6 Seiten entstehen konnten.


----------



## fadade (26. Januar 2013)

DarkMo schrieb:


> [ ... ]


Okay, das kann man so als Abschluss stehen lassen  



ryzen1 schrieb:


> Ich frage mich echt wie hier 6 Seiten entstehen konnten.


 Konversationsfreudiges Forum hier


----------

