浏览代码

Rename speed => velocity

David Peter 2 年之前
父节点
当前提交
dc1eeeb2ad

+ 3 - 3
book/src/dimension-definitions.md

@@ -8,10 +8,10 @@ dimension Mass
 ```
 Derived dimensions need to specify their relation to base dimensions (or other derived dimensions). For example:
 ``` numbat
-dimension Speed = Length / Time
-dimension Momentum = Mass * Speed
+dimension Velocity = Length / Time
+dimension Momentum = Mass * Velocity
 dimension Force = Mass * Acceleration = Momentum / Time
-dimension Energy = Momentum^2 / Mass = Mass * Speed^2 = Force * Length
+dimension Energy = Momentum^2 / Mass = Mass * Velocity^2 = Force * Length
 ```
 In the definition of `Force` and `Energy`, we can see that *alternative definitions* can be given. This is entirely optional. If specified, the compiler will make sure that all definitions are equivalent.
 

+ 5 - 5
book/src/example-numbat_syntax.md

@@ -59,15 +59,15 @@ pi/3 + pi // cos  # Same, 'arg // f' is equivalent to 'f(arg)'
 
 let n = 4                          # Simple numerical constant
 let q1 = 2 m/s                     # Right hand side can be any expression
-let q2: Speed = 2 m/s              # With optional type annotation
+let q2: Velocity = 2 m/s           # With optional type annotation
 let q3: Length / Time = 2 m/s      # more complex type annotation
 
 # 5. Function definitions
 
-fn foo(z: Scalar) -> Scalar = 2 * z + 3                 # A simple function
-fn speed(len: Length, dur: Time) -> Speed = len / dur   # Two parameters
-fn my_sqrt<T>(q: T^2) -> T = q^(1/2)                    # A generic function
-fn is_non_negative(x: Scalar) -> Bool = x ≥ 0           # Returns a bool
+fn foo(z: Scalar) -> Scalar = 2 * z + 3                   # A simple function
+fn speed(len: Length, dur: Time) -> Velocity = len / dur  # Two parameters
+fn my_sqrt<T>(q: T^2) -> T = q^(1/2)                      # A generic function
+fn is_non_negative(x: Scalar) -> Bool = x ≥ 0             # Returns a bool
 
 # 6. Dimension definitions
 

+ 4 - 3
book/src/function-definitions.md

@@ -5,12 +5,13 @@ it is also possible to add new functions. A function definition is introduced wi
 the `fn` keyword:
 
 ```nbt
