-
Notifications
You must be signed in to change notification settings - Fork 328
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use BuiltinRootNode.ArgNode
to extract argument for a builtin method
#12201
Conversation
public class Boolean extends Builtin { | ||
public final class Boolean extends Builtin { | ||
public Boolean() { | ||
super(java.lang.Boolean.class); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now we attempt to provide a representationType
to each Builtin
. That way we can deduce from signature methods having argument like boolean
that the desired builtin is Boolean
and the Enso type should be Standard.Base.Data.Boolean.Boolean
. With that information we can extract (via CastToNode
) such a type from EnsoMultiValue
....
Right now there are two dataflow errors:
I was debugging thru it, but I don't think I get any idea what can be the problem? Maybe something with wrapping errors? But why? |
Currently there are two failures: Again, I am not really sure why at present. |
@@ -3,4 +3,8 @@ | |||
import org.enso.interpreter.dsl.BuiltinType; | |||
|
|||
@BuiltinType | |||
public class Polyglot extends Builtin {} | |||
public final class Polyglot extends Builtin { | |||
public Polyglot() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd say we have way too many Builtin
s. Not sure why Polyglot
or Debug
should be builtin types at all!?
} | ||
if (is(REQUIRES_CAST)) { | ||
var ctx = EnsoContext.get(this); | ||
if (this.ensoType == null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The first time ArgNode
is requested to "cast", it searches for the ensoType
representing the value of the argument. It would be better to do this when the ArgNode
is being created, but it may be too early (before Standard.Base
types are loaded in), so I haven't even tried.
Opinions?
I believe the code is in shape to receive some inception review. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Generally looks like a good idea. Before merging, please don't forget to benchmark it. I am interested what will be the impact on performance.
lib/scala/interpreter-dsl/src/main/java/org/enso/interpreter/dsl/BuiltinsProcessor.java
Show resolved
Hide resolved
engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java
Show resolved
Hide resolved
engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java
Outdated
Show resolved
Hide resolved
engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java
Outdated
Show resolved
Hide resolved
…into wip/jtulach/BuiltinArgNode11827
Checking benchmark results:
I had to patch the tool to download new results: diff --git tools/performance/engine-benchmarks/bench_tool/__init__.py tools/performance/engine-benchmarks/bench_tool/__init__.py
index 918676fd62..11b88f0894 100644
--- tools/performance/engine-benchmarks/bench_tool/__init__.py
+++ tools/performance/engine-benchmarks/bench_tool/__init__.py
@@ -58,9 +58,9 @@ class Source(Enum):
def artifact_names(self) -> List[str]:
if self == Source.ENGINE:
- return ["Runtime Benchmark Report"]
+ return ["Runtime Benchmark Report", "benchmark-results.xml"]
elif self == Source.STDLIB:
- return ["Enso JMH Benchmark Report"]
+ return ["Enso JMH Benchmark Report", "benchmark-results.xml"]
else:
raise ValueError(f"Unknown source {self}") thus
And also
|
There are overall improvements in the engine benchmarks:
Update on Feb 7, 2025: Engine benchmarks seem to be fine. |
`./bench_download.py` tool stopped working after #12226. Because the artifacts on benchmark workflow runs were renamed. This PR just renames the artifacts (suggested in #12201 (comment)) and also adds some unit tests. In many unit tests, I had to bump the date of the fetched data, because GH seems to delete workflow runs that are older than 2 years. Note that yesterday, [Benchmark Upload](https://github.com/enso-org/enso/actions/workflows/bench-upload.yml) workflow started printing a [warning that there is an unknown artifact name](https://github.com/enso-org/enso/actions/runs/13152367074/job/36701982751#step:6:1116)
...-benchmarks/src/main/java/org/enso/interpreter/bench/benchmarks/semantic/AtomBenchmarks.java
Show resolved
Hide resolved
engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java
Outdated
Show resolved
Hide resolved
engine/runtime/src/main/java/org/enso/interpreter/node/expression/builtin/BuiltinRootNode.java
Outdated
Show resolved
Hide resolved
83994b0
to
0a3ec13
Compare
engine/runtime/src/main/java/org/enso/interpreter/runtime/data/hash/HashMapInsertAllNode.java
Show resolved
Hide resolved
throw sentinel; | ||
} | ||
if (warnings != null) { | ||
if (warnings.hasWarnings(value)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using hasWarnings
here instead of simple warnings instanceof WithWarnings
is causing problems:
- e6af654 is causing benchmarks regression
- WarningBenchmarks 5000% regressions on 2025-02-11 #12258 (comment)
- Use
BuiltinRootNode.ArgNode
to extract argument for a builtin method #12201 (comment)
Let's see what #12258 can do.
Pull Request Description
to_text
,is_a
& co. on intersection types #12192 (comment) states:EnsoMultiValue
in the "builtin method prelude code"Node
ArgNode
& co.@Specialization
s done inside ofArgNode
Checklist
Please ensure that the following checklist has been satisfied before submitting the PR:
Scala,
Java,