<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto">Hi,<div><br></div><div>I would also consider Go. It’s actually a really good language in my opinion. It’s one of the few “modern” languages that gets lambda expressions correct. (No funky exceptional behavior, you can assign to variables in the lexical environment, and the correct thing happens.)</div><div><br></div><div>It has a “general” type called interface{} that holds values of any type. This is not a kludge like in Java, or so, where java.lang.Object holds any object except for “primitive” types, but interface{} actually stores any type. (Including int8, int16, int32, etc., etc., and if I remember correctly, avoids storing on the heap if possible.)</div><div><br></div><div>It has an extremely good parallel, concurrent garbage collector that deals well with pretty large heaps. (Up to 256 GB in our experience.)</div><div><br></div><div>Variables are stored by value by default (like in C or C++), but are automatically moved to the heap if necessary, for example if you take the address of the variable and pass it around. This avoids major memory issues that you can easily get in C or C++, but remains efficient by default.</div><div><br></div><div>The concurrency model is pretty good, and also works well to a large extent for parallel programming. Parallelism is based on a work-stealing scheduler, which are known to be “optimal,” (except if you program against the lowest level of a CPU, but for portable parallelism, work stealing is pretty hard to beat).</div><div><br></div><div>When moving our elPrep software away from Common Lisp, we evaluated C++, Go and Java as potential candidates, and Go turned out to provide the best balance between performance and memory use. See <a href="https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-2903-5">https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-019-2903-5</a></div><div><br></div><div>We are still using Common Lisp for prototyping, and then translate to Go. These two languages are actually much more similar than it appears at first. For example, dynamic dispatch feels a lot more like generic functions than OOP-style methods. (Methods are defined outside of the corresponding record definitions, and can actually be defined on any type, including your own variants of “primitive” types, which can be extremely handy.)</div><div><br></div><div>We also planned to evaluate Rust for elPrep, but Rust didn’t provide type-safe atomic compare-and-swap, at least not back then. This is a deal breaker for an important part of our software. You can cast away the types and express this with “unsafe” types, but that defies the main purpose of using Rust. We also expect that the performance will be equally bad as that of C++, which suffers a lot from the lack of a proper garbage collector. (Details are in the paper.)</div><div><br></div><div>Pascal</div><div><br><div dir="ltr">Sent from my iPad</div><div dir="ltr"><br><blockquote type="cite">On 2 Dec 2020, at 16:15, Scott McKay <swmckay@gmail.com> wrote:<br><br></blockquote></div><blockquote type="cite"><div dir="ltr"><div dir="ltr">Rust is C++ done right. At this point, I have several stacks based on what I'm doing:<br> * Web back end – Python/Django<br> * Web front end – Javascript/React<br> * ML/AI (as a "client") – Python<br> * Systems programming – Rust<div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 2, 2020 at 9:57 AM Marco Antoniotti <<a href="mailto:marco.antoniotti@unimib.it">marco.antoniotti@unimib.it</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>I second what Scott said.  Julia is not "fringe" and I am thinking that - too late probably - that is a Very Good Thing (tm)</div><div><br></div><div>Apart from that, Rust was described in "Nature".  You cannot get more mainstream than that.</div><div><br></div><div>Ciao</div><div><br></div><div>Marco</div><div><br></div><div>PS Me, I am checking out PL/I<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 2, 2020 at 8:52 AM Scott McKay <<a href="mailto:swmckay@gmail.com" target="_blank">swmckay@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr">I can't argue with that. My point was, if you're gonna use a fringe language (*),<div>use a <i>good</i> fringe language.</div><div><br></div><div>(*) I don't think Julia is "fringe" any more.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 2, 2020 at 5:45 AM Bob Cassels <<a href="mailto:bobcassels@netscape.net" target="_blank">bobcassels@netscape.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div><div>Hey Scott,</div><div><br></div><div>Go with Julia. It’s enough like Dylan (multi-argument generic function dispatch, expression-oriented, macros), but better in important ways (better type system, package system, better compilation model, cross-language integration).</div><div><br></div><div>It has warts (kludgy, messy syntax), but mostly it has traction (active, growing user community, increasing library support, libraries are cutting edge).</div><div><br></div><div>If you long for Dylan, Julia is where you want to be. It’s where the smart cool kids are.</div><div><br></div><div>Bob</div><div><br></div><br><div><br><blockquote type="cite"><div>On Jul 7, 2020, at 8:24 AM, Scott McKay <<a href="mailto:swmckay@gmail.com" target="_blank">swmckay@gmail.com</a>> wrote:</div><br><div><div dir="ltr">I cannot hold my tongue on Pyret – why not Dylan? Pyret breaks no new ground,<div>and does not have as good a language designer as Dave Moon. It's macro system</div><div>can be trivially used to add the test-ish stuff that Pyret puts in its core language.</div><div><br></div><div>Dylan remains the best language I've seen that never got traction.</div><div><br></div><div>—S</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jul 7, 2020 at 4:41 AM Ken Tilton <<a href="mailto:kentilton@gmail.com" target="_blank">kentilton@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-size:large">Hey, Daniel. </div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Thanks for the +1, as the kids today say!</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Yeah, what we developers deal with must somehow be avoided until the students have felt the thrill of programming, if they will. This programme will not be for everyone. But for those who light up as much over algorithms as they do the music, <i>then</i> we can let them see a two thousand line Clojure backtrace on every error. Grrrr. :)</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">I like the section contrasting Pyret with other languages that are considered clean syntactically. Pyret makes them look like Java. :) We devs put up with such garbage. One reason I want Clojure or CL for this is because the macros will make it easy to deliver a super friendly yet powerful new music DSL.</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Looking at Pyret also reminded me of Logo, another super clean yet powerful language aimed at noobs of any age.</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">Thx for the Pyret pointer!</div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large">-hk </div><div class="gmail_default" style="font-size:large"><br></div><div class="gmail_default" style="font-size:large"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jul 6, 2020 at 11:23 PM Daniel Herring <<a href="mailto:dherring@tentpost.com" target="_blank">dherring@tentpost.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">Hi Ken,<br>
<br>
I think music is a great way to engage a wider audience of potential <br>
developers.  It has a wider appeal and lower barrier to entry than many <br>
other programming activities.<br>
<br>
Having seen kids fire up a web browser to do "Scratch programming", I'm <br>
convinced that a web-based platform is the most accessible.  People can <br>
use almost any computer to create accounts, create projects, and <br>
share/publish projects.  Only seasoned developers are comfortable with the <br>
concept of "install this editor, compiler, and Git".  :)<br>
<br>
Here's an interesting language, though it may not have a audio library <br>
yet.<br>
<br>
<a href="https://www.pyret.org/" rel="noreferrer" target="_blank">https://www.pyret.org/</a><br>
<br>
- Daniel<br>
<br>
<br>
<br>
On Mon, 6 Jul 2020, Ken Tilton wrote:<br>
<br>
> "actively under development"! Music (sorry) to my ears! The Lisp and ADD genes must overlap seriously. I started one of the videos. Really nice live coding.<br>
> <br>
> I'll make sure our code camp grad school uses CL.<br>
> <br>
> Thx!<br>
> <br>
> -hk<br>
> <br>
> On Mon, Jul 6, 2020 at 8:11 PM Andy Peterson <<a href="mailto:andy.arvid@gmail.com" target="_blank">andy.arvid@gmail.com</a>> wrote:<br>
>       <a href="https://github.com/byulparan/cl-collider" rel="noreferrer" target="_blank">https://github.com/byulparan/cl-collider</a> "A SuperCollider client for CommonLisp"<br>
> <br>
> Never tried this but I've been following it for a few years and it is actively under development.<br>
> <br>
> Andy <br>
> <br>
> On Mon, 6 Jul 2020 at 13:57, Ken Tilton <<a href="mailto:kentilton@gmail.com" target="_blank">kentilton@gmail.com</a>> wrote:<br>
>       Thanks for the seconding motion! But part of the plan is high accessibility, and low cost. I just noticed the pricing on OpusModus, bit of a showstopper there. <br>
> <br>
> We would use Clojure Overtone <a href="https://overtone.github.io/" rel="noreferrer" target="_blank">https://overtone.github.io/</a> but that sits atop Supercollider, not sure if that would make installation a PITA. Ideally we would have sth built atop Web Audio, but<br>
> then we really are super low-level. I think! Have to look into that. <br>
> <br>
> We would want to hook the students with solid music before taking them down to the basics, so existing effects etc would be great to have, but again, this is about coding in general, not music<br>
> generation. That is just the hook.<br>
> <br>
> Thx again! If some campers get more turned on by music than coding that will be a great next step.<br>
> <br>
> On Mon, Jul 6, 2020 at 1:43 PM <a href="mailto:dbm@refined-audiometrics.com" target="_blank">dbm@refined-audiometrics.com</a> <<a href="mailto:dbm@refined-audiometrics.com" target="_blank">dbm@refined-audiometrics.com</a>> wrote:<br>
><br>
>       Yes, I was also going to suggest OpusModus. I see little purpose in reinventing any portion of what they have done.<br>
> <br>
> I have been a user for about 2 years now. It seems to be the defacto replacement for an earlier product done in Lispworks, from Italy, called Symbolic Composer. OpusModus is very good, and<br>
> getting better every day. They just implemented live MIDI recording in the latest version.<br>
> <br>
> - David McClain<br>
> Refined Audiometrics Laboratory, LLC<br>
> Tucson, AZ, USA<br>
> <a href="http://refined-audiometrics.com/" rel="noreferrer" target="_blank">refined-audiometrics.com</a><br>
> <br>
><br>
>       On Jul 6, 2020, at 8:11 AM, Ken Tilton <<a href="mailto:kentilton@gmail.com" target="_blank">kentilton@gmail.com</a>> wrote:<br>
> <br>
> Sounds great, I will keep it in mind if we loosen the web/mobile-native constraint. Or maybe as a direction for campers who take off -- no need then to fret over platform,<br>
> power will matter.<br>
> <br>
> Thx!<br>
> <br>
> <br>
> On Mon, Jul 6, 2020 at 10:54 AM Stonewall Ballard <<a href="mailto:stoney@sb.org" target="_blank">stoney@sb.org</a>> wrote:<br>
>       Ken,<br>
> <br>
> Are you familiar with Opusmodus?<br>
> <<a href="http://opusmodus.com/" rel="noreferrer" target="_blank">http://opusmodus.com</a>><br>
> <br>
> It’s written in Clozure ccl, and besides providing an incredible array of music manipulation functions and structures, it’s got a beautiful window system. Mac only.<br>
> <br>
> Your idea of using music as a hook to learn Lisp sounds plausible. Good Luck!<br>
> <br>
>  - Stoney<br>
> ————Stonewall Ballard    <a href="mailto:stoney@sb.org" target="_blank">stoney@sb.org</a>   <a href="http://stoney.sb.org/" rel="noreferrer" target="_blank">http://stoney.sb.org</a><br>
> <br>
> On Monday, July 6 at 8:15:31 AM, Ken Tilton (<a href="mailto:kentilton@gmail.com" target="_blank">kentilton@gmail.com</a>) wrote:<br>
> <br>
> So I got to thinking about creating an approachable pathway to IT careers for anyone really, but in the spirit of today one focused on creating career opportunities for<br>
> African Americans.<br>
> <br>
> The idea would be a code camp developed around algorithmic generation of music. I know nothing about music theory, except that there is prolly enough there to introduce<br>
> most if not all fundamental programming concepts.<br>
> <br>
> For those campers that accidentally get hooked on programming itself, which is how many of us ended up in IT careers, away they go!<br>
> <br>
> The idea is to:<br>
>  *  use music as the hook;<br>
>  *  defer as long as possible the annoying things about programming (I am looking at you, node.js);<br>
>  *  part of that ^^^ will be using a powerful language with the parentheses in the right place, prolly ClojureScript since that could run where JS runs;<br>
>  *  keep programming as the focus, as tempting as the music will be. Sonic Pi comes with all sorts of built-in sound capabilities, but we want to develop those in the<br>
>     code camp;<br>
>  *  tailor the program to specific musical genres, to maximize the musical hook.<br>
> I am dropping this here since I know many Common Lispers have a strong musical bent. My questions are:<br>
>  *  Could we use CL instead? I do think this almost has to be a web app, perhaps even mobile. Hmmm, we could CL-ify CLJS with sufficent clever macrology.<br>
>  *  What do you think? Can a solid programming fundamentals course be expressed in music theory? Hint: HTTP is not a programming fundamental.<br>
>  *  If there is any interest, what would be a good place for an ongoing discussion? Google groups?<br>
> Ideas, comments, suggestions all welcome.<br>
> <br>
> -hk<br>
> <br>
> <br>
> <br>
> --<br>
> Kenneth Tilton<br>
> <a href="http://tiltontec.com/" rel="noreferrer" target="_blank">http://tiltontec.com/</a><br>
> <br>
> <br>
> <br>
> <br>
> --<br>
> Kenneth Tilton<br>
> <a href="http://tiltontec.com/" rel="noreferrer" target="_blank">http://tiltontec.com/</a><br>
> <br>
> <br>
> <br>
> --<br>
> Kenneth Tilton<br>
> <a href="http://tiltontec.com/" rel="noreferrer" target="_blank">http://tiltontec.com/</a><br>
> <br>
></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div>Kenneth Tilton</div><div><a href="http://tiltontec.com/" target="_blank">http://tiltontec.com/</a><br></div></div></div>
</blockquote></div>
</div></blockquote></div><br></div></blockquote></div>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline;float:none">Marco Antoniotti, Associate Professor</span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre-wrap;word-spacing:0px;text-decoration:none">          </span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre-wrap;word-spacing:0px;text-decoration:none">    </span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline;float:none">tel.</span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;word-spacing:0px;text-decoration:none;display:inline;float:none;white-space:pre-wrap"> </span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline;float:none">+39 - 02 64 48 79 01</span><br style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline;float:none">DISCo, Università Milano Bicocca U14 2043</span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre-wrap;word-spacing:0px;text-decoration:none">       </span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre-wrap;word-spacing:0px;text-decoration:none">    </span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:pre-wrap;word-spacing:0px;text-decoration:none"></span><a href="http://bimib.disco.unimib.it/" style="font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px" target="_blank">http://bimib.disco.unimib.it</a><br style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline;float:none">Viale Sarca 336</span><br style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:14px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;text-decoration:none;display:inline;float:none">I-20126 Milan (MI) ITALY</span><br></div></div></div></div>
</blockquote></div>
</div></blockquote></div></body></html>