Programmieren ohne Sprünge und Schleifen

darktrym

Fahnenträger
Da sich hier einige Geeks und Studierte tummeln, werfe ich mal die Frage in die Runde, ob jemand weiß bzw. Quellen kennt wie man effektiv ohne Sprünge und somit Schleifen programmiert?
Mein Anwendungsfall, ich habe ein Algorithmus welcher für eine andere Plattform und Sprache umgesetzt werden soll. Die Quellsprache ist C, die Zielsprache ist ein Assemblersprache welcher keine Sprünge kennt. Ich habe dafür ein visuelles Programmiersystem welches auf Simulink aufbaut, dass auf diese Sprache abbildet und diesen Test nun bestehen muss. Ggf. kann ich mir die Arbeit auch vereinfachen, wenn ich zus. Blöcke erdenke, nur habe ich keinen Plan wie ich da herangehen muss um bspw. eine Maximumsuche zu implementieren. Dabei stehen mir neben arithm. Funktionen auch bedingte Zuweisungen zur Verfügung, wenn die Information hilft.
 
Keine Sprünge?

Die einzige Lösung die ich sehe ist Code als Ereigniskette abzubilden und bei Wiederbedarf zu duplizieren.

Bedingte Ausführung würde heißen, dass zumindest Vorwärtssprünge unterstützt werden — ohne geht fast nichts.

Die Sprache kann also springen. Gegebenenfalls nur über einen Befehl.

Funktionsaufrufe sind Sprünge, Return ist ein Sprung.

Du kannst so eine Suche also nur implementieren wenn die Länge der Liste vorher bekannt ist. Oder zumindest musst Du Dich auf eine maximale Listenlänge festlegen.

Ich würde vermuten, dass Deine sprunglose Sprache nicht touringvollständig ist.
 
Die Sprache ohne Sprünge (ermöglicht Iteration/Rekursion) ist in der Tat nicht Turing-vollständig. Welche Plattform unterstützt keine Sprünge? Schon alleine den PC (program counter) zu laden ist ein Sprung. Also im Endeffekt kannst Du kein Programm starten ohne einen Sprung zu machen.
 
Also die Sprache wird auf ein FPGA sprich als SoftCore eingesetzt und ist domänenspezifisch.
In der Tat, Iterationen in Abhängigkeit von Eingaben sind nicht möglich aber das Ausrollen sehr wohl. Nur hab ich auf Vorschlag/Zuruf das umgesetzt, dass ein Modell beliebig kopiert werden kann d.h. wenn 10x Eingabe und Konvertierung zu machen sind, gibts auch 10 Ausgaben. Damit sind aber die Eingaben und Ausgaben getrennt, gibt nicht viele Algorithmen die das benötigen. Die Mehrzahl verwendet freie Indizierung, auch ein Problem das irgendwie gelöst werden muss.


Da ich nicht weiß, was ich alles leaken kann, hier mal ein öffentlicher Link zur Plattform.
 
Ah, es geht um einen FPGA. Mit deiner Sprache baust Du also lediglich eine Filterkette.

Das geht einfach (pseudo Code):
Code:
max = max > input ? max : input;
output << max;

Fertig.

Damit bekommst du immer das Maximum aller bisherigen Eingabedaten.

Dann brauchst Du nur irgendein Spezialkommando um max neu zu initialisieren.
 
ich habe ein Algorithmus[...] Zielsprache ist ein Assemblersprache welcher keine Sprünge kennt.

wird auf ein FPGA eingesetzt

Ich weiß, Grammatikflames sind total uncool, aber mir bluten die Augen. Wir sind doch hier nicht im Kinderforum, also mal bitte etwas aufpassen. Danke.

Edit:
Auf einen FPGA wird eine CPU gebaut, der bestimmten Maschinencode versteht.[...] von meiner grafischen Programmiersystem
 
Ne, noch viel schlimmer. Auf einen FPGA wird eine CPU gebaut(nennt sich Softcore), der bestimmten Maschinencode versteht. Der kommt von einem Assember. Dieser Assembler soll nun von meiner grafischen Programmiersystem erzeugt werden. Ziel ist es, neben dem Test auf Modellebene auch die Programmierung zu vereinfachen, zum. theoretisch, Optimierungen können auch dort bereits einfließen.

Hier mal ein Beispiel:
Code:
 WertMax = raw_data[0];
    WertMaxPos = 0;
    for(i = 1; i < 64; i++)
    {
        if(raw_data[i] > WertMax)
        {
            WertMax = raw_data[i];
            WertMaxPos = i;
        }
    }
    // Jetzt besitze ich die Stelle in der der höchste Wert zu finden ist
    // in WertMaxPos

    for (i = 0; i < 64; i++)
    {
        sortierteDaten[(31 + i)%64] = raw_data[(WertMaxPos+i)%64];
    }

Die grafische Ebene kann man sich wie Simulink Blöcke vorstellen, also Eingänge mit Ausgängen verbinden zur Illustration der Datenflüsse. Sowas wie Indices gibts natürlich nicht, nur Ausgänge von Blöcken.
 
Ich glaube es geht nicht direkt um FPGAs, wenn ich das richtig verstehe, sondern nur um eine "CPU", die auf dem FPGA laeuft, sowas wie microblaze und die emulierte CPU unterstuetzt keine Spruenge? Wenn du sowieso keine Spruenge/Schleifen nutzen kannst, dann halte ich eine softcore Loesung sowieso fuer voellig fehl am Platz und du kannst dein Problem versuchen direkt in einer hdl Sprache zu loesen, was wohl wesentlich ressourcenschonender und effizienter waere.
 
Ok, ich werd mal einem im Fachgebiet fragen, wie die solche Probleme lösen. Ist dann wohl doch zu spez. und exotisch. Irgendwo muss da ein Kniff existieren auf den ich noch nicht gekommen bin.
 
Es ist nicht exotisch, es ist idiotisch. Jedenfalls nach dem Informationsstand der sich uns darbietet.
 
Zurück
Oben