News for hackers. Stuff that matters.
Re:Minimalism in programming language design by weatherlite on Tuesday May 24, 2022 @06:52AM (#31490379)
So its semantics over the meaning of simple - some mean simple as in not meany features, the other means simple to get things done with. Many people call C a hard language because it's quite hard to get stuff done with it, while others call it simple because the feature set is small and writing compilers for it is relatively easy.
Re:Minimalism in programming language design by majewsky on Tuesday May 24, 2022 @07:21AM (#31490594)
> semantics over the meaning of simple

Thankfully there are two different words with very separate meanings that people nonetheless tend to conflate [1]. "Simple" means "not many features", and "easy" means "good to get things done with".

[1] Maybe because we have lots of people speaking English as a second language? In my mother tongue, German, there is no distinction in vocabulary between "simple" and "easy". Both translate as "einfach".

Re:Minimalism in programming language design by michaelcampbell on Tuesday May 24, 2022 @08:19AM (#31491033)
It's been hinted at in this subthread a few times, but Rich Hickey's keynote https://www.infoq.com/presentations/Simple-Made-Easy/ about simple and easy is worth a listen/watch.
Re:Minimalism in programming language design by dropofwill on Tuesday May 24, 2022 @09:36AM (#31491900)
I’m not so sure, when I look up the definition of simple it starts with “Easily”. In my native english speaker mind simplicity is a type of easiness.

Though if we want to make the clear distinction, like in the Clojure talk below, for the programming domain that’s fine.

Re:Minimalism in programming language design by ParetoOptimal on Tuesday May 24, 2022 @09:03AM (#31491472)
> "Simple" means "not many features", and "easy" means "good to get things done with".

I'm not sure about this. What utility is a language with only simple constructs that is hard to use.

Not quite a counterpoint, but a thought in that direction is:

There can be features that make it easy to implement something which some find hard to understand.

I suppose I question the value of simplicity for it's own sake in a language and would rather defer to how simple and understandable the resulting code is.

I frequently consider the added complexity cost of a more complex compiler inherent complexity because I find the simplicity of use dwarfs compiler simplicity or simplicity "just cuz".

Re:Minimalism in programming language design by shadowofneptune on Tuesday May 24, 2022 @09:28AM (#31491807)
Not much of a difference even among native speakers. If you pose a problem to someone, and they think they have the answer immediately, they're about as likely to say 'that's easy!' as they are to say 'simple!'
Re:Minimalism in programming language design by weatherlite on Tuesday May 24, 2022 @10:44AM (#31492792)
"einfach" sounds a bit naughty...
Re:Minimalism in programming language design by flohofwoe on Tuesday May 24, 2022 @07:09AM (#31490509)
IMHO the reason why it's "hard" to get stuff done in C (which I don't necessarily agree with), is mainly the bare bones stdlib, less the language. Eg C programming is much more library-driven than language driven. It sucks if the used libraries suck (such as most of the C stdlib), but it is great when using libraries with a modern API design (eg the opposite of POSIX).
Re:Minimalism in programming language design by weatherlite on Tuesday May 24, 2022 @07:19AM (#31490581)
From the perspective of most high level programming - say web development, C has no advantages whatsoever.
Re:Minimalism in programming language design by astrange on Tuesday May 24, 2022 @07:31AM (#31490667)
Hmm, every piece of web infrastructure I just thought of (every browser, nginx, FreeBSD, your HL language runtime, nghttp2, curl, SSL) is written in C.

Sure, you may not be touching those during your web development, but that’s because you don’t know how to have fun and outsourced it all.

Re:Minimalism in programming language design by weatherlite on Tuesday May 24, 2022 @07:48AM (#31490794)
web infrastructure is not the same as web development...infrastructure is what allows developers and users to build and use the apps. C does make sense for these things. Stuff like Curl I think is written in C more due to historical reasons (Unix is written in C so all of its apps are in C), I don't see any major con if it was written in Python (which is a big high level wrapper over C in the end...) - it would be a tad slower and a bit more memory yeah, but in todays world I don't know how much of a difference it makes.
Re:Minimalism in programming language design by _gabe_ on Tuesday May 24, 2022 @08:47AM (#31491288)
> I don't see any major con if it was written in Python

> it would be a tad slower

a tad? I'll use C++ as an example, but the last time I profiled a hash map in C++ vs C#, the C++ lookup took 1 nanosecond[0] and the C# version took 1ms (1000x slower) (I don't have these metrics anymore but I believe it was one ms or slower, and Google seems to confirm that).

Now, if the difference between C++, a machine compiled language, and C#, a runtime compiled language, is 1000x for a very common operation, how much slower will an interpreted language that is running at an even higher level be??

The reason 90% of our apps are such slow trash these days is because programmers think that there is no difference in a couple milliseconds when it is a huge difference if that couple milliseconds is being run thousands of times through hundreds of thousands of lines of code! Take a look at how fast the Jai compiler is compared to a modern C++ compiler. Or even a C compiler vs a C++ compiler. It's night and day because of how much cruft slowly gets added on.

So I find your claim that most of the Unix utilities are only written in C because that was mainstream in the day highly dubious. If anything, they would be written in something like Rust today, but definitely not JS or Python.

Edit: I would also like to point out how much of a pain it would be to write low level network code, like what's necessary in curl, in a language like Python. When you're writing low level net code you want as little interference between the bytes and the programming language. Because if your bytes have some hidden padding, or the endianess is swapped, or a data structure is aligned a byte off, it means the difference between between correct transfer over the net, and sending garbage over the net. Python is not conducive at all to understanding how an object will be transformed into q series of bytes, whereas C is almost a direct translation from a struct to a series of bytes.

[0]: https://gist.github.com/ambrosiogabe/66a6e2fdc77e6a600e570f4...

Re:Minimalism in programming language design by cpurdy on Tuesday May 24, 2022 @11:00AM (#31493008)
C# definitely does not take 1ms to look up something in a hash map. Perhaps 1us (microsecond) in a horrible example if the virtual hash code has a slow algorithm and doesn't cache the result.

Regardless, the benefit of not using C++ is and always has been: Not having to use C++.

Re:Minimalism in programming language design by _gabe_ on Tuesday May 24, 2022 @01:02PM (#31494688)
Yep you are correct, I was mis-remembering quite a bit. I just re-ran the tests using BenchmarkDotNet and C# takes 124 nanoseconds on average, which is still 100x slower and a considerable difference, but not orders of magnitude difference :)

C# benchmarks on my machine. FastFindRecipe just does a hash set lookup, it looks like this:

  private static readonly HashSet<CraftingRecipe> FastList = new HashSet<CraftingRecipe>(new CraftingComparer());
  public static CraftingRecipe? FastFind(CraftingRecipe r) => FastList.TryGetValue(r, out var res) ? res : null;

  |         Method |     Mean |   Error |  StdDev |      Min |      Max |
  |--------------- |---------:|--------:|--------:|---------:|---------:|
  |     FindRecipe | 315.2 ns | 1.17 ns | 1.09 ns | 313.6 ns | 317.4 ns |
  | FastFindRecipe | 124.5 ns | 0.23 ns | 0.21 ns | 124.1 ns | 124.9 ns |
Re:Minimalism in programming language design by avgcorrection on Tuesday May 24, 2022 @02:03PM (#31495437)
> , which is still 100x slower and a considerable difference, but not orders of magnitude difference :)

Two orders of magnitude.

Re:Minimalism in programming language design by weatherlite on Tuesday May 24, 2022 @08:58AM (#31491412)
I might be wrong about curl - I use it just as a tool to make http calls but it might be more complicated than that - but why can't you build curl with python's http libraries? I guess there are use cases where you have to manipulate responses on the byte level?
Re:Minimalism in programming language design by wing-_-nuts on Tuesday May 24, 2022 @11:43AM (#31493567)
I see this sort of argument for low level, system languages all the time. What you're not considering is that runtime isn't the constraint that we're hitting anymore, it's developer time. There's no doubt that a good python dev is much more productive than a good c dev, both in terms of raw output, and in terms of writing code with fewer bugs. 'Software is eating the world' is overused, but broadly true, and the reason we devs are so well paid is because the demand so vastly outstrips the supply of productive devs.
Re:Minimalism in programming language design by _gabe_ on Tuesday May 24, 2022 @12:41PM (#31494374)
My argument here is about developer time though. Python development for low level systems programs would be astronomically slower than using a language like C, C++ or Rust which are built for these things. Use the proper tool for the proper job.

If you have to have multiple structures that need to be precisely laid out in binary, python is the wrong tool for the job. Delivering content using Tcp or Udp packets requires very explicit binary definitions of the data your sending. Sure you can use a wrapper on top of a library that deals with the low level stuff, and that's what Python is all about.

Use the proper tools for the proper jobs. If you're using C to write one off scripts or simple data manipulation like analyzing csv contents or something, then you should probably use a higher level language instead. If though, like curl, you have to be very explicit about the binary description of objects to accurately send and receive those objects between a network, then use a low level language.

> runtime isn't the constraint that we're hitting anymore

If you're sending data over the network you're absolutely hitting this constraint. Reading some data from RAM is on the order of like nanoseconds, sending data over the network is on the order of hundreds of milliseconds depending on the size and location you're sending that data. When it comes to sending data over the network, literally every byte does matter.

Re:Minimalism in programming language design by wing-_-nuts on Tuesday May 24, 2022 @12:57PM (#31494594)
My point was more broad. We're not short on compute power in most cases, we're short on dev time. If you're talking low level microcontroller stuff, or bit banging, sure, do it in C if you like. In general though, I'd rather devs using a higher level language that gives them tools to deal with things like memory management and concurrency. The slowest code is the code that was never written, not the code that takes an extra 100ms because it was done in python instead of C.
Re:Minimalism in programming language design by _gabe_ on Tuesday May 24, 2022 @01:18PM (#31494890)
> I see this sort of argument for low level, system languages all the time.

It seems like you were advocating using a higher level language for low level, systems programs. If that's the case I disagree. My original argument was about Unix utilities. Unix utilities contain everything from "list the files in a directory" to "compile this C program". The original poster was talking about how Curl would probably be written in Python if it was written today. This is just incorrect. From the author of curl[0]:

>> If I would start the project today, would I’ve picked another language? Maybe. Maybe not. If memory safety and related issues was the primary concern I had, then sure. But as I’ve mentioned above there are several others concerns too so it would really depend on my priorities.

> If you're talking low level microcontroller stuff, or bit banging, sure, do it in C if you like.

This is the argument I'm making. Unix utilities are usually dealing with low level bit banging stuff. Unix utilities are also meant to be extremely portable. C is the glue that holds all programming languages together, whether we like that or not. So programming a library in C automatically ensures that the library can be used in practically any higher level language.

[0]: https://daniel.haxx.se/blog/2017/03/27/curl-is-c/

Re:Minimalism in programming language design by nayuki on Tuesday May 24, 2022 @09:39AM (#31491930)
> the C++ lookup took 1 nanosecond[0] and the C# version took 1ms (1000x slower)

The ratio between 1 ns and 1 ms is a million.

Re:Minimalism in programming language design by flohofwoe on Tuesday May 24, 2022 @09:47AM (#31492038)
The link talks about nano- vs micro-seconds, so probably just a typo.
Re:Minimalism in programming language design by _gabe_ on Tuesday May 24, 2022 @12:54PM (#31494558)
I just re-ran the benchmarks and I was mis-remembering those statistics quite a bit. It looks like C# takes 124.5 nanoseconds on average for a hash set lookup. This was benchmarked using BenchmarkDotNet :)
Re:Minimalism in programming language design by flohofwoe on Tuesday May 24, 2022 @07:53AM (#31490839)
These 'frontend web projects' are all written in C, or a mix of C and C++ though (and I'd wager that doing the same thing in JS would have been more difficult, at least the emulator stuff which is mostly bit twiddling code):

https://floooh.github.io/tiny8bit/

https://floooh.github.io/sokol-html5/

https://floooh.github.io/visual6502remix/

The common pattern is though that both the C and C++ stdlib are mostly useless for this type of project, you need cross-platform libraries where 'cross-platform' also includes peculiarities of the web browser runtime, specific language features are (mostly) irrelevant in this case - except maybe for the bit twiddling thing in the emulators where C is clearly superior to JS (plus you get lean native versions "for free" without requiring a heavy Electron runtime).

Re:Minimalism in programming language design by Akronymus on Tuesday May 24, 2022 @09:28AM (#31491797)
For me, simple is in the amount of concepts.

For example, I consider most multi paradigm languages complex because in them functions, variables, objects, control flow, etc. are fundamentally different concepts.

But something like LISP, smalltalk or Haskell are simple in my eyes, due to almost everything being the same concept on a fundamental level and the other stuff being built on top of that concept.

Re:Minimalism in programming language design by pornel on Tuesday May 24, 2022 @12:53PM (#31494538)
The problem is when simple vs complex is used as a value judgement, implying that simpler is better. It's not that simple.

Conway's game of life has an incredibly simple definition, and is Turing Complete. The Brainfuck language has a minimal number of language concepts and barely any syntax. And yet, programming in these languages is very hard.

Humans need a certain level of language complexity to be able to express themselves. When you simplify things it's not always clear if you're removing superfluous complexity, or removing tools needed to deal with inherent complexity of the problems you need to tackle.

I don't think there's even any single objectively appropriate level of complexity, because it depends on the complexity of the problem the language tackles. By analogy to human languages: scientific language has its own jargon (sometimes overused!), but it needs an extended vocabulary to precisely describe the things and problems it works with. Without the added complexity it'd be unproductive due to being verbose and sometimes ambiguous, like the amusing example of Up Goer Five: https://xkcd.com/1133

Re:Minimalism in programming language design by Akronymus on Wednesday May 25, 2022 @03:54AM (#31501717)
As I am not good with words, I am just gonna take this: https://news.ycombinator.com/item?id=31492953

Specifically what I wanted to express, is that, for me, the turtles all the way down is what I understand as simplicity.

And yeah, simplicity alone can't be used as a value judgement.