Welche Strategien unterstützen / integrieren Maßeinheiten in Sprachen?

8

Ich frage mich aus rein sprachlicher Sichtweise, welche "Merkmale" (semantisch und syntaktisch) eine "Implementierung" von SI-Einheiten erfordern würden.

Welche "Funktionalität" wird allgemein erwartet, wenn jemand behauptet, dass eine Sprache eine große Unterstützung für Maßeinheiten bietet?

  • Nur etwas wie spezielle Literale oder syntaktischer Zucker?
  • Spezielle Konventionen, die Einheiten typsicher machen (aber ohne kostspieliges Laufzeit-Wrapping)?
  • Ein spezieller mathematischer Modus für Berechnungen mit Brüchen?
  • Automatische Konvertierungen und Zwang zwischen Einheiten?

Zum Beispiel F # wurde die Unterstützung für Maßeinheiten in der Sprache integriert. Wie verbessert es sich gegenüber e. G. eine Bibliothek für Java?

Welche Features sollten in die Sprachen eingebaut werden, um die Benutzerfreundlichkeit der Einheiten zu verbessern? Welche Merkmale sind nicht unbedingt mit Maßeinheiten verbunden, machen aber eine Implementierung schöner?

    
soc 20.09.2011, 10:03
quelle

5 Antworten

3

F # 's Vorteil gegenüber einer Java UOM-Bibliothek ist einfach - Typ Sicherheit. Wenn Sie versuchen, 3.<s> und 4.<m / s> hinzuzufügen, erhalten Sie Kompilierungsfehler.

In F # werden UOM nach der Typprüfung gelöscht, weil es die einzige .NET-Sprache mit einer solchen Funktion ist.

Als Antwort auf den Kommentar gibt es hier einen einfachen Bruchtyp und seine Verwendung:

%Vor%

Und der zurückgegebene Wert ist vom Typ Fraction<kg m/s> und sein AsFloat Wert ist 0.5333333333 .

    
Ramon Snir 20.09.2011, 11:31
quelle
1

Aus Sicht des Sprachdesigns genügt es:

  1. Tag Datentypen mit beliebigen Labels (nicht nur String oder andere primitive Labels, sondern beliebig strukturierte Labels)
  2. führt beliebige Berechnungen zur Kompilierungszeit auf Labels durch
  3. gegebene Operandenbezeichnungen und ein Operator (Funktion), berechnen Sie die Bezeichnung des Ergebnisses der Funktion, die auf die markierten Operanden angewendet wird

Dies alles kann getan werden und wurde vor mehr als 10 Jahren mit C ++ Template-Metaprogrammierung gemacht .

Es gibt auch eine Implementierung für Haskell, die die Fähigkeit von Haskell (begrenzt) verwendet, Berechnungen zur Kompilierungszeit über Typklasseninstanzen durchzuführen. Es ist jedoch nicht so vollständig (AFAIK keine Teilmächte und keine Nicht-SI-Einheiten).

    
n.m. 20.09.2011 13:50
quelle
1

Faszinierend. Ich habe dieses Klingeln gegoogelt: "Ich bin mir sicher, dass ich das in Smalltalk ganz leicht machen konnte", und stolperte über Frink Ссылка , der die JVM und Android.

  

Verfolgt Maßeinheiten (Fuß, Meter, Tonnen, Dollar, Watt usw.)   durch alle Berechnungen und ermöglicht es Ihnen, hinzufügen, subtrahieren, multiplizieren,   und teilen Sie sie mühelos, und stellt sicher, dass die Antwort herauskommt   richtig, auch wenn Sie Einheiten wie Gallonen und Liter mischen.

und natürlich der Schlüssel dazu ist die Konvertierung

  

Einheit Umwandlung zwischen Tausenden von Einheitentypen mit einer großen integrierten Datendatei.

und Unsicherheit

  

Unterstützt Intervallarithmetik (auch bekannt als Intervallberechnungen) in   Berechnungen, mit denen Sie Fehlergrenzen automatisch berechnen und berechnen können   Unsicherheiten in all Ihren Berechnungen.

Ich bin mir sicher, dass du das mit Klassen in Java und definitiv mit Ada machen könntest, aber das wäre eine Menge (es tut mir leid) Tippen.

    
Art Taylor 20.09.2011 16:33
quelle
1

Es gab ein gutes Papier in den ACM-SIGPLAN-Mitteilungen darüber in den achtziger Jahren. Die Idee war Typ Sicherheit plus die Art von Einheitsanalyse, die Sie in der High School Physik lernen: zum Beispiel ist eine Geschwindigkeit Meilen / Stunde, eine Zeit ist Stunden, so multipliziert sie zusammen gibt eine Entfernung in Meilen, und das Typsystem erzwingt das für Sie können also keine Kategoriefehler machen. Die Sprache oder Metasprache hätte Möglichkeiten, all dies zu spezifizieren. Als ein weiteres Beispiel habe ich kürzlich in Java eine Währungsarbeit geleistet, bei der ein Währungswert geteilt durch einen Währungswert einen BigDecimal, d. H. Einen Wechselkurs, ergab; Ein CurrencyValue multipliziert oder dividiert durch ein BigDecimal gab einen anderen CurrencyValue, etc.

Das ist im Grunde genommen so, wie Sie die alten PSSC-Physik-Examen gemacht haben: Vergessen Sie die Physik, merken Sie sich einfach ein paar Konstanten des Universums, dann geben Sie einfach das Problem mit den Einheiten der angegebenen Größen und Einheiten an die Antwort benötigt, dann können Sie die Formel selbst erstellen.

    
EJP 09.10.2011 05:25
quelle
0

Der Nachfolger der Java-Bibliothek (unitsofmeasurement.org) befindet sich nun unter Maßeinheiten.g.sub.io . Es ist die Heimat des Java-Standards für Maßeinheiten, JSR 363 . Schau es dir an.

    
Werner Keil 21.11.2016 12:22
quelle