amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > imsg zeug in C [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- 3 [ - Beitrag schreiben - ]

19.08.2007, 18:16 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
ASM ist auch schneller als C, das war nicht die frage.
Fast jeder Maxonbasic befehl hat eine unmenge an sicherheitabfragen,
weil der User könnte ja was falsches übergeben oder es könnte
was unerwartet auftreten.
Unter ASM kannst du ganz genau das machen was du willst,
normalerweise weiss man ja welche eingaben kommen können und
daher legt man die überprüfungen selbst fest.

Das ASM schneller ist als C war vielleicht noch zur 68000er Zeit richtig. Allerdings wird es schon beim 020er schwerer ASM mit der Hand zu optimieren. Der C-Compiler bekommt das schon besser hin.
Also bekommt man heute mit C schnellere Programme hin als mit ASM, weil der Compiler besser optimieren kann. Bzw. könnte man das auch mit ASM machen, allerdings wäre das wirklich hochkomplex.

Außerdem gibt es keine Fehlerkontrolle (z.b. bei Poke) bei MBasic. Steht glaub ich auch in der Doku. Z.b. dürfte dann z.b. Pokel 4,0 nie laufen. Könnte man eine Fehlerkontrolle z.b. bei Poke einbauen, dann hätte man sogar schon Speicherschutz. :D
Zitat:
>Außerdem: MBasic scheint wohl nur reinen 68000er-Code zu generieren.

Jain, einige befehle z.b. ungrade adressionen erfordern den 020...
Das DTMF teil hab ich auf C sogar auf 68060 optimiert, war trotzdem
nicht schneller als MB.

Dann laufen die MB-Programme nicht mehr auf einem 6800er?
Zitat:
>Und: Es gehen auch keine Befehle die FPU-Register belegt haben
>möchten. Ich tippe hier z.b. von 3D-Libs. Das ist eine der vielen
>Grenzen von MB. :(

Von 3D hab ich keinen schimmer, ich meinte auch die grenzen der
Geschwindigkeit.

Es gibt halt Libs die auf FPU-Register beharren. Da ist dann nix mehr mit MB. Leider. Somit ist dann z.b. OpenGL für MaxonBasic immer unerreichbar.

--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 18:37 Uhr

MaikG
Posts: 5172
Nutzer
>Außerdem gibt es keine Fehlerkontrolle (z.b. bei Poke) bei MBasic.

Hab ja auch fast geschrieben.

>Steht glaub ich auch in der Doku. Z.b. dürfte dann z.b. Pokel 4,0 nie laufen.

Wieso sollte das nicht gehen? Du kannst eine 0 an position 4 schreiben.
Fehlerkontrolle, nicht Speicherschutz...
Währe aber auch möglich, sinnvoller ist es allerdings so zu proggen
das man keinen mist baut.



>Dann laufen die MB-Programme nicht mehr auf einem 6800er?

Ja, führen zum Deathend. Versuchst du immernoch zum 000er kompatibel
zu sein?

[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 18:48 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von MaikG:
>Außerdem gibt es keine Fehlerkontrolle (z.b. bei Poke) bei MBasic.

Hab ja auch fast geschrieben.

>Steht glaub ich auch in der Doku. Z.b. dürfte dann z.b. Pokel 4,0 nie laufen.

Wieso sollte das nicht gehen? Du kannst eine 0 an position 4 schreiben.

Genau das ist das Problem. Dies dürfte nie funktionieren, gerade an dieser berühmten Adresse...
Zitat:
>Dann laufen die MB-Programme nicht mehr auf einem 6800er?

Ja, führen zum Deathend. Versuchst du immernoch zum 000er kompatibel
zu sein?


Hab eben kurz mal nachgesehn: Es gibt auch MBasic für OS1.3. Der Compiler ist aber wohl der gleiche. Also OS1.3 nur 020er aufwärts?

Nun, ich schreib die Programme so das sie bei mir laufen und versuche dann auch diese so zu schreiben, das es noch auf möglichst unterschiedlichen Systemen läuft.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 18:54 Uhr

MaikG
Posts: 5172
Nutzer
Du darfst bei einem 000 das nicht machen:

POKEL 100003, &hFFFFFFFF

damit schreibst du auf eine ungrade adresse, das ist eine 000/010
Limitation und unabhängig vom Compiler.

[ - Antworten - Zitieren - Direktlink - ]

19.08.2007, 22:09 Uhr

NoImag
Posts: 1050
Nutzer
Zitat:
Original von thomas:
@NoImag:
Zitat:
Du kannst in C eine Variable jederzeit deklarieren.

Nein, kann man nicht. Bei C++ gibt es einige Ausnahmen, bei denen man Variablen mittem im Code deklarieren kann. Bei C jedoch muß eine Deklaration immer am Beginn eines Blocks stehen. Der Unterschied zu anderen Programmiersprachen ist hier, daß jeder {}-Block geeignet ist, also auch nach einem if oder while oder einfach so. Bei anderen Sprachen muß es der Beginn einer Prozedur sein. Jedanfalls kann man aber nicht Deklarationen und Code miteinander mischen, man muß immer einen Block öffnen, um eine Deklaration vorzunehmen.


Der gcc schluckt es so, wie ich es geschrieben habe. Aber kann sein, dass er C-Code als C++-Code interpretiert.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 16:38 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von NoImag:
Das stimmt so nicht. Du kannst in C eine Variable jederzeit deklarieren. Der einzige Unterschied zu Basic ist, dass die Variable vor oder bei der ersten Benutzung tatsächlich deklariert werden muss:

int a, b;
irgendwelcher Programmcode
int c = a + b;

Tschüß

Zitat:
Original von thomas:
Nein, kann man nicht. Bei C++ gibt es einige Ausnahmen, bei denen man Variablen mittem im Code deklarieren kann. Bei C jedoch muß eine Deklaration immer am Beginn eines Blocks stehen. Der Unterschied zu anderen Programmiersprachen ist hier, daß jeder {}-Block geeignet ist, also auch nach einem if oder while oder einfach so. Bei anderen Sprachen muß es der Beginn einer Prozedur sein. Jedanfalls kann man aber nicht Deklarationen und Code miteinander mischen, man muß immer einen Block öffnen, um eine Deklaration vorzunehmen.

Hatten wir schon mal, das Thema.
Variablen kann man an beliebigen Stellen im C Code deklarieren, wenn man sich auf den C99 Standard beruft. Der existiert, wie man leicht erkennen kann, seit acht Jahren und wird sowohl von gcc, als auch vbcc, zumindest was den Punkt der Variablendeklarationen (und z.B. dem //-Kommentar) angeht, umgesetzt.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 16:47 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Das ASM schneller ist als C war vielleicht noch zur 68000er Zeit richtig. Allerdings wird es schon beim 020er schwerer ASM mit der Hand zu optimieren. Der C-Compiler bekommt das schon besser hin.

In der Theorie.
Zitat:
Also bekommt man heute mit C schnellere Programme hin als mit ASM, weil der Compiler besser optimieren kann. Bzw. könnte man das auch mit ASM machen, allerdings wäre das wirklich hochkomplex.
Nun ja. Assembler ist eine Möglichkeit Programme, die unter C zu langsam laufen, so zu optimieren, dass sie gar nicht mehr laufen.

Wenn die C-Compiler wirklich so viel besser geworden wären, wäre das wirklich toll. Aber gerade im Amiga-Bereich findet wohl kaum ein solche Weiterentwicklung statt, schon seit langem nicht mehr. Es aber vielmehr so, dass CPUs immer mehr auf die Ausführung von 08/15 C-Programmen optimiert werden (weil nunmal der größte Teil der Anwendungen und vor allem auch Benchmarks in C geschrieben wird), so dass clevere Optimierungen auf Compiler- oder Assembler-Handarbeits- Seite ein immer schlechter werdendes Aufwand/Nutzen Verhältnis bekommen.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 16:55 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Geschwindigkeitstechnisch stoße ich immer wieder an die Grenzen von MB. Aber es kommt halt auch darauf an was man programmieren möchte.

Selbst ACE ist im Integerbereich schneller(!) als MBasic. Außerdem: MBasic scheint wohl nur reinen 68000er-Code zu generieren.

Es generiert generell sehr interessanten Code, wie ich beim Debuggen feststellen durfte.

So benutzt der durchschnittliche Programmierer normalerweise z.B. x<<5 statt x*32, weil die Integer Einheit der CPU das schneller verarbeiten kann. Wenn man aber im Code sieht, dass MBasic für ersteres (im Gegensatz zum zweiten Konstrukt) ein extra Unterprogramm aufruft, inkl. diversen Register-Verschiebe und -Sicherungs-Overhead, dann versteht man sehr schnell, warum ein C oder Assemblerprogramm um Welten schneller ist, wenn man ein normales, durchschnittlich optimiertes Programm heranzieht.
Ein unnormales, nicht oder falsch optimiertes Programm mag dafür aber in MBasic die gleiche Performance wie in C hinlegen. Je nachdem.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 18:05 Uhr

Der_Wanderer
Posts: 1229
Nutzer
... oder Amiblitz3 benutzen, da ist der Code immer optimal ;-)
Das ist womöglich der "aktuellste" 68K Compiler.
Er enthält sogar Optimierungen für PPC und x86 JIT.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 21:24 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Holger:
So benutzt der durchschnittliche Programmierer normalerweise z.B. x<<5 statt x*32, weil die Integer Einheit der CPU das schneller verarbeiten kann. Wenn man aber im Code sieht, dass MBasic für ersteres (im Gegensatz zum zweiten Konstrukt) ein extra Unterprogramm aufruft, inkl. diversen Register-Verschiebe und -Sicherungs-Overhead, dann versteht man sehr schnell, warum ein C oder Assemblerprogramm um Welten schneller ist, wenn man ein normales, durchschnittlich optimiertes Programm heranzieht.
Ein unnormales, nicht oder falsch optimiertes Programm mag dafür aber in MBasic die gleiche Performance wie in C hinlegen. Je nachdem.


Daher kommt vermutlich auch, das Shiften meistens langsamer(!) ist als eine Ganzzahldivision. Reines shiften ist etwas schneller, aber wenn man Klammern muß, dann wird es komplexer und langsamer. Eins der vielen Merkwürdigkeiten von MBasic. Das bekommt man aber erst mit, wenn man Speedtests macht.

Ich finde es ja schade das man MBasic nicht irgendwie "patchen" kann, das es solche "Späße" nicht mehr macht (Vermutung).
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 22:24 Uhr

NoImag
Posts: 1050
Nutzer
@Ralf27:
MBasic lässt sich mit Sicherheit entsprechend patchen. Es dürfte aber weniger Aufwand sein, gleich einen neuen Basic-Compiler zu schreiben.

Tschüß


[ - Antworten - Zitieren - Direktlink - ]

20.08.2007, 22:37 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von NoImag:
@Ralf27:
MBasic lässt sich mit Sicherheit entsprechend patchen. Es dürfte aber weniger Aufwand sein, gleich einen neuen Basic-Compiler zu schreiben.

Tschüß


Ich vermute aber mal das keiner einen neuen Basiccompiler schreiben würde, da es einmal recht viel arbeit ist und zum anderen eigentlich keiner mehr in Basic programmiert. Leider ist ja AmiBlitz komplett anderst als Basic, bzw. ist der Unterschied zwischen Basic und AmiBlitz ca. genau so groß wie zwischen Basic und C. Meine bescheidene Meinung.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 10:01 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Ralf27:
Ich vermute aber mal das keiner einen neuen Basiccompiler schreiben würde, da es einmal recht viel arbeit ist und zum anderen eigentlich keiner mehr in Basic programmiert. Leider ist ja AmiBlitz komplett anderst als Basic, bzw. ist der Unterschied zwischen Basic und AmiBlitz ca. genau so groß wie zwischen Basic und C. Meine bescheidene Meinung.

Nunja, Aufwand/Nutzen Rechnungen muss man, wenn es um Amiga geht, wohl anders führen. Lassen wir mal weg... Ein einfacher Basic-Compiler wäre relativ einfach zu programmieren. Den würde aber niemand benutzen. Hier gibt es ja schon eine gewisse Minimum-Forderung, wie Library-und am besten Strukturenunterstützung, und dann soll das Ganze die offensichtlichen Schwächen von MBasic nicht haben.

Ob das überhaupt konzeptionell unter einen Hut gebracht werden kann, ohne am Ende eben einen Basic-Dialekt zu haben, der sich signifikant von MBasic unterscheidet, weiß ich nicht. In dieser konzeptionellen Arbeit würde vermutlich auch der größte Aufwand drin stecken.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 10:10 Uhr

MaikG
Posts: 5172
Nutzer
>aber wenn man Klammern muß, dann wird es komplexer und langsamer.

Unter Basic kannst du wenigstens komplexere sachen machen.
Wenn du bei z.B. bei C- if anweisungen berechnungen mit rein
machtst geht es nicht. Da brauchst du eine extra Variable.

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 10:25 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von MaikG:
Unter Basic kannst du wenigstens komplexere sachen machen.
Wenn du bei z.B. bei C- if anweisungen berechnungen mit rein
machtst geht es nicht. Da brauchst du eine extra Variable.


Wie kommst Du denn auf den Quatsch?
Selbstverständlich darf in C innerhalb von if(...) jeder beliebige Ausdruck stehen. Da braucht niemand eine extra Variable. Genaugenommen kannst Du da sogar deutlich mehr reinschreiben, als sinnvoll wäre.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 12:38 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Ralf
Das stimmt einfach nicht. Amiblitz ist sehr änhlich zu anderen Basic Dialekten. Allerdings hat man ZUSÄTZLICH die Möglichkeit, etwas komplexer und strukturierter zu programieren, was dann eher in die Richtung C geht. Aber man MUSS das nicht. Es gibt auch inline 68K, x86 und PPC Assembler. Aber man MUSS es nicht benutzen. Man kann auch schön brav bei Standard Basic bleiben. Es gibt natürlich ein paar syntaktische Abweichungen, aber das gibts in jedem Basic Dialekt.

Ich bin ja dabei, quasi ein neues Basic API zu schreiben, d.h. einen neuen Befehlssatz für Amiblitz, der Amiblitz mit EINFACHEN Befehlen dazu befähigt, aktuelle Dinge zu tun, wie 24bit Bilder, AHI sound oder TCP/IP, und zwar systemkonform. Eben das, was "alten" Basics fehlt, oder eben nur im "C Stil" hineinbauen lässt.


--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 13:17 Uhr

DrNOP
Posts: 4118
Nutzer
Zitat:
Original von MaikG:
Unter Basic kannst du wenigstens komplexere sachen machen.
Wenn du bei z.B. bei C- if anweisungen berechnungen mit rein
machtst geht es nicht. Da brauchst du eine extra Variable.

Ja, genau! I-)

Dann fang' mal hier an zu lesen, mach dort weiter und dann sag' nochmal, man könnte in C nicht viel zu viel Mist in eine Anweisung schreiben.

Ich hab' mal einen beliebigen Abschnitt aus einem der Siegerbeiträge des "International Obfuscated C Code Contests" hier 'reinkopiert:
C code:
if(X(4)==w-1 , pr("n"),0 , pr("%*s", I(l+1), "")) (
			(R(4)+1)%(w*l)==0 && l>1)&&
			pr("n"),0))
			do(
				1&~1,
				pr("Syntax: %s <x> <y> [<z>]n", b[0])||f(15)
			)((a&~1)
...


Die Disziplin, die hier schon öfter angesprochen wurde verlangt C nicht - der Programmierer muß selbst darauf achten daß er sie einhält, damit was brauchbares rauskommt.
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 16:33 Uhr

thomas
Posts: 7718
Nutzer
@DrNOP:
Zitat:
Die Disziplin, die hier schon öfter angesprochen wurde verlangt C nicht - der Programmierer muß selbst darauf achten daß er sie einhält

Du merkst aber schon, daß du dir in diesem Satz selbst widersprichst ? "Der Programmierer muß selbst darauf achten": das nennt man Disziplin. Und wenn der Compiler es nicht verlangt, kann er es nicht gleichzeitig fordern. Das ist ein Widerspruch in sich.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomasrapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 17:17 Uhr

DrNOP
Posts: 4118
Nutzer
@thomas:
Ich denke eher, du interpretierst den Begriff "Disziplin" anders.
Habe ich geschrieben, daß der Compiler vom Programmierer Disziplin verlangt? Wo widerspreche ich mir?
Die Frage ist nicht ob Disziplin nötig ist, sondern wer sie für nötig hält. Und das ist ganz sicher nicht der Compiler (bzw. der nur in syntaktischer Hinsicht), geschweige denn das Design der Sprache C.

Um lesbaren, wartbaren, funktionierenden Code ohne "Schweinereien" zu bekommen ist ganz allein der vor dem Computer Sitzende verantwortlich, sonst niemand. Sonst könnte es einen solchen Wettbewerb wie den Obfuscated C Code Contest überhaupt nicht geben. Versuch mal, einen solchen Wettbewerb für Oberon oder Modula zu veranstalten ... ;)
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 18:04 Uhr

