sebastienros / jint

Javascript Interpreter for .NET
BSD 2-Clause "Simplified" License
4.1k stars 562 forks source link

[Announcement] Jint 3.0.0-beta released #343

Closed sebastienros closed 1 year ago

sebastienros commented 7 years ago

I have managed to port Jint to using Esprima .NET. All unit tests from Jint 2.0 are passing so I am confident with the stability and feature set. Right now it targets both net45 and dotnet core, and it's missing the portable target but it's temporary. It has been released on nuget and is under the es6 branch of this repository.

The goal of this version is to support ECMAScript 2016 aka ES6. Esprima .NET being a fully compliant ECMAScript 2016 parser, we can know start working on new feature one by one. All ES6 programs will be parsed correctly, we just need to handle them and implement their behavior by following the standard, like it was done for ES5 in Jint 2.0.

Useful links:

A GitHub project was created to follow the evolution of the implementation. A new Beta nuget package will ship for any tasks reaching completion.

lahma commented 2 years ago

Array.group and Array.groupToMap (stage 3 proposals) have been merged to main.

lahma commented 2 years ago

RegExp named capture groups were just merged to main.

lahma commented 2 years ago

RegExp match indices support was just merged to main.

lahma commented 2 years ago

Promise.any and Promise.allSettled were just merged to main.

lahma commented 2 years ago

A feature popular among the cool kids is now available on main branch/MyGet feed called async/await. Please try it out and prepare to make PRs if it doesn't work 😉

We can cross it out as completed if no-one complains too much.

Don't forget to donate all the big business money to GitHub sponsors, I spent a vacation day with this

lahma commented 2 years ago

A slightly exotic feature called FinalizationRegistry has landed main. As it's related to garbage collection there might still be some quirks to fix, but now also that feature box has been ticked.

lahma commented 1 year ago

Implementations for https://github.com/tc39/proposal-symbols-as-weakmap-keys and https://github.com/tc39/proposal-change-array-by-copy (stage 3 proposals) have been merged to main.

jhouxzirrus commented 1 year ago

Is there a Minimum Features list somewhere for what is expected for a Version 3 full release?

If there's no clearly defined minimum features list, then this thing is going to continue sitting in Beta forever.

Expecting 100% coverage is unrealistic, and it seems to me like the current coverage probably warrants non-beta.

Also, it would be great if this thing was easily added from NuGet package manager. Only version 2 seems visible right now.

lahma commented 1 year ago

@jhouxzirrus would you be ok with non-semantic versioning - like API and feature brreaking changes in minor releases?

pha3z commented 1 year ago

@jhouxzirrus would you be ok with non-semantic versioning - like API and feature brreaking changes in minor releases?

I think those concerns are secondary.

After establishing a minimum reasonable features set, then its possible to target that set for a major release followed by minor releases that consist of fixes to any discovered bugs or oversights.

Features beyond the minimum set would then be consideration either for minor releases where code impact is low (minimal to no breaking changes), or target the next major release (version 4).

I'm just saying.... when you build software without targeting a restricted feature set (especially for something as pervasive as ECMA features), you end up in "forever beta" territory and that has a distinct negative impact on users.... not to mention possible burnout for project contributors since they feel like the project will never be complete.

lahma commented 1 year ago

@pha3z If such minimum list would be established, would you like to help out implementing the missing bits? I think concrete help would be the key instead of talking about how software should be planned or released.

pha3z commented 1 year ago

I'm not sure I'm qualified to assist or have time.

I only observed that the project seems to be very mature, and so I poked my head into suggest that maybe its not really beta material anymore.... and wondered if maybe it needs a ribbon on it so it can be published to nuget and made easier for users to get started with it. :)

lahma commented 1 year ago

@cyraid please use discussions to keep this thread focused on 3.x delivery. See https://github.com/sebastienros/jint/blob/main/Jint.Tests/Runtime/InteropTests.MemberAccess.cs for member access strategies which should help you in this particular case.

lahma commented 1 year ago

All ECMAScript 2022 features should now be supported in main:

Also ECMAScript 2020 export * as ns from was actually already working for modules and covered by tests. Updated supported feature list can be seen on repo's README.md.

cyraid commented 1 year ago

All ECMAScript 2022 features should now be supported in main:

  • Class Fields
  • RegExp Match Indices
  • Top-level await
  • Ergonomic brand checks for Private Fields
  • .at()
  • Accessible Object.prototype.hasOwnProperty (Object.hasOwn)
  • Class Static Block
  • Error Cause

Also ECMAScript 2020 export * as ns from was actually already working for modules and covered by tests. Updated supported feature list can be seen on repo's README.md.

Wow, seriously? What are you guys, machines? Jokes aside, good job!

Edit: What are you guys missing, just tail calls and generators?

lahma commented 1 year ago

Edit: What are you guys missing, just tail calls and generators?

Basically generators. Tail calls is a bit niche and might not be worth the effort. Async has some corner cases to fix too.

lahma commented 1 year ago

Now that ES2023 is nearing finalization, it seems that Jint has those features also covered, go figure. README has been updated to reflect that.