Ich stütze mich hauptsächlich auf die Assembler, die ich verwendet habe - hauptsächlich MASM, NASM und (in geringerem Maße) TASM. Einige der neueren Versionen von TASM hatten (haben?) Einige Funktionen, um OO zu unterstützen, aber ich habe sie nicht viel benutzt, und ich versuche nicht, sie zu kommentieren.
Erstens: Die meisten Sprachen sind zu einer Struktur übergegangen, die zumindest etwas baumähnlich ist. Ob objektorientiert oder objektbasiert oder genau das, es ist ziemlich viel über die Beziehungen zwischen verschiedenen Teilen eines Systems definiert. Es gibt auch eine Menge zu "schützen" einen Teil eines Systems vor versehentlichem "Einmischen", aber andere Teile (obwohl der Schutz normalerweise umgangen werden kann, wenn Sie möchten). Im Gegensatz dazu ist die Assemblersprache relativ "flach" - die meisten Beziehungen zwischen Code (und Daten) in verschiedenen Teilen des Systems werden hauptsächlich durch Dokumentation und in geringerem Maße durch Benennungskonventionen hergestellt.
Das Ergebnis ist, dass es oft viel einfacher ist, Code viel enger zu koppeln, als es ideal wäre. Die Anforderungen, die für die Wahl der Assemblersprache ausschlaggebend waren (höhere Leistung, geringere Größe usw.), belohnen dies oftmals auch. Durch Umgehen zugelassener Schnittstellen und solcher kann häufig Code abgerufen werden, der kleiner und schneller ist (wenn auch in der Regel nicht sehr häufig) besser in jeder Dimension). Die Sprache und die Tools selbst können Ihre (guten oder schlechten) Handlungen viel weniger einschränken, was die Manager erheblich mehr belastet, um Probleme zu vermeiden. Ich würde nicht sagen, dass es qualitativ anders ist, aber quantitativ. Das heißt, das Management muss arbeiten, um Probleme in beiden Richtungen zu vermeiden. Bei Assemblersprachen sind jedoch im Allgemeinen mehr (und oftmals strengere) Richtlinien erforderlich, um festzustellen, was nicht der Fall ist. nicht akzeptabel.
Dies zu mildern, ist größtenteils eine Frage sorgfältigerer Richtlinien, mehr Anleitung durch erfahreneres Personal und spezifischerer, sorgfältig durchgesetzter Namenskonventionen.
Personal ist ein Problem. Die Probleme, auf die ich gestoßen bin, waren jedoch nicht in erster Linie die, die ich erwartet hatte. Es war ziemlich einfach, Leute mit einer Art "Fighter Jock" -Persönlichkeit zu finden, die sich freuten, in Assembler-Code zu springen. Die meisten machten eine ziemlich vernünftige Arbeit, obwohl sie fast keine Vorkenntnisse im Umgang mit Assembler hatten.
Die Schwierigkeit, auf die ich stieß, bestand darin, mehr leitende Angestellte zu finden - Leute, die das Projekt zumindest scheinbar unter Kontrolle halten konnten und nicht vollständig an Sprachen gewöhnt waren, die die Richtlinien für eine vernünftige Einhaltung des Codes lieferten (und weitgehend durchsetzten) wartbar und verständlich.
Rückblickend könnte ich in dieser Hinsicht eines der größten Probleme verursacht haben. Ich sehe zwei Ursachen für Probleme. Erstens habe ich zum Zeitpunkt des Projekts, an das ich denke, schon seit einiger Zeit hauptsächlich in höheren Sprachen programmiert und nur Assemblersprache verwendetals letztes. Als ich es benutzte, war fast jeder mögliche Trick, um Leistung zu erzielen, nicht nur faires Spiel, sondern erwartet. Zweitens, als ich an einigen Systemen gearbeitet hatte, die vollständig (oder hauptsächlich) in Assemblersprache geschrieben waren, war es unter einigen ziemlich eisernen Projektmanagern. Zu der Zeit war ich noch relativ jung und hatte ehrlich gesagt einen Groll gegen die Art und Weise, wie sie Dinge betrieben, und neigte daher dazu, das Gegenteil zu tun. Rückblickend war es wichtig, was sie wirklich taten, und nicht nur, weil sie alt und unflexibel waren (was ich ziemlich sicher war, wie ich die Dinge damals sah).