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

amiga-news.de Forum > Programmierung > C oder C++? [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 2 3 -4- 5 [ - Beitrag schreiben - ]

27.05.2010, 13:57 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Der_Wanderer:
> Wie ich schon öfters sagte. Nicht lange fackeln, handeln.
Eben nicht. Das ist ja genau das, was ich versucht habe zu veranschaulichen. Liest (und kognitiv verarbeitet) jemand (ausser Holger) mein Geschriebenes überhaupt?


Ja, das tue ich. Gilt das aber umgekehrt auch?

Zitat:
Jeder für sich alleine kann nicht viel erreichen. Jede Lib oder Linkerlib wäre nur ein kleiner Baustein dessen was benötigt wird.

Ja, Himmelherrg... dann sag doch mal detailliert, was genau Du benötigst. Bisher kamen nur so extrem spezifische Sachen wie "das API ist schlecht". In Bezug auf AmiBlitz kommt dann wiederum "ist genau das, was ich benötige". Also, was spricht dann dagegen, Deine AmiBlitz-Includes in C-Code zu gießen? Das "schlechte shared library API"?

Du solltest wirklich mal darüber nachdenken, wie viel "Plattformunabhängigkeit" technisch überhaupt realisierbar ist, ohne daß die Geschichte ausartet.

Zitat:
Wenn die Bausteine nicht wie Lego aufeinander passen, wird ein Programm zur Flickschusterei mit viel fehleranfälligem Glue-Code und es gibt keine wiederkehrenden Mechanismen, die einem die Einarbeitung so sehr erleichtern.

Das ist ja aber genau das Problem beim Amiga. Egal, welches der verfügbaren Toolkits man vorschlägt (Ja, Holger, es gibt noch weit mehr als nur GUI-Toolkits! Schau einfach mal ins Aminet und guck Dir genau an, was da so in den ReadMes steht!), es ist nie "gut genug".

Aber bitte wie soll ein der Flickschusterei abholdes Toolkit zustande kommen, wenn die "Kunden" sich nicht mal darüber einig sind, welche Eigenschaften es genau haben soll? Wenn die "Kunden" nicht einmal eine leise Ahnung haben, was es "auf dem Markt" schon alles gibt, geschweige denn bereit sind, sich erstmal zu informieren? Und wenn immer wieder mit Toolkits verglichen wird, die z.B. unter AmigaOS nur eingeschränkten Gebrauchswert haben?

Fakt ist, es existieren mehrere Ansätze solcher Toolkits, die schon bei ihrer Entstehung aus Agenda-Gründen rundweg abgelehnt wurden. Jeder bevorzugte "seinen" Weg, keiner war zu den notwendigen Kompromissen bereit.

Heute wiederum ist niemand mehr bereit, in eine dieser "Flickschustereien" Arbeit zu investieren, um sie auf den neuesten Stand zu bringen und den Status der "Flickschusterei" zu beseitigen.

"Haben" wollen jedoch recht viele.

Zitat:
Ausserdem ist es sehr gefährlich, wenn man 3rd Party Software (zumindest auf Binary Basis) einbindet, das ist wie ungeschützer Sex.

Hm, wieso ist das dann für Dich unter Windows kein Problem? Da gibts auch etliche Toolkits, die Du nie im Sourcecode zu sehen bekommst...

Zitat:
Die meisten Libs machen auf irgendeiner Plattform Zicken, alleine wegen dem wenigen Testen bei so vielen verschiedenen Libs.

Ich denke, das Stichwort "Plattform" ist das eigentliche Problem, weniger das AmigaOS API... (@Holger: Das ist der heiße Brei, um den immer gern herumgeredet wird. "Plattform".)

Zitat:
Also der Weg zum Glück liegt selten auf dem gierigen Pfad.

Amen.
--
---

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

[ - Antworten - Zitieren - Direktlink - ]

27.05.2010, 19:18 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
Also, was spricht dann dagegen, Deine AmiBlitz-Includes in C-Code zu gießen? Das "schlechte shared library API"?

Ich vermute mal, es ist die Tatsache, dass es ihm persönlich nicht den geringsten Nutzen bringt, die AmiBlitz-Includes in C-Code zu gießen. Nur einen Haufen Arbeit, und danach die Gewissheit, dass es trotzdem keiner benutzt, weil ja anscheinend die meisten verbliebenen Entwickler der Meinung sind, dass alles gut so, wie es ist.

Warum muss es eigentlich überhaupt C sein? Wegen des überragenden Entwickler-Komforts?
Zitat:
Ich denke, das Stichwort "Plattform" ist das eigentliche Problem, weniger das AmigaOS API... (@Holger: Das ist der heiße Brei, um den immer gern herumgeredet wird. "Plattform".)
Bist Du wirklich sicher, dass Du begriffen hast, worum es bei dem Wort "Plattformen" geht? (Hint: Amiga-Libraries gibt es nur auf ganz bestimmten Plattformen)

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

[ - Antworten - Zitieren - Direktlink - ]

27.05.2010, 19:48 Uhr

Thore
Posts: 2266
Nutzer
Auf Windoof sind die Superfunktionen (High Level API Aufrufe) auch nur Aufgeflanscht auf darunterliegende Libcalls und Funktionen (welche sich leider zwischen den verschienen Versionen unterscheiden oder abstürzen, danke M$ du bist echt der Held...)
Eine Lib oder Unit/Include/.. mit entsprechenden Aufbauten würde diesbezüglich haargenau das gleiche darstellen.
Daher verstehe ich nicht was "der Wanderer" genau meint.

Ich vermute aber mal daß er das meint (Voraussetzungen):
1. Die Schnittstellen müssen offiziell sein (z.B. von Hyperion lizensiert oder sonstwie "nativ" und kein Third Party)
2. MorphOS und AROS müssen "pflichtbewusst" mitziehen.
3. Die Calls werden in den Standard Libs (dos, icon, graphics, intuition, ...) mit aufgenommen.
4. Die Funktionen werden im RKM aufgenommen.

Ist das so in etwa richtig? :)

