Download
Enso IDE
Enso IDE is the main product of the Enso project. The packages are stand-alone, they contain both GUI and the backend.
Download links:
- Linux (AppImage);
- macOS (x64) (DMG);
- macOS (arm64) (DMG);
- Windows (Installer Executable).
This is the recommended download for most users.
Enso Engine
If you are interested in using Enso Engine command line tools only, download the Enso Engine bundle.
Download links:
These are archives containing the Enso portable distribution. User is responsible for setting up the environment variables and adding the bin
directory to the PATH
.
Note that these distributions do not allow you to use the Enso IDE.
It is recommended only for advanced users, who want to just try the compiler CLI.
Anonymous Data Collection
Please note that this release collects anonymous usage data which will be used to improve Enso and prepare it for a stable release. We will switch to opt-in data collection in stable version releases. The usage data will not contain your code (expressions above nodes), however, reported errors may contain brief snippets of out of context code that specifically leads to the error, like "the method 'foo' does not exist on Number". The following data will be collected:
- Session length.
- Graph editing events (node creation, deletion, position change, connect, disconnect, collapse, edit start, edit end). This will not include any information about node expressions used.
- Navigation events (camera movement, scope change).
- Visualization events (visualization open, close, switch). This will not include any information about the displayed data nor the rendered visualization itself.
- Project management events (project open, close, rename).
- Errors (IDE crashes, WASM panics, Project Manager errors, Language Server errors, Compiler errors).
- Performance statistics (minimum, maximum, average GUI refresh rate).
Changelog
Visual Environment
- Camera is panned to newly created nodes.
- Long names on the Node Searcher's list are truncated. The part of the
name that doesn't fit in the Searcher's window is replaced with an ellipsis
character ("…"). - Magnet Alignment algorithm is used while placing new nodes. When we
find an available free space for a new node, the node gets aligned with the
surrounding nodes horizontally and vertically. This helps to preserve a nice
grid-like layout for all the nodes. - Nodes created via the <kbd>TAB</kbd> key or by clicking the (+) button on the
screen are now placed below all the selected nodes when more than one node is
selected. (Previously, they were placed below the first node that was
selected.) This makes it easier to achieve a compact, vertical layout of the
graph. - Nodes created near existing nodes via the <kbd>TAB</kbd> key or by dropping a
connection are now repositioned and aligned to existing nodes. This is
to make the resulting graph prettier and avoid overlapping. In such cases,
created nodes will be placed below an existing node or on the bottom-left
diagonal if there is no space underneath. - Nodes can be added to the graph by double-clicking the output ports of
existing nodes (or by clicking them with the right mouse button). - Node Searcher preserves its zoom factor. The visible size of the node
searcher and edited node is now fixed. It simplifies node editing on
non-standard zoom levels. - Nodes can be added to the graph by clicking (+) button on the screen.
The button is in the bottom-left corner. Node is added at the center or pushed
down if the center is already occupied by nodes. - Maximum zoom factor is limited to 1.0x if IDE is not in Debug Mode.
- Debug Mode for Graph Editor can be activated/deactivated using a
shortcut. It allows access to a set of restricted features. See
debug-shortcuts. - New nodes can be created by dragging and dropping a connection on the
scene. - Node connections can be dropped by pressing the Esc key while dragging
them. - Added support of source maps for JS-based visualizations.
- Fixed the alignment of newly created nodes to existing nodes with
visualizations enabled. When applicable, new nodes are now placed below
visualizations. (Previously, they were placed to the left of the
visualizations.) - Fixed histograms coloring and added a color legend.
- Lazy visualization for scatter plot.
- Fixed broken node whose expression contains non-ASCII characters.
- Fixed developer console warnings about views being created but not
registered. - Fixed developer console errors related to Language Server (mentioning code
3003 and "Invalid version"), occurring during project opening and after new
node cration. - Fixed developer console error about failing to decode a notification
"executionContext/visualisationEvaluationFailed" - New Version of the Node Searcher - the Component Browser The available
methods, atoms and functions are presented in nice, categorized view. The most
popular tools are available at hand. The panel is unstable, and can be
disabled with the `--enable-new-component-browser=false` flag. - Fixed error handling during startup. This prevents entering IDE into a
"zombie" state, where processes were started but not visible to user. They
could cause issues with starting further IDE instances. - New nodes are created in the project source when the searcher is opened and a
new node is created. - Proper Polyglot Vector and Array Support
- IDE uses new visualization API.
- Visualization of long textual values improved
- Selecting a suggestion from the searcher or component browser now updates the
visualisation of the edited node to preview the results of applying the
suggestion. - Remove here keyword from IDE.
- Shortcut changes: Pressing `Enter` when no node is edited opens
Component Browser. Entering node shortcut changed to `cmd` + `Enter`. - Added support for scrolling by pressing and holding a mouse button on a
scrollbar. - Added scroll bounce animation which activates when scrolling past the
end of scrollable content. - The default text visualisation now loads its content lazily from the
backend. This means that the visualisation cannot be overwhelmed by
large amounts of data. - Added project snapshot saving on shortcut
- The color of the displayed project name indicates whether the project's
current state is saved in a snapshot. The project name is darker when
the project is changed from the last saved snapshot and lighter when the
snapshot matches the current project state. - Added shortcut to interrupt the program
- Added suggestion dropdown for function arguments. The dropdown is
present only when the argument is of type that has a predefined set of values. - Separate component browser navigator sections for modules imported from
different namespaces - Internal components (private API) are not displayed in the component
browser. - The correct default visualisation for tables is shown on new nodes.
- Added restoring of last project snapshot on shortcut.
- Added contextual suggestions to argument dropdowns. Dropdowns will now
contain suggestions which are based on evaluated data. - Added a shortcut to show internal components (private API) in the component
browser. - Improved component browser entry filtering and sorting. The component
browser will now provide suggestions matching either the component's label or
the corresponding code. - Improved argument placeholder resolution in more complex expressions.
It is now possible to drop node connections onto missing arguments of chained
and nested function calls. - The component browser suggestions take into account entry aliases. The
searcher input is now matched to entry aliases too. The alias match is used to
filter and sort component browser entries. - The Component Browser icons are cached on texture improving its
performance on slower machines. - Fixed missing result preview when editing nodes.
- Application retries its initialization after failures, allowing a
reconnecting after connectivity problems. - Improved Component Browser Filtering. The best match is always
selected first, and the groups are rearranged, so the best matches are on the
bottom. - Named arguments syntax is now recognized in IDE. Connections to
function arguments will now use named argument syntax instead of inserting
wildcards on all preceding arguments. - Added boilerplate React app for authorization via Cognito+AWS Amplify.
This PR adds a React app that renders the dashboard (which has been ported
from the cloud. The dashboard displays a list of projects, and allows users to
open them in the IDE (which is not part of the React app, but can be switched
to from the dashboard). The PR also adds authentication+authorization (i.e.,
sign up and sign in for users), via either email/password or GitHub/Google. - New Enso documentation parser. Smaller and faster; enables planned
improvements to internal documentation representation. - Dropdown widgets now support custom labels and automatically generate
shortened labels for entries with long module paths. When an option is
selected from the dropdown, the necessary module imports are inserted,
eliminating the need for fully qualified names. - The IDE now has a new UI element for selecting the execution mode of the
project. - Added tooltips to icon buttons for improved usability. Users can now
quickly understand each button's function. - File associations are created on Windows and macOS. This allows
opening Enso files by double-clicking them in the file explorer. - AI-powered code completions. It is now possible to get AI-powered
completions when using node searcher with Tables. - Added capability to create node widgets with complex UI. Node widgets
such as dropdown can now be placed in the node and affect the code text flow. - The IDE UI element for selecting the execution mode of the project is now
sending messages to the backend.. - Feedback when renaming a project. When the user tries to rename the
project to an invalid name, a helpful error message is shown and the text
field stays the same as to give the user the opportunity to fix the mistake. - Area selectionof nodes no longer takes into account the visualisation that
belongs to the node.. - List Editor Widget. Now you can edit lists by clicking buttons on
nodes or by dragging the elements. - Visualisations now show a loading spinner while waiting on data..
- Fixed text visualisations which were being cut off at the last line.
- Fixed a bug where, when scrolling or dragging on a full-screen visualization,
the view of the graph changed as well. - Changed the shortcut for restoring to the last saved version of a project
from <kbd>cmd</kbd>+<kbd>r</kbd> to
<kbd>cmd</kbd>+<kbd>shift</kbd>+<kbd>r</kbd> to make it less likely
that it would be triggered by accident. As a consequence, the program
execution shortcuts changed from
<kbd>cmd</kbd>+<kbd>shift</kbd>+<kbd>t</kbd>/<kbd>r</kbd> to
<kbd>cmd</kbd>+<kbd>alt</kbd>+<kbd>t</kbd>/<kbd>r</kbd>. - Fixed a bug where selecting a nested breadcrumb would cause the order of
breadcrumbs to change incorrectly. - Changed the shortcut to show the full-screen visualization for a node from
<kbd>space</kbd> <kbd>space</kbd> to <kbd>shift</kbd>+<kbd>space</kbd>.
so that it doesn't interfere with the shortcut for toggling the small
visualization. - Cloud dashboard, which supersedes the startup screen. Features also
added in various other PRs. The new dashboard includes tables for projects,
folders, files and secrets, a list of templates from which new projects can be
created, a user menu, and a search bar. - The Application will try to reload file in backend on synchronization
failure. It should make it more resilient to connectivity issues and
occasional bugs. The reload may be forced by the user with
<kbd>cmd</kbd>+<kbd>shift</kbd>+<kbd>x</kbd> shortcut. - When selecting a function from the main module through the component browser,
it is now referenced via the `Main` namespace instead of the project
namespace, e.g. `Main.func1` instead of `MyProject.func1`. This makes
it robust against project name changes. - Added a button to return from an opened project back to the project
dashboard. - Keyboard shortcuts for graph editing are now disabled when the full-screen
visualization is active. - A loading animation is now shown when opening and creating projects,
as the previous behaviour of showing a blank screen while the project was
being loaded was potentially confusing to users. - Error message is displayed in the status bar when the backend reports
execution failed. - Performance and readability of documentation panel was improved. The
documentation is now split into separate pages, which are much smaller. - IDE no longer inserts redundant imports when selecting options from dropdown
widgets. The code was unified with the component browser, and it now
correctly handles reexports and already existing imports. - Fixed cursor position when ctrl-clicking the node. Sometimes
ctrl-clicking to edit the node placed the mouse cursor in the wrong position
in the text. This is fixed now. - Added prototype AI Searcher that can be used to create new nodes from natural
language input - Allow visualization resizing. Now the user can adjust the
visualization size by dragging its right and bottom borders. Visualization
width also follows the node's width, and visualizations are aligned to the
left side of the node. - Component Browser was redesigned. The three columns of groups turned
out to be non-practical, as they give too much information to comprehend.
Also, filtering results was kept in groups making second-best match not easily
available. Therefore, we introduced a new, impler CB design with single
column. - Help chat. The link to the Discord server is replaced with a chat
bridge to the Discord server. This is intended to have the chat visible at the
same time as the IDE, so that help can be much more interactive. - New breadcrumbs design. Breadcrumbs now optionally show the icon of
the item they represent. They also follow the new design of the component
browser. - [The libraries' authors may put entities to groups by adding GROUP tag in the
docstring]. It was requested as more convenient way than specifying full names
in package.yaml. - Graph editor node was redesigned. Nodes have a color and icon matching
the selected entry in the component browser. Clear separating lines between
method arguments were added. The node selection was made easier with
additional thick interactive selection border. - The shortcut for opening Component Browser was changed to
<kbd>enter</kbd> - Connections to lamdas are displayed correctly. It is possible to drag
a connection to any expression inside the lambda body. - [Atom types in dropdowns do not produce redundant imports][#7670]. The
possibility of imports conflicts is reduced. - Copying and pasting a single node. Using the common
<kbd>cmd</kbd>+<kbd>C</kbd> and <kbd>cmd</kbd>+<kbd>V</kbd> shortcuts, it is
now possible to copy a single selected node and paste its code to the graph or
another program.
EnsoGL (rendering engine)
- You can change font and set letters bold in the <code>text::Area</code>
component. Use the <code>set_font</code> and
<code>set_bold_bytes</code> respectively. - Fixed a text rendering issue in nested sublayer.
- Added a new component: Grid View. It's parametrized by Entry object,
display them arranged in a Grid. It does not instantiate all entries, only
those visible, and re-use created entries during scrolling thus achieving
great performance. There are variants of grid view with selection and
highlight, scrollbars, and both. - Massive improvements of text rendering performance. Different text
instances are now reusing the shape shaders and the same sprite system under
the hood. This drastically reduces the amount of required draw calls for
scenes with a lot of text. - Text rendering quality improvements. Glyphs are now hinted in a better
way. Also, additional fine-tuning is performed per font and per host operating
system. - Display objects can now emit and receive events in the same style as
JavaScript DOM events. The events system implements very similar
behavior to the one described here:
https://javascript.info/bubbling-and-capturing. - Added a new component: Slider. It allows adjusting a numeric value
with the mouse. The precision of these adjustments can be increased or
decreased. - Slider component functionality improvements. The slider component now
supports multiple ways to handle out-of-range values. The slider's value can
be edited as text, and a new vertical slider layout is available. - Added ProjectsGrid view for Cloud Dashboard. It provides the first
steps towards migrating the Cloud Dashboard from the existing React (web-only)
implementation towards a shared structure that can be used in both the Desktop
and Web versions of the IDE. - Removed Cloud Dashboard. The Cloud Dashboard was being rewritten in
EnsoGL but after internal discussion we've decided to rewrite it in React,
with a shared implementation between the Desktop and Web versions of the IDE. - Added a new component: Dropdown. A list of selectable labeled entries,
suitable for single and multi-select scenarios. - Compile-time shader optimizer was implemented. It is capable of
extracting non-optimized shaders from the compiled WASM artifacts, running
stand-alone optimization toolchain (glslc, spirv-opt, spirv-cross), and
injecting optimized shaders back to WASM during its initialization process.
Unfortunately, it caused our theme system to stop working correctly, because
generated shaders differ per theme (only light theme is available, the dark
theme has been disabled). We will support multiple themes in the future, but
this is not on our priority list right now. - Performance monitor was extended with the ability to print details of actions
performed in a given frame. In particular, you can now inspect names of
all symbols rendered in a given frame. You can also pause the performance
monitor and inspect results recorded in the past. - ToggleButtons can now have tooltips.
- Rendering of tooltips was improved. Their text is now more vertically
centered and the delay before showing them was extended. - Accurate GPU performance measurements have been implemented. It is
possible now to track both the time spent on both the CPU and the GPU sides. - Support recovery from GL context loss. This allows the application to
continue after an interruption to rendering, such as hibernation or movement
of the application window to a display rendered by a different GPU.
Enso Standard Library
- Implemented `Vector.distinct` allowing to remove duplicate elements from a
Vector - Implemented `Duration.time_execution` allowing timing of the execution of an
expression within the UI - Improved performance of `Vector.filter` and `Vector.each`; implemented
`Vector.filter_with_index`. Made `Vector.at` accept negative indices and
ensured it fails with a dataflow error on out of bounds access instead of an
internal Java exception. - Implemented the `Table.select_columns` operation.
- Implemented the `Table.remove_columns` and `Table.reorder_columns`
operations. - Implemented the `Table.sort_columns` operation.
- Fixed `Vector.sort` to handle tail-recursive comparators
- Implemented `Range.find`, `Table.rename_columns` and
`Table.use_first_row_as_names` operations - Implemented `Text.at` and `Text.is_digit` methods
- Implemented `Runtime.get_stack_trace` together with some utilities to process
stack traces and code locations - Implemented `Vector.flatten`
- Significant performance improvement in `Natural_Order` and new `Faker`
methods added to `Standard.Test` - Implemented `Integer.parse`
- Made `Text.compare_to` correctly handle Unicode normalization
- Extend `Text.contains` API to support regex and case insensitive
search. - Implemented new `Text.take` and `Text.drop` functions, replacing existing
functions - Implemented new `Text.starts_with` and `Text.ends_with` functions, replacing
existing functions - Implemented `Text.to_case`, replacing `Text.to_lower_case` and
`Text.to_upper_case` - Implemented initial `Table.group_by` function on Standard.Table
- Implemented `Text.pad` and `Text.trim`
- Updated `Text.repeat` and added `*` operator shorthand
- General improved Vector performance and new `Vector.each_with_index`,
`Vector.fold_with_index` and `Vector.take` methods. - Implemented new `Text.insert` method
- Implemented `Bool.compare_to` method
- Implemented `Map.first`, `Map.last` functions. Expanded `Table.group_by` to
also compute mode, percentile, minimum, maximum. - Implemented `Text.location_of` and `Text.location_of_all` methods.
- Replaced `Table.group_by` with `Table.aggregate`
- Implemented `Panic.catch` and helper functions for handling errors. Added a
type parameter to `Panic.recover` to recover specific types of errors. - Added warning handling to `Table.aggregate`
- Improved performance of `Table.aggregate` and full warnings
implementation - Implemented `Text.reverse`
- Implemented support for most Table aggregations in the Database
backend. - Update `Text.replace` to new API.
- Add encoding support to `Text.bytes` and `Text.from_bytes`. Renamed and added
encoding to `File.read_text`. New `File.read` API. - Improved the `Range` type. Added a `down_to` counterpart to `up_to` and
`with_step` allowing to change the range step. - Aligned `Text.split` API with other methods and added `Text.lines`.
- Implemented a basic reader for the `Delimited` file format.
- Implemented a reader for the `Excel` file format.
- Added custom encoding support to the `Delimited` file format reader.
- Implemented `compute` method on `Vector` for statistics calculations.
- Promote get and put to be methods of Ref type rather than of Ref
module - Implemented `Table.parse_values`, parsing text columns according to a
specified type. - Promote with, take, finalize to be methods of Managed_Resource
instance - Implemented automatic type detection for `Table.parse_values`.
- Integrated value parsing with the `Delimited` file reader.
- Implemented the `Infer` setting for headers in the `Delimited` file format
and made it the default. - Implemented a `Table.from Text` conversion allowing to parse strings
representing `Delimited` files without storing them on the filesystem. - Added rank data, correlation and covariance statistics for `Vector`
- Implemented `Table.order_by` for the SQLite backend.
- Implemented `Table.order_by` for the PostgreSQL backend.
- Implemented `Table.order_by` for the in-memory table.
- Renamed `File_Format.Text` to `Plain_Text`, updated `File_Format.Delimited`
API and added builders for customizing less common settings. - Allow control of sort direction in `First` and `Last` aggregations.
- Implemented `Text.write`, replacing `File.write_text`.
- Removed obsolete `select`, `group`, `sort` and releated types from
tables. - Removed obsolete `from_xls` and `from_xlsx` functions. Added support for
reading column names from first row in `File_Format.Excel` - Added `File_Format.Delimited` support to `Table.write` for new files.
- Adjusted `Database.connect` API to new design.
- Added `File_Format.Excel` support to `Table.write` for new files.
- identity,const,flip,curry,uncurry functions
- Added append support for `File_Format.Excel`.
- Added support for custom encodings in `File_Format.Delimited` writing.
- Allow filtering caught error type in `Error.catch`.
- Implemented `Append` mode for `File_Format.Delimited`.
- Added `Vector.write_bytes` function and removed old `File.write_bytes`
- Added `line_endings` and `comment_character` options to
`File_Format.Delimited`. - Fixed the case of various type names and library paths
- Added support for parsing `.pgpass` file and `PG*` environment variables for
the Postgres connection - Added `Regression` to the `Standard.Base` library and removed legacy `Model`
type from `Standard.Table`. - Created `Index_Sub_Range` type and updated `Text.take` and
`Text.drop`. - Added `Vector.from_polyglot_array` to make `Vector`s backed by polyglot
Arrays - Updated `Vector.take` and `Vector.drop` and removed their obsolete
counterparts. - Short-hand syntax for `order_by` added.
- Expanded `Table.at` to support index access and added `Table.column_count`
method. - Removed `Array.set_at`.
- Added various date part functions to `Date` and `Date_Time`.
- Implemented `Table.take` and `Table.drop` for the in-memory backend.
- Implemented specialized storage for the in-memory Table.
- Implemented `Table.distinct` for the in-memory backend.
- Added `databases`, `schemas`, `tables` support to database Connection.
- Implemented `start_of` and `end_of` methods for date/time types allowing to
find start and end of a period of time containing the provided time. - Implemented `type_of` and `is_of_type` methods for getting the type of a
value and comparing types, respectively. - Implemented `work_days_until` for counting work dys between dates and
`add_work_days` which allows to shift a date by a number of work days. - Added `query` and `read` functions to Database connections.
- Added `Date_Period.Week` to `start_of` and `end_of` methods.
- Replaced `Table.where` with a new API relying on `Table.filter`.
- Added `Filter_Condition` to `Vector`, `Range` and `List`.
- Extended `Filter_Condition` with `Is_Empty`, `Not_Empty`, `Like` and
`Not_Like`. - Reimplemented `Duration` as a built-in type.
- Implemented `Table.replace_text` for in-memory table.
- Extended `Filter_Condition` with `Is_In` and `Not_In`.
- Replaced `Table.drop_missing_rows` with `filter_blank_rows` with an updated
API. - Replaced `Table.drop_missing_columns` with
`Table.remove_columns Column_Selector.Blank_Columns` by adding the new column
selector variant. - Implemented `Table.rows` giving access to a vector of rows.
- Define Enso epoch start as 15th October 1582
- Implemented `Period` type
- Implemented new functions on Column and added expression syntax support to
create derived Columns. - Added support for milli and micro seconds, new short form for rename_columns
and fixed issue with compare_to versus Nothing - Aligned `Text.match`/`Text.locate` API
- There is a new API to lazily feed visualisation information to the
IDE. - Added `transpose` and `cross_tab` to the In-Memory Table.
- Improvements to JSON, Pair, Statistics and other minor tweaks.
- Overhauled the JSON support (now based of JavaScript), `Data.fetch` and other
minor tweaks - Enable Date, Time and DateTime to be read and written to Excel.
- Aligning core APIs for Vector, List and Range. Adding some missing functions
to the types. - Implemented `Table.distinct` for Database backends.
- Implemented `Table.union` for the in-memory backend.
- Implemented `Table.cross_join` and `Table.zip` for the in-memory
backend. - Updated `Text.starts_with`, `Text.ends_with` and `Text.contains` to new
simpler API. - Updated `Table.set` to new API. New `Column.parse` function and added case
sensitivity to `Filter_Condition` and column functions. - Updated column selector APIs and new `Excel_Workbook` type.
- Moved regex functionality out of `Text.locate` and `Text.locate_all` into
`Text.match` and `Text.match_all`. - `File.parent` may return `Nothing`.
- Removed non-regex functionality from `is_match`, `match`, and `match_all`,
and renamed them to `match`, `find`, `find_all` (respectively). - Updated `rename_columns` to new API. Added `first_row`, `second_row` and
`last_row` to Table types - Introducing `Meta.Type`.
- Remove many regex compile flags; separated `match` into `match` and
`match_all`. - Aligned names of columns created by column operations.
- Improved `cross_tab`. Renamed `fill_missing` and `is_missing` to
`fill_nothing` and `is_nothing`. Added `fill_empty`. - Removed many regex compile flags from `replace`; added `only_first` and
`use_regex` flag. - Implemented proper support for Value Types in the Table library.
- Removed many regex compile flags from `split`; added `only_first` and
`use_regex` flag. - Added `Text.tokenize`
- Added support for Date/Time columns in the Postgres backend and added
`year`/`month`/`day` operations to Table columns. - `Text.split` can now take a vector of delimiters.
- Add `has_warnings`, `remove_warnings` and `throw_on_warning` extension
methods. - Implemented `Table.union` for the Database backend.
- Array & Vector have the same methods & behavior
- Implemented `Table.split` and `Table.tokenize` for in-memory tables.
- Added `trim` and `replace` to `Column`. Enhanced number parsing with support
for thousands and decimal point automatic detection. - Implemented `Table.parse_text_to_table`.
- Added `Table.parse_to_columns`.
- Added parsing methods for `Integer`, `Decimal`, `Json`, `Date`, `Date_Time`,
`Time_Of_Day`, `Time_Zone`, and `URI` to `Text`. - Implemented `create_database_table` allowing upload of in-memory
tables. - Added execution context control to writing files and dry run capabilities to
`Text.write`. - Implemented `create_database_table` allowing saving queries as database
tables. - Implemented `Column.format` for in-memory `Column`s.
- Added `at_least_one` flag to `Table.tokenize_to_rows`.
- Moved `Redshift` connector into a separate `AWS` library.
- Added `Date_Range`.
- Implemented the `cast` operation for `Table` and `Column`.
- Added `.round` and `.int` to `Integer` and `Decimal`.
- Added `.round`, `.truncate`, `.ceil`, and `.floor` to `Column`.
- Added execution control to `Table.write` and various bug fixes.
- Implemented `Table.add_row_number`.
- Handling edge cases in rounding.
- Split `Table.create_database_table` into `Connection.create_table` and
`Table.select_into_database_table`. - Speed improvements to `Column` `.truncate`, `.ceil`, and `.floor`.
- Implemented addition and subtraction for `Date_Period` and
`Time_Period`. - Added AWS credential support and initial S3 list buckets API.
- [Added `round`, `ceil`, `floor`, `truncate` to the In-Database Column type]
6988 - Implemented `Table.update_database_table`.
- Removed `module` argument from `enso_project` and other minor tweaks.
- Integrated Database write operations with Execution Contexts.
- `Column.fill_nothing` and `.fill_empty` no longer rename the column. Added
`Table.fill_nothing` and `.fill_empty`. - Implemented `add_row_number` for Database tables.
- [Added `replace` to in-memory table. Changed replace for `Text`, in-memory
`Column`, and in-memory `Table` to take a `Regex` in addition to a `Text`.]
7223 - Added `cross_join` support to database tables.
- Improving date/time support in Table - added `date_diff`, `date_add`,
`date_part` and some shorthands. Extended `Time_Period` with milli-, micro-
and nanosecond periods. - Implemented `replace` on database columns.
- Retire `Column_Selector` and allow regex based selection of columns.
- `Text.parse_to_table` can take a `Regex`.
- Expose `Text.normalize`.
- Implemented new value types (various sizes of `Integer` type, fixed-length
and length-limited `Char` type) for the in-memory `Table` backend. - Introducing generic `Any.to` conversion method
- Added `take` and `drop` to database tables.
- Added ability to specify expected value type in `Column.from_vector`,
`Column.map` and `Column.zip`. - Added `delete_rows` method to Database Table, changed the
`update_database_table` API into `update_rows`. - Added `Data.post` method to write to HTTP endpoints.
- Added support for S3. Using `Input_Stream` more for reading.
- Renamed `Decimal` to `Float`.
- Implemented `Date_Time_Formatter` for more user-friendly date/time format
parsing. - Added `Table.expand_column` and improved JSON deserialization.
- Implemented `Table.auto_value_types` for in-memory tables.
- Implemented Text.substring to easily select part of a Text field
- Implemented new selector for when parameter in `filter_blank_rows`,
`select_blank_columns`, `remove_blank_columns` - Implemented basic XML support
- Implemented `Table.lookup_and_replace` for the in-memory backend.
- Added `Column_Operation` to `Table.set` allowing for more streamlined flow of
deriving column values in the GUI. - Implemented `Table.expand_to_rows` for the in-memory backend.
- Added XML support for `.to Table` and `.expand_column`.
- Added `Previous_Value` option to `fill_nothing` and `fill_empty`.
- Added `Table.format` for the in-memory backend.
- Implemented truncate `Date_Time` for database backend (Postgres only).
- Initial Enso Cloud APIs.
- Renamed `replace` to `text_replace` and renamed `lookup_and_replace` to
`merge` on `Table`. - Errors thrown inside `map` are wrapped in `Map_Error`.
- Support for loading big Excel files.
- Added new `Filter_Condition`s - `Equal_Ignore_Case`, `Is_Nan`, `Is_Infinite`
and `Is_Finite`. - Support `on_problems=Problem_Behavior.Report_Warning` in `Vector.map`.
- Added text_length to Column
- Added none delimiter option for Data.Read
- Added text_left and text_right to Column
- Implement relational `NULL` semantics for `Nothing` for in-memory `Column`
operations. - Implement relational `NULL` semantics for `Nothing` for in-memory `Table`
join operations. - Attach a warning when Nothing is used as a value in a comparison or `is_in`
`Filter_Condition`. - Added `File_By_Line` type allowing processing a file line by line. New faster
JSON parser based off Jackson. - Implemented `Table.replace` for the in-memory backend.
Enso Compiler
- Added overloaded `from` conversions.
- Upgraded to Graal VM 21.3.0
- Added the ability to decorate values with warnings.
- Fixed issues related to constructors' default arguments
- Fixed compiler issue related to module cache.
- Fixed execution of defaulted arguments of Atom Constructors
- Converting Enso Date to java.time.LocalDate and back
- Incremental Reparsing of a Simple Edits
- Functions with all-defaulted arguments now execute automatically
- Provide `tagValues` for function arguments in the language server
- Delay construction of Truffle nodes to speed initialization
- Frgaal compiler integration to allow for latest Java constructs
- Support for Chrome developer tools --inspect option
- Move Builtin Types and Methods definitions to stdlib
- Reduce boilerplate by generating BuiltinMethod nodes from simple method
signatures - Generate boilerplate classes related to error handling and varargs in
builtins from method signatures - Avoid needless concatenations of warning/error messages
- Added a full-blown DSL for builtins
- Integration of Enso with Ideal Graph Visualizer
- Lazy evaluation of RHS argument for || and &&
- Drop Core implementation of IR
- Replace `this` with `self`
- Introduce a smaller version of the standard library, just for testing
- Remove `here` and make method name resolution case-sensitive
- Explicit `self`
- Added benchmarking tool for the language server
- Support module imports using a qualified name
- Using parser written in Rust.
- Enable caching in visualisation functions
- Update Scala compiler and libraries
- Support importing module methods
- Support Autosave for open buffers
- Generate native-image for engine-runner
- Support pattern matching on constants
- Builtin Date_Time, Time_Of_Day and Zone types for better polyglot
support - Implement new specification of data types: `type` has a runtime
representation, every atom has a type - main = "Hello World!" is valid Enso sample
- Invalidate module's IR cache if imported module changed
- Don't rename imported Main module that only imports names
- Notify node status to the IDE
- Make instance methods callable like statics
- Distinguish static and instance methods
- By-type pattern matching
- Fix performance of method calls on polyglot arrays
- Improved support for static and non-static builtins
- Missing foreign language generates proper Enso error
- Connecting IGV 4 Enso with Engine sources
- Made Vector performance to be on par with Array
- Introduced IO Permission Contexts
- Accept Array-like object seamlessly in builtins
- Initialize Builtins at Native Image build time
- Split Atom suggestion entry to Type and Constructor
- Any number can be converted to double
- Update to GraalVM 22.3.0
- Connecting IGV 4 Enso with Engine sources
- Add the `Self` keyword referring to current type
- Support VCS for projects in Language Server
- Support multiple exports of the same module
- Import modules' extension methods only with unqualified imports
- Support expression evaluation in chromeinspector console
- Don't export polyglot symbols
- From/all import must not include module in name resolution
- Vector returns warnings of individual elements
- Enso.getMetaObject, Type.isMetaInstance and Meta.is_a consolidation
- Add executionContext/interrupt API command
- Any.== is a builtin method
- Simplify exception handling for polyglot exceptions
- Simplify compilation of nested patterns
- IGV can jump to JMH sources & more
- Basic support of VSCode integration
- Sync language server with file system after VCS restore
- `ArrayOverBuffer` behaves like an `Array` and `Array.sort` no longer sorts in
place - Implement hashing functionality for all objects
- Introducing Meta.atom_with_hole
- Report failures in name resolution in type signatures
- Attach visualizations to sub-expressions
- Add Meta.get_annotation method
- Resolve Fully Qualified Names
- Optimize Atom storage layouts
- Make instance methods callable like statics for builtin types
- Convert large longs to doubles, safely, for host calls
- Consistent ordering with comparators
- Profile engine startup
- Report type of polyglot values
- Engine can now recover from serialization failures
- Use sbt runEngineDistribution
- Update to GraalVM 22.3.1
- Cache library bindings to optimize import/export resolution
- Comparators support partial ordering
- Merge ordered and unordered comparators
- Use SHA-1 for calculating hashes of modules' IR and bindings
- Don't install Python component on Windows
- Detect potential name conflicts between exported types and FQNs
- Ensure calls involving warnings remain instrumented
- One can define lazy atom fields
- Replace IOContexts with Execution Environment and generic Context
- Vector.sort handles incomparable types
- Removing need for asynchronous thread to execute ResourceManager
finalizers - Warning.get_all returns only unique warnings
- Reimplement `enso_project` as a proper builtin
- Limit number of reported warnings per value
- Experimental support for Espresso Java interpreter
- Suggestions are updated only when the type of the expression changes
- Add project creation time to project metadata
- Upgrade GraalVM to 22.3.1 JDK17
- Ascribed types are checked during runtime
- Add compiler pass that discovers ambiguous and duplicated symbols
- Improve and colorize compiler's diagnostic messages
- Execute some runtime commands synchronously to avoid race conditions
- Automatic conversion for runtime checked arguments
- Scala 2.13.11 update
- Add special handling for static method calls on Any
- Improve parallel execution of commands and jobs in Language Server
- Added retries when executing GraalVM updater
- Add method call info for infix operators
- `executionComplete` response is sent on successful execution only
- Send info about function values
- Cache dataflow errors
- Add endpoint for downloading a project
- Update to GraalVM 23.0.0
- Using official BigInteger support
- Allow users to give a project other than Upper_Snake_Case name
- Support renaming variable or function
- Replace custom logging service with off the shelf library
- Only use types as State keys
- Allow Java Enums in case of branches
- Notification about the project rename action
- Use `numpy` & co. from Enso!
- Changed layout of local libraries directory, making it easier to reference
projects next to each other - Support runtime checks of intersection types
- Merge `Small_Integer` and `Big_Integer` types
- Inline type ascriptions
- Always persist `TRACE` level logs to a file
- Meta.instrument & Instrumentor API
- Downloadable VSCode extension
- New `project/status` route for reporting LS state
- Add Enso-specific assertions
- Modules can be `private`
- HTTPS and WSS support in Language Server
- Export of non-existing symbols results in error
- Upgrade GraalVM to 23.1.0 JDK21
- Added opt-in type checks of return type
- Introduce Arrow language
- DataflowError.withoutTrace doesn't store stacktrace
- Derive --in-project from --run source location
- Binary operator resolution based on that value