whose
Posts: 2156
Nutzer
@DrNOP:

Ich denke, Du hast eine falsche Vorstellung von "Disziplin" und "Zwang". Disziplin ist etwas, was das Individdum selbst aufbringen muß. Man kann das Individuum durch Vorschriften drauf "trainieren", einer gewissen Disziplin zu gehorchen, aber das erbringt nicht zwingend einen Erfolg.

Auf Programmiersprachen angewandt sehe ich die Situation wie folgt: Bei C ist das Individuum gehalten, Disziplin zu wahren, was durch gewisse "Vorschriften" wie Compiler-Fehler oder -Warnungen trainiert werden kann (aber nicht muss).

Sprachen mit extrem strenger Typ-Prüfung und ähnlichen Restriktionen kann man wohl mehr unter der Kategorie "Zwang" einordnen, da sie ein Abweichen von der "gewünschten Disziplin" erst gar nicht zulassen. Das zeigt sich u.A. in Wettberwerben wie "Obfuscated C", welche mit anderen Programmiersprachen nur schwer oder gar nicht möglich sind.

Davon mal abgesehen, "obfuscated C" erfordert (ganz im Gegensatz zur "allgemeinen" Sicht) meiner Meinung nach sogar noch weit mehr Disziplin als "Programmieren nach Vorschrift", denn laufen sollen die dort eingereichten Programme trotz ihrer "Verwirrung" ja trotzdem auf so vielen Plattformen wie möglich. Das erfordert schon eine Menge Hirnschmalz und der Compiler sowie die Richtlinien für portable Programmierung helfen einem dabei auch nicht mehr wirklich.

