Will be neat if it works. The problem with parallelization is that it's hard to get performance wins. There's a lot of benchmarking and you have to be careful to stay on the right side of Ahmadel's law.
Can the analysis be automated? I hope so. That would be cool.
Haskell itself is extremely amenable to this sort of thing but no one has figured out how to implement it AFAIK. It may be possible with profile-driven optimization to at-least guarantee adding a thread doesn't do more harm than good.
I wonder if anyone has written a language in Erlang. I imagine the prolog-like pattern matching could make lexing/parsing fairly easy and it would be straightforward to add concurrency wherever you needed. The only downside I can see is that maybe interpreting a language would be too cpu intensive for Erlang
I believe the author meant an immature instance of an old concept, certainly.
Just spend an afternoon looking into the literature about parallel programming languages, data flow programming languages, or flow-based programming languages, and you will realize that this is certainly not an immature concept. Research in that spaces has been going on since at least since the early 70s.
I really like the "parallel" by default paradigm, or perhaps rather, I think it has great potential. When you consider any hardware design (Verilog, Chisel, etc.) the default is to execute in parallel, and sequential is explicit i.e. by instantiating a flip flop or other memory element. If you write in Verilog, you can arbitrarily reorder your lines of code and the resulting hardware is exactly the same (modulo anything you did with always blocks which can be entirely restricted to your sequential elements if you wish).
> Data-flow hardware (see Dataflow architecture) is an alternative to the classic Von Neumann architecture. The most obvious example of data-flow programming is the subset known as reactive programming with spreadsheets. As a user enters new values, they are instantly transmitted to the next logical "actor" or formula for calculation.
Nobody (yet) has been able to get dataflow languages fast enough to beat conventional ones.
Slight off-topic, but why people are using Google groups? That site feels so unusable, yet seems to attract all the leet (Tisp author suggests discussing in the group he created there).
I have a gmail account that is just for Google Groups. Sign in, join group, sign out. Works like any normal mailing list after that, but with better search. Read messages in Thunderbird. Keeps my list subscriptions out of my main email account as well.
Two main reasons why people use it: 1, Google uses it (e.g., Go mailing lists). 2, historic reasons: it's a spiritual successor of sorts to Usenet. Google bought Dejanews in 2001, then merged it into Google Groups and gradually killed all the Usenet parts of the service.
Aside from that, it's main competitor is GNU Mailman, which is self-hosted and doesn't have many real benefits for end users (other than not requiring a Google account).
Hosted, free, indexed on Google search, simple and reliable admin, email and web forum style usage.
I'm not what could be better without paying or self hosting, though I do wish we could have built in formatting like Github and an API for the messages.
FYI, you can have tree-threaded conversations in email too. Thunderbird has pretty good support for it, which is why I use it for mailing lists.
The only reason more people don't know about this is that support for it has always been poor at best in Outlook, which is what most of the world uses as their email client.
In Thunderbird the option is View > Sort By > Threaded, which you need to set per folder (it's off by default). I set up filters so I have one folder per mailing list.
This is not the same as Outlook's group-by-conversation feature, which is based on subject lines. It is full tree-threading based on the in-reply-to header, same as Usenet.
This language is coded in Go. Just recently I was wondering if there were any Go-coded languages out there which were inspired by Haskell, Clojure, and OCaml. I have read that the Go compiler includes design choices from Plan 9 which make it both fast and simple to manage. I wonder if inheriting this supposed advantage will help Tisp in the long run.
I'm working on a shell scripting language that, like Tisp, is rooted in functional and concurrency paradigms while still offering some degree of backwards compatibility with traditional shells like Bash.
It's very immature at the moment but the repo is below if anyone else is curious:
I'm not suggesting my level of coding is comparable with the others mentioned though. Murex was created to scratch an itch rather than delusions of thinking I could write a powerful next gen programming language. I intend murex to be more of a REPL shell than something one would use to write scalable applications.
Your approach to murex "to scratch an itch" reminds me of Larry Wall's motivation to create Perl. :) Did you draw any inspiration from Perl? What about PowerShell? That's Microsoft's now cross-platform shell language - it also enables one to accomplish a lot with simple one liners.
Thanks for sharing! I'm using NixOS right now & perhaps it would benefit from a murex package.
Btw your github looks awesome! DHCP as a FUSE filesystem?? Woah.
There was Oden[0], which is supposed to be a functional programming language inspired by/and written in Go. That, until a few months ago when the author stepped down.
I like the idea of wrapping forms in (seq ...) explicitly. This makes the program read more closely to the declaration of a state machine, with smaller sections that represent state transitions (and are, most likely, expected to be atomic).
> - Purely functional programming - Impure function calls in pure functions are detected and raise errors at runtime.
Bzzz, wrong answer. This is too naive to be workable. It implies you need to drop out of your language in order to _build_ those functional components.
Can the analysis be automated? I hope so. That would be cool.
Haskell itself is extremely amenable to this sort of thing but no one has figured out how to implement it AFAIK. It may be possible with profile-driven optimization to at-least guarantee adding a thread doesn't do more harm than good.