[ - Antworten - Zitieren - Direktlink - ]

27.05.2010, 20:54 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore:

1. Richtig. Als Entwickler muss man sich darauf verlassen können, dass die API gepflegt wird, zumindest solange es das OS selbst gibt.
Und nicht übermorgen in halbfertig wieder stirbt. Die API muss von einem Großteil der Entwickler benutzt werden, um Bugs auszumerzen und Know-How zu generieren, auf das man zugreifen kann (Foren, Faq, Doku, Tutorials etc.).
Ein einzelner Hobby Entwickler kann das nicht garantieren. Das ist zur Hälfte ein psychologisches Problem, zur anderen Hälfte ein Menpower Problem.

2. Richtig. Sonst verpufft der Effekt und alles ist für die Katz.
Würde es so eine API für OS4 geben, wäre das aber auch so erdrückend dass es schnell einen Port für OS3, MOS und AROS geben würde. Den Source veröffentlichen würde das natürlich enorm beschleunigen, vor allem wenn das in der selben Codebase von allen entwickelt würde.
AHI ist hier ein leuchtendes Beispiel. AHI ist konzeptionell nicht sehr gelungen, aber es gab keine Alternative und bereits genug Programme die das nutzen, so musste ein Port für alle Plattformen her, und wird ja mittlerweile als Bestandteil des OS empfunden. Ebenso wie Picasso96/CGX.
Stellt euch vor, jedes OS hätte eine eigenes AHI und RTG System. Das wäre katastrophal.

3. Ich würde das nicht in die bestehenden Libs integrieren, da sie eine Schicht darüber liegen, so wie beispielsweise die datatypes.library.

4. Natürlich, Doku muss sein.


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


[ - Antworten - Zitieren - Direktlink - ]

27.05.2010, 20:59 Uhr

Der_Wanderer
Posts: 1229
Nutzer
> Also, was spricht dann dagegen, Deine AmiBlitz-Includes in C-Code zu gießen?
1. Für mich persönlich keinerlei Nutzen und hunderte Stunden Arbeit.
2. Für alle andern, Akzeptanz. Wer würde das nutzen, wer es nicht jetzt schon mit Amiblitz nutzt?
3. Qualität. Die Amiblitz Includes sind schon gut und funktionieren auch, aber eine offizielle OS API ist nochmal eine andere Liga und muss noch mehr Aspekte berücksichtigen.
Da müsste man nochmal ordentlich darüberbürsten und das Wissen von mehreren Entwicklern miteinbeziehen. Ich bin mittlerweile auch nicht mehr der gleiche wie vor zehn Jahren, als ich damit angefangen habe. Vieles würde ich nun anders machen.


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


[ - Antworten - Zitieren - Direktlink - ]

28.05.2010, 17:41 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Thore:
Ich vermute aber mal daß er das meint (Voraussetzungen):
1. Die Schnittstellen müssen offiziell sein (z.B. von Hyperion lizensiert oder sonstwie "nativ" und kein Third Party)
...
Ist das so in etwa richtig? :)

Nun, sollten sich, sagen wir mal, ein Dutzend der verbliebenen Amiga-Entwickler zusammensetzen und gemeinsam etwas entwickeln, hinter dem dann auch alle Beteiligten stehen, dann benötigt das nicht unbedingt den Segen des offiziellen OS-Entwicklers.

Aber Ergebnisse einer One-Man-Show sind selten dazu geeignet, diese Lücke zu füllen.

Das ist auch so ein Problem mit den vielen existierenden Toolkits aus dem Aminet: sie sind oftmals am Reißbrett entstanden, von jemanden entworfen, der lieber Toolkits entwickelt, statt realer Anwendungen.

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

[ - Antworten - Zitieren - Direktlink - ]

28.05.2010, 21:30 Uhr

Thore
Posts: 2266
Nutzer
Ich denke, die Publizierung (sprich Werbung) müsste von offizieller Seite dann auch unterstützt werden, also es muss dann bekanntgemacht werden. Dann kanns auch gerne eine One Man Show werden.

Was ich eigentlich damit (auch bei den vorangegangenen) sagen wollte:
Offiziell wird sich da in naher Zukunft wohl nichts tun, und inoffiziell sträuben sich die Programmierer noch.
Aber wenns was inoffizielles gibt, was dann "offiziell gehosted" wird, wär das so gut wie offiziell.

[ - Antworten - Zitieren - Direktlink - ]

28.05.2010, 22:12 Uhr

Der_Wanderer
Posts: 1229
Nutzer
One Man Show ist schlecht. Selbst Two-Man kann von heute auf morgen aus sein (siehe Amithlon).
Ich würde sagen 4-5 Entwickler, quelloffen und frei, dann ist es nicht so einfach tot zu kriegen, solange die Community Interesse daran hat.
Es wird wohl auch keiner Experte auf allen Gebieten quer durch das IT Universum sein, und um extreme oder Verirrungen zu vermeiden müssen mehrere Augen drüber gucken.
Keiner will sein Programm, in das er viele viele Stunden Zeit investiert, auf die Laune eines Alleinunterhalters ausliefern.


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


