Component based programming in D

Ola Fosheim Grøstad ola.fosheim.grostad at gmail.com
Wed Jun 19 08:53:02 UTC 2019


On Tuesday, 18 June 2019 at 09:17:09 UTC, Bart wrote:
> I'm new to component based programming. I've read it is an 
> alternative to oop for speed.

Component based modelling is part of the OO-modelling toolbox.  
Also, it isn't new, e.g. database-oriented modelling techniques 
often use the same philosophy (e.g. SA-modelling and ER-modelling 
predates object-oriented-modelling).

It isn't about speed, it is about being able to combine 
independently written frameworks (or components) using an id as 
an identifier for an entity. It also helps when your 
implementation spans over many computers (or services).

So basically, if you have an independently written 
hotel-reservation component, a golf-course component, a flight 
ticket component and so on, then you can compose this to a full 
"vacation system" by combining the various components.

Nothing new about this, but it got traction around 15-25 years 
ago as software got expensive to build from scratch (as programs 
grew larger) and you want to develop a framework of prewritten 
components that can be combined for easier and cheaper production.

So in that respect you probably, in most cases, trade performance 
(slower) for easy reuse and easier debugging (in some cases).

In the game community they claim to do it for performance 
reasons, but that is probably not the case, it is again about 
costs of doing multithreaded programming and splitting the 
codebase into specialized chunks that different teams can work on 
for good performance on individual parts.

So yeah, the claim is "speed", but there is no real substance to 
that claim, in the general case. Speed isn't a result of the 
generic modelling-strategy. But in some scenarios it might be 
easier to partition the design into components and make each 
component perform well than doing it as a monolithic design.

Although in theory the monolithic design should always perform 
better if done in an optimal fashion. The problem is that it is 
too expensive to do an optimal monolithic multi-threaded design 
well (and change becomes difficult).

E.g. the most high performing OS-kernels are monolithic for 
performance reasons. However, the development costs of that 
approach are prohibitive for ordinary software (even games).


> Can someone help me understand this a little better and how I'd 
> go about using it in D? Specifically I'm looking at the pros 
> and cons, what are the real similarities and differences to 
> oop, and how one implements them in D(taking in to account D's 
> capabilities).


It has precious little to do with the programming language. It 
has more to do with modelling. So you probably will learn more 
from looking at component based modelling as a tool in your 
OO-modelling toolbox than following a particular implementation 
of a component based design.

Unless you want to write games, in which case you should look in 
that direction. (e.g. reuse an existing physics component).

Ola.



More information about the Digitalmars-d-learn mailing list