Skip to content

Commit 6097742

Browse files
authored
Merge pull request #36121 from rxwei/rename-in-to-of
2 parents a34b52c + 0b53a02 commit 6097742

File tree

62 files changed

+957
-963
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+957
-963
lines changed

benchmark/single-source/Differentiation.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public func run_DifferentiationIdentity(N: Int) {
4040
x
4141
}
4242
for _ in 0..<1000*N {
43-
blackHole(valueWithGradient(at: 1, in: f))
43+
blackHole(valueWithGradient(at: 1, of: f))
4444
}
4545
}
4646

@@ -50,7 +50,7 @@ public func run_DifferentiationSquare(N: Int) {
5050
x * x
5151
}
5252
for _ in 0..<1000*N {
53-
blackHole(valueWithGradient(at: 1, in: f))
53+
blackHole(valueWithGradient(at: 1, of: f))
5454
}
5555
}
5656

@@ -66,7 +66,7 @@ public func run_DifferentiationArraySum(N: Int) {
6666
return result
6767
}
6868
for _ in 0..<N {
69-
blackHole(valueWithGradient(at: onesArray, in: sum))
69+
blackHole(valueWithGradient(at: onesArray, of: sum))
7070
}
7171
}
7272

docs/DifferentiableProgramming.md

Lines changed: 63 additions & 63 deletions
Large diffs are not rendered by default.

include/swift/AST/DiagnosticsSema.def

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2869,16 +2869,16 @@ WARNING(differentiable_nondiff_type_implicit_noderivative_fixit,none,
28692869
(/*propName*/ Identifier, /*propType*/ Type, /*nominalName*/ Identifier,
28702870
/*nominalCanDeriveAdditiveArithmetic*/ bool))
28712871
WARNING(differentiable_immutable_wrapper_implicit_noderivative_fixit,none,
2872-
"synthesis of the 'Differentiable.move(along:)' requirement for %1 "
2872+
"synthesis of the 'Differentiable.move(by:)' requirement for %1 "
28732873
"requires 'wrappedValue' in property wrapper %0 to be mutable or have a "
2874-
"non-mutating 'move(along:)'; add an explicit '@noDerivative' attribute"
2874+
"non-mutating 'move(by:)'; add an explicit '@noDerivative' attribute"
28752875
"%select{|, or conform %1 to 'AdditiveArithmetic'}2",
28762876
(/*wrapperType*/ Identifier, /*nominalName*/ Identifier,
28772877
/*nominalCanDeriveAdditiveArithmetic*/ bool))
28782878
WARNING(differentiable_let_property_implicit_noderivative_fixit,none,
2879-
"synthesis of the 'Differentiable.move(along:)' requirement for %0 "
2879+
"synthesis of the 'Differentiable.move(by:)' requirement for %0 "
28802880
"requires all stored properties not marked with `@noDerivative` to be "
2881-
"mutable or have a non-mutating 'move(along:)'; use 'var' instead, or "
2881+
"mutable or have a non-mutating 'move(by:)'; use 'var' instead, or "
28822882
"add an explicit '@noDerivative' attribute "
28832883
"%select{|, or conform %0 to 'AdditiveArithmetic'}1",
28842884
(/*nominalName*/ Identifier, /*nominalCanDeriveAdditiveArithmetic*/ bool))

include/swift/AST/KnownIdentifiers.def

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,9 +228,9 @@ IDENTIFIER(AtomicStoreOrdering)
228228
IDENTIFIER(AtomicUpdateOrdering)
229229

230230
// Differentiable programming
231-
IDENTIFIER(along)
231+
IDENTIFIER(by)
232232
IDENTIFIER(differential)
233-
IDENTIFIER(direction)
233+
IDENTIFIER(offset)
234234
IDENTIFIER(move)
235235
IDENTIFIER(pullback)
236236
IDENTIFIER(TangentVector)

lib/Sema/DerivedConformanceDifferentiable.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,24 @@
3434

3535
using namespace swift;
3636

