Implementierung eines gemessenen Wertes in Scala

7

Ein gemessener Wert besteht aus (typischerweise nicht negativer) Fließkommazahl und Maßeinheit. Es geht darum, die Mengen der realen Welt und die Regeln, die sie regeln, darzustellen. Hier ist ein Beispiel:

%Vor%

Bevor Sie zu aufgeregt sind, habe ich das nicht implementiert, ich habe gerade eine REPL-Sitzung durchgefallen. Ich bin mir nicht einmal sicher über die Syntax, ich möchte einfach Dinge wie das Hinzufügen von gemessenen Mengen (sogar mit gemischten Einheiten), Multiplizieren von gemessenen Größen usw. übernehmen, und im Idealfall mag ich Scalas vielgepriesenes Typsystem, um zu garantieren zur Kompilierungszeit machen diese Ausdrücke Sinn.

Meine Fragen:

  1. Gibt es eine aktuelle Terminologie für dieses Problem?
  2. Wurde das schon in Scala gemacht?
  3. Wenn nicht, wie würde ich Konzepte wie "Länge" und "Länge gemessen in Metern" darstellen?
  4. Wurde dies in einer anderen Sprache gemacht?

Eine Mars-Sonde von 330 Millionen US-Dollar ging verloren, weil der Auftragnehmer Yards und Pounds verwendete Die NASA benutzte Meter und Newton. Eine Measure-Bibliothek hätte den Absturz verhindert.

    
Malvolio 02.12.2010, 04:47
quelle

6 Antworten

5

Nun, diese Funktionalität existiert in Java, dh Sie können sie direkt in Scala verwenden.

jsr-275 , das nach Google-Code . jscience implementiert die Spezifikation. Hier ist eine gute Einführung . Wenn Sie eine bessere Schnittstelle wünschen, würde ich dies als Basis verwenden und einen Wrapper darum herum erstellen.

    
I82Much 02.12.2010, 21:40
quelle
11
___ qstnhdr ___ Implementierung eines gemessenen Wertes in Scala ___ answer4332759 ___

Ihre Frage ist vollständig mit einem Wort beantwortet. Du kannst mir später danken.

FRINK. Ссылка

    
___ answer4340242 ___

Nun, diese Funktionalität existiert in Java, dh Sie können sie direkt in Scala verwenden.

jsr-275 , das nach Google-Code . jscience implementiert die Spezifikation. Hier ist eine gute Einführung . Wenn Sie eine bessere Schnittstelle wünschen, würde ich dies als Basis verwenden und einen Wrapper darum herum erstellen.

    
___ qstntxt ___

Ein gemessener Wert besteht aus (typischerweise nicht negativer) Fließkommazahl und Maßeinheit. Es geht darum, die Mengen der realen Welt und die Regeln, die sie regeln, darzustellen. Hier ist ein Beispiel:

%Vor%

Bevor Sie zu aufgeregt sind, habe ich das nicht implementiert, ich habe gerade eine REPL-Sitzung durchgefallen. Ich bin mir nicht einmal sicher über die Syntax, ich möchte einfach Dinge wie das Hinzufügen von gemessenen Mengen (sogar mit gemischten Einheiten), Multiplizieren von gemessenen Größen usw. übernehmen, und im Idealfall mag ich Scalas vielgepriesenes Typsystem, um zu garantieren zur Kompilierungszeit machen diese Ausdrücke Sinn.

Meine Fragen:

  1. Gibt es eine aktuelle Terminologie für dieses Problem?
  2. Wurde das schon in Scala gemacht?
  3. Wenn nicht, wie würde ich Konzepte wie "Länge" und "Länge gemessen in Metern" darstellen?
  4. Wurde dies in einer anderen Sprache gemacht?

Eine Mars-Sonde von 330 Millionen US-Dollar ging verloren, weil der Auftragnehmer Yards und Pounds verwendete Die NASA benutzte Meter und Newton. Eine Measure-Bibliothek hätte den Absturz verhindert.

    
___ answer5033584 ___

