What follows is a curated transcription (minus noise/friendly banter) of topics discussed during my office hours in the F# Software Foundation slack:
cartermp [9:00 AM]
Hey there, good folks of #fssf. Today, I’ll have an office hour-ish to answer questions. I’ve got my coffee, oatmeal, and laptop at the ready.
cartermp [9:03 AM]
I’ll post a transcript of useful questions/answers and so on
cartermp [9:10 AM]
Well, to kick off a few things, here’s what’s on my mind w.r.t F#:
• Finishing up F# 4.5 documentation: https://github.com/dotnet/docs/pull/7446
• Getting the Nullable Reference Types for F# 5.0 RFC merged: https://github.com/fsharp/fslang-design/pull/317
• Getting string concat optimizations in: https://github.com/Microsoft/visualfsharp/pull/5570 (this heavily affects IntelliSense performance with Type Providers)
• Looking into this issue: https://github.com/Microsoft/visualfsharp/issues/5579
• One final proofread of Don’s Early History of F# paper for HOPL
• Getting an F# brochure and cheat sheet completed and delivered to the languages booth for MS Ignite, and training up some of the booth people so they know a bit of F# and can direct curious people to the right resources
chethusk [9:13 AM]
Can you elaborate a bit on the intellisense performance note there? is String.Concat a large portion of TP interactions?
cartermp [9:18 AM]
@chethusk here’s a snippet of a recent trace for F# tools. What the full trace showed was that 50% (!!!) of CPU time was on GC, and of that, over 70% of that GC time came from string allocations. Those allocations came from
String.Concat calls from a function called in PrettyNaming that “demangles” names coming from provided types. That routine is allocating tons of strings, so we’ll take a look at that, but a different report by @auduchinok revealed that
+ for strings was horribly inefficient; allocating more strings and making more String.Concat calls than necessary. So we believe that it will make a solid dent in the scenario the trace captures.
k_cieslak [9:20 AM]
PrettyNaming is used not only in TP autocompletion, we use it also in the normal one (if we detect space)
To make sure we get correctly backticked suggestions
cartermp [9:22 AM]
@k_cieslak Correct, PrettyNaming routines are used for all F# IntelliSense in VS as well. But those don’t appear to be hot paths as much as this one is. Still, the
String.Concat optimizations should help across the board.
k_cieslak [9:31 AM]
@cartermp what’s your focus as a member of the board (separate from being MSFT PM)
cartermp [9:41 AM]
Not sure if I’ve figured this one out yet, since aside from board meetings and voting, technically anything I do could be done without being a board member. Though I think that’s true of the work just about anyone on the board does.
Some of the things I’ve advocated for/done:
• Filming of talks at OF#
• Closing out issues in member task board (I guess that’s just my aggressive issue-closing behavior manifested elsewhere)
• Started this office hour as a way to try and gather more feedback from members
• Sponsored a senior project at my alma mater to hack on the compiler and add a feature or two (with mentorship coming from me)
Some of the things I’d like to be more involved with:
• Outreach in education, which I believe to be the biggest issue that FP and F# face today
• Advocating for moving larger projects into the .NET Foundation if maintainers would like that (comes with more legal help)
• Doing more positive work in general evangelism, especially in things that aren’t necessarily tied to Microsoft (how to do that without making it about me/my “brand” is an open question IMO)
thuris [9:46 AM]
Regarding that last point of being an evangelist in order to accomplish evangelism, it’s not easy to do that without it becoming a bit murky, but I don’t think most people (including me) would object to it provided they see it being done in good faith (to use more religious language)
Which is a roundabout way of saying go for it
Elliott V. Brown [9:53 AM]
@cartermp Is there any “centralized” location of F# resources, such as those created by members of the community / talks / etc.?
If not, can we look into one? (I have no idea what the best course-of-action for that would be.) (edited)
cartermp [10:00 AM]
@Elliott V. Brown Not that I’m aware of, no. I’ve been hard at work to make the official docs better and more discoverable (SEO work, mostly), so that queries that are about F# from a technical standpoint (distinction: not things you can do with F#, but about F# itself) land somewhere here: https://docs.microsoft.com/dotnet/fsharp/. I think that this sort of thing was missing for a while, and though not perfect, has gotten a lot better. (edited)
I’d be interested in the FSSF hosting community-oriented, “here’s what you can do with F#” blogs and the like as links
Elliott V. Brown [10:01 AM]
Aye, that’s what I’m thinking. Such as looks to various community member blogs, etc.
cartermp [10:01 AM]
Sergey’s blog does the best job of curating content IMO, but it can be difficult to hunt through his work to find something like, “How to use F# with EF.Core”
Elliott V. Brown [10:01 AM]
Links, friggin auto-correct.
I’d like to see somewhere that someone could say “here’s a video about F# and …”, and aggregate those somewhere so that I (as a user) could find them.
Keep it generic but allow tags or something to say “beginner” or “.NET Core”, etc.
chethusk [10:04 AM]
cartermp [10:06 AM]
Something I would really like to see (and I need to be a part of this), is more activity on the forums similar to what Rust and Scala do. Slack here is wonderful, but the forums are searchable, and force people to write things carefully so that their posts can be seen as a good and reliable source of information