diff --git a/SYMBOLS_MANIFEST.txt b/SYMBOLS_MANIFEST.txt
index 7bab8ea8b..370cd33b8 100644
--- a/SYMBOLS_MANIFEST.txt
+++ b/SYMBOLS_MANIFEST.txt
@@ -1023,6 +1023,7 @@ System`Refine
System`RegularExpression
System`RegularPolygon
System`RegularPolygonBox
+System`Release
System`ReleaseHold
System`Remove
System`RemoveDiacritics
diff --git a/mathics/builtin/evaluation.py b/mathics/builtin/evaluation.py
index f4ea135c8..8c469fa93 100644
--- a/mathics/builtin/evaluation.py
+++ b/mathics/builtin/evaluation.py
@@ -213,6 +213,33 @@ class Evaluate(Builtin):
summary_text = "evaluate the element, disregarding Hold attributes"
+class Release(Builtin):
+ """
+ :WMA link:https://reference.wolfram.com/language/ref/Release.html
+
+
+ - 'Release'[$expr$]
+
- evaluates $expr$. This is an obsolete symbol, superseded by \
+ 'Evaluate' and 'ReleaseHold'; it is kept so that old packages \
+ can be read.
+
+
+ >> x = 1 + 1; Release[x]
+ = 2
+
+ Old packages use it to build the left-hand side of a definition from \
+ a variable:
+ >> With[{name = h}, Format[Release[name][k_]] := {name, k}]; ToString[h[3]]
+ = {h, 3}
+ #> Clear[x, h]
+ """
+
+ rules = {
+ "Release[x___]": "x",
+ }
+ summary_text = "obsolete form of Evaluate"
+
+
class Unevaluated(Builtin):
"""
:WMA link:https://reference.wolfram.com/language/ref/Unevaluated.html
diff --git a/test/builtin/test_evaluation.py b/test/builtin/test_evaluation.py
index 1d635991d..a73717c5d 100644
--- a/test/builtin/test_evaluation.py
+++ b/test/builtin/test_evaluation.py
@@ -62,6 +62,15 @@
None,
),
("ClearAll[f];", None, None, None),
+ # Release, the obsolete form of Evaluate
+ ("x = 1 + 1; Release[x]", None, "2", None),
+ (
+ "With[{name = h}, f[Release[name][k_]] := {name, k}]; f[h[3]]",
+ None,
+ "{h, 3}",
+ "Release in the left-hand side of a definition",
+ ),
+ ("ClearAll[f, h, x];", None, None, None),
],
)
def test_evaluation(str_expr, msgs, str_expected, fail_msg):