Zyklon

Die Cyclone-Programmiersprache soll eine sichere Dialekt der Sprache C zu sein. Cyclone wurde entwickelt, um Pufferüberläufe und andere Schwachstellen, die endemisch in C-Programme sind zu vermeiden, ohne dabei die Leistung und den Komfort von C als Werkzeug für die Systemprogrammierung.

T Labs Forschung und Greg Morrisett Gruppe an der Cornell 2001 Version 1.0 wurde am 8. Mai 2006 veröffentlicht; Cyclone Entwicklung wurde als gemeinsames Projekt von AT & amp gestartet.

Sprachfunktionen

Cyclone versucht, einige der häufigsten Gefahren des C zu vermeiden, während immer noch das Aussehen und Leistung. Zu diesem Zweck legt Cyclone folgende Grenzwerte für Programme:

  •  Überprüfungen werden eingesetzt, um die Segmentierung Fehler zu vermeiden
  • Zeigerarithmetik ist begrenzt
  • Zeiger müssen vor Gebrauch initialisiert werden
  • Schlenker Zeiger werden durch den Bereich Analyse und Grenzen verhindert
  • Nur "sichere" Abgüsse und Gewerkschaften sind erlaubt
  •  in Bereiche ist nicht erlaubt
  •  Etiketten in verschiedenen Bereiche nicht anerkannt werden
  • Pointer-Rückkehr-Funktionen müssen ausführen
  •  und werden nicht unterstützt

Um das Werkzeug gesetzt, dass C-Programmierer sind, bietet Cyclone die folgenden Erweiterungen verwendet zu halten:

  • Nichts Zeigern keine Schecks erfordern
  • "Fat" Pointer-Unterstützung Zeigerarithmetik mit Laufzeitüberprüfung von Grenzen
  • Wachstumsfähigen Regionen zu unterstützen eine Form der sicheren manuelle Speicherverwaltung
  • Garbage Collection für Heap zugewiesenen Werte
  • Stichwort Gewerkschaften unterstützen Typ variierende Argumente
  • Injektionen zu automatisieren die Verwendung von markierten Gewerkschaften für Programmierer
  • Polymorphismus ersetzt einige Verwendungen
  • varargs als Fett Zeigern implementiert
  • Ausnahmen ersetzen einige Verwendungen und

Für eine bessere High-Level-Einführung in Cyclone, die Argumentation hinter Cyclone und die Quelle dieser Listen finden Sie in diesem Papier.

Zyklon sieht im Allgemeinen, ähnlich wie C, aber es sollte als eine C-ähnliche Sprache angesehen werden.

Zeiger / Referenztypen

Cyclone implementiert drei Arten von Referenz:

  • , und
  • .

Der Zweck der Einführung dieser neuen Zeigertypen ist, um gemeinsame Probleme zu vermeiden, wenn mit Zeigern. Nehmen wir zum Beispiel eine Funktion, genannt, die einen Zeiger auf einen int übernimmt:

Auch wenn die Person, die die Funktion schrieb konnte Kontrollen eingesetzt haben, lassen Sie uns annehmen, dass aus Leistungsgründen taten sie nicht. Berufung wird in undefinierten Verhalten führen. Um solche Probleme zu vermeiden, stellt Cyclone Zeigertyp, der nie sein kann. Damit ist der "sichere" Version wäre:

Dies teilt dem Cyclone-Compiler, der das Argument sollte nie sein, die Vermeidung der oben genannten nicht definiertes Verhalten. Der einfache Wechsel des zu speichert die Programmierer aus, die die Kontrollen und das Betriebssystem aus, die zu stoppen Zeiger dereferenziert schreiben. Diese zusätzliche Grenze kann jedoch eine ziemlich große Stolperstein für die meisten C-Programmierer, der in der Lage, ihre Zeiger direkt arithmetische Manipulation verwendet werden. Auch wenn dies erwünscht ist, kann es zu Pufferüberläufe und andere "off-by-one" -Stil Fehlern führen. Um dies zu vermeiden, wird die Zeigertyp nach einer bekannten Bindung der Größe des Arrays begrenzt. Obwohl dies fügt Overhead aufgrund der zusätzlichen Informationen über den Zeiger gespeichert, es verbessert die Sicherheit. Nehmen wir zum Beispiel eine einfache Funktion, die in C geschrieben:

Diese Funktion setzt voraus, dass der String in wird von NULL-terminierten übergeben. Doch was passiert, wenn aus auf diese String übergeben? Dies ist in C völlig legal, aber würde dazu führen, dass durch die Erinnerung nicht unbedingt mit der Zeichenfolge zugeordnet laufen. Es gibt Funktionen, wie zB denen verwendet werden, um solche Probleme zu vermeiden, aber diese Funktionen sind nicht standardmäßig mit jeder Umsetzung ANSI C. Die Cyclone-Version ist nicht so verschieden von der C-Version:

Dabei begrenzt sich durch die Länge des Feldes an sie übergeben, also nicht über die tatsächliche Länge gehen. Jede der Vielzahl von Zeigertyp sicher an jeden der anderen gegossen werden und Arrays oder Zeichen werden automatisch durch den Compiler gegossen.

Schlenker Zeiger und Regionsanalyse

Betrachten Sie den folgenden Code in C:

Diese liefert ein Objekt, das auf dem Stapel der Funktion, die nach der Funktion zurück erhältlich zugeordnet ist. Während gcc und andere Compiler wird über solche Codes zu warnen, wird die folgende Regel kompiliert ohne Warnungen:

Zyklon tut regionale Analyse jedes Codesegments verhindert dangling Zeiger wie die von dieser Version zurück. Alle lokalen Variablen in einem gegebenen Rahmen werden als Teil der gleichen Region, getrennt von dem Haufen oder einem anderen lokalen Region. So bei der Analyse, der Compiler, dass zu sehen ist ein Zeiger in den lokalen Stack, und würden einen Fehler melden.

Manuelle Speicherverwaltung

Beispiele

Das beste Beispiel für den Anfang ist das klassische Hallo Welt Programm:

  0   0
Vorherige Artikel Alberta Township-System
Nächster Artikel Bretons

In Verbindung Stehende Artikel

Kommentare - 0

Keine Kommentare

Fügen Sie einen Kommentar

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Zeichen übrig: 3000
captcha