From d81a95f2d193d538ab7688eb865983c84ae74b89 Mon Sep 17 00:00:00 2001 From: Andrey Lesnikov Date: Sat, 4 Jul 2020 12:43:44 +0300 Subject: [PATCH] ci.yml: Add markdown-lint --- .github/workflows/ci.yml | 5 + .markdownlint.json | 12 + README.md | 41 ++-- ...the-rust-game-development-working-group.md | 58 +++-- content/posts/newsletter-001/index.md | 10 +- content/posts/newsletter-002/index.md | 6 +- content/posts/newsletter-003/index.md | 14 +- content/posts/newsletter-004/index.md | 12 +- content/posts/newsletter-005/index.md | 19 +- content/posts/newsletter-006/index.md | 14 +- content/posts/newsletter-007/index.md | 4 - content/posts/newsletter-008/index.md | 13 +- content/posts/newsletter-009/index.md | 3 - content/posts/newsletter-010/index.md | 3 - content/posts/newsletter-011/index.md | 3 - content/posts/survey-01/index.md | 208 +++++++++++++----- 16 files changed, 295 insertions(+), 130 deletions(-) create mode 100644 .markdownlint.json diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4639ed471..a08f54948 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,11 @@ jobs: GITHUB_PAT: ${{ secrets.GITHUB_PAT }} steps: - uses: actions/checkout@v1 + - name: Lint + uses: avto-dev/markdown-lint@v1 + with: + args: '.' + config: '.markdownlint.json' - name: Install Zola run: curl -L ${BASE_URL}/${VERS}/zola-${VERS}-${ARCH}.tar.gz | tar -xz - run: ./zola --version diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 000000000..196cbc370 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,12 @@ +{ + "line-length": { + "line_length": 80, + "code_blocks": false + }, + "ul-style": { + "style": "dash" + }, + "no-trailing-punctuation": { + "punctuation": ".,;:。,;:" + } +} diff --git a/README.md b/README.md index 4dea2ecee..4a584cb84 100644 --- a/README.md +++ b/README.md @@ -2,33 +2,40 @@ ## Newsletter Creation Workflow -* At the beginning of the month, a draft of the newsletter is created +- At the beginning of the month, a draft of the newsletter is created from a [template](./newsletter-template.md). - * This should be called `index.md`, and placed in a folder named + - This should be called `index.md`, and placed in a folder named `/posts/newsletter-xxx` (where `xxx` is the issue number). -* During the month PRs with the month's news, meeting notes, etc +- During the month PRs with the month's news, meeting notes, etc are reviewed and merged into the draft. - * All images should be placed in the same folder as the post. - * Check the comments in the draft file. -* At the end of the month, the draft is reviewed as a whole + - All images should be placed in the same folder as the post. + - Check the comments in the draft file. +- At the end of the month, the draft is reviewed as a whole and polished if needed. -* On the first working day of the next month, the final PR - (that removes `draft = true` from the post's front matter and adds the date) is sent. -* The link to the newsletter is shared on social networks, etc. -* A small PR that adds links to Reddit, Twitter, etc discussions +- On the first working day of the next month, the final PR + (that removes `draft = true` from the post's front matter and adds the date) + is sent. +- The link to the newsletter is shared on social networks, etc. +- A small PR that adds links to Reddit, Twitter, etc discussions (see the comment at the bottom of the draft) is made. -* A new draft for the next month is created from the template, goto 1. +- A new draft for the next month is created from the template, goto 1. ## License This project is licensed under either of: - * Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or - http://www.apache.org/licenses/LICENSE-2.0) - * MIT license ([LICENSE-MIT](LICENSE-MIT) or - http://opensource.org/licenses/MIT) +- Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or + ) +- MIT license ([LICENSE-MIT](LICENSE-MIT) or + ) With the exception of: -* The [Font Awesome](https://fontawesome.com) social icons, which are used under a [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/) license -* The [OpenMoji](https://openmoji.org) icons used on the homepage, which are used under a [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/) license +- The [Font Awesome](https://fontawesome.com) social icons, which are used + under a [Creative Commons Attribution 4.0 International][cc-by-4-0] license +- The [OpenMoji](https://openmoji.org) icons used on the homepage, + which are used under + a [Creative Commons Attribution-ShareAlike 4.0 International][cc-by-sa-4-0] license + +[cc-by-4-0]: https://creativecommons.org/licenses/by/4.0 +[cc-by-sa-4-0]: https://creativecommons.org/licenses/by-sa/4.0 diff --git a/content/posts/2019-08-18-introducing-the-rust-game-development-working-group.md b/content/posts/2019-08-18-introducing-the-rust-game-development-working-group.md index 5e84f9cc7..bc581dfad 100644 --- a/content/posts/2019-08-18-introducing-the-rust-game-development-working-group.md +++ b/content/posts/2019-08-18-introducing-the-rust-game-development-working-group.md @@ -3,25 +3,57 @@ title = "Introducing the Rust Game Development Working Group" aliases = ["/2019/08/18/introducing-the-rust-game-development-working-group", "/2019/08/18/introducing-the-rust-game-development-working-group.html"] +++ -Rust's combination of low-level control, excellent performance and modern build tools makes it an exciting choice for game developers. The idea of a working group to support this burgeoning community has been proposed [many](https://internals.rust-lang.org/t/a-working-group-for-rust-game-development/8240/4) [times](https://alexene.dev/2018/11/15/Rust-and-game-development.html) over the years, and we're excited to announce that a group has finally been formed! - -[Our charter](https://github.com/rust-gamedev/wg/blob/master/charter.md) sets out two primary goals: - -* To improve the experience of people using Rust for game development. We want game developers to have a representation in the Rust project. We are a bridge between them and the Rust dev team. -* To share knowledge and make game engine development more accessible for people that are not engine developers. We know it can be a large and intimidating field when you're just starting out. +Rust's combination of low-level control, excellent performance +and modern build tools makes it an exciting choice for game developers. +The idea of a working group to support this burgeoning community has been proposed +[many](https://internals.rust-lang.org/t/a-working-group-for-rust-game-development/8240/4) +[times](https://alexene.dev/2018/11/15/Rust-and-game-development.html) +over the years, and we're excited to announce that a group has finally been formed! + +[Our charter](https://github.com/rust-gamedev/wg/blob/master/charter.md) +sets out two primary goals: + +- To improve the experience of people using Rust for game development. + We want game developers to have a representation in the Rust project. + We are a bridge between them and the Rust dev team. +- To share knowledge and make game engine development more accessible + for people that are not engine developers. + We know it can be a large and intimidating field when you're just starting out. ## What have we been up to? -While the working group is still in its infancy, we've already got several projects underway: - -* The biggest success so far has been the creation of [`raw-window-handle`](https://github.com/rust-windowing/raw-window-handle), a library that provides a common interface that windowing libraries (such as `winit`) can use to talk to graphics libraries (such as `gfx-hal`). [Work is currently ongoing](https://github.com/rust-gamedev/wg/issues/26) to integrate this into various libraries, and once this is complete, it should be a big step towards making the ecosystem more decoupled. -* [Discussions on how a pure Rust SPIR-V generator could be implemented](https://github.com/rust-gamedev/wg/issues/23) are currently ongoing, with the aim of reducing our reliance on `shaderc`. -* We're running a [survey](https://users.rust-lang.org/t/survey-from-the-rust-game-development-working-group/31270), to help us understand the ecosystem better and to figure out how we can best serve its needs. If you're currently using Rust for game development, or even if you just have an interest in the idea of it, please give us your thoughts! +While the working group is still in its infancy, +we've already got several projects underway: + +- The biggest success so far has been the creation of + [`raw-window-handle`](https://github.com/rust-windowing/raw-window-handle), + a library that provides a common interface that windowing libraries (such as `winit`) + can use to talk to graphics libraries (such as `gfx-hal`). + [Work is currently ongoing](https://github.com/rust-gamedev/wg/issues/26) + to integrate this into various libraries, and once this is complete, + it should be a big step towards making the ecosystem more decoupled. +- [Discussions on how a pure Rust SPIR-V generator could be implemented](https://github.com/rust-gamedev/wg/issues/23) + are currently ongoing, with the aim of reducing our reliance on `shaderc`. +- We're running a [survey](https://users.rust-lang.org/t/survey-from-the-rust-game-development-working-group/31270), + to help us understand the ecosystem better and to figure out + how we can best serve its needs. + If you're currently using Rust for game development, + or even if you just have an interest in the idea of it, + please give us your thoughts! ## How can I get involved? -Our main hub for co-ordination is our [Github repository](https://github.com/rust-gamedev/wg), where you can (and should!) raise issues calling out your ideas, proposals or problems with the Rust gamedev ecosystem. We also have a `#wg-gamedev` channel on the [official Rust Discord server](https://discord.gg/j6QJsMd), and get together for [meetings on Google Hangouts every other Wednesday](https://github.com/rust-gamedev/wg#join-the-fun). Come and join us! +Our main hub for co-ordination is our [Github repository](https://github.com/rust-gamedev/wg), +where you can (and should!) raise issues calling out your ideas, proposals +or problems with the Rust gamedev ecosystem. +We also have a `#wg-gamedev` channel on the [official Rust Discord server](https://discord.gg/j6QJsMd), +and get together for [meetings on Google Hangouts every other Wednesday](https://github.com/rust-gamedev/wg#join-the-fun). +Come and join us! ## What's next? -We're currently [putting together](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/2) the first installment of a Rust game development newsletter - if you'd like to be notified when this goes live, please subscribe to our [RSS feed](https://rust-gamedev.github.io/feed.xml), or join us on [Discord](https://discord.gg/j6QJsMd)! +We're currently [putting together](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/2) +the first installment of a Rust game development newsletter \- +if you'd like to be notified when this goes live, +please subscribe to our [RSS feed](https://rust-gamedev.github.io/feed.xml), +or join us on [Discord](https://discord.gg/j6QJsMd)! diff --git a/content/posts/newsletter-001/index.md b/content/posts/newsletter-001/index.md index ef3ad5c8f..7a38816e6 100644 --- a/content/posts/newsletter-001/index.md +++ b/content/posts/newsletter-001/index.md @@ -107,7 +107,8 @@ _Discussions: ------ -Also, check out ["About the future of nphysics: a pure rust 2D and 3D real-time physics engine"][future] +Also, check out +["About the future of nphysics: a pure rust 2D and 3D real-time physics engine"][future] \[[/r/rust](https://reddit.com/r/rust/comments/cm2858/about_the_future_of_nphysics_a_pure_rust_2d_and)]. [future]: https://www.patreon.com/posts/about-future-of-28917514 @@ -435,8 +436,8 @@ Special section for other news (up to 15) in a one-liner format: [with Voronoi diagrams for procedural destructions](https://twitter.com/VladZhukov0/status/1162462543530643457). ![Gameplay of Vlad's prototype](vlad-asteroinds-gameplay.gif) -- [Azriel] published a devlog ["Charging Up"] - characters in [Will] can now charge up - by holding the Attack button. +- [Azriel] published a devlog ["Charging Up"] - characters in [Will] + can now charge up by holding the Attack button. ![charging sprites from Will](will-charging.png) - [droprate](https://crates.io/crates/droprate) - a crate for choosing @@ -473,7 +474,8 @@ Special section for other news (up to 15) in a one-liner format: - [\#26 "[Tracker] Better windowing/graphics inter-operation"](https://github.com/rust-gamedev/wg/issues/26) - [\#42 "[Discussion] A plan for crate stewardship"](https://github.com/rust-gamedev/wg/issues/42) - [rust-gamedev.github.io](https://github.com/rust-gamedev/rust-gamedev.github.io): - - [\#2 "Newsletter"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/2) (so meta!) + - [\#2 "Newsletter"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/2) + (so meta!) - [\#4 "Create a rust-gamedev.github.io site"](https://github.com/rust-gamedev/rust-gamedev.github.io/issues/4) ## Meeting Minutes diff --git a/content/posts/newsletter-002/index.md b/content/posts/newsletter-002/index.md index b0fa9bc8a..139814037 100644 --- a/content/posts/newsletter-002/index.md +++ b/content/posts/newsletter-002/index.md @@ -117,7 +117,8 @@ Updates include: ![bots attack](rox_clone_attack.png) -- [@webshinra](https://twitter.com/Webshinra) made progress with raycasted FOV in their hexagonal game. +- [@webshinra](https://twitter.com/Webshinra) made progress with raycasted FOV + in their hexagonal game. ![hexagonal map with two mechs, paths and visually blocked tiles](hex-fov.jpeg) @@ -503,7 +504,8 @@ _Discussions: - **[minimum]** by ([@aclysma]) is a game development framework that provides basic tooling and a content authoring workflow; - this month, rendering of draggable shapes in the editor and rotation/scaling were added + this month, rendering of draggable shapes in the editor + and rotation/scaling were added \[[YouTube demo](https://youtube.com/watch?v=BON_RvVFiWY)]. ![editor with a bunch of shapes](minimum.png) diff --git a/content/posts/newsletter-003/index.md b/content/posts/newsletter-003/index.md index e06dbf86d..cd60a7328 100644 --- a/content/posts/newsletter-003/index.md +++ b/content/posts/newsletter-003/index.md @@ -5,8 +5,6 @@ transparent = true aliases = ["/2019/11/027/newsletter-003", "2019/11/07/newsletter-003.html"] +++ - - Welcome to the third issue of the Rust GameDev Workgroup’s monthly newsletter. @@ -323,8 +321,8 @@ non-ascii code input, new icons, bugfixes, and better translations. ### [Godot][godot] and Rust -- ["Rendering a 2D game in 3D"](https://medium.com/@recallsingularity/rendering-a-2d-game-in-3d-bd24ddbee6eb) - - [Tom Leys] is working on a “The Recall Singularity” [Godot][godot]/Rust game +- ["Rendering a 2D game in 3D"](https://medium.com/@recallsingularity/rendering-a-2d-game-in-3d-bd24ddbee6eb) + \- [Tom Leys] is working on a “The Recall Singularity” [Godot][godot]/Rust game about designing autonomous factory ships and stations and this month they published a post about evolution of the game's rendering. @@ -338,7 +336,10 @@ non-ascii code input, new icons, bugfixes, and better translations. character physics, weapon system, cameras, animations system, dynamic damage system. -- ["Pong Clone in Godot Using 'gdnative' Rust Bindings"](https://reddit.com/r/godot/comments/dfam0p/i_made_a_pong_clone_in_godot_using_the_gdnative) - [@you-win] couldn't find any full game examples that used [godot-rust] so they made their own \[[source code](https://github.com/you-win/godot-pong-rust)]. +- ["Pong Clone in Godot Using 'gdnative' Rust Bindings"](https://reddit.com/r/godot/comments/dfam0p/i_made_a_pong_clone_in_godot_using_the_gdnative) + \- [@you-win] couldn't find any full game examples that used [godot-rust] + so they made their own + \[[source code](https://github.com/you-win/godot-pong-rust)]. [godot]: https://godotengine.org [Tom Leys]: https://twitter.com/RecallSingular1 @@ -776,7 +777,8 @@ _Discussions: - [specs] and its related repositories [awesome-specs], [hibitset] and [shred] were moved to [Amethyst organization] \[[URLO][specs-moved]]. -- [amethyst_physics v0.1.1 was released](https://www.reddit.com/r/rust_gamedev/comments/dm3jsf/amethyst_v011_contacts_events): now it's possible to fetch Rigid body contacts events. +- [amethyst_physics v0.1.1 was released](https://www.reddit.com/r/rust_gamedev/comments/dm3jsf/amethyst_v011_contacts_events): + now it's possible to fetch Rigid body contacts events. - [@_AndreaCatania] published two video tutorials: diff --git a/content/posts/newsletter-004/index.md b/content/posts/newsletter-004/index.md index 999b24a10..165c5d09e 100644 --- a/content/posts/newsletter-004/index.md +++ b/content/posts/newsletter-004/index.md @@ -4,8 +4,6 @@ date = 2019-12-08 transparent = true +++ - - Welcome to the fourth issue of the Rust GameDev Workgroup’s monthly newsletter. @@ -426,7 +424,8 @@ A few notable additions are: - slimmed-down Rendy dependencies (memory and descriptor); - new skybox example. -Lyon has [updated examples](https://github.com/nical/lyon/pull/496) for this version, showing how to draw vector graphics on `wgpu`. +Lyon has [updated examples](https://github.com/nical/lyon/pull/496) +for this version, showing how to draw vector graphics on `wgpu`. Also, `wgpu` is now a part of Gecko code base for powering the emerging WebGPU implementation. @@ -499,8 +498,8 @@ _Discussions: ^ Click to see [a demo video][skulpin-video]. -[skulpin] by [@aclysma] provides an easy option for drawing hardware-accelerated 2D -by combining Vulkan and [Skia]. +[skulpin] by [@aclysma] provides an easy option for drawing +hardware-accelerated 2D by combining Vulkan and [Skia]. [skulpin]: https://github.com/aclysma/skulpin [skulpin-video]: https://www.youtube.com/watch?v=El99FgGSzfg @@ -714,7 +713,8 @@ Check out the [online Demo][rust-nes-demo]. - ["Future of nalgebra and math in Amethyst"](https://community.amethyst.rs/t/future-of-nalgebra-and-math-in-amethyst/1228) discussion; -- ["Skepticism about Rendy"](https://community.amethyst.rs/t/skepticism-about-rendy/1221) discussion; +- ["Skepticism about Rendy"](https://community.amethyst.rs/t/skepticism-about-rendy/1221) + discussion; - [A thread by @obiwanus about long link time](https://community.amethyst.rs/t/obiwanuss-long-link-time-feedback/1207); diff --git a/content/posts/newsletter-005/index.md b/content/posts/newsletter-005/index.md index 250a9c5e6..8aad24858 100644 --- a/content/posts/newsletter-005/index.md +++ b/content/posts/newsletter-005/index.md @@ -353,8 +353,8 @@ but _fast_, both in terms of productivity and in terms of runtime performance. This month [ultraviolet v0.4][ultraviolet-v0-4] was released by [@fu5ha]. It brings [transform](https://docs.rs/ultraviolet/0.4.3/ultraviolet/transform/index.html) -& [projection](https://docs.rs/ultraviolet/0.4.3/ultraviolet/projection/index.html) modules -and many smaller improvements. +& [projection](https://docs.rs/ultraviolet/0.4.3/ultraviolet/projection/index.html) +modules and many smaller improvements. Check out the [full release announcement post][ultraviolet-v0-4]. @@ -562,7 +562,10 @@ Main changes are: [@17cupsofcoffee] also posted [a little example][tetra-sound-polling-ex] of how you can implement pooling for sound effects -> This is handy for situations where you don't want more than X instances of the same sound playing at once (e.g. if the player is able to fire a weapon as fast as they can hit a button), etc... +> This is handy for situations where you don't want more than X instances +> of the same sound playing at once +> (e.g. if the player is able to fire a weapon as fast as they can hit a button), +> etc... [tetra-sound-polling-ex]: https://gist.github.com/17cupsofcoffee/f5082a13626ddf0030075d542262c728 @@ -626,7 +629,8 @@ and [voxel cone traced reflections] working in their voxel engine. ![Rendology demo screenshot](rendology_hdr_0_4.png) [Rendology] is a 3D rendering pipeline based on Glium and written in Rust. -It features basic implementations of shadow mapping, deferred shading, a glow effect, FXAA and instanced rendering. +It features basic implementations of shadow mapping, deferred shading, +a glow effect, FXAA and instanced rendering. An ["Introduction to Rendology"][rendology-into] article outlines some of the concepts of Rendology @@ -693,7 +697,8 @@ Some of the December's updates: - a generic "effects" system; - cursed items, scrolls of remove curse, and item identification scrolls; - items that affect your attributes, generic statuses; -- spells, spellbooks, weapon proc fx, mob special abilities, DoT, initiative +/- effects; +- spells, spellbooks, weapon proc fx, mob special abilities, + DoT, initiative +/- effects; - a dragon lair in a ruined fort; - multi-tile entities including pathfinding; - parameterized procgen of magic weaponry/armor; @@ -856,8 +861,8 @@ Just an interesting Rust gamedev link from the past. :) In the November of 2018, [@AndreaPessino] (Founder/CTO of [Ready At Dawn] Studios) -released a [Modulator] crate and -an awesome ["Modulator (Rust conding series)"][modulator-video] tutorial video about it. +released a [Modulator] crate and an awesome +["Modulator (Rust conding series)"][modulator-video] tutorial video about it. [Modulator] is a Rust crate for abstracted, decoupled modulation sources. diff --git a/content/posts/newsletter-006/index.md b/content/posts/newsletter-006/index.md index c5338f67f..6b5c60f93 100644 --- a/content/posts/newsletter-006/index.md +++ b/content/posts/newsletter-006/index.md @@ -4,8 +4,6 @@ date = 2020-02-16 transparent = true +++ - - Welcome to the sixth issue of the Rust GameDev Workgroup’s monthly newsletter. @@ -247,7 +245,8 @@ _Discussions: ["Snake Game With Rust, JavaScript, and WebAssembly"][snake-course]. > We will learn how to export API implemented with Rust to JavaScript app. -> We will get to know canvas rendering, applications of vectors, and basics of game development. +> We will get to know canvas rendering, applications of vectors, +> and basics of game development. At the moment, the series consists of six articles (of eight planned): @@ -378,7 +377,8 @@ Full January's devlogs: [Another entry for the Games Made Quick jam from @Mistodon][split-twitter]. -[Split][split-itch] is a game about outrunning a supernova and using time travel to improve your chances. +[Split][split-itch] is a game about outrunning a supernova +and using time travel to improve your chances. > In the middle of using time travel to research a dying star, > you find yourself fleeing from a supernova. @@ -565,7 +565,8 @@ integrated into Unreal Engine. > > - Compiling a Rust crate as an Unreal Engine Module > - C++ Unreal modules linking to our Rust crate -> - Automatic rebuilding C++ and binaries that depend on Rust code when that Rust code changes +> - Automatic rebuilding C++ and binaries that depend on Rust code +> when that Rust code changes _Discussions: [/r/rust](https://reddit.com/r/rust/comments/emp0su/proof_of_concept_rust_code_in_unreal_engine)_ @@ -696,7 +697,8 @@ fn example() { [The Roguelike Tutorial][rl-book] continues to grow: chapter [#70 "Missiles and Ranged Attacks"][rl-book-70] was added to the book. -It adds targeting, ranged weaponry, AI that shoots back, and projectile particles to the mix. +It adds targeting, ranged weaponry, AI that shoots back, +and projectile particles to the mix. [Check out an online demo here.][rl-book-70-demo] diff --git a/content/posts/newsletter-007/index.md b/content/posts/newsletter-007/index.md index 3ba9935c6..7471619bf 100644 --- a/content/posts/newsletter-007/index.md +++ b/content/posts/newsletter-007/index.md @@ -4,10 +4,6 @@ date = 2020-03-05 transparent = true +++ - - - - Welcome to the seventh issue of the Rust GameDev Workgroup’s monthly newsletter. diff --git a/content/posts/newsletter-008/index.md b/content/posts/newsletter-008/index.md index c63b56b35..0745422eb 100644 --- a/content/posts/newsletter-008/index.md +++ b/content/posts/newsletter-008/index.md @@ -4,8 +4,6 @@ date = 2020-04-08 transparent = true +++ - - Welcome to the eighth issue of the Rust GameDev Workgroup’s monthly newsletter. @@ -194,7 +192,8 @@ an ant colony sandbox game with ASCII graphics. This month v0.1.1 and v0.1.2 versions were released. Some of the updates: -- Add color palette options to Settings including a modified palette for red-green color blindness +- Add color palette options to Settings including a modified palette + for red-green color blindness - Add lifecycles to more ant castes - Nurse ants give food to larvae - Nurse ants on the surface will return to the colony @@ -238,7 +237,8 @@ This month v0.1.1 and v0.1.2 versions were released. Some of the updates: ![game screenshot](akigi.png) -> [Akigi][akigi] is a multiplayer online world where most believe that humans are inferior. +> [Akigi][akigi] is a multiplayer online world +> where most believe that humans are inferior. Some of March's updates: @@ -585,8 +585,9 @@ connection management, packet signaling, and packet acknowledgement are features already implemented. Examples for getting started are provided on the [crates.io page](netstack). -Version 0.3.0 adds basic monitoring functionality along with traits `ClientMonitor` and -`ServerMonitor`. A work-in-progress prometheus exporter has also been added in this version. +Version 0.3.0 adds basic monitoring functionality +along with traits `ClientMonitor` and `ServerMonitor`. +A work-in-progress prometheus exporter has also been added in this version. Issues and contributions can be made to [Netstack's github repository](netstack-github). Work in progress documentation is available on [Netstack's docs.rs](netstack-docs). diff --git a/content/posts/newsletter-009/index.md b/content/posts/newsletter-009/index.md index 6d6fa9b49..f61034973 100644 --- a/content/posts/newsletter-009/index.md +++ b/content/posts/newsletter-009/index.md @@ -4,9 +4,6 @@ date = 2020-05-06 transparent = true +++ - - - Welcome to the ninth issue of the Rust GameDev Workgroup’s monthly newsletter. [Rust] is a systems language pursuing the trifecta: diff --git a/content/posts/newsletter-010/index.md b/content/posts/newsletter-010/index.md index 517b519c8..ea24a9848 100644 --- a/content/posts/newsletter-010/index.md +++ b/content/posts/newsletter-010/index.md @@ -4,9 +4,6 @@ date = 2020-06-08 transparent = true +++ - - - Welcome to the tenth issue of the Rust GameDev Workgroup’s monthly newsletter. [Rust] is a systems language pursuing the trifecta: diff --git a/content/posts/newsletter-011/index.md b/content/posts/newsletter-011/index.md index 2c5614c08..75b64cebd 100644 --- a/content/posts/newsletter-011/index.md +++ b/content/posts/newsletter-011/index.md @@ -5,9 +5,6 @@ transparent = true draft = true +++ - - - Welcome to the eleventh issue of the Rust GameDev Workgroup’s monthly newsletter. [Rust] is a systems language pursuing the trifecta: diff --git a/content/posts/survey-01/index.md b/content/posts/survey-01/index.md index 319f8bf6f..a1c9ea019 100644 --- a/content/posts/survey-01/index.md +++ b/content/posts/survey-01/index.md @@ -4,23 +4,45 @@ date = 2020-02-06 transparent = true +++ -In August last year, we conducted a survey for the Rust gamedev ecosystem. After an unfortunate delay, we can finally present the results. We received a whopping 403 responses! This trove of valuable feedback will inform the WG's roadmap for 2020. + + + +In August last year, we conducted a survey for the Rust gamedev ecosystem. +After an unfortunate delay, we can finally present the results. +We received a whopping 403 responses! +This trove of valuable feedback will inform the WG's roadmap for 2020. # Hobbyist or developer? + ![Respondents identifying as professional or hobbyist](hobbyist-or-professional.png) -Out of the 400 respondents, 3/4 identified as a _Hobbyist_. It should also be noted that a significant portion of the self-identified _Professionals_ are more accurately described as "aspiring professional" undertaking their first game development venture. That still amounts to a large amount of commercial interest in Rust game development all the same! +Out of the 400 respondents, 3/4 identified as a _Hobbyist_. +It should also be noted that a significant portion +of the self-identified _Professionals_ are more accurately described +as "aspiring professional" undertaking their first game development venture. +That still amounts to a large amount of commercial interest +in Rust game development all the same! # Are you using Rust for gamedev? + ![Respondents using Rust in game development](using-rust.png) -Among the Professionals only 1/4 said they are currently using Rust in games. That means the 200 respondents currently using Rust for gamedev are mostly hobbyists. No surprise there, as most professionals can't bear the risk of being an early adopter. Big shoutout to all the hobbyists who are pushing the status quo, and kudos to the handful of studios that are using Rust in production long before most of their industry peers have even caught the scent. +Among the Professionals only 1/4 said they are currently using Rust in games. +That means the 200 respondents currently using Rust for gamedev are mostly hobbyists. +No surprise there, as most professionals can't bear the risk of being an early adopter. +Big shoutout to all the hobbyists who are pushing the status quo, and kudos +to the handful of studios that are using Rust in production +long before most of their industry peers have even caught the scent. --- -_For the free-form answers that follow, a basic eyeballs&hands sentiment analysis was used to distill 400 replies into digestible form. The (#) number next to a heading roughly indicates the number of times that topic came up. Think of it as the **signal strength** of a given topic._ +_For the free-form answers that follow, a basic eyeballs&hands sentiment analysis +was used to distill 400 replies into digestible form. +The (#) number next to a heading roughly indicates the number of times +that topic came up. Think of it as the **signal strength** of a given topic._ ## What about Rust as a language and ecosystem presents the biggest NEGATIVES for you as a game developer right now? -Priorities for professionals and hobbyists are largely the same. The biggest differences were: +Priorities for professionals and hobbyists are largely the same. +The biggest differences were: - Hobbyists call for ecosystem maturity 2x more than anything else. @@ -30,14 +52,19 @@ Priorities for professionals and hobbyists are largely the same. The biggest dif - Professionals care much more about C++ interop - ### Ecosystem maturity (114) -> From playing in the space I know it's possible to make games using Rust. However in the ecosystem my biggest negatives is the [lack of] case studies and demonstrations of it working. +> From playing in the space I know it's possible to make games using Rust. +> However in the ecosystem my biggest negatives is the [lack of] case studies +> and demonstrations of it working. > Rust is still a risky choice, compared to C++. -> Still feels like a new community. There is always risk associated with that - does the language take a big swing in direction - does support drop off. I'm encouraged by the support for low level (embedded / OS ) development, which hopefully means the core feature set remains robust. +> Still feels like a new community. +> There is always risk associated with that - does the language +> take a big swing in direction - does support drop off. +> I'm encouraged by the support for low level (embedded / OS ) development, +> which hopefully means the core feature set remains robust. > Many unfinished, unmaintained crates. Lots of churn. @@ -47,62 +74,90 @@ Priorities for professionals and hobbyists are largely the same. The biggest dif > Compile time, no runtime reflection, updating deep dependency in the tree is hard. -> Iteration time is I think too big, due to compilation time, [lack of] hot-reloading tooling, etc. +> Iteration time is I think too big, due to compilation time, +> [lack of] hot-reloading tooling, etc. -> Iteration time (especially while prototyping). This includes both compile time but also sorting out lifetimes when I know I'll be rewriting something very soon anyway, this "frontloading" the effort of having the borrow checker run at compile time is useful for most tasks but when I want to try something quickly it can be a draining experience, in this regard GC'd languages have an advantage imo. +> Iteration time (especially while prototyping). +> This includes both compile time but also sorting out lifetimes when I know +> I'll be rewriting something very soon anyway, +> this "frontloading" the effort of having the borrow checker run at compile time +> is useful for most tasks but when I want to try something quickly +> it can be a draining experience, +> in this regard GC'd languages have an advantage imo. > Prototyping seems not as easy in Rust due to "fighting the compiler" -### Documentation (43) +### Documentation (43) > Not enough documentation to get past beginner stage > Lacking examples for gamedev libs. -> Documentation is usually either high level or examples but rarely both. Very few real world examples to draw from. +> Documentation is usually either high level or examples but rarely both. +> Very few real world examples to draw from. ### Lack of full-featured engines (35) -> Lack of a data-and-script based engine like Unreal Engine or Unity means even small projects end up feeling very bring-your-own-engine. +> Lack of a data-and-script based engine like Unreal Engine or Unity +> means even small projects end up feeling very bring-your-own-engine. > Missing graphical editors, frictionless prototyping of games - ### Rust learning curve / onboarding to a niche language (29) -> The language has a higher upfront cognitive load than any other mainstream language I know of, mostly due to the borrow checker. It's very hard to hack through stuff and get away with it, which makes it a particularly hard sell for game prototypes. +> The language has a higher upfront cognitive load than any other +> mainstream language I know of, mostly due to the borrow checker. +> It's very hard to hack through stuff and get away with it, +> which makes it a particularly hard sell for game prototypes. -> I know that it is a less common language to use so as a company I will have to have my staff learn Rust before they can start. +> I know that it is a less common language to use so as a company +> I will have to have my staff learn Rust before they can start. -> Rust could be tricky to hire for, and hiring someone who doesn't know Rust to work in Rust will come with a ramp-up period. +> Rust could be tricky to hire for, and hiring someone +> who doesn't know Rust to work in Rust will come with a ramp-up period. ### IDE/RLS story (28) Tooling around IDE is limited compared to Visual Studio with C++ or C#.´ -> Definitely lack of proper IDE (like out of the box Cargo integration and working debugger - yeah, I tested Visual Studio Code and it's very slow, suggestions are not great, fastest way to run, check and build is to use terminal - not IDE) - I would say that something like QT Creator or Visual Studio would be great +> Definitely lack of proper IDE +> (like out of the box Cargo integration and working debugger - yeah, +> I tested Visual Studio Code and it's very slow, suggestions are not great, +> fastest way to run, check and build is to use terminal - not IDE) +> \- I would say that something like QT Creator or Visual Studio would be great -> Regarding debugging, the industry standard is (or that I'm aware of) Visual Studio, for its very good IDE and tools, also, a lot of users are very used to that kind of tools and looks like Rust is missing some of them. +> Regarding debugging, the industry standard is (or that I'm aware of) Visual Studio, +> for its very good IDE and tools, also, a lot of users are very used +> to that kind of tools and looks like Rust is missing some of them. -> rust-analyzer is still very incomplete, but it's the only thing that works for me +> rust-analyzer is still very incomplete, +> but it's the only thing that works for me > Poor IDE and debugging support in IDE. Mainly visual studio. -> Can't debug it properly, hashmap (for example) is absolutely not debuggable. Not sure how it works inside (instead of C++). +> Can't debug it properly, hashmap (for example) is absolutely not debuggable. +> Not sure how it works inside (instead of C++). > debug mode way too slow, often need to set opt-level=1 or 2 for dev profile ### GUI tooling (23) -> As a tools developer, a major negative point is the current absence of a reliable GUI framework (we use WPF + C# with Visual Studio). +> As a tools developer, a major negative point is the current absence +> of a reliable GUI framework (we use WPF + C# with Visual Studio). ### Game consoles (13) -> No first party support for console development makes Rust a tough sell for a lot of professional work. +> No first party support for console development makes Rust a tough sell +> for a lot of professional work. > Rust is not officially supported on console by Sony or Microsoft. -> Rust can't be seriously considered yet, because it does not have support from the PS4 SDK. Although there are other considerations (studio culture, integration with existing systems, etc.), official support from Sony is a requirement before Rust could be used in a PS4 game. +> Rust can't be seriously considered yet, because it does not have support +> from the PS4 SDK. +> Although there are other considerations +> (studio culture, integration with existing systems, etc.), +> official support from Sony is a requirement before Rust could be used +> in a PS4 game. ### Web/mobile support (14) @@ -110,7 +165,9 @@ Tooling around IDE is limited compared to Visual Studio with C++ or C#.´ ### C++ interop (7) -> Our code, and any middleware/engine that we might license, is in C++. Using Rust and C++ together is painful, and rewriting the existing tech to be purely Rust would be very expensive. +> Our code, and any middleware/engine that we might license, is in C++. +> Using Rust and C++ together is painful, and rewriting the existing tech +> to be purely Rust would be very expensive. Testing and too much things linked to C. @@ -118,13 +175,17 @@ Testing and too much things linked to C. > Unknown compatibility -> Lack of a straightforward path to make rust work easily with C++ in both directions. The only trustable way I see now is through manual C wrappers, which is error-prone and time consuming. - +> Lack of a straightforward path to make rust work easily +> with C++ in both directions. +> The only trustable way I see now is through manual C wrappers, +> which is error-prone and time consuming. # What about Rust as a language and ecosystem presents the biggest POSITIVES for you as a game developer right now? ### Safety (100) -> Strong type system allows for easily enforcing some performance and safety best practices + +> Strong type system allows for easily enforcing +> some performance and safety best practices > Multithreading safety @@ -142,17 +203,22 @@ Testing and too much things linked to C. ### Community (69) -> the ecosystem is full of passionate and smart people who take quality software very seriously +> the ecosystem is full of passionate and smart people +> who take quality software very seriously > a really welcoming community with great goals and courage to pursue them > Collective community effort to "build the right thing" and "build the thing right" ### Cargo (57) -> being able to pull down libraries piecemeal and have them build with your stuff immediately is great + +> being able to pull down libraries piecemeal and have them build +> with your stuff immediately is great ### Ecosystem (50) -> A mature Rust ecosystem will (hopefully!) have a lower bar for entry than a mature C++ ecosystem, without giving up performance. + +> A mature Rust ecosystem will (hopefully!) have a lower bar for entry +> than a mature C++ ecosystem, without giving up performance. ### WASM (web) support (20) @@ -166,11 +232,25 @@ Testing and too much things linked to C. ## Selected quotes -> The language has a higher upfront cognitive load than any other mainstream language. Which means that on an established, bigger project (maybe with a team behind) the productivity is amazing compared to C++! It's much easier to express strong & safe interfaces that make bugs just harder to introduce. -It really shines in network code that needs to be 100% safe and resist bad actors! My current game server code has 0 unwraps/panics/expects and so I just *know* it can't crash... I wish I could have that feeling in C++. -C++ on the contrary makes it easy to whip up something which then has a 20% crash rate and tanks perf and takes 2 weeks to hammer into shape, and after those 2 weeks it looks like Rust code anyway. -Unfortunately, knowing the management culture in the gamedev industry, Rust has an extremely hard road in front of it due to this. In my experience gamedev is plagued by extreme short term (like, 1 month) reasoning resulting in crunches and awful technical tradeoffs. Rust made many choices that delay that fateful "demo day with the execs" because it forces you to do things right. But very few can express why this is valuable up the chain and be listened to. - +> The language has a higher upfront cognitive load than any other mainstream language. +> Which means that on an established, bigger project (maybe with a team behind) +> the productivity is amazing compared to C++! +> It's much easier to express strong & safe interfaces +> that make bugs just harder to introduce. +> It really shines in network code that needs to be 100% safe and resist bad actors! +> My current game server code has 0 unwraps/panics/expects +> and so I just *know* it can't crash... +> I wish I could have that feeling in C++. +> C++ on the contrary makes it easy to whip up something which then has +> a 20% crash rate and tanks perf and takes 2 weeks to hammer into shape, +> and after those 2 weeks it looks like Rust code anyway. +> Unfortunately, knowing the management culture in the gamedev industry, +> Rust has an extremely hard road in front of it due to this. +> In my experience gamedev is plagued by extreme short term (like, 1 month) +> reasoning resulting in crunches and awful technical tradeoffs. +> Rust made many choices that delay that fateful "demo day with the execs" +> because it forces you to do things right. +> But very few can express why this is valuable up the chain and be listened to. > I love Rust! > • it's perfect for "API-minded" systems programmers @@ -182,12 +262,21 @@ Unfortunately, knowing the management culture in the gamedev industry, Rust has > • seriously there's a ton of awesome crates > • I know we'll get there together! -> We are especially interested in data-driven games for procedural generation and AI. Rust seems a great fit for this computationally intensive work. - - -> Since most game developers are tinkerers more than engineers or scientists, the whole industry is plagued with bad code quality, lack of architecture and bad code design. Undefined behavior, nullptr exceptions, use after freed, multithreading issues and so on are recurrent problems. Rust biggest positive is really the fact that it addresses all that without needing to change the people behind the games. That's why I believe in it so much :). -> Also worth noting that the module system and crates are really important nowadays because monolithic codebases of millions of lines of code is really a hell to work into. - +> We are especially interested in data-driven games +> for procedural generation and AI. +> Rust seems a great fit for this computationally intensive work. + +> Since most game developers are tinkerers more than engineers or scientists, +> the whole industry is plagued with bad code quality, +> lack of architecture and bad code design. +> Undefined behavior, nullptr exceptions, use after freed, +> multithreading issues and so on are recurrent problems. +> Rust biggest positive is really the fact that it addresses +> all that without needing to change the people behind the games. +> That's why I believe in it so much :). +> Also worth noting that the module system and crates are really important +> nowadays because monolithic codebases of millions of lines of code +> is really a hell to work into. ## What do you think should be the game-dev working group's priorities for the next 3-6 months? @@ -209,9 +298,13 @@ Unfortunately, knowing the management culture in the gamedev industry, Rust has - Lobby for Rust adoption on next-gen consoles. - Clearer information about console support. -- Start an entity capable of getting and maintain console NDAs to keep official rust builds made for console support. It’s a huge pain, but other open source projects do it, and it would be awesome for the community. +- Start an entity capable of getting and maintain console NDAs + to keep official rust builds made for console support. + It’s a huge pain, but other open source projects do it, + and it would be awesome for the community. - Wasm/web support (heavier from hobbyists) -- Paint a clearer picture of what the path to gaming consoles looks like, within the confines of what those proprietary SDKs and APIs allow. +- Paint a clearer picture of what the path to gaming consoles looks like, + within the confines of what those proprietary SDKs and APIs allow. - Mobile support - Easier packaging - Cross-compiling @@ -219,7 +312,11 @@ Unfortunately, knowing the management culture in the gamedev industry, Rust has ### Ecosystem promotion & coordination (51) -- Develop contacts within the industry so that the WG can be a liaison between industry and OSS developers. By inviting and involving industry, the ecosystem can grow and potentially receive support (in the form of PRs, open sourcing existing tools, or financial support for OSS developers.) +- Develop contacts within the industry so that the WG can be a liaison between + industry and OSS developers. + By inviting and involving industry, the ecosystem can grow and potentially + receive support (in the form of PRs, open sourcing existing tools, + or financial support for OSS developers.) - Encourage & facilitate collaboration on existing tools. - Library “blessings” - more things like this survey @@ -228,8 +325,13 @@ Unfortunately, knowing the management culture in the gamedev industry, Rust has - Game jams - Better insight into WG’s current agenda - Come up with ways to unblock foundational projects if they get stuck -- Identify in-progress issues, and propose new issues, for the Rust language, that are relevant to game development. (For example, debug Rust is very slow, so we need good ways to control what is and isn't optimized.) -- Seek opportunities to address cross-cutting concerns where possible. The recent investigation into raw-window-handle and evaluation of if we can/should converge on a math library are both good examples. +- Identify in-progress issues, and propose new issues, for the Rust language, + that are relevant to game development. + (For example, debug Rust is very slow, so we need good ways to control what + is and isn't optimized.) +- Seek opportunities to address cross-cutting concerns where possible. + The recent investigation into raw-window-handle and evaluation of + if we can/should converge on a math library are both good examples. ### First-grade game engine/framework (46) @@ -258,7 +360,6 @@ Unfortunately, knowing the management culture in the gamedev industry, Rust has - Faster compile times - More libraries like Processing - ### Integration with existing toolchains (14) - C/C++ @@ -272,6 +373,13 @@ Unfortunately, knowing the management culture in the gamedev industry, Rust has ### Interoperability between libraries (5) ## Can you name some libraries you are thankful for or take special interest in? -Just for fun, we asked respondents to name libraries or projects they were thankful for. In the 6 months that have passed since this survey went out there's been quite a few newcomers on the rise that would probably show more prominently here if we asked again today. Rest assured there will be more surveys. + +Just for fun, we asked respondents to name libraries or projects +they were thankful for. +In the 6 months that have passed since this survey went out +there's been quite a few newcomers on the rise that would probably show +more prominently here if we asked again today. +Rest assured there will be more surveys. ![Shoutouts to ecosystem projects](survey-thanks.png) -_Thanks so much to the survey respondents and all the people out there working tirelessly make Rust a first-tier language and ecosystem for game development._ +_Thanks so much to the survey respondents and all the people out there +working tirelessly make Rust a first-tier language and ecosystem for game development._