Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add a more detailed list of features #237

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

narimiran
Copy link
Member

This is based on this Reddit comment by @c-blake, which was praised both on Reddit and our forum.

First of all: @c-blake, do we have your permission to use this?

Second: I'm not sure how to incorporate this to the existing index.html, so I've put it in features.html. Now there's more text than before, so now we can use a longer code example (and not repeat one from index.html) on the right. Any ideas?

@c-blake
Copy link

c-blake commented Oct 19, 2020

I could see why you might think I was abc619 from his writing style, but that was not me. I have never used Reddit. Maybe there is a way to PM the author.

@c-blake
Copy link

c-blake commented Oct 19, 2020

I did post a HackerNews comment praised (I think.."reflects what I think" is kinda vague..) about Go comparisons/start-ups/marketing in the same forum thread, though, which may be the origin of the confusion.

jekyll/features.html Outdated Show resolved Hide resolved
jekyll/features.html Outdated Show resolved Hide resolved
jekyll/features.html Outdated Show resolved Hide resolved
jekyll/features.html Outdated Show resolved Hide resolved
@narimiran
Copy link
Member Author

I could see why you might think I was abc619 from his writing style

It was more because your nick on HN is cb[numbers] and this one is abc[numbers]. Sorry for the confusion, I'll contact the Reddit author directly.

@dom96
Copy link
Contributor

dom96 commented Oct 19, 2020

I suppose we could add a "See more features" button (or similar) on the front page below the current list?

@c-blake
Copy link

c-blake commented Oct 19, 2020

If you move "Top tier meta-programming" (which mentions the VM) above "Iterating" then in the iterating section you could mention the even faster than TinyCC/tcc turnaround time of nim e. I guess implicit in this you may want to mention that TinyCC is supported as a backend. I always tell people about it, but it really does make for 200 ms from-scratch compile times, but nim e is 2x faster at like 100ms (with no imports) on the same machine. I agree with @dom96 that link-chasing/hierarchy of some kind may be helpful to organize things better. 100ms is every keystroke at 120 words per minute, but yeah, usually there are a few imports slowing that down. There are always a few modules that break with both tcc and nim e, of course, since they aren't as well tested. Anyway, turnaround time/edit-test cycles matter tons to some people and not at all to poor suckers stuck in C++/Rust-land. So, judgement call and all that. Just a thought.

@ringabout
Copy link
Member

Any progress about this?

@ringabout
Copy link
Member

ringabout commented Jul 10, 2021

Hi, @narimiran

I contacted with abc619 who approved it.

My question

Hi, do you see this pull request? Can you approve it?
#237

abc619's answer

Hi! Sorry I didn't see your message earlier. I'm happy to approve using my comment or any derivitive of it :D And by the way, I love your Nim work on Prologue!

Copy link
Contributor

@dom96 dom96 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that we have a long list on the front page, I think this should be used on the front page.

<li>Multi-line lambdas</li>
<li>It combines successful concepts from Ada and Modula.</li>
<li>Productivity: human-readable and expressive like Python</li>
<li>Type system: strong static typing, nice generics, concepts, and type classes</li>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Type system: strong static typing, nice generics, concepts, and type classes</li>
<li>Type system: strong inferred static typing with generics, concepts, distinct types and type classes</li>

strong inferred static typing or strong static typing with inference
Inference is cool, mention inference.

generics, concepts, distinct types and type classes

IMHO

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say: "static typing with inference and generics"

<li>Productivity: human-readable and expressive like Python</li>
<li>Type system: strong static typing, nice generics, concepts, and type classes</li>
<li>Performance: matches C and C++, always gives control to the programmer</li>
<li>Portability: compiles to C, C++, and Javascript
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mention something like (LLVM also available) ?. 🤔

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Portability: compiles to C, C++, and Javascript
<li>Portability: compiles to C, C++, and Javascript/NodeJS (LLVM also available)

If someone can not compile to Node, open bug here

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But NodeJS is JavaScript, no? We're talking about languages, not runtimes here

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, and we also shouldn't be exhaustive. We should focus on what we support officially. LLVM and NodeJS isn't it.

