Ist es möglich, die F # - Infrastruktur für Maßeinheiten in Scala zu implementieren?

8

F # wird mit spezieller Unterstützung für ein Maßsystem geliefert, das die statische Sicherheit beim Kompilieren bis zu den numerischen Typen bietet, anstatt die Laufzeit mit Ein- und Auspackvorgängen zu belasten.

Ist es möglich, etwas von Scala's Systemmagie einzusetzen, um etwas vergleichbar damit zu implementieren?

    
soc 20.09.2011, 15:02
quelle

4 Antworten

2

Art von. Sie können die SI-Einheiten recht einfach codieren, indem Sie eine Typendarstellung von Ganzzahlen in einem Tupel von Exponenten verwenden. Eine Beispielimplementierung finden Sie Ссылка .

Es sollte auch möglich sein, ein erweiterbares Einheitensystem zu unterstützen, wenn die Einheiten als TList der Paare eines Einheitentyps und einer Ganzzahl codiert sind (z. B. ((M, _1), (S, _2)) , wo M <: Unit und S <: Unit ). Das Berechnen der Typen für Mengenoperationen wird bei dieser Codierung etwas komplizierter.

In Bezug auf die Leistung wird immer ein Speicher-Overhead vorhanden sein, um den Wert in einen Typ zu verpacken, der die Einheiteninformationen enthält. Es gibt jedoch wahrscheinlich keinen Leistungsaufwand in den tatsächlichen Operationen, da die Überprüfung aller Einheiten zur Kompilierzeit erfolgt.

    
Jesper Nordenberg 20.09.2011, 15:23
quelle
8

Die Antwort ist nein .

Nun muss mich jemand auf Scalar hinweisen, aber das gibt Laufzeit . Vielleicht verweisen Sie dann auf die Bemühungen von Jesper Nordenbergs typsicheren Einheiten oder von Jim McBeath übernehmen Sie , aber diese sind umständlich und peinlich.

Ich weise stattdessen auf das Units-Compiler-Plugin hin. Es gab Scala, zurück in 2008/2009, ein ziemlich gutes System von Einheiten, wie in diesem Beitrag zu sehen ist . Dies geschah jedoch durch Erweiterung des Compilers, was nicht notwendig wäre, wenn das Typsystem ausreichend wäre. Leider wurde es nicht beibehalten und es funktioniert nicht mehr.

    
Daniel C. Sobral 20.09.2011 15:39
quelle
4

Ich weiß nichts darüber, aber ich bin gerade über diesen Vortrag bei Scala Days gestolpert: Ссылка

    
Kim Stebel 20.09.2011 20:10
quelle
1

Sehen Sie sich Maßeinheiten an - Ein Scala Macro System . Es scheint Ihre Anforderungen zu erfüllen.

    
Paul Jurczak 18.10.2013 16:13
quelle