## Compare commits

...

#### 6 Commits master ... eternal-la

7 changed files with 236 additions and 110 deletions
1. 8
engine/dev.sh
2. 104
src/Scratch/en/blog/feed/feed.xml
3. 2
src/Scratch/en/blog/index.html
4. 104
src/Scratch/fr/blog/feed/feed.xml
5. 2
src/Scratch/fr/blog/index.html
6. 2
src/css/y.css
7. 124
src/posts/0022-eternal-language/index.org

#### 8 engine/dev.sh View File

 @ -12,9 +12,9 @@ blue=4 # magenta=5 # cyan=6 # white=7 green() { printf "$(tput setaf$green)%s$(tput sgr0)" "$*" } yellow() { printf "$(tput setaf$yellow)%s$(tput sgr0)" "$*" } blue() { printf "$(tput setaf$blue)%s$(tput sgr0)" "$*" } green() { printf "$(tput setaf$green)%s$(tput sgr0)\n" "$*" } yellow() { printf "$(tput setaf$yellow)%s$(tput sgr0)\n" "$*" } blue() { printf "$(tput setaf$blue)%s$(tput sgr0)\n" "$*" }   pipegreen() {while read line; do green $line; done} pipeyellow() {while read line; do yellow$line; done} @ -23,4 +23,4 @@ pipeblue() {while read line; do blue \$line; done} tee >(lorri watch | sed 's/^/[lorri] /' | pipegreen ) \  >(./engine/serve.sh | sed 's/^/[http] /' | pipeyellow) \  >(./engine/auto-build.sh | sed 's/^/[make] /' | pipeblue) \  >(sleep 1 && open 'http://127.0.0.1:3000')  >(sleep 1 && open 'http://127.0.0.1:3077')

