Skip to content

RFC: Add vector.sqrmagnitude function#180

Open
Ramdoys wants to merge 3 commits intoluau-lang:masterfrom
Ramdoys:sqrmagnitude
Open

RFC: Add vector.sqrmagnitude function#180
Ramdoys wants to merge 3 commits intoluau-lang:masterfrom
Ramdoys:sqrmagnitude

Conversation

@Ramdoys
Copy link

@Ramdoys Ramdoys commented Feb 28, 2026

Copilot AI review requested due to automatic review settings February 28, 2026 04:26
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an RFC document proposing a new vector.sqrmagnitude standard library function, intended to provide an ergonomic and faster alternative to vector.dot(v, v) for squared-length comparisons in vector-heavy code.

Changes:

  • Introduces a new RFC doc describing vector.sqrmagnitude and its motivation/design.
  • Provides example code showing the ergonomic benefit over vector.dot.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.


`vector.sqrmagnitude(vector: vector): number`

Returns the squared magnitude of the given vector. This is equivalent to the sum of the squares of the vector's components.
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The design section doesn’t specify 4-wide mode behavior. vector.magnitude explicitly says it includes the 4th component in 4-wide mode (see docs/vector-library.md), and vector.dot notes its 4-wide behavior as well. Please clarify whether vector.sqrmagnitude also includes the 4th component in 4-wide mode, to avoid ambiguity for implementers and users.

Suggested change
Returns the squared magnitude of the given vector. This is equivalent to the sum of the squares of the vector's components.
Returns the squared magnitude of the given vector. This is equivalent to the sum of the squares of all of the vector's components (in 4-wide mode, this includes the fourth component).

Copilot uses AI. Check for mistakes.

## Motivation

The squared magnitude of a vector is commonly used in game development. It is used for distance checks, hitbox detection, and more. In all of these cases, the actual magnitude is unnecessary. Only the relative comparison matters. This makes the square root in `vector.magnitude` an avoidable cost. Currently, the idiomatic way to compute squared magnitude in Luau is to use `vector.dot(vector, vector).` While this produces the correct result, there are problems with this:
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The inline code snippet includes the trailing period inside the backticks: vector.dot(vector, vector).. That makes the expression incorrect/misleading; the period should be punctuation outside the code span.

Suggested change
The squared magnitude of a vector is commonly used in game development. It is used for distance checks, hitbox detection, and more. In all of these cases, the actual magnitude is unnecessary. Only the relative comparison matters. This makes the square root in `vector.magnitude` an avoidable cost. Currently, the idiomatic way to compute squared magnitude in Luau is to use `vector.dot(vector, vector).` While this produces the correct result, there are problems with this:
The squared magnitude of a vector is commonly used in game development. It is used for distance checks, hitbox detection, and more. In all of these cases, the actual magnitude is unnecessary. Only the relative comparison matters. This makes the square root in `vector.magnitude` an avoidable cost. Currently, the idiomatic way to compute squared magnitude in Luau is to use `vector.dot(vector, vector)`. While this produces the correct result, there are problems with this:

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,51 @@
# Squared Magnitude
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The document title is "Squared Magnitude", but other function RFCs use the fully-qualified function name as the H1 (e.g. # vector.lerp). Consider renaming the H1 to vector.sqrmagnitude (and optionally renaming the file to the docs/function-vector-*.md pattern) to keep the docs consistent and easier to find.

Suggested change
# Squared Magnitude
# vector.sqrmagnitude

Copilot uses AI. Check for mistakes.

Add one new function to the vector library:

`vector.sqrmagnitude(vector: vector): number`
Copy link

Copilot AI Feb 28, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the proposed signature, the parameter name is vector (vector.sqrmagnitude(vector: vector): number). This is confusing because it matches both the library name and the type name; other vector library signatures use vec/vec1/vec2 (see docs/vector-library.md). Rename the parameter to vec for consistency and readability.

Suggested change
`vector.sqrmagnitude(vector: vector): number`
`vector.sqrmagnitude(vec: vector): number`

Copilot uses AI. Check for mistakes.
@Ramdoys
Copy link
Author

Ramdoys commented Feb 28, 2026

Why does Copilot do that...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants