Expression Problem

Quellen

Konzept Beispiel

Das Expression Problem ist die Frage ob eine Sprache Operationen und Datentypen erweitern kann.

  • Grundimplementierung in Library
  • Erweiterungen ohne LibraryCode zu ändern

Beispiel MiniSprache:

  • base
    • expr = num
    • num = <int literal>
    • operation: eval: expr => int
  • dataErweiterung
    • expr = num | plus
    • plus = expr '+' expr
  • OperatorErweiterung
    • operation repr: expr => String

Datacentric approach

  • Datentypen als Subklassen von BaseD

keine chance Operation repr an BaseD anzuhängen ohne BaseD zu ändern

 
// Base data with a default operation
trait BaseD {def eval: Int}

// 1st concrete data (in base): number literals
class NumD(value: Int) extends BaseD {def eval = value}

// Extension: 2nd concrete data: data addition
class PlusD(a: BaseD, b: BaseD) extends BaseD {
	def eval = a.eval + b.eval
}