Auf den Ersteller dieses Threads angewandt würde ich sagen, daß ihm ein klein wenig Lerndisziplin in Sachen C nicht schaden könnte, wozu meiner Meinung nach vor allem die Annahme "fremden" Wissens wider der eigenen Natur gehört.

Irgendwie ist das Ganze aber wieder einmal ziemlich OT geworden, oder? ;)

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 18:09 Uhr

MaikG
Posts: 5172
Nutzer
>Wie kommst Du denn auf den Quatsch?


ich hatte glaube ich sowas:

code:
if (a+1>b) {
}


da hat der compiler sich beschwert.
dann hab ich das so gemacht:

code:
tmp=a+1
if tmp>b) {
}


und es ging.

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 18:58 Uhr

thomas
Posts: 7718
Nutzer
@MaikG:

Vermutlich hast du wieder Äpfel mit Birnen, sprich: Pointer mit Zahlen verglichen. Der Wortlaut der Fehlermeldung wäre interessant.

Oder war's vielleicht sowas:

code:
ULONG a;
...
if (a+1 > 0)
   ...


Vielleicht wollte der Compiler dich darauf hinweisen, daß diese Bedingung immer erfüllt ist. Ich glaube der GCC ist so intelligent und merkt das.

Eine vorzeichenlose Zahl ist immer größer oder gleich 0. Und wenn du noch eins draufaddierst, ist es immer größer als 0.