#### 104 src/Scratch/en/blog/feed/feed.xml View File

 @ -4694,12 +4694,12 @@ robustnessClusters=[[ "elli" , "cowboy" , "snap" , "yesod"  http://yannesposito.com/Scratch/en/blog/Category-Theory-Presentation/index.html  2012-12-12T00:00:00Z  2012-12-12T00:00:00Z       

Yesterday I was happy to make a presentation about Category Theory at Riviera Scala Clojure Meetup (note I used only Haskell for my examples).

  
• Click here to go to the HTML presentation. 
• Click Here to download the PDF slides (LaTeX not rendered properly)    

If you don't want to read them through an HTML presentations framework or downloading a big PDF @ -4749,14 +4749,14 @@ just continue to read as a standard web page. 



Not really about: Cat & glory

   



General Overview


    
  

Recent Math Field
1942-45, Samuel Eilenberg & Saunders Mac Lane

@ -4782,7 +4782,7 @@ just continue to read as a standard web page. 



Math Programming relation

  

Programming is doing Math



Strong relations between type theory and category theory.



Not convinced?
Certainly a vocabulary problem.

@ -4790,7 +4790,7 @@ just continue to read as a standard web page. 



Vocabulary

  

Math vocabulary used in this presentation:




Category, Morphism, Associativity, Preorder, Functor, Endofunctor, Categorial property, Commutative diagram, Isomorph, Initial, Dual, Monoid, Natural transformation, Monad, Klesli arrows, κατα-morphism, ...

@ -4798,7 +4798,7 @@ just continue to read as a standard web page. 



Programmer Translation

   
Mathematician @ -4870,14 +4870,14 @@ LOLCat 


Category: Objects

      

$$\ob{\mathcal{C}}$$ is a collection





Category: Morphisms

      

$$A$$ and $$B$$ objects of $$\C$$
$$\hom{A,B}$$ is a collection of morphisms
@ -4889,18 +4889,18 @@ LOLCat 

Composition (∘): associate to each couple $$f:A→B, g:B→C$$  $$g∘f:A\rightarrow C$$ 

  



Category laws: neutral element



for each object $$X$$, there is an $$\id_X:X→X$$,
such that for each $$f:A→B$$:

  



Category laws: Associativity



Composition is associative:

  



Commutative diagrams

@ -4908,7 +4908,7 @@ such that for each $$f:A→B$$:



Two path with the same source and destination are equal.

 
@ -5559,11 +5559,11 @@ drawPoint p = do 



fold

  



κατα-morphism

  



κατα-morphism: fold generalization

#### 2 src/Scratch/en/blog/index.html View File

 @ -114,7 +114,7 @@ Learn Haskell Fast and Hard » 2013-03-14
 
•  2012-12-12
Category Theory Presentation
2012-12-12
Category Theory Presentation

•  
•  2012-06-15

• #### 104 src/Scratch/fr/blog/feed/feed.xml View File

 @ -4689,12 +4689,12 @@ robustnessClusters=[[ "elli" , "cowboy" , "snap" , "yesod"  http://yannesposito.com/Scratch/fr/blog/Category-Theory-Presentation/index.html  2012-12-12T00:00:00Z  2012-12-12T00:00:00Z       

Yesterday I was happy to make a presentation about Category Theory at Riviera Scala Clojure Meetup (note I used only Haskell for my examples).

  
• Click here to go to the HTML presentation. 
• Click Here to download the PDF slides (LaTeX not rendered properly)    

If you don't want to read them through an HTML presentations framework or downloading a big PDF @ -4744,14 +4744,14 @@ just continue to read as a standard web page. 



Not really about: Cat & glory

   



General Overview


    
  

Recent Math Field
1942-45, Samuel Eilenberg & Saunders Mac Lane

@ -4777,7 +4777,7 @@ just continue to read as a standard web page. 



Math Programming relation

  

Programming is doing Math



Strong relations between type theory and category theory.



Not convinced?
Certainly a vocabulary problem.

@ -4785,7 +4785,7 @@ just continue to read as a standard web page. 



Vocabulary

  

Math vocabulary used in this presentation:




Category, Morphism, Associativity, Preorder, Functor, Endofunctor, Categorial property, Commutative diagram, Isomorph, Initial, Dual, Monoid, Natural transformation, Monad, Klesli arrows, κατα-morphism, ...

@ -4793,7 +4793,7 @@ just continue to read as a standard web page. 



Programmer Translation

   
Mathematician @ -4865,14 +4865,14 @@ LOLCat 


Category: Objects

      

$$\ob{\mathcal{C}}$$ is a collection





Category: Morphisms

      

$$A$$ and $$B$$ objects of $$\C$$
$$\hom{A,B}$$ is a collection of morphisms
@ -4884,18 +4884,18 @@ LOLCat 

Composition (∘): associate to each couple $$f:A→B, g:B→C$$  $$g∘f:A\rightarrow C$$ 

  



Category laws: neutral element



for each object $$X$$, there is an $$\id_X:X→X$$,
such that for each $$f:A→B$$:

  



Category laws: Associativity



Composition is associative:

  



Commutative diagrams

@ -4903,7 +4903,7 @@ such that for each $$f:A→B$$:



Two path with the same source and destination are equal.

 
@ -5554,11 +5554,11 @@ drawPoint p = do 



fold

  



κατα-morphism

  



κατα-morphism: fold generalization

#### 2 src/Scratch/fr/blog/index.html View File

 @ -114,7 +114,7 @@ Haskell Vite et Direct » 2013-03-14
Être correct avec les boutons share
 
•  2012-12-12
Category Theory Presentation
2012-12-12
Category Theory Presentation

•  
•  2012-06-15
 @ -131,3 +131,5 @@ a,a:visited { color: var(--fg); } /* LEGACY */ .inlineblockimg { display: inline-block; } .inlineblockimg > img { display: inline-block; vertical-align: middle; width: 3em; }   .definition,.example,.theorem,.conjecture { padding: 0 1rem; margin: 1rem; }
 @ -0,0 +1,124 @@ #+title: Eternal Language #+description: #+keywords: blog static #+author: Yann Esposito #+email: yann@esposito.host #+date: [2021-11-15 Mon] #+lang: en #+options: auto-id:t #+startup: showeverything     The oldest code I ever wrote was probably in logo, then in Basic. Then I learned Turbo Pascal, then C, but also awk, csh, bash, etc… And for most of these programs, I am pretty confident, that taking the source code and using it today will still work as I would expect.   Then during my PhD, I wrote a quite extensive C++ program. And, this was probably one of the first time I used extensively a library. But, a few years later, I couldn't make my code compile. I updated my code to make it work again. But today, I wouldn't be surprised to learn it doesn't work anymore. Why? The compiler will not accept some of my code, the library might have a few issues. Whatever, it is difficult.   I think, most of my application code suffer from the same issue. The ecosystem of the language evolve, but if I don't take care of my code, it rots. But really fast.   Wouldn't it be nice to be able to know that a code you write today will still be usable in 10, 30 or 100 years? Could this be possible looking at how our industry is going in the opposite direction?   Have you remarked how difficult it is to have something now. I mean, really have an object that you know, could be passed to your children that they themselves pass to theirs for many generations.   In particular in the Software programming industry, or community at large. This remark is not only valid for the industry but for the science as well. See how it was difficult to reproduce AI experiments. See how difficult it is for a searcher to provide the same stable testing environment he has locally. Worse than that. The code they provide will almost not be compatible with the future environment. And imagine someone has a great new idea to update an old idea. It will not be able to use a recent library on the old code. So having a nice reproducible environment is not enough.   Where are the Joconde of the XXIth century? Where are the thinker in the Software world?   We should strive to find, if possible a single, "Eternal Language".   #+begin_definition *Definition:* An /eternal programming language/ is a language both backward and forward compatible. #+end_definition   Backward compatible: using code from v1 will work with v2. Forward compatible: using code from v2 will work with v1.     - *TeX*, once written, it was never updated. It contained everything it  needed. The project was over, and there is an active philosophy of  software at hand about having a finished program. It does one thing as  perfectly as possible. Any new feature should be build around TeX, but  TeX in itself must not be changed. This is an Eternal language reached by  this culture of providing a finished product.  Note how different this is today. The first reaction of many people to  check if they should use a tool or a software is to look at the activity  of the repository. And if there is no activity, they see that as a sign  of dead project. Depending on the project this is better to check that  there is no activity at all. - *C*, here Eternal Language is reached via a specification   Almost Eternal Languages:   - *Clojure*, this is almost the same kind of philosophy at hand. But it is  not yet an Eternal language. Clojure introduced a few new feature that  will not work in the past. But, this is close to be an eternal language. - *go*, I dislike this language as to me this is like a new *C* without much  more to it. We can do so much better regarding new languages this sadden  me people chose it. But the *go* community takes API retro compatibility  very seriously, and thus, it sounds like it is close to reaching the  status of Eternal Language.   The opposite of Eternal Language   - *Haskell*, every new GHC upgrade break something. Every new lib update  break something. People tried to mitigate this via tools. But the real  issue is due to how the community works. I am myself guilty of breaking  library API.  Clearly, as much as I love Haskell, the best you can achieve is a freeze  in time environment. But this is often a major problem. Because if you  want to build an application that will adapt to new concerns, eventually  you will want to use a recent library. And by doing so, you will need to  upgrade your environment that will forces you to upgrade the libraries,  the compiler, and will forces you to change many parts in your code that  you would probably have preferred to forget as a stable asset.  And quite recently the Haskell community was heated by that. - *Purescript*, as the updates occurs with slower pace, this is more  sustainable, but this is still a major concern.   Both Eternal and opposite of Eternal Language;   - *Javascript*, while javascript in itself is close to be an eternal language.  node.js / npm, etc… The community makes it completely the opposite.   ** How to reach Eternal Language? :PROPERTIES: :CUSTOM_ID: how-to-reach-eternal-language- :END:   I am not a specialist of these questions, so my advice will probably be naive to the extreme. But here is how I imagine a list of mandatory properties:   1. Have a minimal core for your language. 2. Finish the compiler (only fix bugs) 3. Have a language with huge adaptability principles built into it. Like  LISP with macros for example. Macros are a way to trick LISP to use  another language within the core language.