Programming language Semantics
As discussed previously, approaches to artificial general intelligence can be classified as reverse or forward engineering. In the forward engineering domain, one promising approach, I believe, is programming language reengineering or PLR.
One aspect of conventional programming languages that make them difficult to use and fragile is narrow-semantics - the fact that subroutines1 and their parameters only have semantics (meaning) by their context in a particular program.
How would a broad-semantics language look? Subroutines and their parameters would include a network of information about how they are commonly used. During programming (human programming or an evolutionary programming based AGI), a list of subroutines would continually be presented in an order based on the semantic network.
For example, consider the trig Sin subroutine. In our human programmer mind, we have an implicit semantic about the Sin function - that it is often used:
- with other mathematical subroutines like Cos, Tan, Multiply, Add, etc.
- when numbers have been computed
- when the context includes some concept of arcs or circles
In an explicit-semantic language the language, or perhaps a wrapper to the language, would explicitly encode the above connections. The connections could be hard coded or auto-learned from the collective code of some group or even all the programmers using the language, say via the internet.
In an AGI evolutionary programming context the semantic network of the reengineered programming language would strongly bias the growth of the evolved program.
Blondie24: Playing at the Edge of AI (The Morgan Kaufmann Series in Artificial Intelligence)
Book (Morgan Kaufmann)