Zu Ihrer Information: Ich habe in Scala eine Scalar-Klasse entwickelt, um physikalische Einheiten darzustellen. Ich benutze es derzeit für meine R & D-Arbeit in der Flugsicherung, und es funktioniert gut für mich. Es prüft nicht zur Einheitskonsistenz zur Kompilierzeit, aber es prüft zur Laufzeit. Ich habe ein einzigartiges Schema für die einfache Ersetzung durch grundlegende numerische Typen für die Effizienz, nachdem die Anwendung getestet wurde. Sie finden den Code und das Benutzerhandbuch unter

Ссылка

Hier ist die Zusammenfassung von der Website:

Zusammenfassung - Eine Scala-Klasse wurde entworfen, um physikalische Skalare darzustellen und Fehler zu eliminieren, die implizite physikalische Einheiten beinhalten (z. B. verwirrende Radianten und Grade). Die arithmetischen Standardoperatoren sind überladen, um eine Syntax zu liefern, die mit der für grundlegende numerische Typen identisch ist. Die Scalar-Klasse selbst definiert keine Einheiten, sondern ist Teil eines Pakets, das eine vollständige Implementierung des Standardmetriksystems von Einheiten und vieler gebräuchlicher nichtmetrischer Einheiten enthält. Das Skalarpaket ermöglicht dem Benutzer auch, einen spezialisierten oder reduzierten Satz physikalischer Einheiten für eine bestimmte Anwendung oder Domäne zu definieren. Nachdem eine Anwendung entwickelt und getestet wurde, kann die Scalar-Klasse zur Kompilierungszeit ausgeschaltet werden, um die Ausführungseffizienz von Operationen mit grundlegenden numerischen Typen zu erreichen, die eine Größenordnung schneller sind. Die skalare Klasse kann auch für diskrete Einheiten verwendet werden, um die Typüberprüfung von Ganzzahlzählungen zu erzwingen, wodurch die Überprüfung des statischen Typs von Scala mit zusätzlichen dynamischen Typprüfungen verbessert wird.

    
___ answer5045759 ___

Lassen Sie mich meinen vorherigen Beitrag erläutern. Ich hätte sagen sollen: "Diese Art von Fehlern [" Meter / Yard-Konvertierungsfehler "] werden automatisch durch die Verwendung meiner Scalar-Klasse vermieden (nicht" behandelt "). Alle Einheitenumrechnungen erfolgen automatisch. Das ist der einfache Teil.

>

Der schwierigere Teil ist die Überprüfung auf Inkonsistenzen der Einheit, wie z. B. das Hinzufügen einer Länge zu einer Geschwindigkeit. Hier kommt das Problem der dynamischen vs. statischen Typprüfung auf. Ich stimme zu, dass eine statische Überprüfung im Allgemeinen vorzuziehen ist, aber nur, wenn dies ohne Einbußen bei Benutzerfreundlichkeit und Komfort möglich ist.

Ich habe mindestens zwei "Projekte" für die statische Überprüfung von Einheiten gesehen, aber ich habe noch nie von jemandem gehört, der sie wirklich für echte Arbeit benutzt. Wenn jemand von einem Fall weiß, in dem sie benutzt wurden, lass es mich wissen. Bis Sie Software für echte Arbeit verwenden, wissen Sie nicht, welche Arten von Problemen auftauchen werden.

