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.
read
/write
)new
, where possiblevar
as recoverable.main
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).xcframeworks
ELEMENTS2599
)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
).framework
s#
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
/DllExport
async
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…