No description
Find a file
Eric Merritt 1a39438f3c Merge remote-tracking branch 'canonical/next'
* canonical/next:
  massively expand the documentation in the README
  bring ec_plists up to erlware standards
  replace ec_plists with Stephan's plists
  add Stephen Marsh's plists to the system
  reorder default tasks so dialyzer is run after compile
  add a clean and rebuild task to makefile
  add fullpath to the makefile
  enable the rebar semver plugin on erlware_commons
  cleanup the rebar config
  support non-numeric versions in major/minor/patch/minor-patch
  support reasonable versioning for erlware_commons
  add exists to ec_file
  fix bug in ec_file:copy/3 spec
  export mkdir_p (this should have been done already)
  support four primary version numbers of in parsing
  minor whitespace cleanup for ec_semver
  provide the ability to format a version into a string as well as parse a version
  make sure the docs get run as part of a bare make
  fixes for edoc compilation
  compilation utilities for the implementors
2012-10-30 13:03:29 -05:00
doc add suport and documentation for signatures for dictionaries 2011-10-16 22:26:43 -04:00
src bring ec_plists up to erlware standards 2012-10-30 11:45:21 -06:00
test bring ec_plists up to erlware standards 2012-10-30 11:45:21 -06:00
.gitignore suport proper semver parsing and comparison in the semver module 2012-09-08 09:59:27 -05:00
.travis.yml add travis support to the system 2012-09-08 09:59:19 -05:00
COPYING Initial Commit 2011-03-10 11:22:54 -06:00
Makefile reorder default tasks so dialyzer is run after compile 2012-10-30 11:45:21 -06:00
README.md massively expand the documentation in the README 2012-10-30 11:45:21 -06:00
rebar.config enable the rebar semver plugin on erlware_commons 2012-10-30 11:45:21 -06:00

Erlware Commons

Current Status

Build Status

Introduction

Erlware commons can best be described as an extension to the stdlib application that is distributed with Erlang. These are things that we at Erlware have found useful for production applications but are not included with the distribution. We hope that as things in this library prove themselves useful, they will make their way into the main Erlang distribution. However, whether they do or not, we hope that this application will prove generally useful.

Goals for the project

  • Generally Useful Code
  • High Quality
  • Well Documented
  • Well Tested

Currently Available Modules/Systems

ec_date

This module formats erlang dates in the form {{Year, Month, Day}, {Hour, Minute, Second}} to printable strings, using (almost) equivalent formatting rules as http://uk.php.net/date, US vs European dates are disambiguated in the same way as http://uk.php.net/manual/en/function.strtotime.php That is, Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates.

erlang has no concept of timezone so the following formats are not implemented: B e I O P T Z formats c and r will also differ slightly

ec_file

A set of commonly defined helper functions for files that are not included in stdlib.

ec_plists

plists is a drop-in replacement for module lists, making most list operations parallel. It can operate on each element in parallel, for IO-bound operations, on sublists in parallel, for taking advantage of multi-core machines with CPU-bound operations, and across erlang nodes, for parallizing inside a cluster. It handles errors and node failures. It can be configured, tuned, and tweaked to get optimal performance while minimizing overhead.

Almost all the functions are identical to equivalent functions in lists, returning exactly the same result, and having both a form with an identical syntax that operates on each element in parallel and a form which takes an optional "malt", a specification for how to parallize the operation.

fold is the one exception, parallel fold is different from linear fold. This module also include a simple mapreduce implementation, and the function runmany. All the other functions are implemented with runmany, which is as a generalization of parallel list operations.

ec_semver

A complete parser for the semver standard. Including a complete set of conforming comparison functions.

ec_lists

A set of additional list manipulation functions designed to supliment the lists module in stdlib.

ec_talk

A set of simple utility functions to falicitate command line communication with a user.

Signatures

Other languages, have built in support for Interface or signature functionality. Java has Interfaces, SML has Signatures. Erlang, though, doesn't currently support this model, at least not directly. There are a few ways you can approximate it. We have defined a mechnism called signatures and several modules that to serve as examples and provide a good set of dictionary signatures. More information about signatures can be found at signature.

ec_dictionary

A signature that supports association of keys to values. A map cannot contain duplicate keys; each key can map to at most one value.

ec_dict

This provides an implementation of the ec_dictionary signature using erlang's dicts as a base. The function documentation for ec_dictionary applies here as well.

ec_gb_trees

This provides an implementation of the ec_dictionary signature using erlang's gb_trees as a base. The function documentation for ec_dictionary applies here as well.

ec_orddict

This provides an implementation of the ec_dictionary signature using erlang's orddict as a base. The function documentation for ec_dictionary applies here as well.

ec_rbdict

This provides an implementation of the ec_dictionary signature using Robert Virding's rbdict module as a base. The function documentation for ec_dictionary applies here as well.