all repos — h3rald @ 1d2d406eda115a9437c0beef6d25901e8c7263bb

The sources of https://h3rald.com

Improvements and fixes.
h3rald h3rald@h3rald.com
Tue, 18 Dec 2018 14:36:10 +0000
commit

1d2d406eda115a9437c0beef6d25901e8c7263bb

parent

4c347319fef915c50deb582a8a582c80899cbabd

M assets/js/scripts.jsassets/js/scripts.js

@@ -1,17 +1,23 @@

-(function(window){ +(function (window) { 'use strict'; - - // Theme Switching - var themeSwitcher = document.getElementById('theme-switcher'); + var themeLinks = document.getElementsByClassName('theme-css-link'); + var currentTheme = themeLinks[0].href.match(/(light|dark)/)[1]; - themeSwitcher.addEventListener('click', function(){ - var currentTheme = themeLinks[0].href.match(/(light|dark)/)[1]; - var newTheme = currentTheme === 'light' ? 'dark' : 'light'; - for (var i=0; i<themeLinks.length; i++) { - themeLinks[i].href = themeLinks[i].href.replace(currentTheme, newTheme); + document.addEventListener("DOMContentLoaded", function(event) { + // Theme Switching + var themeSwitcher = document.getElementById('theme-switcher'); + function switchTheme() { + var newTheme = currentTheme === 'light' ? 'dark' : 'light'; + for (var i = 0; i < themeLinks.length; i++) { + themeLinks[i].disabled = themeLinks[i].href.match(currentTheme); + themeLinks[i].rel = themeLinks[i].href.match(currentTheme) ? 'alternate stylesheet' : 'stylesheet'; + } + themeSwitcher.title = themeSwitcher.title.replace(newTheme, currentTheme); + themeSwitcher.innerText = currentTheme; + currentTheme = newTheme; } - themeSwitcher.title = themeSwitcher.title.replace(newTheme, currentTheme); - themeSwitcher.innerText = currentTheme; + themeSwitcher.addEventListener('click', switchTheme); }); -})(window) + +})(window)
M assets/styles/_dark-vars.cssassets/styles/_dark-vars.css

@@ -6,15 +6,15 @@ --scale-factor: 1.3333;

--leading: 1.5rem; --letter-spacing: 0.05em; - --link-color: #8A232D; - --link-hover-color: #B22733; + --link-color: #e96363; + --link-hover-color: #ff6e6e; - --heading-text-color: #E0E0E0; - --primary-text-color: #8C8C8C; - --secondary-text-color: #C7C7C7; + --heading-text-color: #dddada; + --primary-text-color: #c7c7c7; + --secondary-text-color: #e0e0e0; - --primary-background: #0D0D0D; - --secondary-background: #282726; + --primary-background: #1e1e1e; + --secondary-background: #262626; --success-color: #005E23; --warning-color: #C97D05;
M assets/styles/_style.cssassets/styles/_style.css

@@ -1,4 +1,3 @@

- /**** * TYPOGRAPHY * (perfect four ratio - 3:4)

@@ -10,321 +9,433 @@ * - http://concisecss.com/documentation/core#typography (colors)

****/ html { - font-size: var(--html-font-size); - line-height: var(--line-height); + font-size: var(--html-font-size); + line-height: var(--line-height); } body { - font-family: 'Calendas Plus', serif; - -moz-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; - -webkit-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; - -ms-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; - font-feature-settings: "liga", "clig", "onum", "frac", "kern"; - -moz-hyphens: auto; - -webkit-hyphens: auto; - -ms-hyphens: auto; - hyphens: auto; - font-weight: 300; - margin: auto; - letter-spacing: var(--letter-spacing); - font-size: var(--base-font-size); - line-height: var(--leading); + font-family: 'Calendas Plus', serif; + -moz-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + -webkit-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + -ms-font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + font-feature-settings: "liga", "clig", "onum", "frac", "kern"; + -moz-hyphens: auto; + -webkit-hyphens: auto; + -ms-hyphens: auto; + hyphens: auto; + font-weight: 300; + margin: auto; + letter-spacing: var(--letter-spacing); + font-size: var(--base-font-size); + line-height: var(--leading); } -h1, .h1 { - font-size: 2.375rem; - line-height: calc(var(--leading) * 2); - margin-top: calc(var(--leading) * 1); - margin-bottom: calc(var(--leading) * 0); + +h1, +.h1 { + font-size: 2.375rem; + line-height: calc(var(--leading) * 2); + margin-top: calc(var(--leading) * 1); + margin-bottom: calc(var(--leading) * 0); } -h2, .h2 { - font-size: 1.75rem; - line-height: calc(var(--leading) * 2); - margin-top: calc(var(--leading) * 1); - margin-bottom: calc(var(--leading) * 1); + +h2, +.h2 { + font-size: 1.75rem; + line-height: calc(var(--leading) * 2); + margin-top: calc(var(--leading) * 1); + margin-bottom: calc(var(--leading) * 1); } -h3, .h3 { - font-size: 1.3125rem; - line-height: calc(var(--leading) * 1); - margin-top: calc(var(--leading) * 1); - margin-bottom: calc(var(--leading) * 0); + +h3, +.h3 { + font-size: 1.3125rem; + line-height: calc(var(--leading) * 1); + margin-top: calc(var(--leading) * 1); + margin-bottom: calc(var(--leading) * 0); } -h4, .h4 { - font-size: 1rem; - line-height: calc(var(--leading) * 1); - margin-top: calc(var(--leading) * 1); - margin-bottom: calc(var(--leading) * 0); + +h4, +.h4 { + font-size: 1rem; + line-height: calc(var(--leading) * 1); + margin-top: calc(var(--leading) * 1); + margin-bottom: calc(var(--leading) * 0); } -h5, .h5 { - font-size: 1rem; - line-height: calc(var(--leading) * 1); - margin-top: calc(var(--leading) * 1); - margin-bottom: calc(var(--leading) * 0); + +h5, +.h5 { + font-size: 1rem; + line-height: calc(var(--leading) * 1); + margin-top: calc(var(--leading) * 1); + margin-bottom: calc(var(--leading) * 0); } -p, ul, ol, pre, table, blockquote { - margin-top: calc(var(--leading) * 0); - margin-bottom: calc(var(--leading) * 1); + +p, +ul, +ol, +pre, +table, +blockquote { + margin-top: calc(var(--leading) * 0); + margin-bottom: calc(var(--leading) * 1); } -ul ul, ol ol, ul ol, ol ul { - margin-top: calc(var(--leading) * 0); - margin-bottom: calc(var(--leading) * 0); + +ul ul, +ol ol, +ul ol, +ol ul { + margin-top: calc(var(--leading) * 0); + margin-bottom: calc(var(--leading) * 0); } -a, b, i, strong, em, small, code { - line-height: calc(var(--leading) * 0); + +a, +b, +i, +strong, +em, +small, +code { + line-height: calc(var(--leading) * 0); } -pre, code { - font-family: 'Hack', monospace; + +pre, +code { + font-family: 'Hack', monospace; } + code.hljs { - font-size: calc(var(--base-font-size) * 0.75); - line-height: calc(var(--leading) * 0.75); + font-size: calc(var(--base-font-size) * 0.75); + line-height: calc(var(--leading) * 0.75); } -small, sub, sup, time, .panel-header, hr::before, footer { - font-size: calc(var(--base-font-size) * 0.75); + +small, +sub, +sup, +time, +.panel-header, +hr::before, +footer { + font-size: calc(var(--base-font-size) * 0.75); } -sub, sup { - line-height: 0; - position: relative; - vertical-align: baseline; + +sub, +sup { + line-height: 0; + position: relative; + vertical-align: baseline; } + sup { - top: -0.5em; + top: -0.5em; } + sub { - bottom: -0.25em; + bottom: -0.25em; } -.primary-subtitle, .secondary-subtitle { - font-style: italic; + +.primary-subtitle, +.secondary-subtitle { + font-style: italic; } -.primary-subtitle { - margin-top: calc(var(--leading) * -1); + +.primary-subtitle { + margin-top: calc(var(--leading) * -1); } + .secondary-subtitle { - margin-top: 0; + margin-top: 0; } + .leading { - line-height: calc(var(--leading) * 1); - margin-top: calc(var(--leading) * 1); - margin-bottom: calc(var(--leading) * 0); + line-height: calc(var(--leading) * 1); + margin-top: calc(var(--leading) * 1); + margin-bottom: calc(var(--leading) * 0); +} + +b, +strong, +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6, +.panel-title { + font-weight: 600; +} + +i, +em, +.primary-subtitle, +.secondary-subtitle, +.panel-header { + font-family: 'Calendas Plus', serif; + font-style: italic; + -moz-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -webkit-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -ms-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; +} + +h1, +h2, +h3, +h4, +h5 { + font-family: 'Calendas Plus', serif; + font-style: normal; + -moz-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -webkit-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + -ms-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; + font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; } -b, strong, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6, .panel-title { - font-weight: 600; +.body-text { + margin-left: 2rem; } -i, em, .primary-subtitle, .secondary-subtitle, .panel-header { - font-family: 'Calendas Plus', serif; - font-style: italic; - -moz-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; - -webkit-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; - -ms-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; - font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; +.home-content .body-text { + margin-left: 0; } -h1, h2, h3, h4, h5 { - font-family: 'Calendas Plus', serif; - font-style: normal; - -moz-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; - -webkit-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; - -ms-font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; - font-feature-settings: "liga", "clig", "dlig", "onum", "frac", "kern"; +.body-text h1, +.body-text h2, +.body-text h3, +.body-text h4, +.body-text h5, +.body-text h6 { + margin-left: -2rem; } + a { - text-decoration: none; - display: inline; + text-decoration: none; + display: inline; } + .content { - padding: 0 calc(var(--leading) * 0.5); - padding-bottom: calc(var(--leading) * 0.25); + padding: 0 calc(var(--leading) * 0.5); + padding-bottom: calc(var(--leading) * 0.25); } + .container-fluid { - padding: 0 calc(var(--leading) * 0.5); + padding: 0 calc(var(--leading) * 0.5); } time { - text-align: right; - display: block; + text-align: right; + display: block; } - .sidebar header { - text-align: center; + text-align: center; } #theme-switcher { - font-style: italic; - cursor: pointer; + font-style: italic; + cursor: pointer; } .main-header h1 { - margin-top: 0.1em; + margin-top: 0.1em; } .logo { - margin: auto; - display:block; - margin-left:20px; /* Fix for incorrect font alignment */ + margin: auto; + display: block; + margin-left: 20px; + /* Fix for incorrect font alignment */ } a.logo { - text-decoration: none; + text-decoration: none; } + hr { - border: none; - margin: 0; + border: none; + margin: 0; } hr::before { - content: '\2042'; - display:block; - text-align: center; + content: '\1F65E\00A0\00A0\2042\00A0\00A0\1F65C'; + font-size: 1rem; + display: block; + text-align: center; } .card:last-child .card-footer::after { - content: none; + content: none; } .card-footer { - text-align: center; - margin: auto; + text-align: center; + margin: auto; } .label { - padding: calc(var(--leading) * 0.15); - border-radius: 4px; + padding: calc(var(--leading) * 0.15); + border-radius: 4px; } .card-footer .action::after { - content: '\00B7'; + content: '\00B7'; } .card-footer .action:last-child::after { - content: none; + content: none; } .panel { - margin-top: calc(var(--leading) * 1); + margin-top: calc(var(--leading) * 1); } .panel-header { - text-align: right; + text-align: right; } .panel-body { - margin-top: calc(var(--leading) * -1); + margin-top: calc(var(--leading) * -1); } .panel-body header { - text-align: left; + text-align: left; } -footer, .badges { - text-align: center; +footer, +.badges { + text-align: center; } ul.inline { - padding-left: 0; + padding-left: 0; } ul.inline li { - display: inline; + display: inline; } -footer p, footer ul.inline, .secondary-subtitle { - margin-bottom: calc(var(--leading) * 0); +footer p, +footer ul.inline, +.secondary-subtitle { + margin-bottom: calc(var(--leading) * 0); } footer .h3rald { - font-size: 0.85rem; /* Compensate */ - vertical-align: text-bottom; + font-size: 0.85rem; + /* Compensate */ + vertical-align: text-bottom; } .clearfix { - clear: both; + clear: both; } img { - max-width: 100%; + max-width: 100%; } -pre code, img { - border-radius: 4px; +pre code, +img { + border-radius: 4px; } - - /***** * THEME *****/ body { - background: var(--primary-background); - color: var(--primary-text-color); + background: var(--primary-background); + color: var(--primary-text-color); } -h1, h2, h3, h4, h5, h6, -.h1, .h2, .h3, .h4, .h5 { - color: var(--heading-text-color); +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5 { + color: var(--heading-text-color); } .primary-subtitle { - color: var(secondary-text-color); + color: var(secondary-text-color); } -a, a:visited { - color: var(--link-color); +a, +a:visited { + color: var(--link-color); } a:hover { - color: var(--link-hover-color); + color: var(--link-hover-color); } .content { - background: var(--primary-background); - color: var(--primary-text-color); + background: var(--primary-background); + color: var(--primary-text-color); } -.main, .sidebar, .sidebar .content { - background: var(--primary-background); - color: var(--primary-text-color); +.main, +.sidebar, +.sidebar .content { + background: var(--primary-background); + color: var(--primary-text-color); } -.sidebar a, .sidebar a:visited { - color: var(--link-color); +.sidebar a, +.sidebar a:visited { + color: var(--link-color); } .sidebar a:hover { - color: var(--link-hover-color); + color: var(--link-hover-color); } -a.logo, a.logo:visited, a.logo:hover { - color: var(--heading-text-color); +a.logo, +a.logo:visited, +a.logo:hover { + color: var(--heading-text-color); } -.sidebar hr, .main hr, .panel-header { - color: var(--secondary-text-color); +.sidebar hr, +.main hr, +.panel-header { + color: var(--secondary-text-color); } .label { - color: var(--heading-text-color); - font-variant: small-caps; + color: var(--heading-text-color); + font-variant: small-caps; } .label-success { - background: var(--success-color); + background: var(--success-color); } .label-warning { - background: var(--warning-color); + background: var(--warning-color); } .label-error { - background: var(--error-color); + background: var(--error-color); } -code, preĀ { - background-color: var(--secondary-background); +code, +pre { + background-color: var(--secondary-background); } -pre code, img { - border: 1px solid var(--secondary-background); -} +pre code, +img { + border: 1px solid var(--secondary-background); +}
M contents/articles/10-more-programming-languages.mdcontents/articles/10-more-programming-languages.md

@@ -3,7 +3,8 @@ id: 10-more-programming-languages

title: "10 more programming languages worth checking out" subtitle: "Another look at 10 non-mainstream programming languages, 10 years later" content-type: article -timestamp: 1544374221 +timestamp: 1545358888 +draft: true ----- It has been exactly 10 years today since I published my [10 programming languages worth checking out](/articles/10-programming-languages) article on this web site.

@@ -14,69 +15,178 @@ The following 10 sections are devoted to 10 different programming languages. They are not numbered and they are presented in alphabetical order, because there's no winner in this list. Also, the number of people actively using these languages varies quite a lot, but none of these can be considered, at the time of writing, a _mainstream_ programming language like JavaScript, C, C++, Python or Ruby.

<hr /> +### Crystal + +_Fast as C, slick as Ruby_ &mdash; it pretty much sums it up. Crystal was first released in 2014 as Ruby-like programming language but backed by [LLVM](https://llvm.org/), so compiled and inherently (much) faster than its popular, more-colorful ancestor. + +While no 1.0 has been released yet, the language is quite popular. It comes with a [web framework](https://amberframework.org/), it has been used to create [games](https://medium.com/@alanwillms/you-should-write-your-next-game-with-crystal-f27306b63e3d), and someone even calls it [the most promising programming language of 2018](https://medium.com/@DuroSoft/why-crystal-is-the-most-promising-programming-language-of-2018-aad669d8344f). It is not backed by a big companies like some of the languages on this list, but it could be a good thing, after all. + +#### To get you started... + +* [Official Web Site](https://crystal-lang.org/) +* [Official Forum](https://forum.crystal-lang.org/) +* [Wikipedia Page][wiki-crystal] +* [Awesome Crystal](https://github.com/veelenga/awesome-crystal) +* [Crystal Shards - a collection of awesome Crystal libraries](https://crystalshards.xyz/) + +[wiki-crystal]:https://en.wikipedia.org/wiki/Crystal_(programming_language) ### Elixir +Elixir came about in 2011, as an effort to bring more extensibility, metaprogramming and a more [Ruby](https://www.ruby-lang.org/en/)-esque syntax to the [Erlang](https://www.erlang.org/) world. If you are already in love Ruby, but you'd like a little bit more oomph, you'll love Elixir: it runs on top of the Erlang virtual machine but it looks and feels like Ruby. And Crystal, of course. + +Over the years Elixir steadily grew in popularity, reached a version 1.0, and it now provides really comprehensive documentation, a friendly community and a rich ecosystem of packages. Also, if you are looking for a Rails/Django/Express equivalent, the [Phoenix](https://phoenixframework.org/) framework has been used successfully in [many projects](https://medium.com/aviabird/10-amazing-open-source-elixir-phoenix-apps-e2c52ee25053). + #### To get you started... * [Official Web Site](https://elixir-lang.org/) +* [Official Forum](https://elixirforum.com/) +* [Wikipedia Page][wiki-elixir] +* [Awesome Elixir](https://github.com/h4cc/awesome-elixir) +* [The hex package manager](https://hex.pm/) + +[wiki-elixir]:https://en.wikipedia.org/wiki/Elixir_(programming_language) ### Go +One of the most significant trends in the last 10 years is big companies creating and sponsoring their own programming languages. In 2009, Google created Go as a more modern substitute to C and C++. It provides [structural typing](https://en.wikipedia.org/wiki/Structural_type_system), memory safety, multi-paradigm support, high performance and concurrency, but also a friendlier syntax. + +One example of a successful application written in Go? [Docker](https://www.docker.com/) of course, and [Kubernetes](https://kubernetes.io/) as well. But over the years Go has been used successfully to build almost anything, from web frameworks like [Revel](http://revel.github.io/), data stores like [InfluxDb](https://github.com/influxdata/influxdb) and static site generators like [Hugo](https://gohugo.io/). + #### To get you started... +* [Official Web Site](https://golang.org/) +* [Official Forum](https://forum.golangbridge.org/) +* [Wikipedia Page][wiki-go] +* [Awesome Go](https://awesome-go.com/) +* [dep - Dependency Management for Go](https://golang.github.io/dep/) + +[wiki-go]:https://en.wikipedia.org/wiki/Go_(programming_language) + ### Julia -#### To get you started... +Julia started out in 2009 and reached its 1.0 release just a few months ago. It is written mainly in C except for its parser that is written in [FemtoLisp](https://github.com/JeffBezanson/femtolisp) a Scheme implementation created by Julia's creator, Jeff Bezanson. + +Perhaps among the most specialized programming languages in this list, Julia excels in scientific computing, data analysis and machine learning although it can still be used for more ordinary things like web development (thanks to its [Genie](http://genieframework.com/) framework). The first thing that comes to mind when people approach this language is why would you use it when [Python](https://www.python.org/) and [R](https://www.r-project.org/) already exist and are more mainstream in the scientific domain... well, the answer seems to be predominantly performance (when compared to its direct competitors at least). -### Kotlin +Sure, it's less mature and tooling probably is not quite comparable to Python, but over the years it is slowly gaining some momentum, especially after its 1.0 release. Also, the fact that it has FFIs to C, Fortran, Python, R and Java could probably tempt more scientists into a more step-by-step adoption. #### To get you started... -### Luna +* [Official Web Site](https://julialang.org/) +* [Official Forum](https://discourse.julialang.org/) +* [Wikipedia Page][wiki-julia] +* [Awesome Julia](https://github.com/greister/Awesome-Julia) +* [Pkg - Julia Package Manager](https://pkg.julialang.org/) -I rediscovered a bookmark to the web site of the Luna programming language in my [-proglangs](https://pinboard.in/u:h3rald/t:-proglangs) Pinboard tag recently, and after reading more about it I decided to include it in this list because, unlike any other languages listed here, it provides _both_ a textual and a visual representation, and each can be used interchangeably to create Luna programs. +[wiki-julia]:https://en.wikipedia.org/wiki/Julia_(programming_language) -Having multiple representations for the _model_ of a programming language is a very powerful concept, but it is not applied very often (and to such an extent) in mainstream programming languages. It is quite a cool concept nonetheless. +### Kotlin + +Born in 2011, Kotlin was originally JetBrains' attempt to create a language with cool features like functional programming support, extension methods, etc. but still compile very quickly compared to other JVM languages like Scala (it can also be compiled to JavaScript code). + +Quite a few high-profile Android apps [have been migrated to Kotlin](https://appinventiv.com/blog/apps-migrated-from-java-to-kotlin) over the years, reporting various benefits ranging from being much more concise, safer and overall more maintainable than Java code. Besides JetBrains, a few startups and companies are reportedly using Kotlin in production, such as Basecamp, Square, and Pinterest. -I highly recommend giving Luna a try but downloading an installer for your operating system from Luna's home page. It will install Luna Studio, an [Atom](https://atom.io/)-based editor that can be used to create and run Luna programs. +Although I have never been a big fan of the JVM, Kotlin is definitely one of the most innovative and trending languages running on it nowadays, and perhaps more well-known than its comparable contenders, like [Ceylon](https://ceylon-lang.org/) and [Xtend](https://www.eclipse.org/xtend/), the so-called _second generation_ JVM languages. #### To get you started... -* [Official Web Site](https://www.luna-lang.org/) -* [Reference Documentation](http://docs.luna-lang.org/) -* [Official Blog](https://medium.com/@luna_language) +* [Official Web Site](https://kotlinlang.org/) +* [Official Forum](https://discuss.kotlinlang.org/) +* [Wikipedia Page][wiki-kotlin] +* [Awesome Kotlin](https://github.com/KotlinBy/awesome-kotlin) + +[wiki-kotlin]:https://en.wikipedia.org/wiki/Kotlin_(programming_language) ### Nim -Nim is the only language in this list that is also present in the [original article](/articles/10-programming-languages), but under the name _Nimrod_. The language indeed changed name over the years to _Nim_ because apparently _Nimrod_ in the US means _idiot_ or something... Anyhow, after 10 years, the Nim programming language hasn't reached version 1.0 yet, but according to the core team we are apparently _very close_. +Nim is the only language in this list that is also present in the [original article](/articles/10-programming-languages), but under the name _Nimrod_. -Although currently at version 0.19.0, Nim is quite stable and can be used in production as quite an efficient system programming language that compiles to C. You may want to watch out for deprecations between one release and the other, but I've been using it for the last... _10 years_ and it has been a remarkable experience. I use Nim in my spare time in quite a few pet projects, such as: +Anyhow, after 10 years, the Nim programming language hasn't reached version 1.0 yet, but according to the core team we are apparently _very close_. -* [LiteStore](/litestore/) &mdash; A lightweight, self-contained, searchable document store. -* [min](/min/) &mdash; A small concatenative programming language that sneakily found its way into this article after all... -* [HastyScribe](/hastyscribe/) &mdash; An advanced markdown compiler able to generate self-contained HTML files. -* [HastySite](/hastysite/) &mdash; The static site generator powered by HastyScribe and min that currently powers this web site. -* [Nifty](/nifty/) &mdash; A pseudo-package manager and script runner used to build nearly all the other projects. -* [NimHTTPD](/nimhttpd/) &mdash; A simple web server for serving static files. +Although currently at version 0.19.0, Nim is quite stable and can be used in production as quite an efficient system programming language that compiles to C. You may want to watch out for deprecations between one release and the other, but I've been using it for the last... _10 years_ and it has been a remarkable experience. I use Nim in my spare time in quite a few pet [projects](/projects/). + +Want to know something else really cool written in Nim? The open source [Nim forum engine](https://github.com/nim-lang/nimforum) which is based on the [Karax](https://github.com/pragmagic/karax) SPA framework and the [Jester](https://github.com/dom96/jester) web server. #### To get you started... * [Official Web Site](https://nim-lang.org) +* [Official Forum](https://forum.nim-lang.org/) +* [Wikipedia Page][wiki-nim] +* [Awesome Nim](https://github.com/VPashkov/awesome-nim) +* [Nim Package Directory](https://nimble.directory/) + +[wiki-nim]:https://en.wikipedia.org/wiki/Nim_(programming_language) + ### Rust +Mozilla unveiled Rust in 2010, as an effort to create a high-performance system programming language comparable to C and C++ for performance, but easier to use and with more modern features common to high-level programming language. + +After 8 years, portions of Firefox, Dropbox and Cloudflare are written in Rust, the [Piston](https://www.piston.rs/) open source game engine is written in Rust, and of course Mozilla's [Servo](https://servo.org/), a new browser engine that will probably make its way into Firefox in the near future. + +There are quite a few articles online comparing Rust to Nim and Go. These three language are somewhat in the same space, being at least born as system programming languages. If you read these articles you'll see an almost equal percentage of wins and losses... there are pros and cons as in everything: Nim has the smallest community, Go probably the biggest; Nim syntax is practically Python, Go's is pretty easy as well, while Rust seems syntactically the closes to C/C++, and also arguably the most complex. But again, your mileage may vary. + #### To get you started... +* [Official Web Site](https://www.rust-lang.org/) +* [Official Forum](https://users.rust-lang.org/) +* [Wikipedia Page](https://en.wikipedia.org/wiki/Rust_(programming_language)) +* [Awesome Rust](https://github.com/rust-unofficial/awesome-rust) +* [Crates - Rust Package Registry](https://crates.io/) + + ### Swift + +Swift is Apple's answer to the prayers of many iOS app developers complaining that Objective C was too hard to program with. It was first released in 2014 and it became very popular especially among iOS developers... in fact I don't believe it's used for anything else really. + +Similarly, it doesn't run on Windows but only on Unixes (Darwin/Linux/FreeBSD), but typically 90% of its users are going to program in Swift using XCode on their macOS machine. + +While definitely a step up from Objective-C from a syntax and high-level features point of view, unlike other languages on this list its niche is pretty much mobile apps, or better, iOS apps. If I were to develop an iOS app, I'd probably pick Swift as well. #### To get you started... +* [Official Web Site](https://swift.org/) +* [Official Forum](https://forums.swift.org/) +* [Wikipedia Page][wiki-swift] +* [Awesome Swift](https://github.com/matteocrippa/awesome-swift) + +[wiki-swift]:https://en.wikipedia.org/wiki/Swift_(programming_language) + ### Wren +Now, this is a real gem. There's only a 0.1.0 release on GitHub from 2016, but you're better off cloning straight from the repo for the latest stuff. I think this pretty much answers the question _how new is this language?_ + +Wren is a really small (in size), interpreted scripting language with a very clean and familiar syntax, that packs a lot of features, as well as concurrency support via lightweight fibers. It has no dependencies and it is extremely well suited for embedding in C programs. Oh, and it's [fast](http://wren.io/performance.html) compared to other interpreters. + +Of course it cannot be compared of behemoths like Rust or Go, it's a tiny little thing, written by [one single person](http://journal.stuffwithstuff.com/) I really admire very much. + +You won't use it for writing your next mission-critical, life-saving piece of software, but if you want a modern, advanced, easy to learn, pleasant to write scripting language for your next project, look no further: give Wren a shot. Yes sure, [Lua](https://www.lua.org/) is probably dominating this space, but what the hell, there's no harm in trying something new, right? + #### To get you started... +* [Official Web Site](http://wren.io/) + ### Zig +Slightly more mainstream then Wren, Zig was born in 2016 and it hit its 0.3.0 release just a few months ago. The language positions itself in the already-crowded space of the next generation system programming languages, but there's a [rationale](https://github.com/ziglang/zig/wiki/Why-Zig-When-There-is-Already-CPP,-D,-and-Rust%3F) for it. + +It is essentially a much smaller, more minimalist alternative to Rust, C++, and D. Its syntax doesn't look as user-friendly as other languages on this list, but Zig seems to have a particular focus on being _safer_ than its competitors. It provides easy interoperability with C (_Compatible with C libraries with no wrapper necessary. Directly include C .h files and get access to the functions and symbols therein._) and aims at targeting as many platforms as possible. + +Could this be the holy grail, the true replacement of C? Only time will tell. It's way too soon to judge, but this new kid on the block is the last on this list, but one of the most promising. + #### To get you started... +* [Official Web Site](https://ziglang.org/) + +### Epilogue + +...And that's all, folks! Sorry if I missed your favorite language, I really am. But this is not really a competition, it's just a very opinionated article. + +The one thing to take away from this article, along with a bunch of links, is that _none of these languages existed_ when I wrote [the original article](/articles/10-programming-languages) 10 years ago (except for Nim of course that already existed as _Nimrod_). This is remarkable. 10 years ago people were already going crazy on the then-just-launched Hacker News and Reddit every time a new programming language popped up. + +_Why bother?_ &mdash;They said. _Why did you create X when Y and Z already do the same thing?_ + +The answer is that creating a new programming language is sometimes the best strategy to solve a problem. Apple had a problem with Objective-C and created Swift, Mozilla needed something better than C++ to create their next generation browser, some people really loved Ruby but hated its inherent slowness and created Crystal and Elixir. All these extraordinary people and companies were bold enough to bet on something _completely new_ and be successful. + +We are living a new Golden Age of programming language design, and we should be grateful for this diversity, not pissed off. Learning a new programming language may feel pointless sometimes, but it is always rewarding to some level... so pick one of these and try it out, you won't be disappointed.
M templates/_footer.mustachetemplates/_footer.mustache

@@ -2,28 +2,28 @@ <footer class="sidebar">

<p><span class="h3rald"></span> Web Site v9.2.0</p> <p>&copy; 2004&mdash;2018 &bull; <em>Fabio Cevasco</em></p> <ul class="inline"> - <li><a href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#104;&#51;&#114;&#97;&#108;&#100;&#64;&#104;&#51;&#114;&#97;&#108;&#100;&#46;&#99;&#111;&#109;'> + <li><a title="email" href='&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#104;&#51;&#114;&#97;&#108;&#100;&#64;&#104;&#51;&#114;&#97;&#108;&#100;&#46;&#99;&#111;&#109;'> <i class="ent ent-mail"></i> </a></li> - <li><a href="https://www.linkedin.com/in/fabiocevasco" rel="me"> + <li><a title="LinkedIn" href="https://www.linkedin.com/in/fabiocevasco" rel="me"> <i class="ent ent-linkedin"></i> </a></li> - <li><a href="http://twitter.com/h3rald" rel="me"> + <li><a title="Twitter" href="http://twitter.com/h3rald" rel="me"> <i class="ent ent-twitter"></i> </a></li> - <li><a href="http://pinboard.in/u:h3rald/" rel="me"> + <li><a title="Pinboard" href="http://pinboard.in/u:h3rald/" rel="me"> <i class="ent ent-pin"></i> </a></li> - <li><a href="http://instagram.com/h3rald/" rel="me"> + <li><a title="Instagram" href="http://instagram.com/h3rald/" rel="me"> <i class="ent ent-instagram"></i> </a></li> - <li><a href="https://github.com/h3rald" rel="me"> + <li><a title="GitHub" href="https://github.com/h3rald" rel="me"> <i class="ent ent-github"></i> </a></li> - <li><a href="https://www.flickr.com/photos/h3rald/" rel="me"> + <li><a title="Flickr" href="https://www.flickr.com/photos/h3rald/" rel="me"> <i class="ent ent-flickr"></i> </a></li> - <li><a href="http://foursquare.com/h3rald" rel="me"> + <li><a title="FourSquare" href="http://foursquare.com/h3rald" rel="me"> <i class="ent ent-foursquare"></i> </a></li> </ul>

@@ -43,4 +43,3 @@ </footer>

<script src="/js/es6-shim.min.js" type="text/javascript"></script> <script src="/js/axios.min.js" type="text/javascript"></script> <script src="/js/highlight.pack.js" type="text/javascript"></script> -<script src="/js/scripts.js" type="text/javascript"></script>
M templates/_head.mustachetemplates/_head.mustache

@@ -5,14 +5,17 @@ <meta name="author" content="Fabio Cevasco" />

<meta name="robots" content="all, follow" /> <meta name="Revisit-After" content="2 Days" /> <meta name="description" content="H3RALD - Fabio Cevasco's Web Site" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="keywords" content="{{keywords}}" /> <link rel="shortcut icon" href="/favicon.png" type="image/png" /> <meta content="44.388041;9.073248" name="ICBM" /> <link rel="stylesheet" type="text/css" href="/styles/entypo.css" /> <link rel="stylesheet" type="text/css" href="/styles/fonts.css" /> <link rel="stylesheet" type="text/css" href="/styles/atom-one-dark.css" class="theme-css-link" /> + <link rel="alternate stylesheet" type="text/css" href="/styles/atom-one-light.css" class="theme-css-link" /> <link rel="stylesheet" type="text/css" href="/styles/flexboxgrid.min.css" /> <link rel="stylesheet" type="text/css" href="/styles/flexboxgrid-helpers.min.css" /> <link rel="stylesheet" type="text/css" href="/styles/dark-theme.css" class="theme-css-link" /> + <link rel="alternate stylesheet" type="text/css" href="/styles/light-theme.css" class="theme-css-link" /> + <script src="/js/scripts.js" type="text/javascript"></script> </head>
M templates/_header.mustachetemplates/_header.mustache

@@ -1,6 +1,6 @@

<div>&rarr; <a id="theme-switcher" title="Switch to light theme">light</a></div> <header class="main-header box"> - <h1><a href="/" class="h3rald logo" alt="H3RALD">&nbsp;</a></h1> + <h1><a href="/" title="H3RALD" class="h3rald logo" alt="H3RALD">&nbsp;</a></h1> <div class="navlinks"> <a href="/archives" class="navbar-link navbar-left">articles</a> &middot;
M templates/_panels.mustachetemplates/_panels.mustache

@@ -3,19 +3,19 @@ <div class="panel-header">

featured articles </div> <div class="panel-body"> - <article id="a_randal-schwartz"> + <article> <header> <h3><a href="/articles/randal-schwartz/">A pizza with Randal Schwartz</a></h3> <p class="secondary-subtitle">Talking about open source, programming, emacs and technical writing</p> </header> </article> - <article id="a_herald-vim-color-scheme"> + <article> <header> <h3><a href="/articles/herald-vim-color-scheme/">Herald (Vim Color Scheme)</a></h3> <p class="secondary-subtitle">My very own VIM color scheme. Featuring 256, 16 and 8 color support, high readability and... pretty colors!</p> </header> </article> - <article id="a_10-programming-languages"> + <article> <header> <h3><a href="/articles/10-programming-languages/">10 programming languages worth checking out</a></h3> <p class="secondary-subtitle">A quick comparison of 10 non-mainstream programming languages</p>
M templates/home.mustachetemplates/home.mustache

@@ -12,7 +12,7 @@ </div>

</div> <!-- Sidebar End --> <div class="col-xs-12 col-sm-8 col-md-9"> - <div class="box content"> + <div class="box content home-content"> <article> <h2><a href="/{{latest.id}}">{{latest.title}}</a></h2> <p class="primary-subtitle">