Du solltest dir die Fehlermeldungen und Warnungen aufmerksam durchlesen, da kann man manchmal etwas lernen.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomasrapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 19:44 Uhr

DrNOP
Posts: 4118
Nutzer
Zitat:
Original von whose:
Man kann das Individuum durch Vorschriften drauf "trainieren", einer gewissen Disziplin zu gehorchen, aber das erbringt nicht zwingend einen Erfolg.

Besser wär's aber, wie du selbst schreibst, wenn das Individuum selbst drauf kommt, daß es sein Programm auch in zwei Jahren noch lesen können will und deshalb sich an gewisse Regeln hält, ohne Zwang.

Der Compiler zwingt dich nur, an den vereinbarten Syntax zu halten. Du kannst aber auch wunderbar syntaktisch korrekten Blödsinn programmieren.
C code:
if (a = 0)
{
    ...
}

ist in den allermeisten Fällen kompletter Blödsinn, aber es wird übersetzt und ausgeführt ohne Probleme. Das einzige was der Compiler macht ist dir eine Warnung ausspucken, daß du doch vielleicht eine Klammer um die Zuweisung setzen sollst falls du sie als Vergleichswert einsetzen willst. Und dann hast du einen da sitzen, der entweder die Compilerausgaben ignoriert oder nicht versteht ...
--
Signaturen mit mehr als zwei Zeilen gehen mir auf den Wecker

