Ontology of Programing Languages
What is the Ontology of Programing Languages
if you don't understand something's ontology, you don't fully understand it.
a child “understands” car. But not sedan, coup, flying car, railcar, NASCAR, truck, van, bus, omnibus, automobile, transportation, jeep, motorcar, vehicle. You do.
let's pick something you don't understand. Say: analytic geometry, synthetic geometry, coordinate geometry, projective geometry, affine geometry, taxicab geometry, algebraic geometry, Euclidean geometry, elliptical geometry, differential geometry, complex geometry, discrete geometry, fractal geometry, computational geometry.
which of the above, are the same “category”, what is the relationship hierarchy? which are just synonyms? which actually defines a math subject with axioms (that you can take a course of it in college)? what sets them apart or same? Linguistics of synonym, methodology/approach/perspective, difference in depth, core axioms? subject matter? same but not same perceived difference?
Now, you are like that child, who understands “car” the same way you do with “geometry”.
ontology, here, is the overall entities, their nature, relations, category, classification, the context with complete picture.
now, let's look at functional programing and object oriented programing. Wikipedia also lists the following:
Agent-oriented
Array-oriented
Automata-based
Concurrent computing
Data-driven
Declarative (contrast: Imperative)
Constraint
Constraint logic
Concurrent constraint logic
Dataflow
Flow-based
Cell-oriented (spreadsheets)
Reactive
Functional
Functional logic
Purely functional
Logic
Abductive logic
Answer set
Concurrent logic
Functional logic
Inductive logic
Dynamic
End-user programming
Event-driven
Service-oriented
Time-driven
Expression-oriented
Feature-oriented
Function-level (contrast: Value-level)
Generic
Imperative (contrast: Declarative)
Literate
Procedural
Inductive programming
Language-oriented
Natural language programming
Discipline-specific
Domain-specific
Grammar-oriented
Dialecting
Intentional
Metaprogramming
Automatic
Reflective
Attribute-oriented
Homoiconic
Template
Policy-based
Non-structured (contrast: Structured)
Array
Nondeterministic
Parallel computing
Process-oriented
Point-free style
Concatenative
Semantic
Structured (contrast: Non-structured)
Block-structured
Modular (contrast: Monolithic)
Object-oriented (OOP)
Class-based
Concurrent
Prototype-based
By separation of concerns:
Aspect-oriented
Role-oriented
Subject-oriented
Recursive
Value-level (contrast: Function-level)
Probabilistic
Concept
let's just look at a few terms: functional programing, object oriented programing, Probabilistic programing, Metaprogramming, Data-driven programing.
When approaching a subject, you might think, all these “xyz programing” is a big tree, of different types and subtypes, with respect to some criterions. But not really. Because, for example, {“parallel programing”, “meta programing”, “functional programing”}, are totally “different things”. You can have a “programing” that's all three. While, functional programing and object oriented programing are more like 2 things by one criterion, namely, a certain “style” of construction. Yet, can you really write out, exactly, context, the criterion, in simple plain english, that separates them apart? That's ontology. Also, as you know, some languages, such as ruby, are really both. Given a piece of source code, it can be said to be both functional programing and object oriented programing. So, here things gets critical. Repeat: can you, give a precise definition, context, judgement, that separates functional programing and object oriented programing apart? That's ontology. That's understanding. To fully understand it, you pretty much have to have a overview of most programing languages and history, and have a basic understanding of the programing field in practice, and theory of computability.
now, the main topic.
programing languages have “expressions”, “statements”. Do you know their ontology? what else are there in this category? what makes them whole, the context? which lang has what or not? what's each's effect? what necessitates them? what can be omitted?
PS there's also: directives, command, whitespace, comment, operator, keyword.
Combinators, and the ontology of programing language concepts
Got a inspiration from reading Stephen Wolfram's article on combinators.
Amazing guy. The one comp scientist i respect the most. And ideas close to mine the most.
The inspiration is, that i have a question about the ontology of programing paradigms and programing language elements, that i do not know the relation of.
But now, while reading wolfram's article. I know how to find answer to that problem. In particular, reading this passage:
- Combinators: A Centennial View
- By Stephen Wolfram.
- https://writings.stephenwolfram.com/2020/12/combinators-a-centennial-view/
so, you see there, function, variable, flow control, can be subsumed as simple substitution system in combinators.
Programing Language Design
- Ontology of Programing Languages
- Comp Lang: Why I Hate Exceptions
- Comp Lang: Iterator, Enumerator, Abstraction Went Wrong (2016)
- Comp Lang: Should Array Index Start at 0 or 1?
- Why C Language Has the Main Function
- Comp Lang: is the Map Function Functional Programing in Syntax or Semantics
- Comp Lang: Should Map Function Specify Order
- Coding Style: Abuse of Logic Operators (Short-Circuit) as Control Flow (2015)
- Comp Lang: Bit Operators Idiocy
- Comp Lang: Hack of Bitmask as Boolean Parameters (2007)
- Comp Lang: Function Dependency
- The Complexity of Java Access Specifiers
- Comp Lang: C Cpp Java Coders Don't Know Scientific Programing Languages