Domain Specific Languages
TL;DR: A number of DSLs spanning various phases of software development life cycle in terms of features that elucidates their advantages over general purpose languages and perform in depth study by practically applying a few open source DSLs: ‘Cascading’, Naked Objects Framework and RSpec.
Abstract: To match the needs of the fast paced generation, the speed of computing has also increased enormously. But, there is a limit to which the processor speed can be amplified. Hence in order to increase productivity, there is a need to change focus from processing time to programming time. Reduction in programming time can be achieved by identifying the domain to which the task belongs and using an appropriate Domain Specific Language (DSL). DSLs are constrained to use terms and concepts pertaining to an explicit domain making it much easier for the programmers to understand and learn, and cuts down the development time drastically. In this paper, we will understand what a DSL is; explore a number of DSLs spanning various phases of software development life cycle in terms of features that elucidates their advantages over general purpose languages and perform in depth study by practically applying a few open source DSLs: ‘Cascading’, Naked Objects Framework and RSpec.
...read more
Citations
494 citations
Cites methods from "Domain Specific Languages"
...See CAP theorem buckets (Riak), 82 default values for consistency for, 84 domain, 83 storing all data together in, 82 business transactions, 61 C caching performance of, 39, 137 stale data in, 50 Cages library, 104 Index 157 CAP (Consistency, Availability, and Partition tolerance) theorem, 53–56 for document databases, 93 for Riak, 86 CAS (compare-and-set) operations, 62 Cassandra DB, 10, 21–22, 99–109 availability in, 104–105 column families in: commands for, 105–106 standard, 101 super, 101–102 columns in, 100 expiring, 108–109 indexing, 106–107 reading, 107 super, 101 compaction in, 103 consistency in, 103–104 ETL tools for, 139 hinted handoff in, 104 keyspaces in, 102–104 memtables in, 103 queries in, 105–107 repairs in, 103–104 replication factor in, 103 scaling in, 107 SSTables in, 103 timestamps in, 100 transactions in, 104 wide/skinny rows in, 23 clients, processing on, 67 Clojure language, 145 cloud computing, 149 clumping, 39 clusters, 8–10, 67–72, 76, 149 in file systems, 8 in Riak, 87 resiliency of, 8 column-family databases, 21–23, 99–109 ACID transactions in, 109 columns for materialized views in, 31 combining peer-to-peer replication and sharding in, 43–44 consistency in, 103–104 modeling for, 34 performance in, 103 schemalessness of, 28 vs. key-value databases, 21 wide/skinny rows in, 23 combinable reducers, 70–71 compaction (Cassandra), 103 compatibility, backward, 126, 131 concurrency, 145 in file systems, 141 in relational databases, 4 offline, 62 conditional updates, 48, 62–63 conflicts key, 82 read-write, 49–50 resolving, 64 write-write, 47–48, 64 consistency, 47–59 eventual, 50, 84 in column-family databases, 103–104 in graph databases, 114 in master-slave replication, 52 in MongoDB, 91 logical, 50 optimistic/pessimistic, 48 read, 49–52, 56 read-your-writes, 52 relaxing, 52–56 replication, 50 session, 52, 63 trading off, 57 update, 47, 56, 61 vs. availability, 54 write, 92 See also CAP theorem content hashes, 62–63 content management systems, 98, 108 CouchDB, 10, 91 conditional updates in, 63 replica sets in, 94 counters, for version stamps, 62–63 CQL (Cassandra Query Language), 10, 106 CQRS (Command Query Responsibility Segregation), 143 cross-document operations, 98 C-Store DB, 21 Cypher language, 115–119 D Data Mapper and Repository pattern, 151 data models, 13, 25 aggregate-oriented, 14–23, 30 document, 20 key-value, 20 relational, 13–14 Index158 data redundancy, 94 databases choosing, 7, 147–152 deploying, 139 encapsulating in explicit layer, 151 NoSQL, definition of, 10–11 shared integration of, 4, 6 Datastax Ops Center, 139 DBDeploy framework, 125 DBMaintain tool, 126 deadlocks, 48 demo access, 108 Dependency Network pattern, 77 deployment complexity, 139 Dijkstra’s algorithm, 118 disaster recovery, 94 distributed file systems, 76, 141 distributed version control systems, 48 version stamps in, 64 distribution models, 37–43 See also replications, sharding, single server approach document databases, 20, 23, 89–98 availability in, 93 embedding child documents into, 90 indexes in, 25 master-slave replication in, 93 performance in, 91 queries in, 25, 94–95 replica sets in, 94 scaling in, 95 schemalessness of, 28, 98 XML support in, 146 domain buckets (Riak), 83 Domain-Driven Design, 14 DTDs (Document Type Definitions), 146 durability, 56–57 DynamoDB, 9, 81, 100 shopping carts in, 55 Dynomite DB, 10 E early prototypes, 109 e-commerce data modeling for, 14 flexible schemas for, 98 polyglot persistence of, 133–138 shopping carts in, 55, 85, 87 edges (graph databases), 26, 111 eligibility rules, 26 enterprises commercial support of NoSQL for, 138–139 concurrency in, 4 DB as backing store for, 4 event logging in, 97 integration in, 4 polyglot persistence in, 138–139 security of data in, 139 error handling, 4, 145 etags, 62 ETL tools, 139 Evans, Eric, 10 event logging, 97, 107–108 event sourcing, 138, 142, 144 eventual consistency, 50 in Riak, 84 expiring usage, 108–109 F failovers, automated, 94 file systems, 141 as backing store for RDBMS, 3 cluster-aware, 8 concurrency in, 141 distributed, 76, 141 performance of, 141 queries in, 141 FlockDB, 113 data model of, 27 node distribution in, 115 G Gilbert, Seth, 53 Google, 9 Google BigTable....
[...]
...If there are destructive changes, that is updates and deletes, then we can avoid some recomputation by breaking up the reduce operation into steps and only recalculating those steps whose inputs have changed—essentially, using a Dependency Network [Fowler DSL] to organize the computation....
[...]
333 citations
188 citations
Cites background from "Domain Specific Languages"
...In the rest of this section, we explain each of these characteristics in the context of familiar, everyday domains....
[...]
184 citations
References
1,495 citations
908 citations