<li>Portability: compiles to C, C++, and Javascript
<ul>
<li>Native use of all libraries in target languages (no ABI issues) + really nice FFI</li>
<li>Single (tiny) executable with no dependencies</li>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Single (tiny) executable with no dependencies</li>
<li>Single tiny executable with no dependencies</li>

The parenthesis do not add a big value there.

<li>Native use of all libraries in target languages (no ABI issues) + really nice FFI</li>
<li>Single (tiny) executable with no dependencies</li>
<li>Write server/client in the same language and share code between front/back end</li>
<li>Linux, Windows, and macOS</li>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Linux, Windows, and macOS</li>
<li>Linux, Windows, Mac OS X, BSD, Android, iOS</li>

Copy link
Member

@ringabout ringabout Jul 10, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It may be worth mentioning android and even IOS.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@juancarlospaco it's macOS and iOS (proper naming and casing)

<li>Performance: matches C and C++, always gives control to the programmer</li>
<li>Portability: compiles to C, C++, and Javascript
<ul>
<li>Native use of all libraries in target languages (no ABI issues) + really nice FFI</li>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Native use of all libraries in target languages (no ABI issues) + really nice FFI</li>
<li>Native use of all C, C++ and JavaScript libraries (no ABI issues) with a friendly and direct FFI</li>

Comment on lines +15 to +16
<h2>Good for everything, from shell scripting to web front and backend,
to machine learning, high-performance computing (HPC), and embedded.</h2>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<h2>Good for everything, from shell scripting to web front and backend,
to machine learning, high-performance computing (HPC), and embedded.</h2>
<h2>Multipurpose, web backend and frontend, machine learning,
high-performance computing, embedded, IoT, WebAssembly, scripting.</h2>

"Good for everything" sounds like "jack of all trades master of none"

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"general purpose" ?

Copy link
Member

@ringabout ringabout Jul 10, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the slogan is just like "life is short, use python". It is easy to be remembered, expressive and smooth.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if you want a long life you should NOT use Python, interestin' 🤔

This comment was marked as resolved.

<li>Iterating: Very fast compile speeds</li>
<li>Top-tier metaprogramming
<ul>
<li>Hygienic AST Macros a core part of the language, very flexible syntax</li>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Hygienic AST Macros a core part of the language, very flexible syntax</li>
<li>Hygienic AST Macros with ordinary Nim syntax are a core part of the language</li>

"very flexible syntax" do not add too much value.

When you say "macro metaprogramming" some people think if the mess of C++ template programming language thats different from C++ programming language itself.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would say "ordinary Nim syntax" which I think short-circuits @juancarlospaco's critique of "two syntaxes".

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"ordinary Nim syntax" 👍

<li>Top-tier metaprogramming
<ul>
<li>Hygienic AST Macros a core part of the language, very flexible syntax</li>
<li>Runs a VM of Nim at compile time giving you most of the language (bar pointers) to generate code or run procedures and store them as const</li>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<li>Runs a VM of Nim at compile time giving you most of the language (bar pointers) to generate code or run procedures and store them as const</li>
<li>Macros are expanded at compile time on a Nim VM integrated in the compiler with most of the language available (except pointers) to generate optimizations (loop unrolling, etc) or precompute procedures (static internationalization, etc) and store them as constants</li>

"Nim runs on a VM" definitely not good description for new people.

"bar pointer" not good way to say "except pointers".

"code to generate code" --> optimize code.

"run procedures" --> precompute procedures.

Is nice to mention that macros is expanded at compile time,
some langs have metaprogramming but is expanded at run-time-only slowing down your code.

"Loop unrolling" because is hard to do for other langs, eg Rust can not do loop unrollings.

"static internationalization" because is hard to do for other langs, eg C/C++ use run-time internationalization.

Copy link
Contributor

@dom96 dom96 Jul 10, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would simplify this to simply: "Compile-time execution of ordinary Nim code via a purpose-built VM"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants