Software > Coding

Neues Projekt auf AtariForge: libcmini

<< < (2/8) > >>

Omikronman:
Gibt es denn da kein Compiler Steuerwort wie das CUTLIB in Omikron.Basic, damit nicht alle nichtverwendeten Kommandos mit im Programmcode landen? Daß Sparsamkeit heute kein Thema mehr ist, kann ich mir denken. Zu Atari Zeiten war das noch eins. o.O

mfro:

--- Zitat von: Imo am Do 27.06.2013, 07:12:48 ---Gibt es denn da kein Compiler Steuerwort wie das CUTLIB in Omikron.Basic, damit nicht alle nichtverwendeten Kommandos mit im Programmcode landen? Daß Sparsamkeit heute kein Thema mehr ist, kann ich mir denken. Zu Atari Zeiten war das noch eins. o.O

--- Ende Zitat ---

Das braucht's hier nicht. Ein anständiger Linker linkt nur das ins Programm, was auch tatsächlich benutzt wird bzw. benutzt werden könnte. Der Linker kann nicht erkennen, ob Code abhängig von einem Variablenwert im fertigen Programm durchlaufen wird oder nicht - wenn ein "if" vor einem Codeteil steht, das im Programm nie wahr wird, wird der Inhalt trotzdem eingebunden.

Die mintlib initialisiert für das laufende Programm eine fast vollständige Unix-Umgebung. Nur ein paar wenige Beispiele (die Liste ist tatsächlich viel länger): sie holt sich beim Start eine Liste aller Unix-User und -Gruppen (die auf einem "normalen" ST ziemlich kurz ist), holt sich die Uhrzeit und die Zeitzone und wandelt sie ins Unix-Format, holt sich das komplette Environment (bei einem "normalen" ST auch ziemlich wenig) und bereitet es Unix-konform auf, ... .

Ein Posix-konformes printf() beispielsweise muß die Environment-Variable LC_NUMERIC auswerten, um entsprechend der Ländereinstellung einen Dezimalpunkt oder ein Dezimal-Komma auszugeben. Wenn die nicht gesetzt ist (beim ST der Normalfall), muß das Environment Posix-konform nach anderen Indikatoren für die Ländereinstellung durchsucht werden ($LANG, ...). Auch da wird die mintlib (auf einem "normalen ST" nicht fündig werden), machen muß sie es trotzdem - sonst ist sie nicht standardkonform.

Kleinere Programme erreicht man hier nur durch Weglassen und Aufgeben des Standards.

simonsunnyboy:
Für ST und nichtbeschleunigten Falcon braucht es IMHO auf 100% POSIX kompatibele Implementierung nicht anzukommen. Die Plattform ist so speziell, da kann man sich auch an andere Standards halten, die viel wichtiger sind.

Man kann dann halt nicht blind irgendwas aus der GNU Welt durchwursten, aber das braucht man am Atari nicht immer. Ich bevorzuge eine dem Atari gemäße angepasste Implementierung einer Funktionalität gegenüber einem blinden Port.

ardi:
Hi Markus,

ich hab da noch einen Bug gefunden. Ein malloc(8165) bis malloc(8180) bzw. alle malloc's zwischen (x*8192-27) bis (x*8192-12) führen, wenn dabei ein neuer Chunk vom System geholt werden muss zu einem zu kleinen Chunk.

Der folgende kleine Patch behebt den Fehler:

--- Code: ---Index: libcmini/sources/malloc.c
===================================================================
--- libcmini/sources/malloc.c (Revision 41)
+++ libcmini/sources/malloc.c (Arbeitskopie)
@@ -39,7 +39,7 @@
  /* if not enough memory, get more from the system */
  if (q == NULL)
  {
- sz = n;
+ sz = n + BORDER_EXTRA;
 
  static int page_size = 0;
 

--- Ende Code ---

PS: hat das einen Grund warum nicht bcopy.S und bzero.S sondern bcopy.c und bzero.c verwendet werden?

Gruß

Armin

mfro:

--- Zitat von: ardi am Mi 26.02.2014, 17:20:26 ---Der folgende kleine Patch behebt den Fehler:..

--- Ende Zitat ---
Angeschaut, für gut befunden, eingebaut, getestet, eingecheckt ;).

Herzlichen Dank!

Falls Du Lust hast, selbst ein bißchen dran mitzuhelfen (ich komm' grad viel zu wenig dazu): ich würde dir gerne Schreibrechte einrichten, wenn Du willst.


--- Zitat von: ardi am Mi 26.02.2014, 17:20:26 ---PS: hat das einen Grund warum nicht bcopy.S und bzero.S sondern bcopy.c und bzero.c verwendet werden?

--- Ende Zitat ---
Die Geschwindigkeit war (für mich) völlig ausreichend und der Code ist kleiner als die optimierten Assemblerroutinen (glaub' ich wenigstens).

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln