Skip to content
Stephen Swensen edited this page Dec 30, 2023 · 26 revisions

Release Notes

v7.0.0, 2023-12-29

  • Upgrade sdk (global.json) and test / verify projects to net8; unquote itself stays at netstandard2.0
  • FSharp.Core 4.7.2 -> 8.0.100
  • Upgrade to latest minor versions of nunit3, xunit2, and expecto9 as well as well as latest Microsoft.NET.Test.Sdk
  • Support UnboxFast quotation pattern (decompilation)
  • Add struct prefix to struct tuples and records (decompilation) - credit Happypig375
  • Erase implicit Module suffixes (decompilation) - credit Happypig375
  • Use Choice, Result, voption, Handler, Set, ResizeArray compiler aliases in type signatures - credit Happypig375

v6.1.0, 2021-05-16

  • Improve DateTime and DateTimeOffset decompilation (namely, increase precision)

v6.0.0, 2021-04-30

v5.0.0, 2019-06-27

  • Target FSharp.Core 4.6.2 in both .NET 4.5 and NetStandard 2.0 builds
  • Drop support for long deprecated test frameworks: NUnit v1, Xunit v1, Mbunit v3, and Fuchu
  • Add testSimple operator, which only outputs the head expression
  • Fix stripping of stacktraces for exceptions raised from within quoted expressions
  • Fix decompilation of literal range expressions
  • Support ValueWithName decompilation and reduction to Value
  • Support NewRecord expressions
  • Support WithValue expressions that come from ReflectedDefinition(true) attributes
  • Support distinction between QuoteTyped and QuoteRaw expressions

v4.0.0, 2017-11-10

  • Add support for NetStandard 2.0 while keeping support for .NET 4.5
  • Remove support for .NET 4.0 and PCL
  • Add trap assertion operator
  • Remove long obsolete ?-suffixed assertion operators (under Assertions.Obsolete module)

v3.2.0, 2017-04-01

Expecto support added.

v3.1.2, 2016-08-06

Add support for evaluating private F# unions & records.

See milestone issues for complete listing of fixes and enhancements.

v3.1.1, 2016-01-17

Add / fix support for NUnit 3. Add xml docs for binary assertion operators.

See milestone issues for complete listing of fixes and enhancements.

v3.1.0, 2015-10-10

Fix to variable binding in quotation evaluation (requiring breaking changes to the signatures of evalWith, evalRawWith, reduceWith, and reduceFullyWith) and improved Fuchu support in FSI.

See milestone issues for complete listing of fixes and enhancements.

v3.0.0, 2015-05-17

Add support for .NET 4.5, Portable Profile 259, and Mono and expands integration with test frameworks including xUnit.net 2.0 and Fuchu.

See "Breaking Changes from Unquote 2.x to Unquote 3.x" in the User Guide for a list of breaking changes.

  • Issue 16: Decompiler Feature Request: escape chars in strings should be sprinted literally
  • Issue 88: Change assertion operators so that they don't conflict with F# 3.0's NullableOperators
  • Issue 89: Add .NET 4.5 and Portable Profile 259 builds while continuing support for .NET 4.0 and dropping support for Silverlight 4
  • Issue 103: Upgrade solution from F# 2.0 + VS2010 to F# 3.1 + VS2013
  • Issue 104: Official Mono support
  • Issue 107: Fuchu integration
  • Issue 108: xUnit.net 2 integration
  • Issue 109: Opening Swensen.Unquote should not shadow FSharp.Core.Operators.raise with internal raise implementation
  • Issue 111: Introduce first-class object UnquotedExpression which will be returned from unquote operator
  • Issue 112: Distinguish between exception instances and exceptions that are actually raised during reduction

v2.2.2, 2012-06-14

Make all custom exception types serializable so that they may pass AppDomain boundaries. Other minor fixes and enhancements.

  • Issue 5: Support TryWith expressions
  • Issue 92: Prefix operator precedence should be reduced when return value is a lambda which is being applied
  • Issue 93: Support 'lazy' and 'assert' keywords (treat them as function applications)
  • Issue 98: All exceptions should be serializable

v2.2.1, 2012-05-21

The only purpose of this release is to add tags to the NuGet package so that it is easily searchable in the NuGet gallery. The Unquote binary is identical to version 2.2.0, which was a substantial, contemporary release.

v2.2.0, 2012-05-20

Several enhancements around operator decompilation.

  • Issue 1: Decompiler Feature Request: support custom prefix and infix operators
  • Issue 70: Support DefaultValue decompilation
  • Issue 72: Support Custom NumericLiteral Decompilation
  • Issue 81: Decompiler Bug: the names for some local lambdas captured by quotations are not being demangled properly
  • Issue 82: Improve support of standard operators
  • Issue 83: Leading tilda for prefix operator lambdas should only be used when the operator can also be a infix operator
  • Issue 84: Decompile non-prefix and non-infix functions with operator-based names using operator symbols
  • Issue 85: Partially applied symbolic function causes exception
  • Issue 86: Partialy applied symbolic function not decompiled correctly
  • Issue 87: Support function and value names that require being surrounded by back-ticks
  • Issue 90: Locally defined / redefined custom and standard operators should be decompiled same as top-level operators
  • Issue 91: Decompiler bug: op_Range and op_RangeStep sequence construction syntax shouldn't always be used
  • Issue 94: Fix cast precedence and associativity based on updated F# spec operator precedence table
  • Issue 95: Unquote.Utils namespace should not be publicly visible

v2.1.1, 2012-04-11

New features and bug fixes.

  • Issue 11: Decompiler Bug: active patterns don't produce correct F# code
  • Issue 71: Change signatures for raw evaluation to return generic argument type
  • Issue 73: Create assertion function like raises but allowing further assertions on the exception object
  • Issue 76: Consider wording changes for some assertion failure messages
  • Issue 77: Decompiler Bug: TupleGet pattern missed in match expression
  • Issue 79: Decompiler Bug: local lambdas captured by quotations are sprinted with mangled names
  • Issue 80: Decompiler Bug: do a better job of sprinting None values

v2.1.0, 2011-08-18

Added Silverlight 4 support.

  • Issue 7: Decompiler Bug: precedence of constructor call and other tupled calls not strong enough
  • Issue 66: If binary operator starts or ends with * must put space between parens when sprinting unapplied lambda
  • Issue 68: Silverlight version of Unquote
  • Issue 69: Remove FSharp.PowerPack.Metadata dependency

v2.0.3, 2011-08-07

Several high-priority fixes.

  • Issue 60: Double evaluation in test internal implementation obscures state related test failure causes
  • Issue 61: reduce / reduceFully operator bug: finally path in TryFinally expressions not followed when exception raised from body
  • Issue 62: reduce / reduceFully operator bug: with path in TryWith expressions not followed when exception raised from body
  • Issue 63: When using pipe and testing for exception "raises" finds reflection exception instead
  • Issue 64: Support (NoDynamicInvocation) reraise operator

v2.0.2, 2011-07-19

Lots of added features and bug fixes including support for several more kinds of expressions.

  • Issue 32: Type.FSharpName bug: generic typedef args should be printed with leading tick
  • Issue 41: Support WhileLoop expressions
  • Issue 42: Support ForIntegerRangeLoop expressions
  • Issue 43: Support TryFinally expressions
  • Issue 51: Support LetRecursive expressions
  • Issue 53: Evaluation and Reduction with environment should use a Map instead of a List to represent the Environment
  • Issue 54: Update precedence for bitwise operators
  • Issue 55: Support TypeTest expressions
  • Issue 56: Custom FSI test failed output is broken
  • Issue 57: Create and use custom "AssertionFailureException" for generic unit test framework support
  • Issue 58: Support functions which are static or instance members of a type
  • Issue 59: Omit else branch of IfThenElse expressions when it's body is only a simple tuple

v2.0.1, 2011-07-11

Service release fixing bugs and tweaking API for new v2.0.0 features.

  • Issue 48 Bug: op_UnaryPlus on int16 overlooked
  • Issue 49 Bug: op_LogicalNot is not supported
  • Issue 50 Bug: left shift and right shift operators fail with primitive operands of different types
  • Issue 52 Evaluation and Reduction Operators with Environment API breaking Change Needed for Proper Piping

v2.0.0, 2011-07-06

Major release featuring custom reflection-based evaluation engine resulting in significant performance improvements.

  • Issue 33: Decompiler Feature Request: support UnboxGeneric Intrinsic function
  • Issue 34: Implement custom reflection-based evaluation engine
  • Issue 35: Refactoring with breaking changes for more consistent naming in API
  • Issue 36: Short-circuiting rules should be honored during reduction steps
  • Issue 37: Make smarter choices about decompilation of AndOr and OrElse expressions which can't be differentiated
  • Issue 38: Add feature for evaluating and reducing synthetic quotations with unbound variables
  • Issue 39: Add support for typed Quote expressions (nested quotations)
  • Issue 40: Further support for partial application lambda re-sugaring by supporting coerced vars
  • Issue 44: Fully support VarSet, FieldSet, and PropertySet expressions
  • Issue 45: Code documentation comments aren't unavailable in distributions
  • Issue 46: No assembly info available
  • Issue 47: Statically link FSharp.PowerPack.Metadata

v1.3.0, 2011-04-02

Significant release: many bug fixes and feature enhancements especially in the area of re-sugaring complex expressions.

  • Issue 9: Decompiler Bug or F# Quotation Bug: generic empty list treated as call
  • Issue 15: Reduction Bug: error reducing sprintf Application; lhs match of Application needs to be loosened
  • Issue 21: Decompiler Feature Request: sprint Lambda Unit vars literally
  • Issue 22: Decompiler Bug: backwards pipe precedence incorrect
  • Issue 23: Decompiler Feature Request: re-sugar partially applied lambda expressions
  • Issue 24: Reduction Feature Request: do not reduce expressions which return Lambda Values
  • Issue 25: Decompiler Feature Request: re-sugar unapplied lambda expressions
  • Issue 26: Decompiler Feature Request: support PropertySet expressions
  • Issue 27: Decompiler Feature Request: re-sugar Lambdas with tupled args
  • Issue 28: Decompiler Bug or F# Quotation Bug: exception with certain list NewUnionCases
  • Issue 29: Decompiler Enhancement: re-sugar tuple let expressions
  • Issue 30: Decompiler Feature Request: re-sugar list and array range expressions
  • Issue 31: Decompiler Bug: static PropetyGet expressions with args not sprinting args

v1.2.3, 2011-03-13

Incremental release: bug fixes and feature enhancements.

  • Issue 14: Decompiler Bug, UnionCaseTest: zero arg unions sprinted with "()"
  • Issue 17: Decompiler Bug: can't differentiate between generic values and generic unit function
  • Issue 18: Decompiler Bug: generic object constructions are sprinted with reflected name instead of generic args
  • Issue 19: Decompiler Bug: TupleGet expressions involving tuples of length > 7 not handled correctly
  • Issue 20: Decompiler Feature Request: name TupleGet pattern match value using "itemX" instead of "indexX"

v1.2.2, 2011-02-23

Several bug fixes and feature enhancements.

  • Issue 2: Decompiler Feature Request: support TupleGet expressions
  • Issue 3: Decompiler Feature Request: support UnionCaseTest expressions
  • Issue 4: Reduction Feature Request: support NewUnionCase subexpressions
  • Issue 6: Type.FSharpName bug: can't handle generic type definiations
  • Issue 8: Decompiler Bug: empty list error
  • Issue 10: Type.FSharpName bug: can't handle types in modules
  • Issue 12: xunit.gui.exe Output: bad newlines

v1.2.1, 2011-02-15

Fix bug: local lambdas represented as Value fail during Application reduction rebuild.

v1.2.0, 2011-02-13

Added raises<'a when 'a :> exn> : Quotations.Expr -> unit for testing expected exceptions.

v1.1.0, 2011-02-11

Better support for exceptions within tests, expand support for more expressions

  • Better support for exceptions within tests: print printable lines up until the exception, then print the exception (before only printed the exception)
  • Support applications of lambda values (e.g. local function vs. module property)
  • Better preservation of type information for reduction evaluations which return null
  • Print "()" for function calls which 1) do not need explit type arguments 2) take only single unit arg
  • Changed FSI-mode Operator.test output to be more like unit test mode output; no longer uses tabs

v1.0.0, 2011-02-08

Initial release