From 47a8a26c5ab21c183b2a9434512bd5ce39ce5b08 Mon Sep 17 00:00:00 2001 From: Copilot Date: Fri, 7 Aug 2026 14:40:55 +0200 Subject: [PATCH] Remove always-on ImplicitYield language feature flag (#20143) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../CheckArrayOrListComputedExpressions.fs | 15 +--- .../CheckComputationExpressions.fs | 9 +- .../Expressions/CheckExpressionsOps.fs | 87 +++++-------------- .../Expressions/CheckSequenceExpressions.fs | 17 +--- src/Compiler/FSComp.txt | 4 - src/Compiler/Facilities/LanguageFeatures.fs | 3 - src/Compiler/Facilities/LanguageFeatures.fsi | 1 - src/Compiler/xlf/FSComp.txt.cs.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.de.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.es.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.fr.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.it.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.ja.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.ko.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.pl.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.pt-BR.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.ru.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.tr.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.zh-Hans.xlf | 20 ----- src/Compiler/xlf/FSComp.txt.zh-Hant.xlf | 20 ----- 20 files changed, 30 insertions(+), 366 deletions(-) diff --git a/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs b/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs index f8a2abd7d73..7a246e08a5a 100644 --- a/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckArrayOrListComputedExpressions.fs @@ -53,21 +53,8 @@ let TcArrayOrListComputedExpression (cenv: TcFileState) env (overallTy: OverallT | None -> - // LanguageFeatures.ImplicitYield do not require this validation - let implicitYieldEnabled = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - - let validateExpressionWithIfRequiresParenthesis = not implicitYieldEnabled - let acceptDeprecatedIfThenExpression = not implicitYieldEnabled - match comp with - | SimpleSemicolonSequence cenv acceptDeprecatedIfThenExpression elems -> - match comp with - | SimpleSemicolonSequence cenv false _ -> () - | _ when validateExpressionWithIfRequiresParenthesis -> - errorR (Deprecated(FSComp.SR.tcExpressionWithIfRequiresParenthesis (), m)) - | _ -> () - + | SimpleSemicolonSequence elems -> let replacementExpr = if isArray then // This are to improve parsing/processing speed for parser tables by converting to an array blob ASAP diff --git a/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs b/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs index 040b61f9a89..d468b3f6609 100644 --- a/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckComputationExpressions.fs @@ -3037,11 +3037,10 @@ let TcComputationExpression (cenv: TcFileState) env (overallTy: OverallTy) tpenv // then allow the type-directed rule interpreting non-unit-typed expressions in statement // positions as 'yield'. 'yield!' may be present in the computation expression. let enableImplicitYield = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - && (hasMethInfo "Yield" cenv env mBuilderVal ad builderTy - && hasMethInfo "Combine" cenv env mBuilderVal ad builderTy - && hasMethInfo "Delay" cenv env mBuilderVal ad builderTy - && YieldFree cenv comp) + hasMethInfo "Yield" cenv env mBuilderVal ad builderTy + && hasMethInfo "Combine" cenv env mBuilderVal ad builderTy + && hasMethInfo "Delay" cenv env mBuilderVal ad builderTy + && YieldFree comp let origComp = comp diff --git a/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs b/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs index 0fe8e296b81..838e6ed4c15 100644 --- a/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs +++ b/src/Compiler/Checking/Expressions/CheckExpressionsOps.fs @@ -180,69 +180,31 @@ let RewriteRangeExpr synExpr = | _ -> None /// Check if a computation or sequence expression is syntactically free of 'yield' (though not yield!) -let YieldFree (cenv: TcFileState) expr = - if cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield then - - // Implement yield free logic for F# Language including the LanguageFeature.ImplicitYield - let rec YieldFree expr = - match expr with - | SynExpr.Sequential(expr1 = expr1; expr2 = expr2) -> YieldFree expr1 && YieldFree expr2 - - | SynExpr.IfThenElse(thenExpr = thenExpr; elseExpr = elseExprOpt) -> YieldFree thenExpr && Option.forall YieldFree elseExprOpt - - | SynExpr.TryWith(tryExpr = body; withCases = clauses) -> - YieldFree body - && clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - - | SynExpr.Match(clauses = clauses) - | SynExpr.MatchBang(clauses = clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - - | SynExpr.For(doBody = body) - | SynExpr.TryFinally(tryExpr = body) - | SynExpr.LetOrUse({ Body = body }) - | SynExpr.While(doExpr = body) - | SynExpr.WhileBang(doExpr = body) - | SynExpr.ForEach(bodyExpr = body) -> YieldFree body - | SynExpr.YieldOrReturn(flags = (true, _)) -> false - - | _ -> true - - YieldFree expr - else - // Implement yield free logic for F# Language without the LanguageFeature.ImplicitYield - let rec YieldFree expr = - match expr with - | SynExpr.Sequential(expr1 = expr1; expr2 = expr2) -> YieldFree expr1 && YieldFree expr2 - - | SynExpr.IfThenElse(thenExpr = thenExpr; elseExpr = elseExprOpt) -> YieldFree thenExpr && Option.forall YieldFree elseExprOpt - - | SynExpr.TryWith(tryExpr = e1; withCases = clauses) -> - YieldFree e1 - && clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) +let rec YieldFree expr = + match expr with + | SynExpr.Sequential(expr1 = expr1; expr2 = expr2) -> YieldFree expr1 && YieldFree expr2 - | SynExpr.Match(clauses = clauses) - | SynExpr.MatchBang(clauses = clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) + | SynExpr.IfThenElse(thenExpr = thenExpr; elseExpr = elseExprOpt) -> YieldFree thenExpr && Option.forall YieldFree elseExprOpt - | SynExpr.For(doBody = body) - | SynExpr.TryFinally(tryExpr = body) - | SynExpr.LetOrUse({ Body = body }) - | SynExpr.While(doExpr = body) - | SynExpr.WhileBang(doExpr = body) - | SynExpr.ForEach(bodyExpr = body) -> YieldFree body + | SynExpr.TryWith(tryExpr = body; withCases = clauses) -> + YieldFree body + && clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - | LetOrUse(_, true, _) - | SynExpr.YieldOrReturnFrom _ - | SynExpr.YieldOrReturn _ - | SynExpr.ImplicitZero _ - | SynExpr.Do _ -> false + | SynExpr.Match(clauses = clauses) + | SynExpr.MatchBang(clauses = clauses) -> clauses |> List.forall (fun (SynMatchClause(resultExpr = res)) -> YieldFree res) - | _ -> true + | SynExpr.For(doBody = body) + | SynExpr.TryFinally(tryExpr = body) + | SynExpr.LetOrUse({ Body = body }) + | SynExpr.While(doExpr = body) + | SynExpr.WhileBang(doExpr = body) + | SynExpr.ForEach(bodyExpr = body) -> YieldFree body + | SynExpr.YieldOrReturn(flags = (true, _)) -> false - YieldFree expr + | _ -> true -let inline IsSimpleSemicolonSequenceElement expr cenv acceptDeprecated = +let inline IsSimpleSemicolonSequenceElement expr = match expr with - | SynExpr.IfThenElse _ when acceptDeprecated && YieldFree cenv expr -> true | SynExpr.IfThenElse _ | SynExpr.TryWith _ | SynExpr.Match _ @@ -259,25 +221,24 @@ let inline IsSimpleSemicolonSequenceElement expr cenv acceptDeprecated = | _ -> true [] -let rec TryGetSimpleSemicolonSequenceOfComprehension expr acc cenv acceptDeprecated = +let rec TryGetSimpleSemicolonSequenceOfComprehension expr acc = match expr with | SynExpr.Sequential(isTrueSeq = true; expr1 = e1; expr2 = e2) -> - if IsSimpleSemicolonSequenceElement e1 cenv acceptDeprecated then - TryGetSimpleSemicolonSequenceOfComprehension e2 (e1 :: acc) cenv acceptDeprecated + if IsSimpleSemicolonSequenceElement e1 then + TryGetSimpleSemicolonSequenceOfComprehension e2 (e1 :: acc) else ValueNone | _ -> - if IsSimpleSemicolonSequenceElement expr cenv acceptDeprecated then + if IsSimpleSemicolonSequenceElement expr then ValueSome(List.rev (expr :: acc)) else ValueNone /// Determine if a syntactic expression inside 'seq { ... }' or '[...]' counts as a "simple sequence /// of semicolon separated values". For example [1;2;3]. -/// 'acceptDeprecated' is true for the '[ ... ]' case, where we allow the syntax '[ if g then t else e ]' but ask it to be parenthesized [] -let (|SimpleSemicolonSequence|_|) cenv acceptDeprecated cexpr = - TryGetSimpleSemicolonSequenceOfComprehension cexpr [] cenv acceptDeprecated +let (|SimpleSemicolonSequence|_|) cexpr = + TryGetSimpleSemicolonSequenceOfComprehension cexpr [] let elimFastIntegerForLoop (spFor, spTo, id, start: SynExpr, dir, finish: SynExpr, innerExpr, m: range) = let mOp = (unionRanges start.Range finish.Range).MakeSynthetic() diff --git a/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs b/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs index c3f740cf458..aec732896e5 100644 --- a/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs +++ b/src/Compiler/Checking/Expressions/CheckSequenceExpressions.fs @@ -35,9 +35,7 @@ let TcSequenceExpression (cenv: TcFileState) env tpenv comp (overallTy: OverallT // If there are no 'yield' in the computation expression then allow the type-directed rule // interpreting non-unit-typed expressions in statement positions as 'yield'. 'yield!' may be // present in the computation expression. - let enableImplicitYield = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - && (YieldFree cenv comp) + let enableImplicitYield = YieldFree comp let mkSeqDelayedExpr m (coreExpr: Expr) = let overallTy = tyOfExpr cenv.g coreExpr @@ -162,9 +160,6 @@ let TcSequenceExpression (cenv: TcFileState) env tpenv comp (overallTy: OverallT Some(mkSeqFinally cenv env mTryToLast genOuterTy innerExpr unwindExpr, tpenv) - | SynExpr.Paren(range = m) when not (cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield) -> - error (Error(FSComp.SR.tcConstructIsAmbiguousInSequenceExpression (), m)) - | SynExpr.ImplicitZero m -> Some(mkSeqEmpty cenv env m genOuterTy, tpenv) | SynExpr.DoBang(trivia = { DoBangKeyword = m }) -> error (Error(FSComp.SR.tcDoBangIllegalInSequenceExpression (), m)) @@ -469,16 +464,6 @@ let TcSequenceExpressionEntry (cenv: TcFileState) env (overallTy: OverallTy) tpe match RewriteRangeExpr comp with | Some replacementExpr -> TcExpr cenv overallTy env tpenv replacementExpr | None -> - let implicitYieldEnabled = - cenv.g.langVersion.SupportsFeature LanguageFeature.ImplicitYield - - let validateObjectSequenceOrRecordExpression = not implicitYieldEnabled - - match comp with - | SimpleSemicolonSequence cenv false _ when validateObjectSequenceOrRecordExpression -> - errorR (Error(FSComp.SR.tcInvalidObjectSequenceOrRecordExpression (), m)) - | _ -> () - if not hasBuilder && not cenv.g.compilingFSharpCore then error (Error(FSComp.SR.tcInvalidSequenceExpressionSyntaxForm (), m)) diff --git a/src/Compiler/FSComp.txt b/src/Compiler/FSComp.txt index 764e278979a..bc0e8a75be2 100644 --- a/src/Compiler/FSComp.txt +++ b/src/Compiler/FSComp.txt @@ -591,9 +591,7 @@ tcCouldNotFindIDisposable,"Couldn't find Dispose on IDisposable, or it was overl 736,tcExprUndelayed,"TcExprUndelayed: delayed" 737,tcExpressionRequiresSequence,"This expression form may only be used in sequence and computation expressions" 738,tcInvalidObjectExpressionSyntaxForm,"Invalid object expression. Objects without overrides or interfaces should use the expression form 'new Type(args)' without braces." -739,tcInvalidObjectSequenceOrRecordExpression,"Invalid object, sequence or record expression" 740,tcInvalidSequenceExpressionSyntaxForm,"Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}'" -tcExpressionWithIfRequiresParenthesis,"This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression" 741,tcUnableToParseFormatString,"Unable to parse format string '%s'" 742,tcListLiteralMaxSize,"This list expression exceeds the maximum size for list literals. Use an array for larger literals and call Array.ToList." 743,tcExpressionFormRequiresObjectConstructor,"The expression form 'expr then expr' may only be used as part of an explicit object constructor" @@ -647,7 +645,6 @@ tcExpressionWithIfRequiresParenthesis,"This list or array expression includes an 790,tcTypeIsNotARecordTypeNeedConstructor,"This type is not a record type. Values of class and struct types must be created using calls to object constructors." 791,tcTypeIsNotARecordType,"This type is not a record type" 792,tcConstructIsAmbiguousInComputationExpression,"This construct is ambiguous as part of a computation expression. Nested expressions may be written using 'let _ = (...)' and nested computations using 'let! res = builder {{ ... }}'." -793,tcConstructIsAmbiguousInSequenceExpression,"This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'." 794,tcDoBangIllegalInSequenceExpression,"'do!' cannot be used within sequence expressions" 795,tcUseForInSequenceExpression,"The use of 'let! x = coll' in sequence expressions is not permitted. Use 'for x in coll' instead." 796,tcTryIllegalInSequenceExpression,"'try'/'with' cannot be used within sequence expressions" @@ -1567,7 +1564,6 @@ featureSingleUnderscorePattern,"single underscore pattern" featureWildCardInForLoop,"wild card in for loop" featureRelaxWhitespace,"whitespace relaxation" featureNameOf,"nameof" -featureImplicitYield,"implicit yield" featureDotlessFloat32Literal,"dotless float32 literal" featurePackageManagement,"package management" featureFromEndSlicing,"from-end slicing" diff --git a/src/Compiler/Facilities/LanguageFeatures.fs b/src/Compiler/Facilities/LanguageFeatures.fs index b95c0aaecf0..86744302a9f 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fs +++ b/src/Compiler/Facilities/LanguageFeatures.fs @@ -21,7 +21,6 @@ type LanguageFeature = | RelaxWhitespace | RelaxWhitespace2 | NameOf - | ImplicitYield | DotlessFloat32Literal | PackageManagement | FromEndSlicing @@ -153,7 +152,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) LanguageFeature.SingleUnderscorePattern, languageVersion47 LanguageFeature.WildCardInForLoop, languageVersion47 LanguageFeature.RelaxWhitespace, languageVersion47 - LanguageFeature.ImplicitYield, languageVersion47 // F# 5.0 LanguageFeature.FixedIndexSlice3d4d, languageVersion50 @@ -365,7 +363,6 @@ type LanguageVersion(versionText, ?disabledFeaturesArray: LanguageFeature array) | LanguageFeature.RelaxWhitespace -> FSComp.SR.featureRelaxWhitespace () | LanguageFeature.RelaxWhitespace2 -> FSComp.SR.featureRelaxWhitespace2 () | LanguageFeature.NameOf -> FSComp.SR.featureNameOf () - | LanguageFeature.ImplicitYield -> FSComp.SR.featureImplicitYield () | LanguageFeature.DotlessFloat32Literal -> FSComp.SR.featureDotlessFloat32Literal () | LanguageFeature.PackageManagement -> FSComp.SR.featurePackageManagement () | LanguageFeature.FromEndSlicing -> FSComp.SR.featureFromEndSlicing () diff --git a/src/Compiler/Facilities/LanguageFeatures.fsi b/src/Compiler/Facilities/LanguageFeatures.fsi index 59bd65470f5..ddff093d78a 100644 --- a/src/Compiler/Facilities/LanguageFeatures.fsi +++ b/src/Compiler/Facilities/LanguageFeatures.fsi @@ -11,7 +11,6 @@ type LanguageFeature = | RelaxWhitespace | RelaxWhitespace2 | NameOf - | ImplicitYield | DotlessFloat32Literal | PackageManagement | FromEndSlicing diff --git a/src/Compiler/xlf/FSComp.txt.cs.xlf b/src/Compiler/xlf/FSComp.txt.cs.xlf index d878863c755..de194929f50 100644 --- a/src/Compiler/xlf/FSComp.txt.cs.xlf +++ b/src/Compiler/xlf/FSComp.txt.cs.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - implicitní yield - - Improved implied argument names Vylepšené názvy implikovaných argumentů @@ -4812,21 +4807,11 @@ Neplatný objektový výraz. U objektů bez přepsání nebo rozhraní by se měl výraz formulovat pomocí notace new Type(args) bez složených závorek. - - Invalid object, sequence or record expression - Neplatný výraz objektu, pořadí nebo záznamu - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Neplatný výraz záznamu, pořadí nebo výpočtu. Výrazy pořadí by měly mít notaci seq {{ ... }}. - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Tento výraz seznamu nebo pole zahrnuje element s formulací if ... then ... else. Ohraničte tento výraz závorkami, aby bylo jasné, že jde o samostatný prvek seznamu nebo pole. Odlišíte ho tak od seznamu generovaného pomocí výrazu pořadí. - - Unable to parse format string '{0}' Formátovací řetězec {0} se nedá parsovat. @@ -5092,11 +5077,6 @@ Tento konstruktor je jako součást výrazu výpočtu nejednoznačný. Vnořené výrazy jde zapsat pomocí notace let _ = (...) a vnořené výpočty pomocí notace let! res = builder {{ ... }}. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Tento konstruktor je jako součást výrazu pořadí nejednoznačný. Vnořené výrazy jde zapsat pomocí notace let _ = (...) a vnořená pořadí pomocí notace yield! seq {{... }}. - - 'do!' cannot be used within sequence expressions Klíčové slovo do! se ve výrazech pořadí nedá použít. diff --git a/src/Compiler/xlf/FSComp.txt.de.xlf b/src/Compiler/xlf/FSComp.txt.de.xlf index 5ec1084eb12..b95da1c43d4 100644 --- a/src/Compiler/xlf/FSComp.txt.de.xlf +++ b/src/Compiler/xlf/FSComp.txt.de.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - implizite yield-Anweisung - - Improved implied argument names Verbesserte implizite Argumentnamen @@ -4812,21 +4807,11 @@ Ungültiger Objektausdruck. Objekte ohne Überschreibungen oder Schnittstellen sollten das Ausdrucksformat "new Type(args)" ohne geschweifte Klammern verwenden. - - Invalid object, sequence or record expression - Ungültiger Objekt-, Sequenz- oder Datensatzausdruck. - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Ungültiger Datensatz-, Sequenz- oder Berechnungsausdruck. Sequenzausdrücke müssen das Format "seq {{ ... }}" besitzen. - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Dieser Listen- oder Arrayausdruck enthält ein Element im Format "if ... then ... else". Setzen Sie diesen Ausdruck in Klammern, um ihn als einzelnes Element der Liste oder des Arrays zu kenntlich zu machen und den Ausdruck von einer Liste zu unterscheiden, die mithilfe eines Sequenzausdrucks erzeugt wurde. - - Unable to parse format string '{0}' Formatzeichenfolge "{0}" kann nicht analysiert werden. @@ -5092,11 +5077,6 @@ Dieses Konstrukt ist als Teil eines Berechnungsausdrucks nicht eindeutig. Geschachtelte Ausdrücke können mit "let _ = (...)", geschachtelte Berechnungen mit "let! res = builder {{ ... }}" ausgedrückt werden. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Dieses Konstrukt ist als Teil eines Sequenzausdrucks nicht eindeutig. Geschachtelte Ausdrücke können mit "let _ = (...)", geschachtelte Sequenzen mit "yield! seq {{... }}" ausgedrückt werden. - - 'do!' cannot be used within sequence expressions do! kann nicht in Sequenzausdrücken verwendet werden. diff --git a/src/Compiler/xlf/FSComp.txt.es.xlf b/src/Compiler/xlf/FSComp.txt.es.xlf index 4f80cb251b8..753572057b5 100644 --- a/src/Compiler/xlf/FSComp.txt.es.xlf +++ b/src/Compiler/xlf/FSComp.txt.es.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - elemento yield implícito - - Improved implied argument names Nombres de argumentos implícitos mejorados @@ -4812,21 +4807,11 @@ Expresión de objeto no válida. Los objetos sin invalidaciones ni interfaces deben usar el formato de expresión 'new Type(args)' sin llaves. - - Invalid object, sequence or record expression - Expresión de objeto, secuencia o registro no válida. - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Expresión de registro, secuencia o cómputo no válida. Las expresiones de secuencia deben tener el formato 'seq {{ ... }}'. - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Esta expresión de matriz o lista incluye un elemento con el formato 'if ... then ... else'. Ponga paréntesis a esta expresión para indicarla como elemento individual de la lista o matriz, con el fin de eliminar la ambigüedad respecto a una lista generada con una expresión de secuencia. - - Unable to parse format string '{0}' No se puede analizar la cadena de formato '{0}'. @@ -5092,11 +5077,6 @@ Esta construcción es ambigua como parte de una expresión de cómputo. Las expresiones anidadas se pueden escribir usando 'let _ = (...)' y los cómputos anidados usando 'let! res = builder {{ ... }}'. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Esta construcción es ambigua como parte de una expresión de secuencia. Las expresiones anidadas se pueden escribir usando 'let _ = (...)' y las secuencias anidadas usando 'yield! seq {{... }}'. - - 'do!' cannot be used within sequence expressions 'do!' no se puede usar en expresiones de secuencia. diff --git a/src/Compiler/xlf/FSComp.txt.fr.xlf b/src/Compiler/xlf/FSComp.txt.fr.xlf index 1874188e31f..75b4e2bd046 100644 --- a/src/Compiler/xlf/FSComp.txt.fr.xlf +++ b/src/Compiler/xlf/FSComp.txt.fr.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - yield implicite - - Improved implied argument names Noms d’arguments implicites améliorés @@ -4812,21 +4807,11 @@ Expression d'objet non valide. Les objets sans substitutions ou interfaces doivent utiliser la forme d'expression 'new Type(args)' sans accolades. - - Invalid object, sequence or record expression - Expression d'objet, de séquence ou d'enregistrement non valide - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Expression d'enregistrement, de séquence ou de calcul non valide. Les expressions de séquence doivent avoir le format 'seq {{ ... }}' - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Cette expression de liste ou de tableau comprend un élément sous la forme 'if ... then ... else'. Mettez cette expression entre parenthèses pour indiquer qu'il s'agit d'un élément individuel de la liste ou du tableau, afin de lever l'ambigüité par rapport à une liste générée à l'aide d'une expression de séquence - - Unable to parse format string '{0}' Impossible d'analyser la chaîne de format '{0}' @@ -5092,11 +5077,6 @@ Cette construction est ambiguë dans le cadre d'une expression de calcul. Les expressions imbriquées peuvent être écrites avec 'let _ = (...)' et les calculs imbriqués avec 'let! res = builder {{ ... }}'. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Cette construction est ambiguë dans le cadre d'une expression de séquence. Les expressions imbriquées peuvent être écrites avec 'let _ = (...)' et les séquences imbriquées avec 'yield! seq {{... }}'. - - 'do!' cannot be used within sequence expressions Impossible d'utiliser 'do!' dans des expressions de séquence diff --git a/src/Compiler/xlf/FSComp.txt.it.xlf b/src/Compiler/xlf/FSComp.txt.it.xlf index fc49986b737..e7d97c29e4f 100644 --- a/src/Compiler/xlf/FSComp.txt.it.xlf +++ b/src/Compiler/xlf/FSComp.txt.it.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - istruzione yield implicita - - Improved implied argument names Nomi di argomenti impliciti migliorati @@ -4812,21 +4807,11 @@ Espressione oggetto non valida. Gli oggetti senza override o interfacce devono usare il formato di espressione 'new Type(args)' senza parentesi graffe. - - Invalid object, sequence or record expression - Espressione record, sequenza o oggetto non valida - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Espressione di calcolo, sequenza o record non valida. Il formato delle espressioni sequenza deve essere 'seq {{ ... }}' - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Questa espressione elenco o matrice include un elemento nel formato 'if ... then ... else'. Racchiudere l'espressione in parentesi per indicare che si tratta di un elemento singolo dell'elenco o della matrice allo scopo di eliminare l'ambiguità rispetto a un elenco generato mediante un'espressione sequenza - - Unable to parse format string '{0}' Non è possibile analizzare la stringa di formato '{0}' @@ -5092,11 +5077,6 @@ Questo costrutto è ambiguo all'interno di un'espressione di calcolo. È possibile scrivere le espressioni annidate con 'let _ = (...)' e i calcoli annidati con 'let! res = builder {{ ... }}'. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Questo costrutto è ambiguo all'interno di un'espressione sequenza. È possibile scrivere le espressioni annidate con 'let _ = (...)' e le sequenze annidate con 'yield! seq {{... }}'. - - 'do!' cannot be used within sequence expressions 'do!' non può essere utilizzato in espressioni sequenza diff --git a/src/Compiler/xlf/FSComp.txt.ja.xlf b/src/Compiler/xlf/FSComp.txt.ja.xlf index 3708ae69285..750f79e1333 100644 --- a/src/Compiler/xlf/FSComp.txt.ja.xlf +++ b/src/Compiler/xlf/FSComp.txt.ja.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 暗黙的な yield - - Improved implied argument names 暗黙的な引数名の改善 @@ -4812,21 +4807,11 @@ オブジェクト式が無効です。オーバーライドまたはインターフェイスがないオブジェクトには、かっこなしで 'new Type(args)' という形式の式を使用してください。 - - Invalid object, sequence or record expression - オブジェクト式、シーケンス式、またはレコード式が無効です - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' 無効なレコード、シーケンス式、またはコンピュテーション式です。シーケンス式は 'seq {{ ... }}' という形式にしてください。 - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - このリスト式または配列式には、'if ... then ... else' という形式の要素が含まれます。この式をかっこで囲んでリストまたは配列の個別の要素であることを示し、シーケンス式を使用して生成されたリストとこのリストを区別してください。 - - Unable to parse format string '{0}' 書式指定文字列 '{0}' を解析できません @@ -5092,11 +5077,6 @@ このコンストラクトはコンピュテーション式の一部としてあいまいです。入れ子の式を記述するには 'let _ = (...)' を使用し、入れ子の計算には 'let! res = builder {{ ... }}' を使用します。 - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - このコンストラクトはシーケンス式の一部としてあいまいです。入れ子の式を記述するには 'let _ = (...)' を使用し、入れ子のシーケンスには 'yield! seq {{... }}' を使用します。 - - 'do!' cannot be used within sequence expressions シーケンス式内には 'do!' を使用できません diff --git a/src/Compiler/xlf/FSComp.txt.ko.xlf b/src/Compiler/xlf/FSComp.txt.ko.xlf index e178c73b058..beb0a23cd47 100644 --- a/src/Compiler/xlf/FSComp.txt.ko.xlf +++ b/src/Compiler/xlf/FSComp.txt.ko.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 암시적 yield - - Improved implied argument names 향상된 암시적 인수 이름 @@ -4812,21 +4807,11 @@ 개체 식이 잘못되었습니다. 재정의 또는 인터페이스가 없는 개체는 중괄호 없이 식 형식 'new Type(args)'을 사용해야 합니다. - - Invalid object, sequence or record expression - 개체, 시퀀스 또는 레코드 식이 잘못되었습니다. - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' 레코드, 시퀀스 또는 계산 식이 잘못되었습니다. 시퀀스 식의 형식은 'seq {{ ... }}'여야 합니다. - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - 이 목록 또는 배열 식에는 'if ... then ... else' 형식의 요소가 포함되어 있습니다. 식이 목록 또는 배열의 개별 요소임을 나타내고 이를 시퀀스 식을 사용하여 생성된 목록과 구분하려면 이 식을 괄호로 묶으세요. - - Unable to parse format string '{0}' 서식 문자열 '{0}'을(를) 구문 분석할 수 없습니다. @@ -5092,11 +5077,6 @@ 이 구문은 계산 식의 일부로서 모호합니다. 중첩 식은 'let _ = (...)', 중첩 계산은 'let! res = builder {{ ... }}'를 사용하여 작성할 수 있습니다. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - 이 구문은 시퀀스 식의 일부로서 모호합니다. 중첩 식은 'let _ = (...)', 중첩 시퀀스는 'yield! seq {{... }}'를 사용하여 작성할 수 있습니다. - - 'do!' cannot be used within sequence expressions 'do!'는 시퀀스 식 내에 사용할 수 없습니다. diff --git a/src/Compiler/xlf/FSComp.txt.pl.xlf b/src/Compiler/xlf/FSComp.txt.pl.xlf index 055a6cf5229..0156cd3a30a 100644 --- a/src/Compiler/xlf/FSComp.txt.pl.xlf +++ b/src/Compiler/xlf/FSComp.txt.pl.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - niejawne słowo kluczowe yield - - Improved implied argument names Ulepszone nazwy dorozumianych argumentów @@ -4812,21 +4807,11 @@ Nieprawidłowe wyrażenie obiektu. Obiekty bez przesłonięć lub interfejsy powinny używać wyrażenia w postaci „new Typ(argumenty)” bez nawiasów. - - Invalid object, sequence or record expression - Nieprawidłowe wyrażenie obiektu, sekwencji lub rekordu - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Nieprawidłowe wyrażenie rekordu, sekwencji lub obliczenia. Wyrażenia sekwencji powinny mieć postać „seq {{ ... }}” - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - To wyrażenie listy lub tablicy zawiera element „if ... then ... else”. Ujmij to wyrażenie w nawiasy, aby określić, że jest to pojedynczy element listy lub tablicy, w celu odróżnienia go od listy wygenerowanej przy użyciu wyrażenia sekwencji - - Unable to parse format string '{0}' Nie można przeanalizować ciągu formatu „{0}” @@ -5092,11 +5077,6 @@ Ta konstrukcja jest niejednoznaczna jako część wyrażenia obliczenia. Zagnieżdżone wyrażenia mogą zawierać ciąg „let _ = (...)”, a zagnieżdżone obliczenia mogą zawierać ciąg „let! wynik = konstruktor {{ ... }}”. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Ta konstrukcja jest niejednoznaczna jako część wyrażenia sekwencji. Zagnieżdżone wyrażenia mogą zawierać ciąg „let _ = (...)”, a zagnieżdżone sekwencje mogą zawierać ciąg „yield! seq {{... }}”. - - 'do!' cannot be used within sequence expressions Wyrażenie „do!” nie może być używane w wyrażeniach sekwencji diff --git a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf index 732bd853809..c6c47d42fa5 100644 --- a/src/Compiler/xlf/FSComp.txt.pt-BR.xlf +++ b/src/Compiler/xlf/FSComp.txt.pt-BR.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - yield implícito - - Improved implied argument names Nomes de argumento implícitos aprimorados @@ -4812,21 +4807,11 @@ Expressão de objeto inválida. Objetos sem substituições ou interfaces devem usar o formato de expressão 'new Type(args)' sem as chaves. - - Invalid object, sequence or record expression - Expressão de objeto, sequência ou registro inválida - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Expressão de registro, sequência ou computação inválida. Expressões de sequência devem estar na forma 'seq {{ ... }}' - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Esta expressão de lista ou matriz inclui um elemento da forma 'if ... then ... else'. Use parênteses nesta expressão para indicar os elementos individuais da lista ou matriz. Use uma expressão de sequência para tirar esta ambiguidade desta lista gerada - - Unable to parse format string '{0}' Não é possível analisar a cadeia de caracteres de formato '{0}' @@ -5092,11 +5077,6 @@ Esse constructo é ambíguo como parte de uma expressão de computação. Expressões aninhadas podem ser gravadas com o uso de 'let _ = (...)' e computações aninhadas através de 'let! res = builder {{ ... }}'. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Esse constructo é ambíguo como parte de uma expressão de sequência. Expressões aninhadas podem ser gravadas usando 'let _ = (...)' e sequências aninhadas através de 'yield! seq {{... }}'. - - 'do!' cannot be used within sequence expressions 'do!' não pode ser resolvido em expressões de sequência diff --git a/src/Compiler/xlf/FSComp.txt.ru.xlf b/src/Compiler/xlf/FSComp.txt.ru.xlf index 49f4ee9a7de..17e1ea28766 100644 --- a/src/Compiler/xlf/FSComp.txt.ru.xlf +++ b/src/Compiler/xlf/FSComp.txt.ru.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - неявное использование yield - - Improved implied argument names Улучшенные имена подразумеваемых аргументов @@ -4812,21 +4807,11 @@ Недопустимое выражение объекта. Объекты без переопределений или интерфейсов должны использовать форму выражения "new Type(args)" без фигурных скобок. - - Invalid object, sequence or record expression - Недопустимое выражение объекта, последовательности или записи - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Недопустимая запись, выражение последовательности или вычислительное выражение. Выражения последовательностей должны иметь форму "seq {{ ... }}' - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Данный список выражений массива включает элемент формы "if ... then ... else". Заключите данное выражение в скобки, чтобы показать, что это отдельный элемент списка или массива, отличающийся от списка, созданного с использованием выражения последовательности - - Unable to parse format string '{0}' Не удается выполнить синтаксический анализ строки формата "{0}" @@ -5092,11 +5077,6 @@ Этот конструктор является неоднозначным как часть вычислительного выражения. Вложенные выражения могут записываться с использованием "let _ = (...)", а вложенные вычисления - с использованием "let! res = builder {{ ... }}". - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Этот конструктор является неоднозначным как часть выражения последовательности. Вложенные выражения могут записываться с использованием "let _ = (...)", а вложенные последовательности - с использованием "yield! seq {{... }}". - - 'do!' cannot be used within sequence expressions do! нельзя использовать в выражениях последовательности diff --git a/src/Compiler/xlf/FSComp.txt.tr.xlf b/src/Compiler/xlf/FSComp.txt.tr.xlf index 973dd758f46..a6e7a9d5cb4 100644 --- a/src/Compiler/xlf/FSComp.txt.tr.xlf +++ b/src/Compiler/xlf/FSComp.txt.tr.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - örtük yield - - Improved implied argument names Geliştirilmiş örtük bağımsız değişken adları @@ -4812,21 +4807,11 @@ Geçersiz nesne ifadesi. Geçersiz kılmaların ve arabirimlerin olmadığı nesneler küme ayraçsız 'new Type(args)' ifade biçimini kullanmalıdır. - - Invalid object, sequence or record expression - Geçersiz nesne, dizi veya kayıt ifadesi - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' Geçersiz kayıt, dizi veya hesaplama ifadesi. Dizi ifadeleri 'seq {{ ... }}' biçiminde olmalıdır - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - Liste veya dizi ifadesi 'if ... then ... else' biçiminde bir öğe içeriyor. Listenin veya dizinin bağımsız bir öğesi olduğunu belirtmek, dizi ifadesi kullanılarak oluşturulmuş listeden ayırt etmek için bu ifadeyi ayraç içine alın - - Unable to parse format string '{0}' '{0}' biçim dizesi ayrıştırılamıyor @@ -5092,11 +5077,6 @@ Bu yapı, bir hesaplama ifadesinin parçası olarak belirsiz. İç içe ifadeler 'let _ = (...)' kullanılarak ve iç içe hesaplamalar 'let! res = builder {{ ... }}' kullanılarak yazılabilir. - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - Bu yapı, bir dizi ifadesinin parçası olarak belirsiz. İç içe ifadeler 'let _ = (...)' kullanılarak ve iç içe diziler 'yield! seq {{... }}' kullanılarak yazılabilir. - - 'do!' cannot be used within sequence expressions 'do!' dizi ifadeleri içinde kullanılamaz diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf index 6da1c13c739..85504cb51a7 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hans.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 隐式 yield - - Improved implied argument names 改进了默示的参数名称 @@ -4812,21 +4807,11 @@ 对象表达式无效。没有重写或接口的对象应使用不带括号的表达式格式“new Type(args)”。 - - Invalid object, sequence or record expression - 对象、序列或记录表达式无效 - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' 记录、序列或计算表达式无效。序列表达式的格式应为“seq {{ ... }}” - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - 此列表或数组表达式包括采用“if ... then ... else”格式的元素。请使用括号将此表达式括起来以指示它是列表或数组中的单个元素,从而将此表达式与使用序列表达式生成的列表进行区分 - - Unable to parse format string '{0}' 无法分析格式字符串“{0}” @@ -5092,11 +5077,6 @@ 此构造作为计算表达式的一部分具有多义性。可以使用“let _ = (...)”来编写嵌套的表达式,并可以使用“let! res = builder {{ ... }}”来编写嵌套的计算。 - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - 此构造作为序列表达式的一部分具有多义性。可以使用“let _ = (...)”来编写嵌套的表达式,并可以使用“yield! seq {{... }}”来编写嵌套的序列。 - - 'do!' cannot be used within sequence expressions 不能在序列表达式中使用“do! diff --git a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf index 80881c5dab3..1caf0fc2375 100644 --- a/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf +++ b/src/Compiler/xlf/FSComp.txt.zh-Hant.xlf @@ -457,11 +457,6 @@ Implicit dispatch slot coverage for default interface member implementations - - implicit yield - 隱含 yield - - Improved implied argument names 改良的隱含引數名稱 @@ -4812,21 +4807,11 @@ 無效的物件運算式。沒有覆寫或介面的物件應該使用不加大括號的運算式形式 'new Type(args)'。 - - Invalid object, sequence or record expression - 無效的物件、順序或記錄運算式 - - Invalid record, sequence or computation expression. Sequence expressions should be of the form 'seq {{ ... }}' 無效的記錄、循序項或計算運算式。循序項運算式應該是 'seq {{ ... }}' 形式。 - - This list or array expression includes an element of the form 'if ... then ... else'. Parenthesize this expression to indicate it is an individual element of the list or array, to disambiguate this from a list generated using a sequence expression - 這個清單或陣列運算式包含 'if ... then ... else' 形式的項目。請將這個運算式括在括號內,表示它是清單或陣列的個別項目,以區別這一項與使用循序項運算式產生的清單 - - Unable to parse format string '{0}' 無法剖析格式字串 '{0}' @@ -5092,11 +5077,6 @@ 這個建構是計算運算式中模稜兩可的一部分。巢狀運算式可以使用 'let _ = (...)' 撰寫,巢狀計算則使用 'let! res = builder {{ ... }}'。 - - This construct is ambiguous as part of a sequence expression. Nested expressions may be written using 'let _ = (...)' and nested sequences using 'yield! seq {{... }}'. - 這個建構是循序項運算式中模稜兩可的一部分。巢狀運算式可以使用 'let _ = (...)' 撰寫,巢狀順序則使用 'yield! seq {{... }}'。 - - 'do!' cannot be used within sequence expressions 無法在循序項運算式內使用 'do!'