Elements ships weekly new builds, which always bring a continuous stream of fixes, improvements, and new features big and small.
This page provides the highlights for each build; please also check each week's change log for a detailed list of all fixes and enhancements.
[Codable] Aspect for seamless Json and Xml Serializationvar as keyword recoverable.read/write)new, where possiblemain attribute prefixnameOf(parameter)InstanceType" to be used in operator definitions.proto filesIndex and Range types**.pas wildcards unconstrained generics on Oxygenewhere clauses for Generic ConstraintsLet and Set statements in MercuryRecord Structure" for MercurymodelOf() System Function for determining the object model of a typeDeclare and external functions on Javabegin/end.for/to loop variables to be inferred, just like for each.literal() CMFexternal method syntax to define strongly-typed Eval() wrapperuses clausesparams with sequence types[ModuleInitializer] attribute (all languages and platforms)Memory<T> typeImplements on a Property#CrossPlatform directivesDynamic(Of T)read private write"
delegate-declarations).xcframeworksELEMENTS2599)while matching for Oxygene
(https://docs.elementscompiler.com/Oxygene/Delphi/DelphiCompatibilitySettings/), and to allow more unsupported syntaxes in code that is IFDEF'ed outin operator on Arrays and Collectionsinit propertiesnew() expressionsNote: C# 9 language features in RemObjects C# will be available for all platforms and all .NET versions, not limited to the .NET Core-based .NET 5.0.
Delphi Compatibility:
private and protected.My class supportAllowUnsafeCodeImplicitly setting to mark all code in a project to use "unsafe" code on .NETOxidizer.exe command line tooluses/using/import clausescaseInsensitive() String API in Elements RTL[Module] aspect to achieve VB-like module behavior in all languagesObserver class for working with Property Notifications in a platform-agnostic way.backtrace all/bt all command in Debug ConsoleSupport for surrounding the selection when typing (, " or similar characters
Fire now runs on the Hardened Runtime on macOS Catalina
async loops in Oxygene and C# on .NET.DynamicInterface aspect for importing external JavaScript APIs for use from WebAssembly projectsDelayLoadDllImport Aspect for Islandswitch expressions and using declarationsfor each in x do syntaxpublished membersawait-able Closure Callbacksconst var ParametersISequence<T> to be implemented by simply providing a GetSequence method with [Sequence] attributeguidOf() System Function for Island COM Interfaces[Equals] and [Hash] Aspects, un symmetry with [ToString]aarch64).frameworks# references<Remote> files in projectsMajor documentation overhaul (work in progress)
Very Sneak Preview for Go support in Fire and Water
Toolchain Improvements
EBuild is now the default/only toolchain for everything except Silverlight and Universal Windows/WinRT projects, across all IDEs.
IDE Improvements
Language Improvements
available() now also implies defined()exists() function and {$IF EXISTS()}/#if exists() directives for conditional compilationmapped constructor Syntax< and > Operators for SetsOther Enhancements
Core
#available should inherit that deployment warnings are hiddenMore C# 7.2 and 7.3 feature parity:
Iodine: __event declaration support
<=, >=, != to =, =, ?CC: Improvements when same type name exists in two (used) namespaces
.NET Core Toolchain enhancements
Island/Darwin (Native macOS) Preview
Build Chain
Fire and Water
} in Fire and WaterFire
Water:
Visual Studio
//TODO tagsCore
DllImport/DllExportasync in main() – all languages, .NETis and case/when pattern matching in C#InstanceType is now supported on all platformsEBuild
Fire and Water:
Fire:
Water
Visual Studio:
Core
{…}#defined(x) now, for symetrythrow/raise as expressionout var declarationscase - let - as in switchEBuild
Fire and Water
Fire
Water
Major highlight for this build is the new defined() compiler magic function, which lets you wrap #ifdef logic into actual langage flow structures, instead (we'll have an upcoming blog post about this, next week).
if defined()private protected visibilitytype to make type alias incompatiblestatic; syntax for static members w/o class__block)__weak/__strong/__unretained keywords__selector syntaxdefault()!, like in C#)->). for pointers to do an implicit dereferenceCheck out the complete change logs with each build, for more details.
See also what was new in Version 9.3 and earlier…