[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 10:30 Uhr

Thore
Posts: 2266
Nutzer
Man könnte ja mal einen Anfang machen, mit Auflisten von wünschenswerten Funktionen wie z.B. "ScaleBitmap" oder "TextW"...

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 12:00 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore
Nahh!

Das wäre eine linear Fortführung der bestehenden API. Klar, damit kann man mehr machen, bleibt aber grundsätzlich auf dem selben Niveau stehen.

Es muss eine Ebene drüber ansetzen.

Evtl. nerve ich, aber ich möchte wieder Android anführen.

Da habe ich nun schon eine recht große App gemacht, mit viel Graphic und Audio. Auf einmal frage ich mich:
Habe ich mich um Bitmap Formate kümmern müssen?
Habe ich Text an irgendwelche Pixel Koordinaten geblittet?
Habe ich I/O Requests allociert und Felder mit heiklen Daten ausgefüllt?
Habe ich irgendwleche Temp-RastPorts erstellt, Pens oder DrawModi gesetzt?

Nein. Und habe ich was vermisst? Nein.
Oder kann die App deshalb irgendwas nicht? Nein.

Weil die API eine Schicht drüber liegt und das für mich erledigt. Dafür kann ich kaum Fehler machen und mich auf die eigentliche App konzentrieren.

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


[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 12:52 Uhr

Thore
Posts: 2266
Nutzer
Du kannst anhand meiner dargelegten Funktionsnamen erkennen, was dahinterstecken soll? Ui große Gabe, Verneigung :D

Mal als Hilfestellung eine mögliche Schnittstelle (Beispiele):
TextW(RastPort, x, y, WideString); // Ausgabe eines Unicode Texts an Pos x,y
ScaleImage(RastPort/Bitmap, x, y, w1, h1, x2, y2, w2, h2); // Scalieren eines Bildausschnitts Formatsicher mit Pos x,y und Maße w1,w2 nach Pos x2,y2 mit Maße w2,h2

Wie soll es denn noch einfacher gehen? Je weniger Infos man der Routine mitgibt, umso unflexibler wird das ganze.

Oder was genau meinst du? Konkretes Beispiel. Ich denke Du bist grad der einzige der weiß was er will.

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 13:25 Uhr

whose
Posts: 2156
Nutzer
@Der_Wanderer:

Um beim Android-Beispiel zu bleiben:

Spätestens in Sachen 68k würdest Du damit vor eine Wand rennen. 3rd level API auf die sich alle einigen können schön und grün, aber die Hardware und die unter der High-Level-API liegenden Schichten müssen da auch mitspielen.

Ok, man kann jetzt wie üblich argumentieren, daß 68k-Liebhaber ja wegen der Geschwindigkeit auf WinUAE & Co. umsteigen könnten. Aber wer von denen macht das? Und ich verstehe die auch sehr gut, daß die ihre Hardware nutzen möchten, neue Programme dafür bekommen möchten usw. Und dann ist da ja noch die Systemsoftware...

Deswegen sage ich, daß sich da jemand hinsetzen und eine entsprechend zugeschnittene API zaubern muß, sonst wird das so oder so nichts. Klar, bei ner One-Man-Show besteht die Gefahr, daß das einfach untergeht. Die Gefahr besteht aber auch bei einer One-Dozen-Men-Show, und zwar aus den gleichen Gründen. Es hilft einfach nichts, ein API aufzubauen, wenns hinterher nicht einmal die Entwickler selbst voll nutzen. Dagegen hilft auch Open Source als Allheilmittel nicht. Wie viele Open Source Projekte gibt es, bei denen gar nichts mehr passiert? Und das, obwohl sie anfangs vielversprechend waren und schicke Funktionen mitbrachten?

Von dem Gedanken, daß es für alle Amiga-Abkömmlinge die gleiche API ohne Zwang geben kann, wird man sich auch verabschieden müssen. Es wird immer im Detail haken, weil sich die einzelnen Plattformen schon recht weit auseinanderentwickelt haben. Dazu kommt, daß jedes Trüppchen seine eigenen Vorstellungen hat, wie man was umsetzen sollte. Mir ist z.B. zu Ohren gekommen, daß mindestens 2 der neueren Vertreter AHI ablösen wollen. Dann die Druck-Problematik, da ist ja bei den einen CUPS im Gespräch (hoffentlich nicht!), bei den anderen ein aufgebohrtes printer.device...

Ja, und dann ist da noch dieser bald zwanghaft-manische Wunsch, das Ganze auch noch auf Winblows, Linux & Co. auszuweiten... wieso eigentlich? Wozu soll das gut sein? Hilft dem Amiga nicht wirklich. Höchstens dabei, eben diesen Plattformen immer ähnlicher und damit immer überflüssiger zu werden.

Ich schätze, der einzige Weg, da etwas zu erreichen ist, eine API zu entwerfen, zu implementieren und Referenzanwendungen dafür zu bauen. Dazu sollte das Ganze, wie Du schon sagtest, "aus einem Guß" sein und wirklich gute, neue Features bringen. Wenn sich dann noch genug Entwickler finden, die das wirklich und ausführlich benutzen, baut das Druck auf die OS-Teams auf. Das könnte manche Leute eventuell dazu bewegen, diese API als Quasi-Standard anzuerkennen und zu übernehmen. Garantie gibts allerdings keine.

Ich wette aber, daß es, egal wie gut es tatsächlich ist, von den "üblichen Verdächtigen" direkt oder auf lange Sicht wieder totgequatscht wird. Aus den unterschiedlichsten Gründen, manche davon vielleicht sogar berechtigt, je nach dem, wie diese API gestaltet wird.

Leicht wird das Ganze sicher nicht.
--
---

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

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 13:38 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Thore:
Du kannst anhand meiner dargelegten Funktionsnamen erkennen, was dahinterstecken soll? Ui große Gabe, Verneigung :D

Mal als Hilfestellung eine mögliche Schnittstelle (Beispiele):
TextW(RastPort, x, y, WideString); // Ausgabe eines Unicode Texts an Pos x,y
ScaleImage(RastPort/Bitmap, x, y, w1, h1, x2, y2, w2, h2); // Scalieren eines Bildausschnitts Formatsicher mit Pos x,y und Maße w1,w2 nach Pos x2,y2 mit Maße w2,h2

Wie soll es denn noch einfacher gehen? Je weniger Infos man der Routine mitgibt, umso unflexibler wird das ganze.

Oder was genau meinst du? Konkretes Beispiel. Ich denke Du bist grad der einzige der weiß was er will.


Nein, ich weiß auch in groben Zügen, was er will ;)

TextW() zum Beispiel wäre auf einen String beschränkt. Eine 3rd level API nach seinen Wünschen würde z.B. auch ganze String-Arrays zulassen und den Krempel auf Fensterbreite automatisch formatieren. Im Groben das, was die ganzen "Bildschirmausgabe-Engines" ala Quartz oder auch Klamotten wie PostScript machen, eben mit einer einzigen aufzurufenden Funktion den ganzen Segen verwursten.

Beim Skalieren ging es vor allem darum, wie das Ganze z.Z. im Zusammenspiel mit den Datatypes gehandhabt wird. Das ganze Geraffel könnte man ja relativ problemlos in eine einzige Funktion packen, deshalb sagte ich anfangs ja auch, daß ich da kein Problem sehe. Einmal ne entsprechende Funktion schreiben, ab in ne Linker-Lib und fertig.

Sein Wunsch zielt halt darauf ab, entsprechende Funktionen auf allen Amiga-Plattformen (und evtl. darüber hinaus) offen zur Verfügung zu haben. Theoretisch kein Thema, nur machen muß es jemand. Und dann muß es natürlich auch von Dritten genutzt werden. Gerade bei letzterem sehe ich einige Probleme. Die gäbe es aber auch bei den "Offiziellen". Ich erinnere in diesem Zusammenhang immer wieder gern an ReActor. Schöner Ansatz, aber von allen Seiten (sogar von den Entwicklern selbst!) direkt totgequatscht worden. Daher dürfen wir die GUIs wieder schön brav von Hand bauen...
--
---

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

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 15:21 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore

Deine Funktionen waren mir (und vermutlich auch Holger, Whose etc.) schon sehr schnell klar. TextW() als Wide-Character Variante von Text, und ScaleBitmap() eben um eine Bitmap zu skalieren. Da muss man nicht lange Raten wie die Parameter aussehen. Das ist ja auch per se nicht schlecht.

Aber gehe jetzt mal zwei, oder besser drei Schritte zurück.

Willst du wirklich eine Zeile Text an die Stelle x,y eines bestimmten RastPortes blitten?
Du denkst, jetzt vielleicht ja. Dann gehe noch einen Schritt weiter zurück. Und jetzt?

Nein, eigentlich nicht. Wenn du für eine GUI Koordinaten ausrechnen musst, dann ist das Kind schon in den Brunnen gefallen. Du möchtest ein Fenster haben mit einem schön platzierten Text. Vielleicht soll es sogar ein Fließ-Text sein, der sich der Fenstergröße anpasst, evtl. wenns zu klein ist ein Scroller aufpoppt etc. Das willst du nicht selbst alles berechnen und mit Text() hinblitten (Es sei denn du bist der GUI Toolkit Entwickler). Das ist eine große Bürde die du dir aufgeladen hast. Damit halst du dir die ganze Layout Logistik auf.
Das verstehen viele Anfänger nicht. Sie wollen keine Layout-Engine, fühlen sich eingeschränkt, viiiel zu kompliziert, wenn man doch direkt auf Koordinaten blitten könnte. Aber mit jedem Parameter, den man einstellen darf, bekommt man auch die Pflicht sich darum zu kümmern, und das kostet viel Zeit, ist jedesmal was selbst-gebackenes, also Cross-App inkonsistent und sehr fehleranfällig.
So viele Apps im Aminet, wenn man den Fenstertitel 2 Pixel höher macht verrutscht alles, Buttons hängen über den Fensterrahmen raus etc., und trotzdem hatten die Entwickler mehr Arbeit als wenn sie das mit einem Toolkit gemacht hätten.

Wenn man ein GUI Toolkit hat, das richtig gemacht ist und flexibel, dann braucht man nur ein einziges, egal ob es eine systemkonforme App im Systemweiten Look ist oder ein geskinntes Options-Menu in einem Spiel.

Ok, nun wie stelle ich mir das vor?

So in etwa wie ich die A/A++ API plane. Leicht OOP, aber kein muss und nicht übertrieben so dass keiner mehr durchblickt, und dass es selbstverständlich auch in nicht-OOP Sprachen genutzt werden kann. Jede Klasse könnte eine Shared Library sein.

Beispiel:

CImage Class
code:
Import "CImage"                         ; use CImage Class

 CImage img = New()                      ; declare an image object

 img.Load("DH0:Pics/image.png")          ; load from disk
 img.Resize(800,600)                     ; resize to 800x600 pixels
 img.Save("DH0:Pics/image.jpg",'JPEG')   ; save as JPEG

 img.Delete()

 End                                     ; end of program


CSound Class
code:
Import "CSound"                         ; use the CSound Class

 CSound snd = New()                      ; declare a sound object

 snd.Load("DH0:SFX/Bing.wav")            ; load a sound from disk
 snd.Play()                              ; play the sound
 snd.Resample(44100)                     ; resample the sound to 44100kHz
 snd.Save("DH0:SFX/Bing.aiff",'AIFF');   ; save the sound as AIFF
 
 snd.Delete()

 End                                     ; end of program


So in etwa für Multimedia Objekte. GUI Toolkit ist natürlich wieder was anderes, der würde Z.b. CImage benutzen für GUI Grafiken. Und Dinge wie DOS und Exec sind natürlich auch wieder anders, kann man aber in ähnlichem Stil durchziehen, z.b.

code:
Import "CThread"

CThread thrd = New()
thrd.SetEntryPoint(&myFunction)
thrd.Run()
...
thrd.Break()
thrd.Delete()

End



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


[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 20:03 Uhr

Thore
Posts: 2266
Nutzer
Du musst immer die Koordinaten angeben bei Blitting, das ist doch gerade der Sinn ;)
Aber nehmen wir mal ein fiktives GUI Toolkit, da sollen die Elemente (standardmäßig, wenn man kein eigenes Layout verwendet) auch automatisch angepasst werden.
Der Programmierer von so einer Komponente muss sich natürlich darum kümmern. Der Programmierer, der diese Komponente dann verwendet, nicht mehr.
So etwas gibt es allerdings bereits. Es nennt sich MUI :)