Wie ich oben geschrieben habe, verwende ich derzeit meine Scalar-Klasse (http://russsp.us/scalar-scala.htm) für meine R & D-Arbeit in ATC. Ich musste viele Verbesserungen vornehmen, um die Benutzerfreundlichkeit und Benutzerfreundlichkeit zu verbessern, aber es funktioniert gut für mich. Ich wäre bereit, eine Implementierung von statischen Einheiten in Betracht zu ziehen, wenn eine bewährte Lösung kommt, aber im Moment habe ich das Gefühl, dass ich im Wesentlichen 99% des Wertes einer solchen Sache habe. Hey, die überwiegende Mehrheit der Wissenschaftler und Ingenieure verwenden nur "Doubles", also schnapp mir ein bisschen nach!

    
___ antwort4332533 ___

F # hat Unterstützung dafür, siehe zum Beispiel diesen Link für eine Einführung. Es wurde in Scala an Einheiten etwas gearbeitet, zum Beispiel hier und hier . Es gibt auch ein Scala-Compiler-Plugin, wie in diesem Blogbeitrag beschrieben. Ich habe kurz versucht, es zu installieren, aber mit Scala 2.8.1 habe ich eine Ausnahme bekommen, als ich die REPL gestartet habe, also bin ich mir nicht sicher, ob dieses Plugin im Moment aktiv gepflegt wird.

    
___ tag123scala ___ Scala ist eine universelle Programmiersprache, die hauptsächlich auf die Java Virtual Machine abzielt. Entwickelt, um gängige Programmiermuster in einer prägnanten, eleganten und typsicheren Weise auszudrücken, vereint es sowohl imperative als auch funktionale Programmierstile. Seine Hauptmerkmale sind: fortgeschrittenes statisches System mit Typinferenz; Funktionstypen; Muster-Matching; implizite Parameter und Konvertierungen; Überlastung des Bedieners; volle Interoperabilität mit Java; Nebenläufigkeit ___ answer5044919 ___

"Ja, ATC-Software mit Laufzeit-Typ-Überprüfung? Ich kann jetzt Schlagzeilen sehen:" Flug 34 nach Meter / Yard-Konvertierung gebracht. "

Entschuldigung, aber Sie wissen nicht, wovon Sie sprechen. Die ATC-Software wird vor ihrer Bereitstellung auf Jahre getestet. Das ist genug Zeit, um Inkonsistenzfehler zu erfassen.

Noch wichtiger ist, dass Meter / Hof-Konvertierungen hier nicht einmal ein Problem darstellen. Diese Art von Fehlern werden automatisch einfach mithilfe meiner Scalar-Klasse behandelt. Für diese Art von Fehlern benötigen Sie weder statische noch dynamische Prüfungen. Das Problem der statischen oder dynamischen Überprüfung tritt nur bei Inkonsistenzen der Einheit auf, wie bei der Längenaddition. Diese Art von Fehlern sind weniger häufig und werden in der Regel beim ersten Testlauf mit dynamischer Überprüfung abgefangen.

Übrigens ist die Schnittstelle hier schrecklich.

    
___
Arjan Blokzijl 02.12.2010 07:07
quelle
5

Ihre Frage ist vollständig mit einem Wort beantwortet. Du kannst mir später danken.

FRINK. Ссылка

    
extempore 02.12.2010 07:40
quelle
1

Zu Ihrer Information: Ich habe in Scala eine Scalar-Klasse entwickelt, um physikalische Einheiten darzustellen. Ich benutze es derzeit für meine R & D-Arbeit in der Flugsicherung, und es funktioniert gut für mich. Es prüft nicht zur Einheitskonsistenz zur Kompilierzeit, aber es prüft zur Laufzeit. Ich habe ein einzigartiges Schema für die einfache Ersetzung durch grundlegende numerische Typen für die Effizienz, nachdem die Anwendung getestet wurde. Sie finden den Code und das Benutzerhandbuch unter

Ссылка

Hier ist die Zusammenfassung von der Website:

Zusammenfassung - Eine Scala-Klasse wurde entworfen, um physikalische Skalare darzustellen und Fehler zu eliminieren, die implizite physikalische Einheiten beinhalten (z. B. verwirrende Radianten und Grade). Die arithmetischen Standardoperatoren sind überladen, um eine Syntax zu liefern, die mit der für grundlegende numerische Typen identisch ist. Die Scalar-Klasse selbst definiert keine Einheiten, sondern ist Teil eines Pakets, das eine vollständige Implementierung des Standardmetriksystems von Einheiten und vieler gebräuchlicher nichtmetrischer Einheiten enthält. Das Skalarpaket ermöglicht dem Benutzer auch, einen spezialisierten oder reduzierten Satz physikalischer Einheiten für eine bestimmte Anwendung oder Domäne zu definieren. Nachdem eine Anwendung entwickelt und getestet wurde, kann die Scalar-Klasse zur Kompilierungszeit ausgeschaltet werden, um die Ausführungseffizienz von Operationen mit grundlegenden numerischen Typen zu erreichen, die eine Größenordnung schneller sind. Die skalare Klasse kann auch für diskrete Einheiten verwendet werden, um die Typüberprüfung von Ganzzahlzählungen zu erzwingen, wodurch die Überprüfung des statischen Typs von Scala mit zusätzlichen dynamischen Typprüfungen verbessert wird.

    
Russ P. 17.02.2011 19:26
quelle
1

Lassen Sie mich meinen vorherigen Beitrag erläutern. Ich hätte sagen sollen: "Diese Art von Fehlern [" Meter / Yard-Konvertierungsfehler "] werden automatisch durch die Verwendung meiner Scalar-Klasse vermieden (nicht" behandelt "). Alle Einheitenumrechnungen erfolgen automatisch. Das ist der einfache Teil.

>

Der schwierigere Teil ist die Überprüfung auf Inkonsistenzen der Einheit, wie z. B. das Hinzufügen einer Länge zu einer Geschwindigkeit. Hier kommt das Problem der dynamischen vs. statischen Typprüfung auf. Ich stimme zu, dass eine statische Überprüfung im Allgemeinen vorzuziehen ist, aber nur, wenn dies ohne Einbußen bei Benutzerfreundlichkeit und Komfort möglich ist.

Ich habe mindestens zwei "Projekte" für die statische Überprüfung von Einheiten gesehen, aber ich habe noch nie von jemandem gehört, der sie wirklich für echte Arbeit benutzt. Wenn jemand von einem Fall weiß, in dem sie benutzt wurden, lass es mich wissen. Bis Sie Software für echte Arbeit verwenden, wissen Sie nicht, welche Arten von Problemen auftauchen werden.

Wie ich oben geschrieben habe, verwende ich derzeit meine Scalar-Klasse (http://russsp.us/scalar-scala.htm) für meine R & D-Arbeit in ATC. Ich musste viele Verbesserungen vornehmen, um die Benutzerfreundlichkeit und Benutzerfreundlichkeit zu verbessern, aber es funktioniert gut für mich. Ich wäre bereit, eine Implementierung von statischen Einheiten in Betracht zu ziehen, wenn eine bewährte Lösung kommt, aber im Moment habe ich das Gefühl, dass ich im Wesentlichen 99% des Wertes einer solchen Sache habe. Hey, die überwiegende Mehrheit der Wissenschaftler und Ingenieure verwenden nur "Doubles", also schnapp mir ein bisschen nach!

    
Russ P. 18.02.2011 19:38
quelle
0

"Ja, ATC-Software mit Laufzeit-Typ-Überprüfung? Ich kann jetzt Schlagzeilen sehen:" Flug 34 nach Meter / Yard-Konvertierung gebracht. "

Entschuldigung, aber Sie wissen nicht, wovon Sie sprechen. Die ATC-Software wird vor ihrer Bereitstellung auf Jahre getestet. Das ist genug Zeit, um Inkonsistenzfehler zu erfassen.

Noch wichtiger ist, dass Meter / Hof-Konvertierungen hier nicht einmal ein Problem darstellen. Diese Art von Fehlern werden automatisch einfach mithilfe meiner Scalar-Klasse behandelt. Für diese Art von Fehlern benötigen Sie weder statische noch dynamische Prüfungen. Das Problem der statischen oder dynamischen Überprüfung tritt nur bei Inkonsistenzen der Einheit auf, wie bei der Längenaddition. Diese Art von Fehlern sind weniger häufig und werden in der Regel beim ersten Testlauf mit dynamischer Überprüfung abgefangen.

Übrigens ist die Schnittstelle hier schrecklich.

    
Russ P. 18.02.2011 18:08
quelle

Tags und Links