-fn max_distance(v: Speed, θ: Angle) -> Length = v² · sin(2 θ) / g0
+fn max_distance(v: Velocity, θ: Angle) -> Length = v² · sin(2 θ) / g0
 ```
 
 This exemplary function computes the maximum distance of a projectile under the
-influence of Earths gravity. It takes two parameters (The initial speed `v` and
-the launch angle `θ`), which are both annotated with their corresponding physical dimension (their type). The function returns a distance, and so the return type
+influence of Earths gravity. It takes two parameters (The initial velocity `v` and
+the launch angle `θ`), which are both annotated with their corresponding physical
+dimension (their type). The function returns a distance, and so the return type
 is specified as `Length`.
 
 ## Type inference

+ 1 - 1
book/src/introduction.md

@@ -27,7 +27,7 @@ The real strength of Numbat, however, is to perform calculations with physical u
 
   8 kilometer / (1 hour + 25 minute)
 
-    = 5.64706 km/h    [Speed]
+    = 5.64706 km/h    [Velocity]
 
 >>> 140 € -> GBP
 

+ 1 - 1
book/src/list-constants.md

@@ -37,7 +37,7 @@ Colloquial:
 
 | Description | Identifier | Dimension |
 |---|---|---|
-| The speed of light in vacuum | `speed_of_light`, `c` | `Speed` |
+| The speed of light in vacuum | `speed_of_light`, `c` | `Velocity` |
 | The Newtonian constant of gravitation | `gravitational_constant`, `G` | `Force × Length^2 / Mass^2` |
 | Standard acceleration of gravity on earth | `gravity`, `g0` | `Acceleration` |
 | The Planck constant | `planck_constant` | `Mass × Length^2 / Time` |

+ 1 - 1
examples/air_resistance.nbt

@@ -2,6 +2,6 @@ let c_w = 1.4
 let area: Area = 3 m²
 let rho: MassDensity = 1.29 kg/m³
 
-fn air_resistance(v: Speed) -> Force = ½ c_w · area · rho · v²
+fn air_resistance(v: Velocity) -> Force = ½ c_w · area · rho · v²
 
 assert_eq(air_resistance(40 m/s), 4334.4 N, 0.1 N)

+ 1 - 1
examples/kinetic_energy.nbt

@@ -1,3 +1,3 @@
-fn kineticEnergy(mass: Mass, speed: Speed) -> Energy = ½ mass speed²
+fn kineticEnergy(mass: Mass, speed: Velocity) -> Energy = ½ mass speed²
 
 assert_eq(kineticEnergy(800 kg, 30 m/s), 360 kJ, 0.1 J)

+ 5 - 5
examples/numbat_syntax.nbt

@@ -54,15 +54,15 @@ pi/3 + pi // cos  # Same, 'arg // f' is equivalent to 'f(arg)'
 
 let n = 4                          # Simple numerical constant
 let q1 = 2 m/s                     # Right hand side can be any expression
-let q2: Speed = 2 m/s              # With optional type annotation
+let q2: Velocity = 2 m/s           # With optional type annotation
 let q3: Length / Time = 2 m/s      # more complex type annotation
 
 # 5. Function definitions
 
-fn foo(z: Scalar) -> Scalar = 2 * z + 3                 # A simple function
-fn speed(len: Length, dur: Time) -> Speed = len / dur   # Two parameters
-fn my_sqrt<T>(q: T^2) -> T = q^(1/2)                    # A generic function
-fn is_non_negative(x: Scalar) -> Bool = x ≥ 0           # Returns a bool
+fn foo(z: Scalar) -> Scalar = 2 * z + 3                   # A simple function
+fn speed(len: Length, dur: Time) -> Velocity = len / dur  # Two parameters
+fn my_sqrt<T>(q: T^2) -> T = q^(1/2)                      # A generic function
+fn is_non_negative(x: Scalar) -> Bool = x ≥ 0             # Returns a bool
 
 # 6. Dimension definitions
 

+ 3 - 3
examples/projectile_motion.nbt

@@ -1,8 +1,8 @@
 # https://en.wikipedia.org/wiki/Projectile_motion
 
-fn max_height(v: Speed, θ: Angle) -> Length = v² · sin(θ)^2 / (2 · g0)
-fn max_distance(v: Speed, θ: Angle) -> Length = v² · sin(2 θ) / g0
-fn time_of_flight(v: Speed, θ: Angle) -> Time = 2 v · sin(θ) / g0
+fn max_height(v: Velocity, θ: Angle) -> Length = v² · sin(θ)^2 / (2 · g0)
+fn max_distance(v: Velocity, θ: Angle) -> Length = v² · sin(2 θ) / g0
+fn time_of_flight(v: Velocity, θ: Angle) -> Time = 2 v · sin(θ) / g0
 
 assert_eq(max_height(10 m/s, 45 deg),      2.55 m,  1 cm)
 assert_eq(max_distance(10 m/s, 45 deg),   10.20 m,  1 cm)

+ 1 - 1
examples/stopping_distance.nbt

@@ -1,7 +1,7 @@
 let reaction_time: Time = 500 ms
 let braking_power: Acceleration = 0.8 × gravity
 
-fn stopping_distance(v: Speed) -> Length =
+fn stopping_distance(v: Velocity) -> Length =
     v × reaction_time + ½ v² / braking_power
 
 assert_eq(stopping_distance(50 km/h), 19.2385 m, 0.001 m)

+ 1 - 1
examples/typecheck_error/incompatible_alternative_dimensions.nbt

@@ -1,2 +1,2 @@
-dimension MyEnergy = Momentum^2 / Mass = Mass × Speed^2 = Force × Length^2
+dimension MyEnergy = Momentum^2 / Mass = Mass × Velocity^2 = Force × Length^2
 

+ 1 - 1
examples/typecheck_error/incompatible_types_in_addition.nbt

@@ -1,4 +1,4 @@
-let v: Speed = 3 m/s
+let v: Velocity = 3 m/s
 let mass: Mass = 80 kg
 let height = 10 m
 let E_pot: Energy = mass * g0 * height

+ 1 - 1
examples/typecheck_error/incompatible_types_in_function_argument.nbt

@@ -1,3 +1,3 @@
-fn speed(distance: Length, duration: Time) -> Speed = distance / duration
+fn speed(distance: Length, duration: Time) -> Velocity = distance / duration
 
 speed(3 meter, 2 meter)

+ 1 - 1
examples/typecheck_error/wrong_return_type.nbt

@@ -1,3 +1,3 @@
 let time: Time = 5 second
 
-fn foo(distance: Length) -> Speed = time / distance
+fn foo(distance: Length) -> Velocity = time / distance

+ 6 - 6
numbat/modules/core/dimensions.nbt

@@ -10,16 +10,16 @@ dimension Wavenumber = 1 / Length
 
 dimension Time
 dimension Frequency = 1 / Time
-dimension Speed = Length / Time  # also: velocity
+dimension Velocity = Length / Time
 dimension Acceleration = Length / Time^2
 dimension Jerk = Length / Time^3
 dimension FlowRate = Volume / Time
 
 dimension Mass
-dimension Momentum = Mass × Speed
+dimension Momentum = Mass × Velocity
 dimension Force = Mass × Acceleration = Momentum / Time
-dimension Energy = Momentum^2 / Mass = Mass × Speed^2 = Force × Length  # also: work, amount of heat
-dimension Power = Energy / Time = Force × Speed
+dimension Energy = Momentum^2 / Mass = Mass × Velocity^2 = Force × Length  # also: work, amount of heat
+dimension Power = Energy / Time = Force × Velocity
 dimension Pressure = Force / Area = Energy / Volume  # also: stress
 dimension Action = Energy × Time
 dimension MassDensity = Mass / Length^3
@@ -36,7 +36,7 @@ dimension ElectricResistance = Voltage / Current
 dimension Resistivity = ElectricResistance × Length
 dimension ElectricConductance = 1 / ElectricResistance
 dimension Conductivity = ElectricConductance / Length
-dimension MagneticFluxDensity = Force / (ElectricCharge × Speed)
+dimension MagneticFluxDensity = Force / (ElectricCharge × Velocity)
 dimension MagneticFlux = MagneticFluxDensity × Area = Voltage × Time
 dimension MagneticFieldStrength = Current / Length
 dimension Inductance = MagneticFlux / Current
@@ -49,7 +49,7 @@ dimension ElectricDisplacementFieldStrength = ElectricCharge / Area
 dimension ElectricPermittivity = Time^4 × Current^2 / Mass / Length^3 × Angle = ElectricDisplacementFieldStrength / ElectricFieldStrength × Angle
 dimension MagneticPermeability = Length × Mass / Time^2 / Current^2 / Angle = MagneticFluxDensity / MagneticFieldStrength / Angle
 dimension Polarizability = ElectricDipoleMoment / ElectricFieldStrength = Current^2 × Time^4 / Mass
-dimension ElectricMobility = Speed / ElectricFieldStrength
+dimension ElectricMobility = Velocity / ElectricFieldStrength
 
 dimension Temperature
 dimension Entropy = Energy / Temperature

+ 1 - 1
numbat/modules/physics/constants.nbt

@@ -4,7 +4,7 @@ use units::si
 ### Physics constants
 
 # The speed of light in vacuum
-let speed_of_light: Speed = 299_792_458 m / s
+let speed_of_light: Velocity = 299_792_458 m / s
 let c = speed_of_light
 
 # The Newtonian constant of gravitation

+ 1 - 1
numbat/modules/units/imperial.nbt

@@ -30,6 +30,6 @@ unit fathom: Length = 2 yard
 @aliases(leagues)
 unit league: Length = 3 mile
 
-unit mph: Speed = miles per hour
+unit mph: Velocity = miles per hour
 
 unit inHg: Pressure = in Hg

+ 1 - 1
numbat/modules/units/misc.nbt

@@ -76,7 +76,7 @@ unit gon: Angle = 90° / 100
 @aliases(Wh: short)
 unit watthour: Energy = W h
 
-unit kph: Speed = kilometer per hour
+unit kph: Velocity = kilometer per hour
 
 unit micron: Length = µm
 

+ 1 - 1
numbat/modules/units/nautical.nbt

@@ -1,7 +1,7 @@
 use units::si
 
 @aliases(knots, kn: short, kt: short)
-unit knot: Speed = 463 m / 900 s
+unit knot: Velocity = 463 m / 900 s
 
 @aliases(nautical_miles, NM: short, nmi: short)
 unit nautical_mile: Length = 1852 m

+ 7 - 7
numbat/src/dimension.rs

@@ -83,7 +83,7 @@ fn basic() {
     registry.add_base_dimension("Length").unwrap();
     registry.add_base_dimension("Time").unwrap();
     registry
-        .add_derived_dimension("Speed", &parse_dexpr("Length / Time"))
+        .add_derived_dimension("Velocity", &parse_dexpr("Length / Time"))
         .unwrap();
     registry
         .add_derived_dimension("Acceleration", &parse_dexpr("Length / Time^2"))
@@ -91,7 +91,7 @@ fn basic() {
 
     registry.add_base_dimension("Mass").unwrap();
     registry
-        .add_derived_dimension("Momentum", &parse_dexpr("Mass * Speed"))
+        .add_derived_dimension("Momentum", &parse_dexpr("Mass * Velocity"))
         .unwrap();
     registry
         .add_derived_dimension("Energy", &parse_dexpr("Momentum^2 / Mass"))
@@ -119,7 +119,7 @@ fn basic() {
         )))
     );
     assert_eq!(
-        registry.get_base_representation(&parse_dexpr("Speed")),
+        registry.get_base_representation(&parse_dexpr("Velocity")),
         Ok(BaseRepresentation::from_factors([
             BaseRepresentationFactor("Length".into(), Rational::from_integer(1)),
             BaseRepresentationFactor("Time".into(), Rational::from_integer(-1))
@@ -150,7 +150,7 @@ fn basic() {
     );
 
     registry
-        .add_derived_dimension("Momentum2", &parse_dexpr("Speed * Mass"))
+        .add_derived_dimension("Momentum2", &parse_dexpr("Velocity * Mass"))
         .unwrap();
     assert_eq!(
         registry.get_base_representation(&parse_dexpr("Momentum2")),
@@ -162,7 +162,7 @@ fn basic() {
     );
 
     registry
-        .add_derived_dimension("Energy2", &parse_dexpr("Mass * Speed^2"))
+        .add_derived_dimension("Energy2", &parse_dexpr("Mass * Velocity^2"))
         .unwrap();
     assert_eq!(
         registry.get_base_representation(&parse_dexpr("Energy2")),
@@ -174,10 +174,10 @@ fn basic() {
     );
 
     registry
-        .add_derived_dimension("Speed2", &parse_dexpr("Momentum / Mass"))
+        .add_derived_dimension("Velocity2", &parse_dexpr("Momentum / Mass"))
         .unwrap();
     assert_eq!(
-        registry.get_base_representation(&parse_dexpr("Speed2")),
+        registry.get_base_representation(&parse_dexpr("Velocity2")),
         Ok(BaseRepresentation::from_factors([
             BaseRepresentationFactor("Length".into(), Rational::from_integer(1)),
             BaseRepresentationFactor("Time".into(), Rational::from_integer(-1))

+ 3 - 3
numbat/src/interpreter.rs

@@ -102,8 +102,8 @@ mod tests {
         dimension Time
         dimension Mass
 
-        dimension Speed = Length / Time
-        dimension Momentum = Mass * Speed
+        dimension Velocity = Length / Time
+        dimension Momentum = Mass * Velocity
         dimension Frequency = 1 / Time
 
         @metric_prefixes
@@ -193,7 +193,7 @@ mod tests {
         );
 
         assert_evaluates_to(
-            "fn speed(distance: Length, time: Time) -> Speed = distance / time
+            "fn speed(distance: Length, time: Time) -> Velocity = distance / time
              speed(10 * meter, 2 * second)",
             Quantity::from_scalar(5.0)
                 * (Quantity::from_unit(Unit::meter()) / Quantity::from_unit(Unit::second())),

+ 2 - 2
numbat/src/parser.rs

@@ -1803,9 +1803,9 @@ mod tests {
         );
 
         parse_as(
-            &["dimension Speed = Length / Time"],
+            &["dimension Velocity = Length / Time"],
             Statement::DefineDimension(
-                "Speed".into(),
+                "Velocity".into(),
                 vec![DimensionExpression::Divide(
                     Span::dummy(),
                     Box::new(DimensionExpression::Dimension(

+ 1 - 1
numbat/tests/interpreter.rs

@@ -198,7 +198,7 @@ fn test_incompatible_dimension_errors() {
     );
     expect_exact_failure(
         "m / s + K A",
-        " left hand side: Length / Time            [= Speed]\n\
+        " left hand side: Length / Time            [= Velocity]\n\
          right hand side: Current × Temperature\n\n\
          Suggested fix: multiply left hand side by Current × Temperature × Time / Length",
     );