Skip to content

Commit 392c9f2

Browse files
Simran-Bnerpaula
andauthored
DOC-614 | V8 upgrade to v12 (#431)
* WIP * Release notes for V8 and ICU upgrade * fix typo --------- Co-authored-by: Paula Mihu <[email protected]>
1 parent cfc887f commit 392c9f2

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

site/content/3.12/release-notes/version-3.12/whats-new-in-3-12.md

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,120 @@ full, log entries are written synchronously until the queue has space again.
476476

477477
## Miscellaneous changes
478478

479+
### V8 and ICU library upgrades
480+
481+
The bundled V8 JavaScript engine has been upgraded from version 7.9.317 to
482+
12.1.165. As part of this upgrade, the bundled Unicode character handling library
483+
ICU has been upgraded as well, from version 64.2 to 73.1.
484+
485+
Note that ArangoDB's build of V8 has pointer compression disabled to allow for
486+
more than 4 GB of heap memory.
487+
488+
The V8 upgrade brings various language features to JavaScript contexts in ArangoDB
489+
like arangosh, Foxx, and JavaScript Transactions. These features are part of the
490+
ECMAScript specifications ES2020 through ES2024. The following list is non-exhaustive:
491+
492+
- Optional chaining, like `obj.foo?.bar?.length` to easily access an object
493+
property or call a function but stop evaluating the expression as soon as the
494+
value is `undefined` or `null` and return `undefined` instead of throwing an error
495+
496+
- Nullish coalescing operator, like `foo ?? bar` to evaluate to the value of `bar`
497+
if `foo` is `null` or `undefined`, otherwise to the value of `foo`
498+
499+
- Return the array element at the given index, allowing positive as well as
500+
negative integer values, like `[1,2,3].at(-1)`
501+
502+
- Copying versions of the array methods `reverse()`, `sort()`, and `splice()`
503+
that perform in-place operations, and a copying version of the bracket notation
504+
for changing the value at a given index
505+
- Return a new array with the elements in reverse order, like `[1,2,3].toReversed()`
506+
- Return a new array with the elements sorted in ascending order, like `[2,3,1].toSorted()`
507+
- Return a new array with elements removed and optionally inserted at a given
508+
index, like `[1,2,3,4].toSpliced(1,2,"new", "items")`
509+
- Return a new array with one element replaced at a given index, allowing
510+
positive and negative integer values, like `[1,2,3,4].with(-2, "three")`
511+
512+
- Find array elements from the end with `findLast()` and `findLastIndex()`, like
513+
`[1,2,3,4].findLast(v => v % 2 == 1)`
514+
515+
- Return a new string with all matches of a pattern replaced with a provided value,
516+
not requiring a regular expression, like `"foo bar foo".replaceAll("foo", "baz")`
517+
518+
- If the `matchAll()` method of a string is used with a regular expression that
519+
misses the global `g` flag, an error is thrown
520+
521+
- A new regular expression flag `d` to include capture group start and end indices,
522+
like `/f(o+)/d.exec("foobar").indices[1]`
523+
524+
- A new regular expression flag `v` to enable the Unicode sets mode, like
525+
`/^\p{RGI_Emoji}$/v.test("👨🏾‍⚕️")` or `/[\p{Script_Extensions=Greek}--[α-γ]]/v.test('β')`
526+
527+
- A static method to check whether an object directly defines a property, like
528+
`Object.hasOwn({ foo: 42 })`, superseding `Object.prototype.hasOwnProperty()`
529+
530+
- `Object.groupBy()` and `Map.groupBy()` to group the elements of an iterable
531+
according to the string values returned by a provided callback function
532+
533+
- Logical assignment operators `&&=`, `||=`, `??=`
534+
535+
- Private properties that cannot be referenced outside of the class,
536+
like `class P { #privField = 42; #privMethod() { } }`
537+
538+
- Static initialization blocks in classes that run when the class itself is
539+
evaluated, like `class S { static { console.log("init block") } }`
540+
541+
- `WeakRef` to hold a weak reference to another object, without preventing that
542+
object from getting garbage-collected
543+
544+
- A `cause` property for Error instances to indicate the original cause of the error
545+
546+
- Extended internationalization APIs. Examples:
547+
548+
```js
549+
let egyptLocale = new Intl.Locale("ar-EG")
550+
egyptLocale.numberingSystems // [ "arab" ]
551+
egyptLocale.calendars // [ "gregory", "coptic", "islamic", "islamic-civil", "islamic-tbla" ]
552+
egyptLocale.hourCycles // [ "hc12" ]
553+
egyptLocale.timeZones // [ "Africa/Cairo" ]
554+
egyptLocale.textInfo // { "direction": "rtl" }
555+
egyptLocale.weekInfo // { "firstDay": 6, "weekend" : [5, 6], "minimalDays": 1 }
556+
557+
Intl.supportedValuesOf("collation"); // [ "compat", "emoji", "eor", "phonebk", ... ]
558+
Intl.supportedValuesOf("calendar"); // [ "buddhist", "chinese", "coptic", "dangi", ... ]
559+
// Other supported values: "currency", "numberingSystem", "timeZone", "unit"
560+
561+
let germanLocale = new Intl.Locale("de")
562+
germanLocale.collations // [ "emoji", "eor", "phonebk" ]
563+
germanLocale.weekInfo // { "firstDay": 1, "weekend" : [6, 7], "minimalDays": 4 }
564+
565+
let ukrainianCalendarNames = new Intl.DisplayNames(["uk"], { type: "calendar" })
566+
ukrainianCalendarNames.of("buddhist") // "буддійський календар"
567+
568+
let frenchDateTimeFieldNames = new Intl.DisplayNames(["fr"], { type: "dateTimeField" })
569+
frenchDateTimeFieldNames.of("day") // "jour"
570+
571+
let japaneseDialectLangNames = new Intl.DisplayNames(["ja"], { type: "language" })
572+
let japaneseStandardLangNames = new Intl.DisplayNames(["ja"], { type: "language", languageDisplay: "standard" })
573+
japaneseDialectLangNames.of('en-US') // "アメリカ英語"
574+
japaneseDialectLangNames.of('en-GB') // "イギリス英語"
575+
japaneseStandardLangNames.of('en-US') // "英語 (アメリカ合衆国)"
576+
japaneseStandardLangNames.of('en-GB') // "英語 (イギリス)"
577+
578+
let americanDateTimeFormat = new Intl.DateTimeFormat("en-US", { timeZoneName: "longGeneric" })
579+
americanDateTimeFormat.formatRange(new Date(0), new Date()) // e.g. with a German local time:
580+
// "1/1/1970, Central European Standard Time – 1/16/2024, Central European Time"
581+
582+
let swedishCurrencyNames = new Intl.DisplayNames(["sv"], { type: "currency" })
583+
swedishCurrencyNames.of("TZS") // "tanzanisk shilling"
584+
585+
let americanNumberFormat = new Intl.NumberFormat("en-US", {
586+
style: "currency", currency: "EUR", maximumFractionDigits: 0 })
587+
americanNumberFormat.formatRange(1.5, 10) // "€2 – €10"
588+
589+
let welshPluralRules = new Intl.PluralRules("cy")
590+
welshPluralRules.selectRange(1, 3) // "few"
591+
```
592+
479593
### Active AQL query cursors metric
480594

481595
The `arangodb_aql_cursors_active` metric has been added and shows the number

0 commit comments

Comments
 (0)