ECL (data-centric programming language): Difference between revisions

Content deleted Content added
GNU is the Operating System
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
 
(8 intermediate revisions by 8 users not shown)
Line 1:
{{Short description|None}}
{{Infobox programming language
| name = ECL
Line 12 ⟶ 13:
| influenced_by = [[Prolog]], [[Pascal (programming language)|Pascal]], [[SQL]], [[Snobol4]], [[C++]], [[Clarion (programming language)|Clarion]]
| influenced =
| operating_system = [[GNU]]/[[Linux kernel|Linux]]
| license =
| website = http://hpccsystems.com/
}}
 
'''ECL''' (Enterprise Control Language) is a declarative, data -centric programming language designed in 2000 to allow a team of programmers to process [[big data]] across a high performance computing cluster without the programmer being involved in many of the lower level, imperative decisions.<ref>[http://www.lexisnexis.com/risk/about/guides/program-guide.html A Guide to ECL], [[Lexis-Nexis]].]</ref><ref>"Evaluating use of data flow systems for large graph analysis," by A. Yoo, and I. Kaplan. Proceedings of the 2nd Workshop on Many-Task Computing on Grids and Supercomputers, MTAGS, 2009</ref>
 
== History ==
Line 23 ⟶ 24:
 
== Language constructs ==
ECL, at least in its purest form, is a declarative, data -centric language. Programs, in the strictest sense, do not exist. Rather an ECL application will specify a number of core datasets (or data values) and then the operations which are to be performed on those values.
 
=== Hello world ===
Line 30 ⟶ 31:
Perhaps a more flavorful example would take a list of strings, sort them into order, and then return that as a result instead.
 
<sourcesyntaxhighlight lang="ecl">
// First declare a dataset with one column containing a list of strings
// Datasets can also be binary, CSV, XML or externally defined structures
Line 37 ⟶ 38:
SD := SORT(D,Value);
output(SD)
</syntaxhighlight>
</source>
 
The statements containing a <code>:=</code> are defined in ECL as attribute definitions. They do not denote an action; rather a definition of a term. Thus, logically, an ECL program can be read: "bottom to top"
Line 44 ⟶ 45:
 
What is an SD?
<sourcesyntaxhighlight lang="ecl">
SD := SORT(D,Value);
</syntaxhighlight>
</source>
SD is a D that has been sorted by ‘Value’
 
What is a D?
<sourcesyntaxhighlight lang="ecl">
D := DATASET([{'ECL'},{'Declarative'},{'Data'},{'Centric'},{'Programming'},{'Language'}],{STRING Value;});
</syntaxhighlight>
</source>
D is a dataset with one column labeled ‘Value’ and containing the following list of data.
 
=== ECL primitives ===
ECL primitives that act upon datasets include: SORT, ROLLUP, DEDUP, ITERATE, PROJECT, JOIN, NORMALIZE, DENORMALIZE, PARSE, CHOSEN, ENTH, TOPN, DISTRIBUTE
 
=== ECL encapsulation ===
Whilst ECL is terse and LexisNexis claims that 1 line of ECL is roughly equivalent to 120 lines of C++, it still has significant support for large scale programming including data encapsulation and code re-use. The constructs available include: MODULE, FUNCTION, FUNCTIONMACRO, INTERFACE, MACRO, EXPORT, SHARED
 
=== Support for Parallelism in ECL ===
Line 65 ⟶ 66:
 
=== Comparison to Map-Reduce ===
The Hadoop Map-Reduce paradigm actually consists of three phases which correlate to ECL primitives as follows.
{| class="wikitable"
|-
Line 78 ⟶ 79:
| SHUFFLE (Phase 1)
| DISTRIBUTE(,HASH(KeyValue))
| The records from the mapper are distributed dependentdepending upon the KEY value
|-
| SHUFFLE (Phase 2)
Line 86 ⟶ 87:
| REDUCE
| ROLLUP(,Key,LOCAL)
| The records for a particular KEY value are now combined together
|}
 
Line 95 ⟶ 96:
== External links ==
* [http://rosettacode.org/wiki/ECL Rosetta Code ECL category]
* [https://hpccsystems.com/training/documentation/ecl-language-reference/html ECL Language Reference] {{Webarchive|url=https://web.archive.org/web/20210116135748/https://hpccsystems.com/training/documentation/ecl-language-reference/html |date=2021-01-16 }}
* [https://www.nytimes.com/2008/02/21/technology/21iht-reed.4.10279549.html Reed Elsevier to acquire ChoicePoint for $3.6 billion]
* [https://www.bloomberg.com/apps/news?pid=newsarchive&sid=aBuqYZDOSPL4&refer=uk Reed Elsevier's LexisNexis Buys Seisint for $775 Mln]
* [https://archive.today/20130201091208/http://www.reuters.com/finance/stocks/keyDevelopments?symbol=ENL&pn=15 Reed Elsevier]
 
[[Category:Declarative programming languages]]
[[Category:Data-centric programming languages]]
[[Category:Big data]]
[[Category:Statically typed programming languages]]