Skip to content

e-wrks/edh

Repository files navigation

Đ (Edh) - The next-big-things ought to happen with Haskell not C/C++

Gitter

Quick Start

Đ (Edh) code should be especially more readable/modifiable to average people without a functional mindset (yet), thus development of a software project in Haskell + Edh can be more viable and maintainable by teams with diversified crew members.

One possible division of labour on from the scaffold as a baseline, e.g.

  • Junior people and New Comers (the Dev), End Users (bugfixers):

    Extend Đ (Edh) code with new modules, 3rd party packages for application / business logics, with fast iterations

  • Thinkist people:

    Establish the world modeling code, then progressively (but may better conservatively) improve the models, for mistakes harder to be made, idiomatics easier to be followed

  • Architect / Senior Engineering people, Security Experts, the Ops:

    Establish and maintain world reifying code, ensure the systems run continuously & securely on a foundation of contemporary technology stack, deal with dependency EOLs, patch CVEs in time, perform regularly the house keeping of backing storage

What is Đ (Edh)

Edh is a dynamically & strongly typed, procedural (thus imperative), value-oriented (i.e. immutable first, yet with non-traditional Object constructs), interpreted programming language, that parasitic on GHC and heavily relying on the Haskell implementation of Software Transactional Memory for unified intuition of concurrency and data-consistency.

Edh tries to bridge procedural mindsets to functional mindesets as smooth as possible, by following good spirits, designs and practices of Python, Go, JavaScript, while aiming at Haskell in pursuit of quality in the software to be developed.

Edh implements its version of the go statement that not guilty on the goto 2.0 charge

When coding within an Edh world, you can forget about all kinds of synchronization primitives scattered here, here, and many otherwheres , with every methods you attempt to program concurrency otherwise.

Despite of many async frameworks trying to mitigate that disputable complexity, e.g. async in JavaScript, asyncio in Python, and async in Haskell.

Checkout the implementation of concur and concur.edh in the Tour using that.

concur() is just an example, it's straight forward for you to write application logics in similar ways.

The Mission

Edh competes with Python in aid of Haskell instead of C/C++ to be the breeding ground for next phenomenal pieces of software, after TensorFlow, Pandas, Numpy etc. by providing equaly good or even better language constructs to rivals in Python.

Take the Tour to see what Edh has to offer.

Julia is an alternative all-in-one solution for the next-big-things, but as well as Haskell, Julia carries high impedance to average people without highly developed Mathematical Mindsets

But in the early years of school, we live in a system whereby students are required, from an early age, to learn many formal mathematical methods, such as those used to add, subtract, divide, and multiply numbers. This is the time when students stray from mathematical mindsets and develop fixed, procedural mindsets.

I suppose years still needed for our education system to get that situation straight, and before that -

Edh is faithful to get people with just Python/JavaScript/Go knowledge and skills started with a procedural world with objects in Haskell (and in Julia too I sincerely hope for chances).

The name

Edh stands for Event Distributing & Hosting

Đ is a more stylish, single letter, symbolic name of Edh the language

Philosophy

About Everything

In Edh:

Everything is a value, the object is a type of value among other (mostly immutable) types

This is part of the reason why Edh is not an Object Oriented language (see next section), to be contrasted with Python, where:

Everything is an object, a value is an object of some type among other types

Object? - Yes, Oriented? - No

Many don't consider Go (GoLang) an Object Oriented programming language, neither is Edh in similar respect. Edh does pointer-wise Type Embedding in Go spirit, while it takes a small step further to offer that reference, which refers to a descendant record from an ancestor method, in addition to this reference which refers to the lexical self record.

Functional? - Try not to abuse this concept

In a pure functional language like Haskell, everything is a computation, Referencial Transparency is an intrinsic (and really fundamental) property. Bearing the world-changing potential, a procedure in Edh can never qualify as a function.

But if you ask about Functional programming as a possible paradigm you DIY, Edh is supportive as well as other mainstream languages.

Performance Goals

Edh struggles to dig performance improvements majorly out of the human aspect from the human:machine pair, offer wider tolerance, therefore better leverage, over diversified skill sets/levels among all crew members onboard.

This is in the spirit of Ruby. Though Ruby took the road even more Object Oriented, while Edh picked an alternative one, they are both Human Oriented.

And raw machine performance squeezing is offloaded to GHC who has been undescribable good at it since inception.

Zen of Đ (Edh)

  • Always keep in mind that Đ the language and its ecosystem can become as horrible as JavaScript is, if overly used in wrong ways.

    Clues for the language as described here , some issues have been fixed in Đ while others remain pretty the same.

    And epm homes for edh_modules has the potential to become bloated node_modules as well.

    So do programing, modeling and thinking in Haskell (i.e. be a Haskeller), as much as you can.

    For the ones who you must work with but hasn't feel comfortable with Haskell, ask him/her to use Đ, and write host procedures wrapping idiomatic solutions in Haskell to help get his/her job done.

  • Under certain circumstances, there are sweet spots balanced between imperative and declarative stylish, when put together, Đ code can be made even more concise than Haskell code ( see proof here ). Do Đ programming around such sweet spots when you can find them, and when you do, be Edhic, that to be Edhic, is to be more Pythonic than being Pythonic.

  • Whenever you're not sure how to get a bullshit job done, think about how a Gopher would do it

Licensing

I (Compl Yue) choose to distribute Edh related code under BSD, I believe BSD license is proper, it is even permissive for you to re-license it under GPL etc. given the BSD clauses kept distributed together. Though I sincerely hope no one is to attack me by patent infringement.

Academic relationship

No academic background relevant so far, but I (Compl Yue) do feel some ideas here worth further exploration, to be consolidated or even formalized on theoretical ground. If you are doing relevant CS researches, Edh is yet another piece of friendly BSD licensed software at your hand, PRs updating information here, including citation requests for your relevant work are welcomed.

A joke

Finally let me tell you a joke:

Q:

So what's good on Edh the programming language?

A:

Edh is good because it's arguably a three star language (***argspk), as Python is arguably a two star language (**kwargs), while others are at most one star languages or even no star ones.