Man kann schon so Routinen machen, auch ein TextW, welches auotmatisches Wrapping hat und dergleichen. Die Frage ist dann, ob dies nur bei bestimmten Komponenten passieren soll.
Auf Windows passen sich die Komponenten mit sogenannten "Anker" (Anchors) an, das ist aber dann nicht automatisch wie bei MUI sondern statisch mit "festgeklebten" Seiten die sich mit dem Fenster vergrößern/verkleinern. Auch Textlabels sind statische Elemente.
(Mit statisch und dynamisch mein ich die Platzierung auf einem Fenster oder Form)
Die API um diese Elemente anzusprechen sind nicht aus Windows sondern aus der GUI Umgebung.

Ok anders gefragt: Wäre eine IDE, die die Event-Zuordnung und dergleichen automatisch bereitstellt nicht sinnvoller als über eine neue API nachzudenken? Wenn schon die Vorschläge nicht angenommen werden...

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 20:26 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore:

> Du musst immer die Koordinaten angeben bei Blitting, das ist doch gerade der Sinn
Ja, die CImage Klasse sollte natürlich an x/y Koordinaten blitten können. Wenn man eine App baut sollte man sowas aber gar nicht benötigen, sonst hat das GUI Toolkit bereits versagt.
Das ist dann eher für die Game API interessant. Unter Android verwende ich jede Menge Bilder, aber habe noch nie selbst eins blitten müssen.
Nicht einmal laden. Ich habe lediglich die Buttons/GUI Elemente mit den PNG Dateien verknüpft.