[ - Antworten - Zitieren - Direktlink - ]

21.08.2007, 23:45 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Der_Wanderer:
@Ralf
Das stimmt einfach nicht. Amiblitz ist sehr änhlich zu anderen Basic Dialekten. Allerdings hat man ZUSÄTZLICH die Möglichkeit, etwas komplexer und strukturierter zu programieren, was dann eher in die Richtung C geht. Aber man MUSS das nicht. Es gibt auch inline 68K, x86 und PPC Assembler. Aber man MUSS es nicht benutzen. Man kann auch schön brav bei Standard Basic bleiben. Es gibt natürlich ein paar syntaktische Abweichungen, aber das gibts in jedem Basic Dialekt.

Ich bin ja dabei, quasi ein neues Basic API zu schreiben, d.h. einen neuen Befehlssatz für Amiblitz, der Amiblitz mit EINFACHEN Befehlen dazu befähigt, aktuelle Dinge zu tun, wie 24bit Bilder, AHI sound oder TCP/IP, und zwar systemkonform. Eben das, was "alten" Basics fehlt, oder eben nur im "C Stil" hineinbauen lässt.


Ähm, wo bitte ist AmiBlitz sehr ähnlich zu anderen Basicdialekten?!? Das ist ungefähr so als wenn man C mit Basic vergleichen würde, bzw. sagen würde es war ähnlich, ist es aber nicht.

