|
Antwort |
(Moderator)
Registriert seit: 6. Mai 2005 Ort: Berlin 4.956 Beiträge Delphi 2007 Enterprise |
#71
Zitat von tommie-lie:
Zitat von alzaimar:
ich bin auch Koch
Wenn Hubble der Ansicht ist, das Objekte auf dem Stack toll und schnell sind, kann ich ihm nicht widersprechen, aber ist nicht ein Zusammenhang mit diesem Speichermodell und den Exploits, die doch gerade versuchen, den Stack zu manipulieren? Aber grundsätzlich geht es hier hoffentlich nicht schon wieder um den C++ vs. Delphi Krieg, bzw. was man womit alles machen kann, oder nicht, sondern primär (jedenfalls für mich) um die Frage, ob eine Progammiersprache (inkl. IDE!!!) ein gutes oder ein sicheres Werkzeug sein soll. Leider geht beides (noch) nicht, denn Sicherheit geht immer auf Kosten der Freiheit (Gruss an unsere Innenminister, gell?). Ich meine, sowohl C++ als auch Delphi sind doch gleich gut. Was die eine (Templates, Mehrfachvererbung bla bla) hat, macht die andere durch eine bessere Struktur wieder wett. Früher oder später werden die sowieso entweder von D# (was immer das ist) o.ä. abgelöst bzw. so lange weiterentwickelt, bis der einzige Unterschied zwischen C++ und D++ das '{' vs. 'begin' ist. Wenn ich mir diverse Skriptkomponenten so anschaue, die es einem ermöglichen den Code wahlweise als C,Delphi oder Basic Quellcode anzeigen zu lassen, dann sehe ich, wohin die Reise gehen wird. Das Problem ist nicht die Sprache, sondern die Entwickler. Leider kann jeder mit den hübsch bunten Klicki-GUIs der IDE mal eben etwas zusammenfrickeln, was so aussieht, als ob es eine Anwendung wäre. An den Unis wird bedauerlicherweise das 'Handwerk' des Programmierens, also das reine Hacken, Suchen nach Algorithmen, Optimieren, Einhalten von Regeln und Disziplinen nicht mehr gelehrt, sondern irgendwelcher anderer Quark. Ich meine, nicht jeder ist zum Entwickeln geboren, aber ich muss doch auch als 'IT-Entscheider' wissen, ob und wann ein Problem NP-komplett ist, und wann nicht. Als IT-Fuzz, der über Millionen-Anschaffungen entscheidet, muss ich doch einschätzen können, ob der Preis für eine SW gerechtfertigt ist, oder nicht und ggf. dem Anbieter mal auf den Zahn fühlen. In meinen 25 Jahren Berufserfahrung hat mich ein IT-Manager genau 2x vorgemacht, das mein Angebot zu teuer ist, weil man das einfacher hinbekommt. Und das war im Ausland! Den Deutschen muss man nur Dick daher kommen und schon nehmen die einem Alles ab. Na, ja wieder mal OT. Zurück zum Thema: Hubble, hör mir auf mit der BDE, das war wirklich Nichts. Aber wer aufgepasst hat, hat schon vor 5 Jahren die Finger von gelassen (als nämlich ADO aufkam, was auch wieder nicht besonders ist). Dein Ansatz, für jedes Problem das richtige Werkzeug zu verwenden ist, glaube ich, das Richtig: Wer Webseiten mit Delphi abbildet, der ist fleissig, hat sie aber nicht mehr alle. Umgekehrt, wer einen performanten Algo in PHP abbildet auch. Abschließend noch ein Wort zu A.Koch: Der ist der COM/ADO-Pabst und damit kann er ruhig in Richtung Visual Studio. Das ist doch ein gutes Produkt, oder nicht? Die abschließende große Frage für mich ist die: Warum hat Borland Anders Heijlsberg zu MS ziehen lassen? Weil MS zu viel geboten hat? Nee, da war ein Deal mit im Spiel, der beide Seiten befriedigen muss: MS hat eine .NET Klassenbibliothek alleine nicht hinbekommen und eine gute IDE auch nicht. Borland dagegen sah wegen .NET und C# die Felle davon schwimmen. Früher waren die Beiden spinnefeind und heute fragt man sich, wann sie denn Kinder kriegen. Dämmerts? Ich prophezeie ein D# (ist ja auch schon da), das 100% kompatibel zum C# sein wird: MS und Borland teilen sich die Welt auf und jagen Java zum Teufel, schätze ich. Vermutlich werden wir uns per Options-Dialog unsere eigenen Keywords 'begin','{' etc. zusammenklicken können, so das nun wirklich Keiner mehr meckern kann In diesem Sinne: An die Arbeit!
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare") |
Zitat |
Registriert seit: 11. Feb 2003 Ort: Trittau 3.538 Beiträge Delphi XE Professional |
#72
Zitat von alzaimar:
Wer Webseiten mit Delphi abbildet, der ist fleissig, hat sie aber nicht mehr alle. Umgekehrt, wer einen performanten Algo in PHP abbildet auch.
BTW: Und kennst Du Intraweb?
Gruß aus Trittau
Rainer http://rkerber57.wordpress.com https://www.facebook.com/rainer.kerber http://www.flickr.com/r_kerber |
Zitat |
Registriert seit: 13. Dez 2005 13 Beiträge |
#73
Zitat von sakura:
Zitat von Hubble:
mäßiges exception handling
Hier nochmal im Klartext und für alle: C: void IrgendeineFunktion() { CMeinObjektTyp A( "irgendein Text"); EinFunktionsaufrufmitexception(); } Es ist nicht möglich diesen übersichtlichen Einzeiler auch in Delhpi zu schreiben. In Delhpi brauche ich alleine dafür var A:TMeinObjektTyp ; ... A:=TMeinObjektTyp.Create(..); EinFunktionsaufrufmitexception(); freeannil(A); Das sind Minimum 3 Zeilen. Absolutes minimum und falls ich ignoriere, daß die Instanz A in Delphi nicht freigeben wird und in C wird dies automatisch passiert. @alzaimar ich nehme an du meinst ein garbage collector. Das hat absolut nix damit zu tun. Es gibt keine schnelle Möglichkeit in Delhi so ein Objekt zu erzeugen. Das Ding landet in Delhpi immer auf dem Heap. Und wenn da ein kleiner Fehler passiert weil immer wieder ein Objekt nicht freigegeben wird ist den Speicher bald voll. Natürlich würde ich auf den Stack keine großen Objekte ablegen welche für die ganze Laufzeit des Programms zur Verfürgung stehen müssen. Aber sehr oft brauch man diese Objekte eben nur innerhalb dieser Funktion. Wer diesen Punkt nicht zumindest als sehr ungünstig in Delhpi anerkennt ist für mich diskussionsfäig. Also braucht man in Delphi zwingend einen try except block, der alle Eventualitäten abhandelt. In C ist dies in dieser Form nicht notwendig. Ich habe im Moment das Problem, das bei einigen hundert Buttons in meinem Projekt ein Lock (wie in meinem Beipiel auf Seite 4 beschieben) gemacht werden müßte. In C währe dies jemeils ein Einzeiler in der Ersten Zeile jedes ClickEvents. In Delphi sind dies jeweils mindestens 7 Zeilen an 3 Stellen des Events. Ich weiß das hätte man voher besser coden müssen aber ich hab das Projekt eben so übernommen.
Zitat von sakura:
Btw, Dein Bespiel mit automatischer Objektfreigabe kann man auch in Delphi 6 bauen.
Zitat von sakura:
Zitat von Hubble:
schlechte Pointernutzung
Ist eventuell Geschmackssache aber in C hab ich alle Möglichkeiten damit in Delhpi nicht. Sonst versuche ich auch Pointer so wenig wie möglich zu nutzen.
Zitat von sakura:
Zitat von Hubble:
VCL nicht Threadfest
Zitat von sakura:
Zitat von Hubble:
Objekte können nur mit .create erzeugt werden und wieder gelöscht werden
Aber ich kann eben auch wie oben beschrieben ein Objekt als Einzeiler erzeugen nutzen und danach Ignorieren weil er sich am Ende der Funktion unter allen Umständen selber löscht.
Zitat von sakura:
Zitat von Hubble:
Klassen und Ausprogrammierung sind immer getrennt
Wenn das ne kleine Hübesche Klasse ist dann schreibe ich eben lieber den Einzeiler direkt in die Deklaration und nicht erst 700 Zeilen später. Außderdem kann ich kleine Klassen (z.B. Miniparser) direkt über der Funktion als 10 Zeiler im .cpp File implementieren. In Delphi lass ich dass und schreib mir lieber ein ungekapselte Funktion die zwar das gleiche kann, aber unangenehmer ist im Handling. Beispiel mitten im cpp file : .... class CZeilenParser { public: CZeilenParser(char* Text){ /*machwasmittext;*/} int gibtDurchschitt(){return (Max-Min)/2;} private: int Min,Max; }; void NeKlasse::neFunktion(char* geparsterText) { CZeilenParser P(geparsterText); P.gibtDurchschitt(); ... Fertig: Natürlich geht in Delhpi auch irgendwie. Ist aber umständlicher kostet mehr Zeit und Übersicht. Natürlich nur für den Fall das diese Klasse ausschließlich in dieser Funktion verwendet wird. Ein mehrfach verwendetes Objekt würde ich nie mitten in den C++ Code hocken.
Zitat von sakura:
Zitat von Hubble:
nicht ausgereifte Projektverwaltung
Zitat von sakura:
Zitat von Hubble:
keine STL
z.B. eine Map mit 456.456 Nachnamen aus Holland. Die haben alle eine Nummer. Und ich möchte diese Nummer mit Angabe des Namens herausfinden (ohne Datenbank) C: map<string,int>Nachnamen; // Die Map Nachnamen["Van Deutz"]=154568; // Einfügen der Namen Nachnamen["Van Irgendwer"]=1568; // und noch 456.454 andere Van's .... //Jetzt mach ich einfach int NrvonD=Nachnamen["Van Deutz"]; // Und schon hab ich mit der Schnelligktiet von Ln(n) Vergleichen die Nummer von "Van Deutz"; Mir ist keine auch nur annähernd so elegante und schnelle Lösung in Delhpi bekannt. Natürlich kann ich anstatt des Strings auch ein beliebiges anderes Objekt verwenden.
Zitat von sakura:
Zitat von Hubble:
keine echten Templates
Zitat von sakura:
Zugegeben, ich liebe Delphi, aber ich diskutiere auch gerne die Für und Wider von Delphi. Also, ich warte auf Deine Antworten
Und egal was passiert ich werden die nächste Zeit noch Delhpi nutzen müssen. Hubble |
Zitat |
Registriert seit: 13. Dez 2005 13 Beiträge |
#74
Zitat von Daniel G:
Zitat von Hubble:
Was ich in den letzten Jahren lernen mußte:
In Delphi wird man zum schlampigen Programmieren verleitet. Da nehm ich lieber den soliden Golf 1 und komm damit fast überall hin. Und der rasende allround-Jeep als Programmiersparache ist noch nicht erfunden worden. Hubble (wenn Methaphern mir in den Kram passen find ich sie klasse) |
Zitat |
tommie-lie
(Gast)
n/a Beiträge |
#75
Zitat von alzaimar:
Wenn Hubble der Ansicht ist, das Objekte auf dem Stack toll und schnell sind, kann ich ihm nicht widersprechen, aber ist nicht ein Zusammenhang mit diesem Speichermodell und den Exploits, die doch gerade versuchen, den Stack zu manipulieren?
Für mich haben daher Objekte auf dem Stack nur einen echten Vorteil: Ich brauche mich nicht um sie zu kümmern.
Zitat von alzaimar:
denn Sicherheit geht immer auf Kosten der Freiheit (Gruss an unsere Innenminister, gell?).
Zitat von alzaimar:
Vermutlich werden wir uns per Options-Dialog unsere eigenen Keywords 'begin','{' etc. zusammenklicken können, so das nun wirklich Keiner mehr meckern kann
Zitat von Hubble:
Natürlich geht in Delhpi auch irgendwie. Ist aber umständlicher kostet mehr Zeit und Übersicht.
Delphi-Quellcode:
Das einzige, was bleibt, ist, daß man die Instanz eben nicht auf dem Stack haben kann, aber von der Übersichtlichkeit her macht dieses Beispiel kaum einen Unterschied zu deinem. Plus: Hier ist die Klasse tatsächlich nur innerhalb dieser einen Methode zu sehen, bei dir wäre die Klasse auch für alle nachfolgenden Klassen als Typ sichtbar.
begin TSomeType.SomeMethod(someparams: TSomeOtherType): TSomeResult;
type TLocalClass = class public blubb(); end; var LocalInstance: TLocalClass; begin LocalInstance := TLocalClass.Create(); FreeAndNil(LocalInstance); end;
Zitat von Hubble:
Ein mehrfach verwendetes Objekt würde ich nie mitten in den C++ Code hocken.
Zitat von Hubble:
Mir ist keine auch nur annähernd so elegante und schnelle Lösung in Delhpi bekannt.
Zitat von Hubble:
Natürlich kann ich anstatt des Strings auch ein beliebiges anderes Objekt verwenden.
Prinzipiell gebe ich dir vollkommen Recht, die STL ist eine enorme Erleichterung, wenn man sich mal eben 'ne Datenstruktur basteln will, die vollständig typsicher ist (und zwar garantiert typsicher, schon zur compile-time). |
Zitat |
Registriert seit: 19. Okt 2004 Ort: Neuruppin 524 Beiträge Delphi 2007 Architect |
#76
HiGi,
und einen wesentliche Punkt habt Ihr in Euren Erklärungen vergessen, der nicht unwesentlich für den späteren Einsatz der Programme ist. Compilierte Delphi-Programme (wenn nicht .net, oder XML Framework vwerwendet) bringen ihren eigenen vollständigen Kernel mit, dass heisst, sie laufen im wesentlichen unabhängig von allen anderen Betriebssystem- und Programme-Ressourcen deines Computers. Das ist aus zweierlei Hinsicht wichtig. 1. Du bist nicht der erfahrenste Programmierer und kannst mit Deinen Programmen den Lauf anderer Programme auf Deinen Computer stören. 2. Nehme an, auf Du läßt Deine Programme in einem System laufen, auf dem Zertifizierte Software betrieben wird, die in der Medizin oder Bankwesen. Haben Deine Programme keinen eigenen Kernel, kommst Du in Teufels Küche, weil Du die Zulassungsbedingungen der Zertifizierten Programme verletzt. --> Also, sei unabhängig, lasse mögliche Fehler in Deinem eigenen Käfig. Traurig ist nur, daß sich Delphi mit seinen Entwicklungen von diesem Prinzip lösen wird, in dem es mehr auf FrameWorks, .NET und XML setzt. Hier hätte Delphi sonst eine eigene Sparte und Berechtigung, die von keiner anderen Sprache so schnell streitig gemacht werden kann. Einen fleißigen Weihnachtsmann E. B. |
Zitat |
Registriert seit: 29. Mai 2002 37.621 Beiträge Delphi 2006 Professional |
#77
Zitat von EccoBravo:
Compilierte Delphi-Programme (wenn nicht .net, oder XML Framework vwerwendet) bringen ihren eigenen vollständigen Kernel mit, dass heisst, sie laufen im wesentlichen unabhängig von allen anderen Betriebssystem- und Programme-Ressourcen deines Computers.
Zitat:
1.
Du bist nicht der erfahrenste Programmierer und kannst mit Deinen Programmen den Lauf anderer Programme auf Deinen Computer stören.
Zitat:
2.
Nehme an, auf Du läßt Deine Programme in einem System laufen, auf dem Zertifizierte Software betrieben wird, die in der Medizin oder Bankwesen. Haben Deine Programme keinen eigenen Kernel, kommst Du in Teufels Küche, weil Du die Zulassungsbedingungen der Zertifizierten Programme verletzt.
Michael
Ein Teil meines Codes würde euch verunsichern. |
Zitat |
Registriert seit: 16. Aug 2005 486 Beiträge |
#78
Zitat von EccoBravo:
Traurig ist nur, daß sich Delphi mit seinen Entwicklungen von diesem Prinzip lösen wird, in dem es mehr auf FrameWorks, .NET und XML setzt.
|
Zitat |
tommie-lie
(Gast)
n/a Beiträge |
#79
Zitat von EccoBravo:
Compilierte Delphi-Programme (wenn nicht .net, oder XML Framework vwerwendet) bringen ihren eigenen vollständigen Kernel mit, dass heisst, sie laufen im wesentlichen unabhängig von allen anderen Betriebssystem- und Programme-Ressourcen deines Computers.
Das ist das Beste, was ich in diesem Fred lese.
Zitat von EccoBravo:
Du bist nicht der erfahrenste Programmierer und kannst mit Deinen Programmen den Lauf anderer Programme auf Deinen Computer stören.
Zitat von EccoBravo:
Nehme an, auf Du läßt Deine Programme in einem System laufen, auf dem Zertifizierte Software betrieben wird, die in der Medizin oder Bankwesen.
Haben Deine Programme keinen eigenen Kernel, kommst Du in Teufels Küche, weil Du die Zulassungsbedingungen der Zertifizierten Programme verletzt. "Programme mit eigenem Kernel"... *sichgarnichtmehreinkrieg* |
Zitat |
Registriert seit: 12. Jun 2002 3.483 Beiträge Delphi 10.1 Berlin Professional |
#80
Zitat von Hubble:
Das reine Expception Handling ist dem in C++ ähnlich. Aber nicht in Verbingung mit Objekten.
Hier mal eine vereinfachte TAutoDelete Klasse.
Delphi-Quellcode:
type
IAutoDelete = interface function This: Pointer; end; TAutoDelete = class(TInterfacedObject, IAutoDelete) private FObject: TObject; public constructor Create(AObject: TObject); destructor Destroy; override; function This: Pointer; end; { TAutoDelete } constructor TAutoDelete.Create(AObject: TObject); begin inherited Create; FObject := AObject; end; destructor TAutoDelete.Destroy; begin FObject.Free; inherited Destroy; end; function TAutoDelete.This: Pointer; begin Result := FObject; end; function NewOAD(AObject: TObject): IAutoDelete; begin Result := TAutoDelete.Create(AObject); end;
Zitat:
Hier nochmal im Klartext und für alle:
C: void IrgendeineFunktion() { CMeinObjektTyp A( "irgendein Text"); EinFunktionsaufrufmitexception(); }
Delphi-Quellcode:
Und die AutoDelete-Klasse muss man nur einmal schreiben.
procedure IrgendeineFunktion;
begin NewOAD( TMeinObjectTyp.Create('irgendein Text') ); EinFunktionsaufrufmitexception; end; Will man mit noch Methoden aufrufen oder Eigenschaften abfragen, so würde das so aussehen:
Delphi-Quellcode:
var
A: TMeinObjektTyp; begin A := NewOAD( TMeinObjektTyp.Create('irgendein Text') ).This; A.MachWas; end;
Zitat:
Es ist nicht möglich diesen übersichtlichen Einzeiler auch in Delhpi zu schreiben.
Zitat:
Das Ding landet in Delhpi immer auf dem Heap.
Delphi-Quellcode:
PMyObject = ^TMyObject;
TMyObject = object private m_field: Integer; public constructor Init; destructor Done; end;
Zitat:
Wer diesen Punkt nicht zumindest als sehr ungünstig in Delhpi anerkennt ist für mich diskussionsfäig.
Zitat:
Also braucht man in Delphi zwingend einen try except block, der alle Eventualitäten abhandelt.
Zitat:
In C ist dies in dieser Form nicht notwendig.
Zitat:
Ich habe im Moment das Problem, das bei einigen hundert Buttons in meinem Projekt ein Lock (wie in meinem Beipiel auf Seite 4 beschieben) gemacht werden müßte.
In C währe dies jemeils ein Einzeiler in der Ersten Zeile jedes ClickEvents. In Delphi sind dies jeweils mindestens 7 Zeilen an 3 Stellen des Events.
Zitat:
Zitat von sakura:
Btw, Dein Bespiel mit automatischer Objektfreigabe kann man auch in Delphi 6 bauen.
Zitat:
Zitat von Hubble:
schlechte Pointernutzung
Zitat:
Ja auch ich lösche Objekte in Delphi mit free.
Aber ich kann eben auch wie oben beschrieben ein Objekt als Einzeiler erzeugen nutzen und danach Ignorieren weil er sich am Ende der Funktion unter allen Umständen selber löscht.
Zitat:
Wenn das ne kleine Hübesche Klasse ist dann schreibe ich eben lieber den Einzeiler direkt in die Deklaration und nicht erst 700 Zeilen später.
Delphi/Pascal nutzt hingegen das Unit-Konzept. Alles was im implementation-Abschnitt steht, kann jederzeit geändert werden, ohne dass die von dieser Unit abhängigen Units neu kompiliert werden müssen. Interface entspricht also den .h-Dateien und Implementation den .cpp Dateien, mit dem unterschied, dass Units immer "vorkompiliert" sind.
Zitat:
Außderdem kann ich kleine Klassen (z.B. Miniparser) direkt über der Funktion als 10 Zeiler im .cpp File implementieren.
In Delphi lass ich dass und schreib mir lieber ein ungekapselte Funktion die zwar das gleiche kann, aber unangenehmer ist im Handling.
Zitat:
Natürlich geht in Delhpi auch irgendwie. Ist aber umständlicher kostet mehr Zeit und Übersicht.
Natürlich nur für den Fall das diese Klasse ausschließlich in dieser Funktion verwendet wird. Ein mehrfach verwendetes Objekt würde ich nie mitten in den C++ Code hocken.
Zitat:
Zitat von sakura:
Zitat von Hubble:
nicht ausgereifte Projektverwaltung
Zitat:
Zitat von sakura:
Zitat von Hubble:
keine STL
Zitat:
Diskutiere auch gerne und wäre dankbar wenn Ihr mich von Delphi überzeugt.
Und noch ein "Wort" zum "Klicki bunti - fertig ist die Anwendung". Das ein Chef meint, die Anwendung wäre fertig, wenn man schon Screenshots sieht, halte ich für ein gerücht. Es ist eher der Fall, dass man gelobt wird, weil man mit minimalen Aufwand/Zeit (=Kosten) eine präsentierfähige Oberfläche hat. Und wenn man dann das Rennen verliehrt, hat man nicht zig Manntage (bzw. Frautage) investiert. Das trennen zwischen Oberfläche und Code ist dann ein anderes Thema, das vom jeweiligen Programmierer abhängt. Ich fange z.B. immer erst mit der Datenstruktur an, habe aber die Oberfläche im Hinterköpfchen damit ich die notwendigen Events bereits einbaue.
Andreas aka AHUser aka jbg
Mein Blog - kombiniert mit all meinen Delphi Tools |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |