Design: Richtige Unterstützung für Rückrufe

Erstellt am 18. Juni 2015  ·  3Kommentare  ·  Quelle: WebAssembly/design

Wird Webassembly richtige Tail Calls unterstützen? Es gibt derzeit einen Link in https://github.com/WebAssembly/design/blob/master/AstSemantics.md#control -flow-structures, der eine "signatureingeschränkte ordnungsgemäße Rückruffunktion" erwähnt, was darauf hindeutet, dass eine solche Unterstützung in Betracht gezogen wurde. aber der Link verweist auf einen fehlenden Anker auf der Seite mit den MVP-Funktionen: https://github.com/WebAssembly/design/blob/master/PostMVP.md#signature -restricted-proper-tail-calls

Wenn die Antwort "vielleicht" lautet, was ist der beste Weg, um zu einer solchen Unterstützung beizutragen?

Hilfreichster Kommentar

Ja, richtige Tail Calls werden unterstützt, aber wahrscheinlich nicht in MVP. Dies ist besonders nützlich für funktionale Sprachen, die auf einer garantierten Tail-Call-Optimierung beruhen. Siehe Diskussionen in #33 und #44. Wie es unterstützt wird, ist noch in der Luft, da Experimente und Leistungsmessungen erforderlich sind.

Alle 3 Kommentare

Ja, richtige Tail Calls werden unterstützt, aber wahrscheinlich nicht in MVP. Dies ist besonders nützlich für funktionale Sprachen, die auf einer garantierten Tail-Call-Optimierung beruhen. Siehe Diskussionen in #33 und #44. Wie es unterstützt wird, ist noch in der Luft, da Experimente und Leistungsmessungen erforderlich sind.

Ich habe mir #33 und #44 angesehen, und #45 scheint auch verwandt zu sein. Ich bin jedoch skeptisch, dass ein ordnungsgemäßer Tail Call durch jeden Mechanismus erreicht werden kann, der auf einer Kontrollflussanalyse basiert (ob nicht reduzierbare Flusskontrolle unterstützt wird oder nicht).

Wie Sie sagen, verlassen sich funktionale Sprachen auf garantierte Tail-Call-Optimierungen, obwohl eine solche Terminologie verpönt ist, weil sie zu Verwirrung mit der Art der Gesamtbetriebskosten führt, die von C/C++/usw.-Compilern durchgeführt werden, bei denen verschiedene Einschränkungen für die zulässigen Aufrufe gelten können. Daher wird stattdessen der Begriff "richtige Rückrufe" verwendet. In einer Sprache mit richtigen Schlussanrufen ist jeder Anruf in einer Schlussposition erforderlich, um den vom rufenden Aktivierungsrahmen belegten Speicher aufzugeben. Dies schließt indirekte Aufrufe ein, daher die Schwierigkeit bei der lokalen Kontrollflussanalyse. Daher haben funktionale Sprachcompiler/Laufzeiten normalerweise explizite Tail-Call-Operationen und Aufrufkonventionen, um sie zu unterstützen.

Es ist großartig, dass Sie der Idee einer angemessenen Tail Call-Unterstützung gegenüber aufgeschlossen sind, und ich kann verstehen, dass dieses Problem nicht in den Zuständigkeitsbereich des MVP fällt. Aber könnte man es nicht nur schließen, sondern offen lassen, sondern mit einem Post-MVP / Post-Whatever- / Icebox-Label versehen, damit klar ist, dass die Angelegenheit noch nicht geklärt ist?

Ups, tut mir leid, ich wollte nicht schließen, bevor ich die Dokumentation repariert habe. Ich habe #190 geöffnet, um dieses Problem zu beheben (und dieses Problem zu schließen). Wir haben Probleme in den Text des Designs verschoben, da es neuen Lesern leichter macht, den Stand der Dinge zu verstehen, anstatt den gesamten Stand der eingereichten Probleme zu lesen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

konsoletyper picture konsoletyper  ·  6Kommentare

nikhedonia picture nikhedonia  ·  7Kommentare

badumt55 picture badumt55  ·  8Kommentare

artem-v-shamsutdinov picture artem-v-shamsutdinov  ·  6Kommentare

bobOnGitHub picture bobOnGitHub  ·  6Kommentare