-
-
Notifications
You must be signed in to change notification settings - Fork 102
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
[v3] Add key features #871
Comments
@exercism/fsharp It would be great if we could come up with a list of key features together. Here is my list of key features (ignore the icons): [
{
"icon": "features-oop",
"title": "Expressive",
"content": "F# code is very expressive, requiring little code for great results"
},
{
"icon": "features-strongly-typed",
"title": "Unique",
"content": "Type providers, active patterns and units of measure are fantastic and unique language features"
},
{
"icon": "features-declarative",
"title": "Powerful",
"content": "F#'s powerful type system is a joy to work with and helps prevents errors"
},
{
"icon": "features-functional",
"title": "Functional first",
"content": "F# is primarily a functional language, but also has great object-oriented support"
},
{
"icon": "features-generic",
"title": "Integration",
"content": "F# integrates seamlessly with the .NET ecosystem and its many libraries"
},
{
"icon": "features-lazy",
"title": "Tooling",
"content": "F# has excellent tooling, with linting and refactoring options built-in"
}
]
|
My two cents, based mostly on yours
|
These are all good. I think Immutable First might be worth mentioning. I know it's common to a lot of functional languages but anyone playing with immutability in C# might appreciate this. "Freely pass and return reference types without the risk of exposing your data external modification."? |
The type inference and lack of boilerplate might be worth mentioning in expressive? Something like this -> |
I don't love "Unique" as a title. It is pretty like ML as far as I know so there is that. "Strongly-typed" is a good alternative but might stop somewhere short of the beauty of the type system which is at the heart of its USP. "Advanced Type System" might be better? |
One thing to keep in mind with these key features is that we're basically "selling" the language to a student. In other words: the key features should be enticing. I'm not sure that immutable first is a big selling point. Maybe we should rephrase to something like "Secure" or something that mentions less errors? |
Well, this is true, but F# does have some actually unique and fantastic features like type providers and active patterns that I think no other languages have. To me, that makes for a great Unique Selling Point
I originally had Advanced Type System, but removed it later on. We could re-add it. |
There is a limit of 100 characters, so we'd have to shorten it a bit. We could also mention F# being very readable. |
I did active patterns in Scala, it was a brute comparatively with lots of boiler plate so can't really compare. Just looked up type providers. Not used but looks like code generation. Overlap with tooling? |
Ah, so Active Patterns is not unique, thanks for that. Type Providers is really a language feature, I don't think it overlaps with Tooling. We could rename "Unique" to something else? |
True enough although I think the Immutability might be quite attractive to more experienced developers who getting into the increasingly popular functional paradigm. Perhaps the Safe thing is good. Could include null handling? Kotlin has some similarities in this. They are selling themselves as "Modern, concise and safe" with the null handling being one of their most lauded features. |
Safe -> "Types and assignments are Immutable by default and can never be null. Push runtime errors to compile time." Could swap with Powerful? |
This looks a bit like active patterns -> Scala has this -> Neither are as cool as active patterns though that combine power of Discriminated Unions. |
I like something like that! |
Final idea - "Integration" vs Interop? Koitlin and various compile to JavaScript languages use the term "Interop" instead. I know Integration is maybe better as its part of the .NET ecosystem rather than a syntax/compiler but might market better. At least as a title, could reinforce long-term MS support. |
I like Interop better! |
This has been laying dormant for a while. What about:
|
Happy with that. Sorry I've not chiped in with anything else. I'm doing a
masters and I have no freetime at for the moment.
…On Wed, 9 Jun 2021, 15:07 Erik Schierboom, ***@***.***> wrote:
This has been laying dormant for a while. What about:
[
{
"icon": "features-oop",
"title": "Expressive",
"content": "F# code is very expressive, requiring little code for great results"
},
{
"icon": "features-strongly-typed",
"title": "Fun",
"content": "F#'s powerful type system is a joy to work with"
},
{
"icon": "features-declarative",
"title": "Safe",
"content": "F#'s type system helps catch errors at compile-time. No more null-reference exceptions!"
},
{
"icon": "features-functional",
"title": "Functional first",
"content": "F# is primarily a functional language, but also has great object-oriented support"
},
{
"icon": "features-generic",
"title": "Interop",
"content": "As a member of the .NET ecosystem, F# enjoys full, two-way compatibility with C# code/libraries"
},
{
"icon": "features-lazy",
"title": "Tooling",
"content": "F# has excellent tooling, with linting and refactoring options built-in"
}
]
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#871 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ALRDEQ6C5M7S5CFOJOECDQ3TR5YQ3ANCNFSM4WY4I2EA>
.
|
Thanks. PR submitted: #928 |
This issue is part of the migration to v3. You can read full details about the various changes here.
In Exercism v3, each track must specify exactly six "key features". Exercism uses these features to highlight the most interesting, unique or "best" features of a language to a student.
Key features are specified in the top-level
"key_features"
field in the track'sconfig.json
file and are defined as an array of objects, as specified in the spec.Goal
The
"key_features"
field in theconfig.json
file should be updated to describe the six "key features" of this track. See the spec.Example
Tracking
exercism/v3-launch#5
The text was updated successfully, but these errors were encountered: