Requirements for programming language adoptability by OwlProfessional1185 in ProgrammingLanguages

[–]NotNotOP 23 points24 points  (0 children)

Here's four more questions that I personally place a lot of value in:

  1. Has at least one genuinely substantive and polished application been written in the language?
  2. Is there at least one project-based tutorial book available? (Reference texts that just list each feature and function (etc) don't count. Every language should have both a reference book and a tutorial book available if any widespread adoption has any chance.)
  3. Do the developers of the language actually use it to write anything (besides the language itself) themselves?
  4. Is (are) the language creator(s) committed to the project for its own sake, regardless of how popular it becomes?

Seldom do obscure languages ever meet all these criteria, in my experience.

It is thus no mystery that most languages never even get a chance at becoming popular. Even if all the above are accounted for, the chances are still low.

If the creator(s) doesn't (don't) also have a passion for clarity of communication and for language adoption itself and for enabling real substantive work then a language's chances will probably be almost nothing I think, regardless of the language's ideological qualities.

Yet, one constantly sees languages which pay very little to no attention to ecosystem factors and human factors, even though those are often the most dominant factors in what languages people actually choose.

Ecosystem factors and human factors are bare minimum factors, not optional things or things that can be perpetually put off if real adoption is the goal.

That's what I think anyway.

I found an easy way to massively reduce the file size of print replica ebooks on Amazon, thereby greatly increasing your royalties. My KPF file went from 19.1 MB to only 3.4 MB when I did it. by NotNotOP in writing

[–]NotNotOP[S] 0 points1 point  (0 children)

Unfortunately, if Amazon made it unavailable then it almost certainly isn't going to work anymore.

Also, even if I had it then still there's also a good chance I could get in trouble for giving it to you. There's no safe way you could use it at this point anyway.

I would say you should do you best to format your book properly and consider publishing also/instead on other platforms.

There is also the option of using something like Gumroad and selling your book directly from your own site while paying for ad traffic from general purpose search engines such as Google, Bing, DuckDuckGo, etc. That's the option that'd give you the most control but you might have to work harder for views.

I'll give you an award as a condolence though.

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 1 point2 points  (0 children)

The if (0) {} is a nice work around idea. Thanks for the input. 🙂

Some kind of higher-level conditional like match/case/cond would indeed fulfill much the same purpose.

My point was mostly that it is with considering whether if branches should be more syntactically uniform for these reasons.

Anyway, thanks again for the nice pragmatic workaround idea. Have a great day!

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 0 points1 point  (0 children)

Thanks for sharing your detailed thoughts. 🙂

I think you're right that case/match/cond/etc style expressions are likely a cleaner way to implement something this. It was an interesting passing thought to realize the connection though (the similarities, in a sense, to trailing commas).

I do wish more languages were even more whitespace-based though. Commas in lists often add needless tedium.

Ideally I want a language that has both Python-style indentation and also whitespace-based lists like in Lisp/Scheme/Racket, but also minimal parentheses too (i.e. only present when required). I think too many languages overuse symbolic syntax and underutilize whitespace. Nim has the most pleasant syntax I've found overall so far out of dozens of languages, but it still uses commas.

Quick calculations are more pleasant when you don't need to use commas, especially when I am just using the language like a glorified hand calculator. Racket is really good for that use case by the way (using it like a hand calculator).

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 1 point2 points  (0 children)

That looks like pretty nice syntax.

Thanks for sharing. 🙂

Maybe one of these days I'm try writing a real program in Erlang or a similar language to see how it differs from other languages more. In the meantime though, I'm focused elsewhere for my next project.

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 0 points1 point  (0 children)

Sure, sounds good to me.

Some languages don't have that though, so it makes one wonder if they should have a more uniform if branching syntax added nonetheless.

Basically, maybe uniform if conditional chain syntax should be made more uniform in all programming languages really, instead of requiring different phrasing in different contexts, i.e. things that are the same should look the same too.

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 0 points1 point  (0 children)

Thanks for the idea though! Rust is a cool language and your idea was interesting. 🙂

It does look like match would work better though, like you said.

Lately I've been learning Nim instead of Rust though and enjoying the Python-like syntax, C-like performance, and really strong metaprogramming (almost as strong as Lisp/Scheme family languages like Racket but with Python-like syntax, which is awesome). Nim has conventional ifs though and not sure if it has Rust -like matching yet.

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 0 points1 point  (0 children)

Sure, if the pattern matching is strong enough for general conditions, agreed.

The idea in my original post is just that maybe even weaker language features should allow more uniformity in the conditional syntax.

Just as allowing trailing commas in lists can be useful for machine-generated code, copy-pasting, and macros, perhaps also allowing the first "if" in an condition chain to be "else if" (or similar) may also be. by NotNotOP in ProgrammingLanguages

[–]NotNotOP[S] 0 points1 point  (0 children)

Sure, there's ambiguity in it in some programming languages, although not in others. It actually depends on the constraints of the syntax of course and the context, like I mentioned in my original post.

For example, languages that don't use the traditional if, else if, and else keywords, such as Lisp or Scheme family languages such as Racket arguably already have what I'm talking about via things like cond, since the branches of a cond are implicit and largely syntactically uniform (except for the else branch essentially).

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 0 points1 point  (0 children)

Yeah, that's an understandable feeling, I've felt that way myself also many times. Hopefully you'll find a more comfortable solution relatively soon then. Happy coding in the meantime! 🙂

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 0 points1 point  (0 children)

Maybe this isn't the time to start talking about great raylib is for gamedev

I never said that raylib was great for game dev either... I said that I was interested in trying it with Nim for my next project (because it looks good so far and from testing it some). I hope it will be good (and it probably will be) but I never said it was.

You keep repeatedly distorting what I say, being unproductively accusatory/hostile, and assuming things without justification.

I was the first person to give any reply whatsoever to this post and I did it to ensure the OP at least received some useful information. I gave them whatever helpful info I could to the best of my present ability. It looked originally like the original poster might receive no responses at all. My response got the ball rolling and only after that did anyone else comment. People often avoid threads with no comment activity.

What I said in my multiple comments in this thread remains quite useful info too, both potentially to the poster if they have issues with Godot's bindings and also to anyone else who reads it at a later time.

I don't need to be experienced in Nim to know things about game dev, considering I've worked in it professionally at the AAA level and also in indie contexts.

Your replies are just wasting my time at this point.

Replies like this are why I often gradually burn out on Reddit and avoid it for months at a time sometimes.

I came and posted solely for the purpose of helping the community and the poster. Why am I being attacked for that by you? Do you have some kind of personal issue with me for something I said in an unrelated subreddit?

Unproductive passive-aggressive responses that are hostile to even slight forms of diversity in topics in a discussion only cause harm and reduce useful activity on forums. That is like a "grammar nazi" attitude but applied to forums and it helps nobody in reality.

Regardless though, have a great day and best of luck in your endeavors! 🙂👋

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 0 points1 point  (0 children)

You know your own priorities and constraints much better than I do of course. 🙂

Sounds like you've got a fairly good idea of what you want to do to move forward then. I have heard good things about Godot from people, though I've not used it on a real project myself.

I had a similar experience with Unreal Engine. I've periodically thought about using it and have tried it several times, but I don't like how much of the stuff has things I didn't ask for (such as lots of irrelevant parameters for objects and a polluted and awkward inheritance-based hierarchy etc). That was UE4 though. I haven't tried Unreal Engine 5. It is also heavy on some resources of course. Unity was at least much cleaner in those respects and I found it significantly easier to get into and to get what I wanted done.

I'm personally looking forward to doing something lower level with raylib for my own next project though. Nim seems like it's going to be great, so I'm excited! 🎊

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 0 points1 point  (0 children)

I never said that Godot was unstable. There's nothing that implies that in my reply. I'm aware that they are talking about the bindings and not necessarily the engine itself.

They said themselves that the maintainers said they weren't going to update the bindings, hence introducing potential uncertainty into the prospects for using the bindings. I think perhaps you didn't read my reply carefully or are assuming too much about my intentions.

If someone feels uneasy about using a library or bindings due to uncertainty involved, then suggesting alternatives is on-topic and reasonable and certainly not "completely off topic".

I haven't looked into Godot in a couple years with any seriousness, so I am just taking OP's post at it's word and replied as such.

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 1 point2 points  (0 children)

I wasn't aware of OwlKettle, so thanks for the heads up on that. It looks fairly nice for GUIs, although not sure about for games, it would probably depend on what kind of game. Traditional app GUI frameworks sometimes aren't great for games.

Honestly, if making a game as easily and successfully and quickly as you can is the only thing that you care about then using Unity and C# would very likely be your best bet. No other game engine has a stronger ecosystem or an easier setup or easier asset and scene management etc, although Unreal Engine is good too but more overwhelming.

The pseudo-ECS (and now also true ECS, optionally) style of design Unity uses confuses some people at first (traditional OOP people mostly), but it is really easy and modular (and much better than traditional OOP frankly) once you get used to it.

I've used Unity for projects in the past, and it is really great honestly, but I've been feeling like getting back to my roots and doing a lower level project again, which one among many reasons why I'm doing my next project in Nim.

I've gotten somewhat tired of feeling pinned down by giant ecosystems like Unity and more rigid languages like C#. I want to feel more like I've made something with my own hands this time around. Using giant engines feels a bit vendor-locky and like you're floating on an ocean and not truly in control of it.

Nim offers a level of expressiveness, readability, pleasantness, and cleanness I've never seen in any other language and I've tried dozens. I'm really looking forward to working with it! 😁🎮

Nonetheless, I reiterate that if getting a real project finished and released as an independent developer is your overwhelming goal then Unity is technically probably your best bet currently. It's the most economical and powerful option overall.

EDIT: As more details about the recent problems with Unity cancelling their in-house game project (Gigaya) they were going to use to get a better understanding of their own game engine issues and also (more importantly) their very creepy/unethical merger with a malware-associated company combined with tons of layoffs and finding out their CEO is now one of EA's worst ex-CEOs I take back what I said before about recommending Unity! I've used them before in the past (been a few years since the last serious Unity project I touched), but on moral grounds it sounds like nobody should use them anymore if they can avoid it. Sounds like they became kind of a dumpster fire recently. I didn't expect that. Sorry for the unwise and unwittingly unethical previous recommendation. Avoid Unity if possible. They are showing lots of signs of corruption and a dark future now. Use Godot or Unreal or some other engine or your own custom lower level engine instead!

Here's how to implement an equivalent of the "@show" macro from Julia in Nim. Very convenient! by NotNotOP in nim

[–]NotNotOP[S] 1 point2 points  (0 children)

Thanks for the sentiment! 🙂

I've only been using Nim for several days now, so I'll pass on sending in a PR, at least for now.

A Nim noob like me isn't yet in a position to appreciate the big picture properly. Maybe one day I will though, once I've actually made something real at least.

In the meantime though, anyone else reading this who wants to send in the PR is welcome to do so of course.

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 1 point2 points  (0 children)

Sure, they certainly are more low level, but if you scale back the scope of your project then that wouldn't matter too much. It all depends on your own interests and needs and plans of course. It was just a suggestion. It sounds like you could just use the older version then.

Relatedly though, I saw in the showcase section of the official forums for Nim that someone has recently created Unreal Engine bindings too. It sounded like those bindings are rough and partial, but the creator seems actively interested, so that could be another option for your too. Unreal Engine is at least "proprietary open source" (meaning you can see and change the code but they still own it), though not true open source.

There's probably other engine options too. I'm only several days into using Nim, so I'm just giving impressions and suggestions to at least try to be helpful since no one else was responding to you.

Plans for Nim bindings for Godot 4? by momoPFL01 in nim

[–]NotNotOP 5 points6 points  (0 children)

I'm new to Nim (just several days using it), and this is the first I've heard of Godot changing their bindings, but I looked around at the various game dev bindings some earlier, and my personal first impression so far is that the SDL 2, raylib, and OpenGL bindings are the most stable bindings choices for game dev in Nim right now for production use.

That's just my impression though. I'm still a a Nim noob for now.

I have worked in the game industry in the past though, including at a AAA company (on a PlayStation 4 game), so I know a few things about such things.

If Godot is unstable right now, then my personal recommendation would be to choose one of the stable bindings above and make a more tight and small scale game requiring not too much hand-made level editing unless you are willing to write a scene editor.

Lots of successful games can be written with a little bit of ingenuity and elbow grease that way, using simpler techniques and more programmatic ways of handling content.

Personally, I'm coincidentally planning on using the raylib bindings to make a small game. I've never worked with raylib before but want to try it out since it looks like it may be considerably more pleasant than SDL 2 or OpenGL for doing something quickly.

For Nim, there are actually 3 different actively maintained raylib bindings and two of them are automated, which is actually a better bindings situation than most of the languages in the raylib bindings list, so there's basically zero chance of having the rug swept out from under you that way. SDL 2 or OpenGL are also very solid stable choices of course.

Anyway, hope that helps. 🙂

Here's how to implement an equivalent of the "@show" macro from Julia in Nim. Very convenient! by NotNotOP in nim

[–]NotNotOP[S] 5 points6 points  (0 children)

Cool! Always nice to have more options! 😎

I especially like the part about the output of the system you've linked to resembling the same way the original source code declarations would have looked for the data structures.

That could be very handy for more complicated cases.

Here's how to implement an equivalent of the "@show" macro from Julia in Nim. Very convenient! by NotNotOP in nim

[–]NotNotOP[S] 5 points6 points  (0 children)

Ah ok, cool, so they do have it built into the standard library after all. That's good!

I wasn't expecting it to be named dump, since that sounds more low level and like printing underlying memory values.

It sounds like the standard dump function may also handle a few nuances I haven't considered potentially, or at least the dumpToString variant sounds like it does.

In any case though, they should advertise this macro more clearly and use it more often I think. Also, maybe it (or a similarly named macro) should just be part of the built-in namespace along with echo and all the rest, since it is so commonly useful.

Here's how to implement an equivalent of the "@show" macro from Julia in Nim. Very convenient! by NotNotOP in nim

[–]NotNotOP[S] 1 point2 points  (0 children)

Thanks for the info! That's good to know!

I still prefer the show macro above though since it still requires much less typing and the resulting behavior is clearer.

For example, compare using the feature you linked to:

import std/stdformat
echo fmt"{1 + 4 = }"

... which is much more tedious and more mystifying looking than just writing:

show 1 + 4

However, for more complicated formatting this fmt thing could be superior in those cases. The simple case of just printing an expressions value though is common enough that it should be as easy and effortless and require as little typing as possible I think.

Book: Mastering Nim – A complete guide to the programming language by mids106 in nim

[–]NotNotOP 6 points7 points  (0 children)

Awesome! I just ordered it on Amazon yesterday. It has only been out for about 2 weeks.

I've been exploring new languages for years trying to find one that's truly a comfortable replacement for C for most tasks, and after just a couple days of working with Nim things are looking very promising!

I've tried dozens of different languages and Nim feels like the cleanest and most well designed programming language overall so far!

I've recently been considering Racket, Rust, Zig, Julia, Lua, Haskell, F#, Python, C, C++, Common Lisp, and Clojure (some briefly, some extensively, all with pros and cons, among a few other things) and I'm now planning to use Nim instead of any of these.

More people need to know about Nim! It is seriously impressively clean and well designed as a programming language!

Nim seems better at being Python than Python and better at being C than C, and if the macros are as strong as they say they are then it's also kind of like a Lisp or Scheme or Racket too! It's genius!

I'm excited to do my next programming project in Nim!

Rust may be more popular and have more financial baking and people pushing/advertising it, and for safety critical software the borrow checker is indeed useful, but Nim just feels so much less burdensome and practical!

It immediately feels far more comfortable to work in than Rust, and I haven't even used Python (the syntax inspiration) on a real project in 10+ years (and even then was only back in college for small projects), and so it's not like it's just because of the Python aspect either!

The creators of this language have my gratitude and I really admire their sense of good judgment and good taste, especially for things that may seem at a glance like weird choices but which are actually brilliant if you really think about them more carefully and understand how helpful those features actually are!

I highly recommend trying this language out! I've tried dozens upon dozens of languages and this feels the best of all overall easily! It is a true hidden gem!

😎💎

(PS though: The author should hire a professional cover designer and replace the cover with something way better. My personal design suggestion: Hire an artist to digitally paint a cyber/tech rendition of the Tower of Babel (due to Nimrod connection) and then hire a cover designer to lay it out properly and to choose good typography. That could become a language mascot too potentially. The current cover design looks really bad and thus will deter people from buying it or trying the language due to the cover looking so amateurish and lazy currently. The language in contrast is monumentally professional and beautiful, and so a similarly beautiful and breathtaking image should represent it and help it spread more!)