> So etwas gibt es allerdings bereits. Es nennt sich MUI
Ja, und es ist tot (für 68k) und Closed-Source. MUI ist im Prinzip die richtige Richtung, aber man merkt MUI das Alter schon an. Das GUI bauen muss noch deutlich einfacher sein und gleichzeitig noch flexibler. (ja, das geht).

> Auf Windows passen sich die Komponenten mit sogenannten "Anker" (Anchors) an
Ja, das ist Quark. Man braucht ein richtiges GUI Toolkit mit Auto-Layout. So wie MUI.

> Wäre eine IDE, die die Event-Zuordnung und dergleichen automatisch bereitstellt nicht sinnvoller als über eine neue API nachzudenken?
Das geht Hand in Hand. Die GUI API muss natürlich da sein, da man immer programmatisch eingreifen will. Aber grundsätzlich sollte die GUI mit einem Builder gebaut werden. Am besten der Speichert das dann als XML, was von der GUI API interpretiert werden kann.

Es geht ja erstmal auch nicht darum, alles besser, schneller und höher zu machen, sondern das Vorhandene (und sei es MUI) einfacher nutzbar zu machen. Und zwar so radikal einfacher, dass kein OS-Variante drum herum kommt. Das heisst ja auch nicht, wenn man z.b. irgendwas ganz ausgefuchstes Spezielles vor hat, nicht die "ganz normale" AmigaOS API benutzen kann. Nur in 99% der Fällte braucht man das nicht.

Z.b.

Bitmap *bmp = CImage.GetBitmap()

würde einem Zugriff auf die interne Bitmap Structure geben, denn das CImage erfindet (und soll auch nicht) das Rad nicht neu, sondern bentutzt ja Bitmaps, RastPorts, Datatypes etc.

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


