[HN Gopher] Nim 1.2 ___________________________________________________________________ Nim 1.2 Author : narimiran Score : 276 points Date : 2020-04-03 16:09 UTC (6 hours ago) (HTM) web link (nim-lang.org) (TXT) w3m dump (nim-lang.org) | war1025 wrote: | Irrelevant, but I spent the entire day reading this headline as | NVim, i.e. Neovim. | | These comments make a lot more sense now. | intrepidhero wrote: | I've been doing the nim track on exercism.io (no affiliation, | just a user) for the last two weeks. The mentors on the track | have been fantastic. If you're looking for a "solve a problem and | get some external feedback" approach to learning the language | it's pretty good. | mikebelanger wrote: | Ah neat - thanks for sharing. I'm gonna try that out. | jjtheblunt wrote: | "exercism.io" is such a great name! | zelphirkalt wrote: | Personally I stopped using exercism, when it started to require | me to work for Google for free and would not let me log in, if | I did not. It's not an ethical platform, unfortunately. | duxup wrote: | >it started to require me to work for Google for free | | How did that work? | zelphirkalt wrote: | Recaptcha and tracking. | ampdepolymerase wrote: | Would you pay monthly if they removed it? | zelphirkalt wrote: | Perhaps I would. I've supported many projects in the | past, so I think, if it was really good and did not | violate my privacy, there is a fair chance I would. | mikebelanger wrote: | What do you mean by 'work for Google for free?' I don't see | that being required anywhere on the site. | afiori wrote: | Probably it is a reference to the reCapcha hell Google may | drop you into if you are deemed "suspicious" | dom96 wrote: | By far my favourite feature of this release, dark mode in docs: | https://nim-lang.org/docs/lib.html | treeform wrote: | I feel like dark mode is a sign that people care. I think it's | a user feature that is easy to do, but not done often. Mostly | done by people who care. It brings so much polish to the | experience. | leadingthenet wrote: | It can be done poorly as well, like in Facebook / Google apps | on Apple devices. They feel very unintegrated into the rest | of the OS. | rattray wrote: | It's not necessarily _that_ easy to do, especially depending | on how your CSS was implemented (eg; do you use variables for | all your colors, and do they have a sane, consistent, | reversible brightness scale?) | | However, I certainly agree with your "you do this because you | _care_" sentiment. | | Source: implemented dark mode for an application where the | "sane css colors using variables" property was true. | mikebelanger wrote: | Dude! I didn't even notice that. If you've ever had to look | something up late at night - dark mode is a godsend. | k__ wrote: | Can't find anything dark mode related on that page | kick wrote: | There's a large button. It loads before the text does. When | the text loads, you'll see in big letters, right next to the | button, _Dark Mode_ , italicization and all. If you click on | the button, suddenly you get a very blue-purple dark mode | experience. | k__ wrote: | Doesn't work on mobile. | sergiotapia wrote: | If you would like to see some simple to parse Nim code and get a | feel for what a "1 month of experience during weekends" Nim looks | like, check out my project: | | https://github.com/sergiotapia/torrentinim | | Nim is a very interesting language, with a lot of upsides. It | just needs that killer framework to get the ball rolling and | allow devs to solve business needs quickly. Once that's done I | think Nim will grow a lot! Tiny binaries, static binaries, fast, | low memory usage, macros, compiles to C. | icedchai wrote: | I'm going to check it out this weekend... I'm very intrigued by | what I see. | MaxBarraclough wrote: | It uses a rather primitive garbage-collector though, right? | dom96 wrote: | Primitive in what sense? Nim has a soft real-time garbage | collector which doesn't sound primitive to me. Actually Nim | supports more than one GC including boehm so you really have | a lot of choice here. | sp33der89 wrote: | It really doesn't! It's GC story is pretty great, because you | can choose out of several GC's, one of them being good for | real-time systems: https://nim-lang.org/docs/gc.html | | Recent versions also use this fancy thing: | http://www.gii.upv.es/tlsf/ | MaxBarraclough wrote: | 'TLSF' sounds very interesting, I'll have to keep an eye on | that project. What are the reference-counting options for | though, given the absence of weak references? Under what | circumstances is it acceptable to permit memory-leaks in | case of cycles? Short-lived processes (i.e. arena-based | memory management)? | | When I say 'primitive GC', I mean Boehm, which is obviously | decades behind the state of the art, but easy to get off | the ground. GNU Guile uses it, for instance. Serious | garbage collectors are tremendously complex, and are | something less popular languages unfortunately tend to | lack. I believe even D is miles behind Java. | | Can't say I know much about Go's GC. | | _Edit_ Oops I misread, TLSF isn 't a GC, it's an | allocator. It sounds then like Nim doesn't have a proper | real-time solution, does it? _useRealtimeGC_ is actually a | leaky reference-counting system? | rayman22201 wrote: | As others have said, Nim has plugabble garbage collectors, | some are quite advanced. | | In addition there is active work on a swift like reference | counting, lifetime based memory management option. This will | be suitable for hard real-time use cases. | jjtheblunt wrote: | Isn't it announced here in this release : --gc:arc and | linked explanatory video | https://www.youtube.com/watch?v=yA32Wxl59wo ? | rayman22201 wrote: | yup! That is the one :-) | treeform wrote: | Neat project! | jakear wrote: | > If you were relying on some edge case and/or buggy behaviour | which is now fixed, try if --useVersion:1.0 gives you back the | results you expect to see. If that doesn't work and you need the | old behaviour, please open an issue in our bug tracker and we | will try to make it work in future bugfix releases | | So useVersion doesn't simply checkout the old codebase, but they | still promise to maintain all prior version's bugs? Seems like a | losing battle to me... why not just tell people relying on | version 1.0 behaviour to use version 1.0 and create tooling to | make sure switching between versions is easy (a. la. nvm)? | _0ffh wrote: | My impression was that using "choosenim" switching between | versions is easy already, but I might be missing something. | rayman22201 wrote: | choosenim is still supported :-) | | The idea is more like the gcc -std flag (gcc -std=gnu++11 for | example). to emulate certain versions to ease upgrading. | jakear wrote: | Do you think the gcc -std flag would exist if every | distribution of gcc included a command to easily download | alternate versions and swap them out depending on project | configuration? -std seems more like a bandaid around a | difficult install/config than a feature, in my opinion. | | Obviously nim is free to make implement whatever options | they want, but it seems to me like every second spent | triaging/fixing/etc bugs about not properly maintaining | broken things (not to mention the end user time spent | experiencing them and debugging them!) is time that could | be better spent improving the language. | yellowapple wrote: | A newer GCC will likely have better optimizations, better | safety checks, or what have you that would benefit old | codebases using older versions of C's syntax. Similar | deal with a newer Clang/LLVM, for that matter. | | That is, if we had a GCC version manager that worked the | same way things like choosenim or rustup or pyenv or rvm | or what have you work, I can guarantee you GCC will ship | with an -std flag, because you can bet someone needs to | compile a C89 codebase and wants the latest and greatest | compiler smarts to do it. Same deal for Clang, or Visual | Studio, or `zig cc`, or whatever. | | Great example of this (that I just had to deal with this | week, lol) is Wine, which mandates C89-compliant code, | and yet absolutely benefits from any compiler | optimization improvements introduced with newer versions | of GCC. | rayman22201 wrote: | Depends on your organization more than tooling. Even if | you have the tool, your orgs security policy may not | allow using it. | | You may not have an environment that allows switching | compiler versions for other reasons. | | Even Rust has a similar concept that allows gating of | features like this. They call it "editions". | tomsmeding wrote: | Yes, the -std flag would definitely still exist: the | thing being changed by that flag is a lot of stuff in the | parser, some stuff in the standard library, and some | semantics bits further towards the backend, but at some | point the versions converge and go through the same | optimisation pipeline. A pipeline that definitely has | seen improvements in more recent versions, so it's | totally worth it to use a new compiler with an old | language standard on old code: it might very well produce | a faster executable. Just using an older compiler would | also revert back to the old performance. | | Additionally, a C/C++ compiler in an older standard mode | would disable certain features, of course, but not | completely: it's still able to give diagnistics in the | vein of "this thing isn't valid with the current version | setting, but it _would_ be valid in C++17 ", for example. | That's useful to a programmer. | marvy wrote: | Also useful in the other direction: your code works now, | but in C++17 that's a keyword so you'll have to rename | it. | predators372 wrote: | Oooo, wow collect looks so much cleaner. I can't wait to get home | and play with it! | adwww wrote: | > I can't wait to get home and play with it | | A. Where are you that you are not already at home?? | | And B. I wonder how many people are using nim at work, and what | sort of workplaces that might be? | ilaksh wrote: | B. | | https://github.com/nim-lang/Nim/wiki/Companies-using-Nim | totalperspectiv wrote: | Very excited to see gc:arc make it into stable. | sergiotapia wrote: | For the layman Nim dev, would you say "always use gc:arc" is a | safe bet? | narimiran wrote: | > would you say "always use gc:arc" is a safe bet? | | This is the first release to offer `--gc:arc` so there are | still some rough edges, but I would follow @treeform's and | @rayman22201's advice from sibling comments: give it a try, | it might work for you without any problems, and if not - | report it. | | The long-term plan is to make it the default. | rayman22201 wrote: | I would say gc:arc beta quality. Very usable for many | programs, but needs more battle hardening. Please try it and | send bug reports if you find them! That's how we improve! | dom96 wrote: | Definitely not. --gc:arc is still experimental. | treeform wrote: | I would still try out --gc:arc on your programs. For mine | it just runs without issue. But keep in mind if you do have | issues you might have to create a bug report and wait for a | fix. You would not reply on --gc:arc working. But it's fun | to play around with. It's real now. | [deleted] | iffycan wrote: | Among other great additions, I like the addition of | compilesettings [1], which will give programs more visibility | into how they were compiled. | | [1] https://nim-lang.org/docs/compilesettings.html | hartator wrote: | Very bullish on Nim. It's Python with C-level performance. | iimblack wrote: | Dup is very interesting to me. Does that mean that in Nim all | functions will be impure by default, and that it's considered | idiomatic to modify the input? I guess it's nice that they're | trying to make behavior consistent. It just seems like the | opposite of the recent directions I've seen other languages take. | jrhurst wrote: | I haven't played with nim for a few months, but only parameters | with var will get mutated. I suspect you want to use someone | else's cursed function and don't want to poison your blessed | code | iimblack wrote: | I see. I know nothing about Nim but I do see in their example | they used var when declaring the function. This way seems | like it's hidden to the consumer of the function but | hopefully editor tooling helps with this. | juki wrote: | You have to declare the variable as `var` as well, eg. | var arr1 = [4, 2, 3, 6] sort arr1 # | Doesn't work let arr2 = [4, 2, 3, 6] sort | arr2 | | You'll get a warning about the latter from the compiler | (and nimsuggest for editors). | treeform wrote: | Mutating in place is often times faster and is more | straightforward. | | I do feel Nim embraces mutation more than other recent | languages. | eindiran wrote: | Yeah, the 'discard' keyword is a pretty cool way to note that | you're using a procedure only for its side effects. | iimblack wrote: | I'm not arguing either way, just noting that it's counter to | what I've seen recently in other languages. | alberth wrote: | I really with more people used NIM for web development. It really | seems like the best of all worlds (e.g. perf, developer | ergonomics, productivity, etc). | nathancahill wrote: | I've been building and deploying Nim web apps for clients over | the past couple years. The language is just getting better and | better and the library environment is filling out nicely too | (not to subtract from the stdlib, it's very complete too). It's | been a really great experience. | | Also: available to hire if anyone is looking to work with Nim. | alberth wrote: | Are you using Jester or another framework? | nathancahill wrote: | Largely building microservices with the stdlib. Generating | html frontends with htmlgen. Using karax for more dynamic | frontends. | nepeckman wrote: | I'm planning on trying out the new Prologue framework. Seems | promising from the readme! https://github.com/planety/prologue | camccar wrote: | I'll never understand what people see in prologue | rattray wrote: | What do you recommend instead for web development with Nim? | pjmlp wrote: | As fan of Wirthian languages and GC enabled systems languages | it looks nice to me, but it is still miles away of the tooling | experience available to Java and .NET developers, and yes, you | can make use of AOT or JIT caches with them. | | But the more the merrier, so I look forward to its bright | future. | The_rationalist wrote: | What advantage does it bring that Kotlin hasn't? | atemerev wrote: | No JVM. | winter_blue wrote: | Look up _Kotlin Native_. It doesn 't use a JVM (and | compiles to native via LLVM). | | There's also Kotlin JS, which targets the JS ecosystem, and | comes with tools that let you import TypeScript type | definitions into Kotlin, so you can easily interact with | third-party JS modules. | | A pure Kotlin library could easily be used on JS, JVM, and | native/LLVM seamlessly. Which is pretty impressive. All | your non-platform-dependent logic could be placed in a | decoupled shared pure Kotlin library. Which avoid code | duplication that is so common when you need web + iOS + | Android client apps. (And the Intel Multi-OS Engine could | be used to write your iOS app in Kotlin.) | atemerev wrote: | I have nothing against Kotlin, it is a fine language, a | pleasure to work with. Nim, however, has different | priorities (utmost simplicity, native compilation, near-C | performance, opt-out automatic memory management, | excellent FFI capabilities, best in class macros). | felipeccastro wrote: | Having only played a little with both (Kotlin and Nim), I | enjoy Kotlin syntax but overall it feels as heavy as Java | (need to setup an IDE for even getting started, choose and | understand some package manager, slow compile times, etc.) | | Nim feels as lightweight as Go, but with great syntax. The | main thing holding me back now is the lack of libraries, but | it's definitely on my radar. | vips7L wrote: | Isn't an ide just a choice? You don't have to use intellij. | There are vscode plugins. | | Don't you also need to understand the go package manager or | Nim's? I don't see how this is different than learning | Gradle. | kitotik wrote: | Better than having to choose an IDE, is to not have to | choose an IDE. | | It's pretty liberating to put some text in a single file, | pass that file to a compiler, and have a single | executable binary. | | A devolved workflow I know. | 7thaccount wrote: | Devolved, but still superior in some ways. | polotics wrote: | Instant startup time | The_rationalist wrote: | Kotlin support AOT so moot point | vips7L wrote: | Not really. Kotlin/native is still super experimental and | graal isn't exactly that easy either. | The_rationalist wrote: | And somehow Nim has more support? This is a double | standard non-sens. Btw you can address the startup time | (which is reasonable btw, and x2 faster since kotlin | 1.4-m1) without aot with tools like | http://martiansoftware.com/nailgun/ | vips7L wrote: | I'm just saying that currently it's not trivial to | compile a kotlin/jvm project to native. Once you start | using dependencies things start to get really hairy. It's | not as easy as `go build`. | | I myself am hoping that either kotlin or Scala can finish | their native compilers or Graal can make compiling jvm | bytecode trivial. | andybak wrote: | How would the dynamism and expressivity of something like | Django port to Nim? I love the whole declarative paradigm of | the Django forms and models API. Is Nim good at this kind of | DSL-ish plasticity? | alehander42 wrote: | i'd say so: i think many rails/django concepts are translate- | able to metaprogramming in nim, not always with the same | idioms, but usually there is a way to do it, and you can | typecheck some things | PMunch wrote: | Extremely well I'd say. Nim has a very powerful macro system, | and DSLs are very common across various modules. Haven't used | Django myself, but something like Jester | (https://github.com/dom96/jester) or Karax | (https://github.com/pragmagic/karax) is a good place to start | if you want to do web development in Nim. | treeform wrote: | I feel DSL-ish ways of Nim are so much more advanced then | python. | | I have written UI DSLs in Nim, as well as SQL DSLs. Only | LISPy languages come close to the level of DSL you can do. | TylerE wrote: | Poorly. Nim is not an object-oriented language. | | You could certainly write an expressive web framework in nim, | but a django/rails sort of paradigm is not the way. | wmock wrote: | As someone who's heard of Nim, can someone who's used it tell me | a little bit more about its benefits and how it compares to other | common languages like JavaScript, Python, etc? | rayman22201 wrote: | The major features are: Python like syntax, Lisp like macro | system, potential for C like performance (YMMV of course). | | This is my person opinion here: Nim is part of the "new | generation of system programming languages" from the last | decade or so. Some other examples in this category include Zig, | D lang, Go lang, Swift, Rust, etc... | | The whole idea is to provide "modern high level" language | features and ergonomics while still producing efficient low | level code. | | For Pythonistas, The familiar syntax is attractive to Python | programmers looking for a more performant language (data | science is a prime example.) | | Nim is also attractive to lispers looking to move to a more | traditional Algol or C like language while still keeping much | of power and flexibility that they are used to from macros. | rattray wrote: | Does Nim have an ORM or querybuilder as good as SQLAlchemy yet? | nepeckman wrote: | The collect macro is awesome, and way more idiomatic Nim than | list comprehensions. Nim continues to hit the sweet spot between | performance and developer ergonomics. ___________________________________________________________________ (page generated 2020-04-03 23:00 UTC)