Seite 1 von 2

Maximale Grösse vom Code

Verfasst: 20.09.2007 23:20
von HemSA
Hallole Ihr,
ich habe eine Frage bezüglich der maximalen Grösse vom Code. Gibt es da eine Grenze?

Meiner hat gerade 40000 Zeilen - ca. 2,4 MB gross, und es soll noch was dazukommen.

Wie gross sind denn eure grössten Programme?

Danke schon mal im Vorraus.

Verfasst: 20.09.2007 23:26
von milan1612
Also mein größtes Projekt hat zur Zeit genau 23756 Zeilen (aber incl. Kommentare
und Leerzeilen und DataSection)
So weit ich weiß gibts keine Grenze (außer Speicher natürlich :lol: )

Verfasst: 20.09.2007 23:41
von NicTheQuick
Wow, was habt ihr denn für Projekte, wo sich so viel Code ansammelt? :shock:
Kommt das vom umständlichen Programmieren oder ist das wirklich so viel?

Verfasst: 20.09.2007 23:50
von milan1612
Also bei mir kommts vom umständlichen Programmieren, allerdings
sinds ohne Comments, DataSections und Leerzeilen auch nur circa 10000 Zeilen :)

Verfasst: 21.09.2007 00:26
von Kaeru Gaman
es gab mal vor einiger Zeit ne Bugmeldung, dass die IDE oder der Compiler
ab einer gewissen Quellcode-größe Schwierigkeiten macht.

Ich weiß nicht, ob das Problem behoben ist, oder wieweit es lösbar war,
aber bei über 10K zeilen würd ich mir echt üerlegen, in etliche Includes auszulagern.

..wenn es technisch schwierig wird, in Includes auszulagern,
hat man oft schon etliche Schwachpunkte seines Codes entlarvt.

wenn man wirklich soviel Code programmiert, muss er eigentlich
sehr streng strukturiert sein, um überblickbar zu bleiben....

Verfasst: 21.09.2007 08:44
von NicTheQuick
Mal zum Vergleich: Mein aktuelles Projekte hat bisher um die 5100 Zeilen
inkl. Kommentare und Leerzeilen. Aber trotzdem ist es in 14 Includes
unterteilt. Die größte Include ist die GUI.pbi, die kleinste die main.pbi:

Code: Alles auswählen

EnableExplicit

;LArray
;PArray
;SArray
;StringPointer

XIncludeFile "common.pbi"
XIncludeFile "Misc.pbi"
XIncludeFile "File.pbi"
XIncludeFile "DateEx.pbi"
XIncludeFile "Artist.pbi"
XIncludeFile "Song.pbi"
XIncludeFile "Setlist.pbi"
XIncludeFile "Termin.pbi"
XIncludeFile "GUI.pbi"

Define EventID.l

Song_LoadDB()       ;Läd alle Artisten und Songs anhand der Verzeichnisstruktur
Setlist_LoadDB()    ;Läd alle Setlisten
Termin_LoadDB()     ;Läd alle Termine

Song_RenewIDs()     ;Ändert die Links zu Setlisten, auf die neue Setlisten-IDs (Pointer)
Setlist_RenewIDs()  ;Ändert die Links zu Songs und Terminen auf die neuen IDs (Pointer)
Termin_RenewIDs()   ;Ändert die Links zu Setlisten und Kasse auf die neuen IDs (Pointer)

GUI_Main_Open()
Repeat
  EventID = WaitWindowEvent(15)
  GUI_Main_Event(EventID)
  GUI_Song_Edit_Event(EventID)
  GUI_Setlist_Edit_Event(EventID)
  GUI_SC_Event(EventID)
  GUI_Artist_Edit_Event(EventID)
  GUI_Termin_Edit_Event(EventID)
Until GUI_Quit

Song_SaveDB()
Setlist_SaveDB()
Termin_SaveDB()
Ich finde, mehr muss auch nicht in einer Main stehen.

Verfasst: 21.09.2007 12:00
von Kurzer
Jo, den Code strukturieren ist schon wichtig finde ich.

Weil ich immer so viel vergesse ;) und auch zeitweise ein Projekt liegen lassen muss, komme ich persönlich ohne gute Strukturierung nicht sehr weit. :-)

Meine Projekte teile ich meist pro Fenster oder Funktionsgruppe in verschiedene Includes auf. Allgemeine Prozeduren, die in mehreren Fenstern aufgerufen werden, bekommen ein weiteres, eigenes Includefile.

Die Eventbehandlung versuche ich komplett vom PureForm Designer handlen zu lassen und inkludiere die erzeugte Datei einfach nur. Anpassungen daran versuche ich alle als code-injection in PureForm zu hinterlegen. Naja, den PureForm nutze ich erst kurz, von daher sind meine workflows dort selbst alle noch "beta". :-)

Die einzelenen Prozeduren bekommen bei mir alle einen kurzen Header, damit man auch im zugeklappten Zustand sieht was sie tut, welche Argumente sie erwartet und welchen Wert sie zurückgibt.

Der main-Quellcode bekommt einen großzügigen Header, der alle wichtigen Daten enthält um auch nach 4 Monaten wieder in das Projekt einsteigen zu können. Und natürlich viele Kommentare im Code, ansonsten machste dich tot. :-)

Darüber hinaus erstelle ich für ein größeres Projekt eine Projektbeschreibung, die die Programmfunktion, die geplanten Arbeitsschritte (Programmnutzung) und die grobe Umsetzung in PB beschreibt. Etwaige eigene Dateiformate für Datendateien, die erzeugt oder gelesen werden, sind ebenfalls in der Projektdoku beschrieben.

Hier mal ein Beispielheader für das mainfile:

Code: Alles auswählen

;*************************************************************************
;*
;* GiMeG - Gisi's Mencoder GUI
;* Grafisches Interface für den Video/Audio-Encoder "Mencoder"
;* (http://www.mplayerhq.hu)
;*
;*************************************************************************
;* 
;* Title             : GiMeG
;* Version           : 0.01
;* Date              : xx.xx.2007
;* Autor:            : xxx
;* Programming lang. : Purebasic 4.10 beta3
;* -----------------------------------------------------------------------
;* BESCHREIBUNG:
;* 
;* GiMeG ist ein Frontend für den Kommandozeilenorientierten Mediakonverter
;* "Mencoder" und hauptsächlich für die grafische Bedienung bzgl der Konvertierung 
;* von Videos gedacht.
;*
[... usw... ]
;* -----------------------------------------------------------------------
;*
;* -----------------------------------------------------------------------
;* Historie:
;* 0.01 - xx.xx.07:
;*                  Erste Version 
;*
;*
;*************************************************************************
So sehen die Header für Prozeduren aus:

Code: Alles auswählen

;*************************************************************************
;* Procedurename: Set_AusgabePfad()
;* Description  : Hängt gedropte Filenamen an das Listview an
;* Arguments    : -
;* Results      : -
;*************************************************************************
Bei jedem Projekt versuche ich meine Strukturierung und die Kommentierung noch weiter zu verbessern.

Allerdings habe ich noch kein so grosses Projekt gehabt, daß da 40.000 Zeilen bei rauskommen. :-)
Das größte Projekt (noch in Arbeit) hat mit allen Includes 52 KB Sourcecode und ist auf 8 Dateien verteilt.

Markus

Verfasst: 21.09.2007 12:20
von AND51
Wäre die 3.94 IDE nicht so lahmarschig beim Laden eines 50 KB-Codes mit 3.000 Zeilen und mehr gewesen (auch auf einem 3,4 GHz Rechner!), wäre ich vermutlich immernoch dabei, Enumerations, Gadgets, Macros und Proceduren in eine Main File zu packen...

Insofern habe ich es 3.94 zu verdanken, dass ich es mir angewöhnt habe, Teile des Codes auszulagern.

Alles lagere ich jedoch nicht aus, denn es gibt ja noch das Code-Folding. Was ich zum Beispiel auslagere sind allegemeine Prozeduren, Enumerations, und sonstige Kleinigkeiten, die man zwar braucht, an die man aber selten ranmuss.


Mittlerweile bin ich aber wieder einen Schritt zurückgegangen: Ich lagere Codes nur dann aus, wenn es länger dauert, einen gefalteten Bereich aufzuklappen und zur passenden Stellle zu scrollen :lol:


Was ich mal toll fänd, ist, wenn man wie in Word einen Fensterteiler einführt: Der Editor kann frei wählbar geteilt werden, man hat also 2x denselben Source in einem Panel und kann in beiden Bereichen unabhängig voneinander scrollen und schreiben.

Verfasst: 21.09.2007 12:22
von Kurzer
AND51 hat geschrieben:Was ich mal toll fänd, ist, wenn man wie in Word einen Fensterteiler einführt: Der Editor kann frei wählbar geteilt werden, man hat also 2x denselben Source in einem Panel und kann in beiden Bereichen unabhängig voneinander scrollen und schreiben.
Das hatte ich (neben anderern Vorschlägen) vor nem 1/2 Jahr im engl. Forum mal angemerkt. Wurde aber leider bisher nicht umgesetzt.

Markus

Verfasst: 21.09.2007 12:51
von Franky
Theoretisch gibt´s eigentlich keine Grenze, seitdem PB in 4.0 unbegrenzte Strings verpasst bekommen hat, aber ich würd mal schätzen, dass sowohl Fred als auch Freak in GUI und Compiler für die Längenangabe des Codes Longs benutzen. Somit darfst du maximal 2.147.483.646 Zeichen benutzen. Aber keine Angst, bei etwa 100 Zeichen pro zeile darfst du noch 21.434.836
Zeilen schreiben. Viel Spass :mrgreen:
PS: PGS lag glaub ich mal bei 70000 Zeilen. Aber das gibt´s ja leider nicht mehr. :'-(