Ich geb dir mal ein Beispiel:
Ich hab in AmigaBasic begonnen und hab damals mal QBasic auf dem PC gesehn das 99% genau so aussieht. Ich konnte sofort(!) ohne weiteres darauf programmieren. Logischerweise sind Befehle wie z.b. Screen etwas anderest (einfacher) aufgebaut, was aber klar ist.
Dann ist MBasic gekommen das 99,9% so aussieht wie AmigaBasic.
Ich könnte jetzt fast weitermachen mit z.b. ACE, das ich kurz mal angetestet habe und auch gleich kleine testprogramme schreiben konnte...

Also, wer eine der Sprachen kann, kann die anderen auch.
AmiBlitz würde da ganz und gar nicht rein passen. Ich vermute mal das es einfach ist, wenn man es kann. Aber das reinkommen ist nicht so einfach.
Du schreibst ja selbst das es komplex sein kann.

Nichts desto trotz verfolge ich natürlich auch die AmiBlitzgeschichte mit und hab mir auch mal die neueste Beta angesehn, die verständlicherweise noch nicht ganz stabil ist. Ich versteh von dem Quellcode aber weniger als von einem C-Quellcode und das tippe ich als Basic-Programmierer ...
8o :( :shock2:
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

22.08.2007, 11:09 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
Davon mal abgesehen, "obfuscated C" erfordert (ganz im Gegensatz zur "allgemeinen" Sicht) meiner Meinung nach sogar noch weit mehr Disziplin als "Programmieren nach Vorschrift", denn laufen sollen die dort eingereichten Programme trotz ihrer "Verwirrung" ja trotzdem auf so vielen Plattformen wie möglich.

Jein.
Es gibt sogar spezielle Rubriken ala "Programme, die nur mit Compiler xyz rev a.b.c_d (und nichts anderem) laufen"
Abgesehen davon hat mit Sicherheit jeder Teilnehmer schon sein eigenes Toolset, das gewisse Standard-Transformation durchführt, um aus einem normalen C-Programm (das läuft) ein obfusziertes Programm der ersten Stufe zu erzeugen, das dann von Hand weiter bearbeitet wird (und hin und wieder zur Schaffung neuer Tools für den nächsten Wettbewerb führt).

So ala
C code:
if(a??(i??)??!??-b) ??< printf("bla??/n"); ??>

Das kann man automatisieren.
Zitat:
Irgendwie ist das Ganze aber wieder einmal ziemlich OT geworden, oder? ;)

Yep. :D

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

22.08.2007, 11:18 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von DrNOP:
Der Compiler zwingt dich nur, an den vereinbarten Syntax zu halten. Du kannst aber auch wunderbar syntaktisch korrekten Blödsinn programmieren.
C code:
if (a = 0)
{
    ...
}



Du kannst auch schreiben:
C code:
if(a>5,a<10)
{
    ...
}


und wenn ich diesen Code sehen würde, wüsste ich sofort, was der Autor offensichtlich gemeint hat. Aber der Compiler wird etwas anderes produzieren.

Viel besser finde ich es aber, dass C es erlaubt, solchen Code hinzuschreiben
C code:
foo(bar++, bar++, bar++);

ohne, dass es eine zwingende Spezifikation gibt, was für ein Code denn nun generiert wird. So kann man locker leicht Code schreiben, der nicht nur bezüglich der Plattformen nicht portabel, sondern sogar zwischen verschiedenen Compilern (oder Versionen/Revisionen des gleichen Compilers) derselben Plattform nicht portiert werden kann.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

22.08.2007, 12:35 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Ralf
Du musst differenzieren zwischen der API (also Befehlen, die irgendwas machen, z.B. AmigaOS API) und dem Konzept der Sprache.
Ich gehe davon aus, dass man als Programmierer in der Lage ist, sich mittels Referenzhandbuch eine neue API on-the-fly anzueigenen.
Sonst könnte man niemals behaupten, z.B. C zu können. Denn es gibt sicher noch irgendeine API, die man nicht kennt. Z.B. weiss ich nicht, wie man unter Palm OS den Audio Treiber anspricht. Trotzdem behaupte ich, ich kann C.

Was heisst das jetzt für Amiblitz ?

