Posts

Showing posts from March, 2017

Thoughts on programming language notations

Image
Some posts ago, we looked at what it's required in creating a new programming language. In this post we're going a little bit more into it, trying to find ways to effectively express meanings in natural ways, similar to what we can express in a natural language.


First, let's begin by considering the sentence: "GeorgelovesMaria".

We have three components: "George"   is the subject doing the action"loves"   is the action itself"Maria"   is the subject on which the action is being done
From a programming language perspective, subjects are equivalent with objects and actions are equivalent with methods.
object1 := George object2 := Maria method  := loves
In an object-oriented programming language, the sentence can be expressed as:

  George.loves(Maria)
In general, we have:
  object1.method(object2)
In a natural language, like Romanian, we can express the same meaning in six different ways: O iubește, George, pe Maria.O iubește, pe Maria, Georg…

Bacovia: a symbolic math library

Image
Named after the great symbolist poet, George Bacovia, I created this new library to symbolically manipulate mathematical expressions in a very simple and elegant way.

Before writing a symbolic math library, this was a somewhat mysterious subject to me, but in this post I would like to try to demystify and illustrate the beauty and satisfaction that comes from writing this simple, but powerful, symbolic math library.

The first thing in creating a new project, is the selection of the right programming language for the project. Just for fun, I decided to implement this library in the Sidef programming language, using recursion and multiple dispatch; two very powerful features that turned out to be just perfect for this task.
# Design The library has a simple class hierarchy, with one base class, and several other classes inheriting from it.
classBacovia{}classPower<Bacovia{}classFraction<Bacovia{}classDifference<Bacovia{}classSum<Bacovia{}classProduct<Bacovia{}classLog<B…