37-
/// Return true if `move(along:)` can be invoked on the given `Differentiable`-
37+
/// Return true if `move(by:)` can be invoked on the given `Differentiable`-
3838
/// conforming property.
3939
///
40-
/// If the given property is a `var`, return true because `move(along:)` can be
40+
/// If the given property is a `var`, return true because `move(by:)` can be
4141
/// invoked regardless. Otherwise, return true if and only if the property's
42-
/// type's 'Differentiable.move(along:)' witness is non-mutating.
42+
/// type's 'Differentiable.move(by:)' witness is non-mutating.
4343
static bool canInvokeMoveAlongOnProperty(
4444
VarDecl *vd, ProtocolConformanceRef diffableConformance) {
4545
assert(diffableConformance && "Property must conform to 'Differentiable'");
46-
// `var` always supports `move(along:)` since it is mutable.
46+
// `var` always supports `move(by:)` since it is mutable.
4747
if (vd->getIntroducer() == VarDecl::Introducer::Var)
4848
return true;
4949
// When the property is a `let`, the only case that would be supported is when
50-
// it has a `move(along:)` protocol requirement witness that is non-mutating.
50+
// it has a `move(by:)` protocol requirement witness that is non-mutating.
5151
auto interfaceType = vd->getInterfaceType();
5252
auto &C = vd->getASTContext();
5353
auto witness = diffableConformance.getWitnessByName(
54-
interfaceType, DeclName(C, C.Id_move, {C.Id_along}));
54+
interfaceType, DeclName(C, C.Id_move, {C.Id_by}));
5555
if (!witness)
5656
return false;
5757
auto *decl = cast<FuncDecl>(witness.getDecl());
@@ -70,7 +70,7 @@ getStoredPropertiesForDifferentiation(
7070
for (auto *vd : nominal->getStoredProperties()) {
7171
// Peer through property wrappers: use original wrapped properties instead.
7272
if (auto *originalProperty = vd->getOriginalWrappedProperty()) {
73-
// Skip immutable wrapped properties. `mutating func move(along:)` cannot
73+
// Skip immutable wrapped properties. `mutating func move(by:)` cannot
7474
// be synthesized to update these properties.
7575
if (!originalProperty->isSettable(DC))
7676
continue;
@@ -87,8 +87,8 @@ getStoredPropertiesForDifferentiation(
8787
varType, diffableProto, nominal);
8888
if (!conformance)
8989
continue;
90-
// Skip `let` stored properties with a mutating `move(along:)` if requested.
91-
// `mutating func move(along:)` cannot be synthesized to update `let`
90+
// Skip `let` stored properties with a mutating `move(by:)` if requested.
91+
// `mutating func move(by:)` cannot be synthesized to update `let`
9292
// properties.
9393
if (!includeLetPropertiesWithNonmutatingMoveAlong &&
9494
!canInvokeMoveAlongOnProperty(vd, conformance))
@@ -214,14 +214,14 @@ bool DerivedConformance::canDeriveDifferentiable(NominalTypeDecl *nominal,
214214
});
215215
}
216216

217-
/// Synthesize body for `move(along:)`.
217+
/// Synthesize body for `move(by:)`.
218218
static std::pair<BraceStmt *, bool>
219219
deriveBodyDifferentiable_move(AbstractFunctionDecl *funcDecl, void *) {
220220
auto &C = funcDecl->getASTContext();
221221
auto *parentDC = funcDecl->getParent();
222222
auto *nominal = parentDC->getSelfNominalTypeDecl();
223223

224-
// Get `Differentiable.move(along:)` protocol requirement.
224+
// Get `Differentiable.move(by:)` protocol requirement.
225225
auto *diffProto = C.getProtocol(KnownProtocolKind::Differentiable);
226226
auto *requirement = getProtocolRequirement(diffProto, C.Id_move);
227227

@@ -236,31 +236,31 @@ deriveBodyDifferentiable_move(AbstractFunctionDecl *funcDecl, void *) {
236236
SmallVector<VarDecl *, 8> diffProperties;
237237
getStoredPropertiesForDifferentiation(nominal, parentDC, diffProperties);
238238

239-
// Create call expression applying a member `move(along:)` method to a
240-
// parameter member: `self.<member>.move(along: direction.<member>)`.
239+
// Create call expression applying a member `move(by:)` method to a
240+
// parameter member: `self.<member>.move(by: offset.<member>)`.
241241
auto createMemberMethodCallExpr = [&](VarDecl *member) -> Expr * {
242242
auto *module = nominal->getModuleContext();
243243
auto memberType =
244244
parentDC->mapTypeIntoContext(member->getValueInterfaceType());
245245
auto confRef = module->lookupConformance(memberType, diffProto);
246246
assert(confRef && "Member does not conform to `Differentiable`");
247247

248-
// Get member type's requirement witness: `<Member>.move(along:)`.
248+
// Get member type's requirement witness: `<Member>.move(by:)`.
249249
ValueDecl *memberWitnessDecl = requirement;
250250
if (confRef.isConcrete())
251251
if (auto *witness = confRef.getConcrete()->getWitnessDecl(requirement))
252252
memberWitnessDecl = witness;
253253
assert(memberWitnessDecl && "Member witness declaration must exist");
254254

255-
// Create reference to member method: `self.<member>.move(along:)`.
255+
// Create reference to member method: `self.<member>.move(by:)`.
256256
Expr *memberExpr =
257257
new (C) MemberRefExpr(selfDRE, SourceLoc(), member, DeclNameLoc(),
258258
/*Implicit*/ true);
259259
auto *memberMethodExpr =
260260
new (C) MemberRefExpr(memberExpr, SourceLoc(), memberWitnessDecl,
261261
DeclNameLoc(), /*Implicit*/ true);
262262

263-
// Create reference to parameter member: `direction.<member>`.
263+
// Create reference to parameter member: `offset.<member>`.
264264
VarDecl *paramMember = nullptr;
265265
auto *paramNominal = paramDecl->getType()->getAnyNominal();
266266
assert(paramNominal && "Parameter should have a nominal type");
@@ -275,12 +275,12 @@ deriveBodyDifferentiable_move(AbstractFunctionDecl *funcDecl, void *) {
275275
auto *paramMemberExpr =
276276
new (C) MemberRefExpr(paramDRE, SourceLoc(), paramMember, DeclNameLoc(),
277277
/*Implicit*/ true);
278-
// Create expression: `self.<member>.move(along: direction.<member>)`.
278+
// Create expression: `self.<member>.move(by: offset.<member>)`.
279279
return CallExpr::createImplicit(C, memberMethodExpr, {paramMemberExpr},
280-
{C.Id_along});
280+
{C.Id_by});
281281
};
282282

283-
// Collect member `move(along:)` method call expressions.
283+
// Collect member `move(by:)` method call expressions.
284284
SmallVector<ASTNode, 2> memberMethodCallExprs;
285285
SmallVector<Identifier, 2> memberNames;
286286
for (auto *member : diffProperties) {
@@ -326,14 +326,14 @@ static ValueDecl *deriveDifferentiable_method(
326326
return funcDecl;
327327
}
328328

329-
/// Synthesize the `move(along:)` function declaration.
329+
/// Synthesize the `move(by:)` function declaration.
330330
static ValueDecl *deriveDifferentiable_move(DerivedConformance &derived) {
331331
auto &C = derived.Context;
332332
auto *parentDC = derived.getConformanceContext();
333333
auto tangentType =
334334
getTangentVectorInterfaceType(parentDC->getSelfTypeInContext(), parentDC);
335335
return deriveDifferentiable_method(
336-
derived, C.Id_move, C.Id_along, C.Id_direction, tangentType,
336+
derived, C.Id_move, C.Id_by, C.Id_offset, tangentType,
337337
C.TheEmptyTupleType, {deriveBodyDifferentiable_move, nullptr});
338338
}
339339

@@ -561,7 +561,7 @@ static void checkAndDiagnoseImplicitNoDerivative(ASTContext &Context,
561561
if (originalProperty->getAttrs().hasAttribute<NoDerivativeAttr>())
562562
continue;
563563
// Diagnose wrapped properties whose property wrappers do not define
564-
// `wrappedValue.set`. `mutating func move(along:)` cannot be synthesized
564+
// `wrappedValue.set`. `mutating func move(by:)` cannot be synthesized
565565
// to update these properties.
566566
if (!originalProperty->isSettable(DC)) {
567567
auto *wrapperDecl =

lib/Sema/DerivedConformances.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,10 +329,10 @@ ValueDecl *DerivedConformance::getDerivableRequirement(NominalTypeDecl *nominal,
329329
return getRequirement(KnownProtocolKind::AdditiveArithmetic);
330330
}
331331

332-
// Differentiable.move(along:)
332+
// Differentiable.move(by:)
333333
if (name.isCompoundName() && name.getBaseName() == ctx.Id_move) {
334334
auto argumentNames = name.getArgumentNames();
335-
if (argumentNames.size() == 1 && argumentNames[0] == ctx.Id_along)
335+
if (argumentNames.size() == 1 && argumentNames[0] == ctx.Id_by)
336336
return getRequirement(KnownProtocolKind::Differentiable);
337337
}
338338

stdlib/private/DifferentiationUnittest/DifferentiationUnittest.swift.gyb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -325,41 +325,41 @@ where T: Differentiable & FloatingPoint, T == T.TangentVector {
325325
// Differential operators for `${Self}<T>`.
326326

327327
public func gradient<T, R: FloatingPoint>(
328-
at x: T, in f: @differentiable(reverse) (T) -> ${Self}<R>
328+
at x: T, of f: @differentiable(reverse) (T) -> ${Self}<R>
329329
) -> T.TangentVector where R.TangentVector == R {
330-
return pullback(at: x, in: f)(1)
330+
return pullback(at: x, of: f)(1)
331331
}
332332

333333
public func gradient<T, U, R: FloatingPoint>(
334-
at x: T, _ y: U, in f: @differentiable(reverse) (T, U) -> ${Self}<R>
334+
at x: T, _ y: U, of f: @differentiable(reverse) (T, U) -> ${Self}<R>
335335
) -> (T.TangentVector, U.TangentVector) where R.TangentVector == R {
336-
return pullback(at: x, y, in: f)(1)
336+
return pullback(at: x, y, of: f)(1)
337337
}
338338

339339
public func derivative<T: FloatingPoint, R>(
340-
at x: ${Self}<T>, in f: @differentiable(reverse) (${Self}<T>) -> R
340+
at x: ${Self}<T>, of f: @differentiable(reverse) (${Self}<T>) -> R
341341
) -> R.TangentVector where T.TangentVector == T {
342-
return differential(at: x, in: f)(1)
342+
return differential(at: x, of: f)(1)
343343
}
344344

345345
public func derivative<T: FloatingPoint, U: FloatingPoint, R>(
346346
at x: ${Self}<T>, _ y: ${Self}<U>,
347-
in f: @differentiable(reverse) (${Self}<T>, ${Self}<U>) -> R
347+
of f: @differentiable(reverse) (${Self}<T>, ${Self}<U>) -> R
348348
) -> R.TangentVector where T.TangentVector == T, U.TangentVector == U {
349-
return differential(at: x, y, in: f)(1, 1)
349+
return differential(at: x, y, of: f)(1, 1)
350350
}
351351

352352
public func valueWithGradient<T, R: FloatingPoint>(
353-
at x: T, in f: @differentiable(reverse) (T) -> ${Self}<R>
353+
at x: T, of f: @differentiable(reverse) (T) -> ${Self}<R>
354354
) -> (value: ${Self}<R>, gradient: T.TangentVector) {
355-
let (y, pullback) = valueWithPullback(at: x, in: f)
355+
let (y, pullback) = valueWithPullback(at: x, of: f)
356356
return (y, pullback(1))
357357
}
358358

359359
public func valueWithDerivative<T: FloatingPoint, R>(
360-
at x: ${Self}<T>, in f: @differentiable(reverse) (${Self}<T>) -> R
360+
at x: ${Self}<T>, of f: @differentiable(reverse) (${Self}<T>) -> R
361361
) -> (value: R, derivative: R.TangentVector) {
362-
let (y, differential) = valueWithDifferential(at: x, in: f)
362+
let (y, differential) = valueWithDifferential(at: x, of: f)
363363
return (y, differential(1))
364364
}
365365

stdlib/public/Differentiation/AnyDifferentiable.swift

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import Swift
2323

2424
internal protocol _AnyDifferentiableBox {
2525
// `Differentiable` requirements.
26-
mutating func _move(along direction: AnyDerivative)
26+
mutating func _move(by offset: AnyDerivative)
2727

2828
/// The underlying base value, type-erased to `Any`.
2929
var _typeErasedBase: Any { get }
@@ -50,14 +50,11 @@ internal struct _ConcreteDifferentiableBox<T: Differentiable>: _AnyDifferentiabl
5050
return (self as? _ConcreteDifferentiableBox<U>)?._base
5151
}
5252

53-
mutating func _move(along direction: AnyDerivative) {
54-
guard
55-
let directionBase =
56-
direction.base as? T.TangentVector
57-
else {
58-
_derivativeTypeMismatch(T.self, type(of: direction.base))
53+
mutating func _move(by offset: AnyDerivative) {
54+
guard let offsetBase = offset.base as? T.TangentVector else {
55+
_derivativeTypeMismatch(T.self, type(of: offset.base))
5956
}
60-
_base.move(along: directionBase)
57+
_base.move(by: offsetBase)
6158
}
6259
}
6360

@@ -100,8 +97,8 @@ public struct AnyDifferentiable: Differentiable {
10097

10198
public typealias TangentVector = AnyDerivative
10299

103-
public mutating func move(along direction: TangentVector) {
104-
_box._move(along: direction)
100+
public mutating func move(by offset: TangentVector) {
101+
_box._move(by: offset)
105102
}
106103
}
107104

@@ -121,7 +118,7 @@ internal protocol _AnyDerivativeBox {
121118
func _subtracting(_ x: _AnyDerivativeBox) -> _AnyDerivativeBox
122119

123120
// `Differentiable` requirements.
124-
mutating func _move(along direction: _AnyDerivativeBox)
121+
mutating func _move(by offset: _AnyDerivativeBox)
125122

126123
/// The underlying base value, type-erased to `Any`.
127124
var _typeErasedBase: Any { get }
@@ -215,19 +212,16 @@ where T: Differentiable, T.TangentVector == T {
215212

216213
// `Differentiable` requirements.
217214
@inlinable
218-
mutating func _move(along direction: _AnyDerivativeBox) {
219-
if direction._isOpaqueZero() {
215+
mutating func _move(by offset: _AnyDerivativeBox) {
216+
if offset._isOpaqueZero() {
220217
return
221218
}
222219
// The case where `self._isOpaqueZero()` returns true is handled in
223-
// `AnyDerivative.move(along:)`.
224-
guard
225-
let directionBase =
226-
direction._unboxed(to: T.TangentVector.self)
227-
else {
228-
_derivativeTypeMismatch(T.self, type(of: direction._typeErasedBase))
220+
// `AnyDerivative.move(by:)`.
221+
guard let offsetBase = offset._unboxed(to: T.TangentVector.self) else {
222+
_derivativeTypeMismatch(T.self, type(of: offset._typeErasedBase))
229223
}
230-
_base.move(along: directionBase)
224+
_base.move(by: offsetBase)
231225
}
232226
}
233227

@@ -362,12 +356,12 @@ public struct AnyDerivative: Differentiable & AdditiveArithmetic {
362356

363357
// `Differentiable` requirements.
364358
@inlinable
365-
public mutating func move(along direction: TangentVector) {
359+
public mutating func move(by offset: TangentVector) {
366360
if _box._isOpaqueZero() {
367-
_box = direction._box
361+
_box = offset._box
368362
return
369363
}
370-
_box._move(along: direction._box)
364+
_box._move(by: offset._box)
371365
}
372366
}
373367

0 commit comments

Comments
 (0)