Die API mag anders sein, auch kann hier und da eine geschweifte Klammer stehen statt einer runden, aber das Prinzip ist Basic.
Also z.B. dass man Resource Tracking hat und Objekte nicht freigeben muss, oder dass man (im Normalfall) keine Pointer benutzen muss, oder dass man ObjectID basierend programmiert statt mit Pointern, oder dass es eine einfache Handhabung von String Varialben gibt etc.

Amiblitz erlaubt es nur ZUSÄTZLICH, auch im C Style zu programmieren. Aber das musst DU ja nicht tun, das kannst du ja einfach ignorieren, dann ist es eine einfache Sprache, und wenn du sie beherrscht, kannst du komplexere Dinge tun, wo bei anderen Basic Dialekten eben Schluss ist.

Poste doch mal ein paar Zeilen in Maxon Basic oder AmigaBasic, dann übersetze ich das in Amiblitz, und wir werden sehen wie unterschiedlich das tatsächlich ist.
Würde mich jetzt tatsächlich interssieren, das ist keine Polemik oder Sch***zvergleich.
--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

08.09.2007, 19:13 Uhr

Ralf27
Posts: 2779
Nutzer
Ich bezweifle ja nicht das AmiBlitz mächtiger ist als AmigaBasic oder MaxonBasic. Alles andere hätte mich jetzt ja auch verwundert. Es ist auch wesentlich schneller als MaxonBasic, das hab ich selbst an einem Programm gesehn das ich mal soweit ich es hinbekommen habe von MaxonBasic nach BlitzBasic(!) konvertiert habe.

Was ich eigentlich tippen möchte:
Die Sprache AmigaBasic, MaxonBasic, QBasic (mehr fallen mir gerade nicht ein und bei diesen Sprachen bin ich mir sicher) sind derartig gleich, das man bis auf ein paar kleine Ausnahmen (z.b. Screenbefehl bei QBasic zu Basic auf dem Amiga) direkt gleich Programm schreiben kann und diese laufen dann auch.
Der Unterschied zwischen diesem Basic und AmiBlitz ist schon recht groß.

Mir ist schon klar das ich mit MaxonBasic quasi seit dem Kauf von MaxonBasic auf dem Abstellgleis steh. Daran beist die Maus keinen Faden ab. Und das MaxonBasic recht langsam ist, das ist mir auch klar.

Ich hab jetzt auch die Wahl zwischen AmiBlitz und C. Beides hat Vor- und Nachteile.
Ich finde es z.b. recht gut das AmitBlitz in der neuen Version jetzt auch auf meinem Rechner läuft (wenn auch nicht lange). Ich hab da noch recht große Probleme, aber es ist ja noch Beta. Außerdem hab ich mich noch nicht intensiv damit beschäftigt.

Aber mal eine kleine Frage zu AmiBlitz:
Welcher Code wird da eigentlich generiert? Ich hab da noch keine Einsteller dafür gefunden. Und ob ich reinen 68000er oder 060er Code generiere ist ja schon ein recht großer Unterschied. Das ist mir bei einem C-Testprogramm aufgefallen, das mit 060er-Option abging wie sonst was.

Nochmal kurz zu dem Programmcode der von AmiBlitz gespeichert wird: Irgendwie kann man denn ja nicht so richtig mit einem externen Texteditor ansehn. Sind da auch noch Steuerzeichen drin?
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

09.09.2007, 10:09 Uhr

MaikG
Posts: 5172
Nutzer
bzl. der Amiblitz geschwindigkeit, wurde AmiHuhn nicht mit diesem
Compiler geschrieben ;-)

[ - Antworten - Zitieren - Direktlink - ]

09.09.2007, 13:20 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Die Codegenerierung setzt man in Amiblitz mittels Compilerdirective "Optimize x".
In Zukunft wird das aber auch wohl von dem IDE unterstützt, das es erlaubt das in der GUI zu setzen.
--
Thilo Köhler, Author von:
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]


1 -2- 3 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > imsg zeug in C [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.