[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 21:39 Uhr

Thore
Posts: 2266
Nutzer
Zumindest für Datatypes gibt es sowas schon.
Es nennt sich GetDTAttrs. Um Den BitMapHeader auszulesen machst einfach
GetDTAttrs(dto, PDTA_BitMapHeader, (ULONG *) &MyBMHD, TAG_DONE);

Find ich persönlich recht einfach und mächtig.

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 21:50 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore:

Schau dir mal das CImage Beispiel von oben an. Das ist einfach, und kann sich jeder in ein paar Minuten selbst austüfteln, Online-Docu vorrausgesetzt.

Und jetzt schau dir nochmal den Code an via Datatype (und das ist nur Laden). Das hat mich Wochen gekostet, bis das dann überall lief. Wenn man dann noch betrachtet, was DT alles nicht können (Speichern, Qualitativ Resizen, Filter anwenden, Drehen, Croppen, Alpha Channel, Hineinzeichnen etc. etc.), dann ist das alles andere als mächtig.

code:
Function.l image_LoadViaDT{image.l,filename.s,imgnum.l}
DEFTYPE.BitMapHeader *bmhdp
DEFTYPE.BitMap *bmap
DEFTYPE.pdtBlitPixelArray DTM
succ.l = False
If imgnum<0 Then imgnum=0
tag5.tag5ti_Tag = #PDTA_DestMode, #PMODE_V43, #DTA_SourceType,
                   #DTST_FILE, #DTA_GroupID, #GID_PICTURE,
                   #PDTA_Remap, False, #PDTA_WhichPicture,imgnum,#TAG_DONE,0
*DTPic._Object = NewDTObjectA_ (&filename.s,tag5)
If *DTPic
  tag5.tag5ti_Tag = #PDTA_BitMapHeader,&*bmhdp,#TAG_DONE,0
  GetDTAttrsA_ *DTPic,tag5
  If image_Create{image,*bmhdpbmh_Width,*bmhdpbmh_Height}
    If image_Lock{image}

      ; try to get as ARGB immediately, good datatpyes support this, but not all!
      ;If *bmhdpbmh_Depth>8 ; dont even try if depth <=8
        DTMMethodID            = #PDTM_READPIXELARRAY
        DTMpbpa_PixelData      = raw_ptr          ; /* The pixel data to transfer to/from */
        DTMpbpa_PixelFormat    = #PBPAFMT_ARGB     ; /* Format of the pixel data (see "Pixel Formats" below) */
        DTMpbpa_PixelArrayMod  = bpr              ; /* Number of bytes per row */
        DTMpbpa_Left           = 0                 ; /* Left edge of the rectangle to transfer pixels to/from */
        DTMpbpa_Top            = 0                 ; /* Top edge of the rectangle to transfer pixels to/from */
        DTMpbpa_Width          = *bmhdpbmh_Width  ; /* Width of the rectangle to transfer pixels to/from */
        DTMpbpa_Height         = *bmhdpbmh_Height
        If DoMethodA (*DTPic,&DTM) Then succ = True
      ;End If

      ; ok, try to read out the bitmap if ARGB failed...
      If succ=False
        tag5.tag5ti_Tag = #PDTA_ColorRegisters,&colorMap.l,#TAG_DONE,0
        If GetDTAttrsA_ (*DTPic,tag5)
          tag5.tag5ti_Tag = #PDTA_BitMap,&*bmap,#TAG_DONE,0
          If GetDTAttrsA_ (*DTPic,tag5)
            *layerinfo.Layer_Info = NewLayerInfo_
            If *layerinfo
              *layer.Layer = CreateUpfrontHookLayer_ (*layerinfo,*bmap,0,0,
                               *bmhdpbmh_Width-1,*bmhdpbmh_Height-1,
                               0,#LAYERS_NOBACKFILL,0)
              If *layer
                *rp.RastPort = *layerrp
                If *rp
                  image_Unlock{image}
                  succ = image_CutRP{image,*rp,0,0,*bmhdpbmh_Width,*bmhdpbmh_Height,-1,-1,-1,colorMap}
                  If succ Then image_Lock{image}
                End If
                DeleteLayer_ 0,*layer
              End If
              DisposeLayerInfo_ *layerinfo
            End If
          End If
        End If
      End If

      ; Try READPIXELARRAY LUT8, if we couldn't catch the bitmap (outch!)
      If succ=False
        penArray8.l = AllocVec_(*bmhdpbmh_Height * *bmhdpbmh_Width,#MEMF_ANY)
        lut.l       = AllocVec_(256*4,#MEMF_CLEAR)
        If penArray8><0 AND lut><0
          DTMMethodID            = #PDTM_READPIXELARRAY
          DTMpbpa_PixelData      = penArray8         ; /* The pixel data to transfer to/from */
          DTMpbpa_PixelFormat    = #PBPAFMT_LUT8     ; /* Format of the pixel data (see "Pixel Formats" below) */
          DTMpbpa_PixelArrayMod  = *bmhdpbmh_Width  ; /* Number of bytes per row */
          DTMpbpa_Left           = 0                 ; /* Left edge of the rectangle to transfer pixels to/from */
          DTMpbpa_Top            = 0                 ; /* Top edge of the rectangle to transfer pixels to/from */
          DTMpbpa_Width          = *bmhdpbmh_Width  ; /* Width of the rectangle to transfer pixels to/from */
          DTMpbpa_Height         = *bmhdpbmh_Height
          If DoMethodA (*DTPic,&DTM)
            tag5.tag5ti_Tag = #PDTA_ColorRegisters,&colMap.l,#TAG_DONE,0
            If GetDTAttrsA_ (*DTPic,tag5)
              For pen.l=0 To (1 LSL *bmhdpbmh_Depth)-1
                *CReg.ColorRegister = colMap + 3*pen
                Poke.l lut + (pen LSL 2),((*CRegred&$00FF) LSL 16) |
                ((*CReggreen & $00FF) LSL   | (*CRegblue & $FF)
              Next
              For y.l = 0 To *bmhdpbmh_Height -1
                For x.l = 0 To *bmhdpbmh_Width -1
                  pen.l = Peek.b(penArray8+y**bmhdpbmh_Width+x) & $FF
                  Poke.l raw_ptr+y*bpr+(x LSL 2),
                   (Peek.l(lut+(pen LSL 2)) );& $FEFEFEFE) LSR 1
                Next
              Next
              succ.l = True
            End If
          End If
          If penArray8 Then FreeVec_ penArray8 : penArray8 = 0
          If lut       Then FreeVec_ lut       : lut       = 0
        End If
      End If
      image_Unlock{image}
    End If
    If succ=False Then image_Free{image}
  End If
  DisposeDTObject_ (*DTPic)
End If
Function Return succ
End Function


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




[ Dieser Beitrag wurde von Der_Wanderer am 29.05.2010 um 21:54 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 22:03 Uhr

Der_Wanderer
Posts: 1229
Nutzer
.. und übrigends Datatpyes waren ja damals genau der Schritt den ich hier vorschlage, die Bemühungen zu bündeln und wiederverwertbar zu machen.

Nur ist man einerseits über das Ziel hinausgeschossen (Datatypes für alles und jeden, aber gleiches Interface) und gleichzeitig zu Low Level in der Angst es gäbe Aspekte die man sonst nicht kontrollieren könnte.

In den meisten Fällen werden die DT benutzt, um ein Bild zu laden. Deshalb solle es ein einfaches "Load" geben. Heist ja nicht, dass es auch weitere Constructoren geben könnte für CImage, z.B. wäre folgende denkbar:
code:
CImage img = New("Dh0:test.jpg"); <= von Datei

CImage img = New("Dh0:test.gif",4); <= von Datei, Bild # 4

CImage img = New(*screen,x,y,width,height); <= grabben vom Screen

CImage img = New(width,height,rgb); <= blankes Bild

CImage img = New(Bitmap, Viewport); <= von Bitmap holen

CImage img2 = New(img); <= duplizieren

...


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



[ Dieser Beitrag wurde von Der_Wanderer am 29.05.2010 um 22:07 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 22:04 Uhr

Thore
Posts: 2266
Nutzer
Dieser Code hat Dich Wochen gekostet?
Dann weiß ich warum Du eine andere API willst :)

Allerdings sollte ein neues Interface Programmiersprachen-unabhängig sein, also Linklib oder Shared Lib und entsprechende Header-Files für diverse Sprachen.
Selbst wenn sie offiziell wären, würden alte Amiga Programmierer noch die bisherigen Funktionen benutzen, Neueinsteiger würden es sich überlegen...

[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 22:17 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore:
> Dieser Code hat Dich Wochen gekostet?
> Dann weiß ich warum Du eine andere API willst
Du (und möglicherweise gar nicht mal so wenige Amiganer) magst das vielleicht cool finden, wenn man so richtig "hardcore" sein muss um ein Bild zu laden. Der Rest der Menschheit fände diesen Code eher ein Armutszeugnis für das OS oder würde sich die Stirn reiben was "die da so treiben auf dem Amiga...".

Dazu kommt, dass ja noch nicht einmal alles sichtbar ist, eigentlich müsste ich noch image_Create dazu posten, was die eigentliche Bitmap anlegt usw.

Und wie immer, der Teufel steckt im Detail. Die Funktion ist vor allem deshalb so lange, weil sich nicht alle Datatypes auf nicht allen Plattformen gleich verhalten. Das zu testen, wenn man nicht gerade Vollprofi mit OS3, OS4, MOS und AROS nebeneinander auf dem Schreibtisch stehen hat, ist nicht einfach. Und diese Zeit müsste theoretisch jeder Entwickler erstmal "verheizen", wenn sein Code überall funktionieren soll. Das ist total dämlich und sollte einmal in eine höher liegende Schicht eingefangen werden.


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


[ - Antworten - Zitieren - Direktlink - ]

29.05.2010, 22:36 Uhr

Thore
Posts: 2266
Nutzer
Muss dazu sagen, daß ich deinen zweiten Beitrag noch nicht lesen konnte als ich meine Antwort geschrieben hab, weil wir gleichzeitig geschrieben haben :)
Nein ich finde es nicht "cool" aber ich bin mit der API aufgewachsen, und kenne daher die Strukturen und wie die Funktionen allgemein aufgebaut sind. Ich habe das so seit vielen Jahren im Blut. Deshalb würde ich eine neue API anfangs eher selten benutzen. Das soll es aber nicht schlechtreden, es war nur als Anmerkung gedacht.

Vll kams auch falsch rüber, ich meinte das nicht proletenhaft sonder verständnisvoll. Ich kanns auch anders formulieren:
Wenn der Code Dir zu kompliziert ist, dann versteh ich warum Du eine einfachere Programmierweise suchst.

Der Code muss dann aber auch Leakfree sein, Speicherlöcher müssen vermieden werden, was bei solchen high level APIs nicht immer einfach ist. Threadsafe sollte er auch sein....

Da hatte ich letztens das Problem auf Windoof. Trotz "korrekter" Programmierung ständig Verbindungsprobleme zur Datenbank. Bis ich dahintergekommen bin, daß das DB System nicht Threadsafe ist. Die Folge: In jedem Thread neue DB Verbindung öffnen, dann sollte es klappen. Hat mich 2 Wochen gekostet bis ich das rausgefunden hab....

[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 01:59 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Thore:
...
... Hat mich 2 Wochen gekostet bis ich das rausgefunden hab....


[einmisch]
da kann ich noch was drauflegen:

hab letztens einen Bug in BB2 gefunden, der es unmöglich macht, Newtype-offsets direkt als coords für Stringgadgets/Propgadgets zu verwenden. hat den betreffenden src(myITools - und da sind wir wieder bei den GUI-Toolkits) ca. 10 Jahre blockiert (weil uninteressant gemacht) und damit getötet: kann jetzt alles neu machen (weil: 10 Jahre alt). Den Bug umgeht man, indem man die Coords vorher aufne normale .w variable legt.... F*n' Hell....
Greetz
inq

[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 11:02 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@inq:

? Was möchtest du uns damit sagen? Dass BlitzBasic2 einen Bug hat?
BB2 hat massig Bugs, sonst hätten wir ja in Amiblitz2/3 nicht so viel zu tun gehabt ;-)

> und damit getötet:
Da hast du aber schnell aufgegeben ;-)

> kann jetzt alles neu machen (weil: 10 Jahre alt).
Software ist keinem Alterungsprozess unterworfen (höchstens der Datenträger...). Die Ansprüche ändern sich nur. Dann müsstest du aber auch bei erfolgreicher Fertigstellung vor 10 Jahren alles neu machen...

Thores These ist, dass Bugs in High-Level APIs zu größeren Problemen führen als Bugs in Low-Level APIs. Interessant. Klingt auch auf den ersten Blick intuitiv richtig. Aber ist das wirklich so? Bin ich im Low-Level Falle nicht genauso aufgeschmissen, nur weis ich etwas genauer was nicht funktioniert? Und rechtfertigt das den Mehraufwand im Falle wenn kein Bug auftritt?

Andersherum betrachtet, wenn ich z.B. ein Bild via DT laden will, dann kann ich unglaublich viele Bugs selbst produzieren (im Vergleich zu einem "LoadImage", wo ich höchstens den Dateinamen falsch schreiben kann). Wäre es nicht besser, wenn jemand, der sich besser auskennt als ich, das in eine Robuste "LoadImage" Funktion gegossen hat? Und wenn diese Funktion von Vielen benutzt wird, sollte sie dann doch stabiler sein als meine Home-Brew "MyLoadImage" die nur ich benutze?

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


[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 11:48 Uhr

Thore
Posts: 2266
Nutzer
Ich denk Du hast mich nicht richtig verstanden :)
Die Entwickler der High Level API müssen Bugs vermeiden, damit der Programmierer, der diese API anwendet, auf der sicheren Seite ist. Er soll ja nicht tiefgreifend in die Routinen rein sollen (Blackbox Prinzip).
Wenn der Programmierer mehr auf "Low Level" setzt, ist er natürlich selbst dafür verantwortlich was er macht, und muss sich um mehr Details kümmern. Allerdings weiß er dann auch tiefgreifender was er macht.

Die "These" ist daher nur halb verstanden :)
Bugs in High Level APIs, welche ein Drittentwickler verwendet, sind schmerzlicher als Bugs die er selbst im Griff hat, wenn er "Low Level APIs" verwendet, da/wenn er diese selbst beheben kann.
Wenn aber der Bug in beiden Möglichkeiten drin bleibt, ist das natürlich gleich schlimm ;)

--

Anm zur Begrifflichkeit: Der Begriff "Low Level API" in diesem Beitrag ist in "" weil es nicht wirklich Low Level ist sondern eine tiefere Schicht als die hier angepriesene High Level API darstellen soll, auch wenn die hier zitierte Low Level API auch eine High Level API des AmigaOS ist ;) Der Begriff wird hier nur zur besseren Unterscheidung verwendet.

[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 12:50 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Thore

Das stimmt im Prinzip, aber per Low Level Implementation kannst du sehr viel mehr Bugs erwarten die du dann auch fixen musst. Viele Bugs wirst du nie fixen, weil du sie nicht reportet bekommst mangels User Base und auf deinem System nicht passieren. Und deine Fixes gelten nur für dein Projekt, andere profitieren nicht davon, und umgekehrt.
Bugprevention ist wirklich nur ein Schein-Argument für low-level APIs. Du musst schon sehr viel besser sein als die Entwickler der High-Level API um davon nicht zu profitieren.
Aber die solle ja nicht von Noobs implementiert werden.

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


[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 14:23 Uhr

Thore
Posts: 2266
Nutzer
> aber per Low Level Implementation kannst du sehr viel mehr Bugs erwarten die du dann auch fixen musst.

Du hast mich immer noch nicht verstanden, aber ich denke das gehört auch nicht mehr zum eigentlichen Thema. Es ging in erster Linie nur darum daß die High Level API Bullet Proof sein muss, da der Drittentwickler diese Bugs oft nicht beheben kann.

[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 14:33 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ja, natürlich, genauso Bullet Proof wie im alternativen Falle deine Implementation. Nur dass auf diese API viel mehr Augen gucken als auf deine Implementation. Deshalb kann man erwarten, dass sie robuster ist.
Wenn die API lebendig und OpenSource ist, könnte man im Falle eines Bugs natürlich entprechend einen Bugreport abgeben und es sollte alsbaldig einen Fix geben. Und wenn das zu lange dauert und man so erfahren ist, dass man die Funktion auch hätte selbst implementieren können, dann ist man wohl auch erfahren genug das in der HL API selbst zu fixen.

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


[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 14:36 Uhr

Thore
Posts: 2266
Nutzer
So jetzt sind wir wieder beieinander :) Genau so ist es.

[ - Antworten - Zitieren - Direktlink - ]

30.05.2010, 21:48 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Der_Wanderer:

? Was möchtest du uns damit sagen? Dass BlitzBasic2 einen Bug hat?
BB2 hat massig Bugs, sonst hätten wir ja in Amiblitz2/3 nicht so viel zu tun gehabt ;-)
> und damit getötet:
Da hast du aber schnell aufgegeben ;-)

Weiss ich schon, wollte nur die 2 Wochen toppen :)
Ich hab auch nicht aufgegeben. Ich schau mir alle sources alle paar jahre mal an. Und da find ich dann Sachen, die ich heutzutage nicht mehr so machen würde-und ändere das dann.
Zitat:
> kann jetzt alles neu machen (weil: 10 Jahre alt).
Software ist keinem Alterungsprozess unterworfen (höchstens der Datenträger...). Die Ansprüche ändern sich nur. Dann müsstest du aber auch bei erfolgreicher Fertigstellung vor 10 Jahren alles neu machen...

müsste ich eben nicht: der src wäre nicht eingefroren, sondern kontinuierlich mit meinem Wissen und meinen Anforderungen gewachsen. Heutzutage sehe ich nur noch ein paar brauchbare Funcs und der Rest ist Pasta.

Zitat:
Thores These ist, dass Bugs in High-Level APIs zu größeren Problemen führen als Bugs in Low-Level APIs. Interessant. Klingt auch auf den ersten Blick intuitiv richtig. Aber ist das wirklich so? Bin ich im Low-Level Falle nicht genauso aufgeschmissen, nur weis ich etwas genauer was nicht funktioniert? Und rechtfertigt das den Mehraufwand im Falle wenn kein Bug auftritt?
ist alles relativ! hängt von der komplexität ab. sind die enthaltenen Funktionen ausreichend knapp gekapselt, lässt sichs leichter fixen.
der "Unnütze Mehraufwand" tritt nur EINMAL auf! Bugfixing is bothering everybody for a long time...
Zitat:
Andersherum betrachtet, wenn ich z.B. ein Bild via DT laden will, dann kann ich unglaublich viele Bugs selbst produzieren (im Vergleich zu einem "LoadImage", wo ich höchstens den Dateinamen falsch schreiben kann). Wäre es nicht besser, wenn jemand, der sich besser auskennt als ich, das in eine Robuste "LoadImage" Funktion gegossen hat? Und wenn diese Funktion von Vielen benutzt wird, sollte sie dann doch stabiler sein als meine Home-Brew "MyLoadImage" die nur ich benutze?
auch relativ. letztendlich baust du auf dem DT-System auf, welches (wie du selbst schreibst) unzureichend ist. damit ist es ein Kandidat, beim nächsten OS-Update geändert oder über Bord geschmissen zu werden. es mag einfach sein, Loadimage{} zu ändern, aber sind da nicht noch viel mehr verstreute Sprengsel in all den vielen Includes?
und bedenke: DU hast diese includes zwar veröffentlicht, aber da du dies als src getan hast, ist die Stabilität und Verlässlichkeit nicht mehr gegeben - jeder Coder könnte seinen eigenen Mist (oder auch Optims) dazugesenft haben....
damit ist das Grundanliegen, nämlich Verlässlichkeit hinsichtlich Parameter und Resultat nicht mehr unbedingt gegeben.

gruß
und happy blitzing (sagten wir damals so)
inq

[ - Antworten - Zitieren - Direktlink - ]


1 2 3 -4- 5 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > C oder C++? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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