GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Rewrite it in Rust by ridiculousfish · Pull Request #9512 · fish-shell/fish-shell

Conversation

@ridiculousfish

@ridiculousfish ridiculousfish commented Jan 28, 2023 •
edited by zanchey
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

(Editor's note - please read #9512 (comment) and #9512 (comment) before commenting if you are new to fish or not familiar with the context - @zanchey)

(Progress report November 2023)

(Sorry for the meme; also this is obligatory.)

I think we should transition to Rust and aim to have it done by the next major release:

  • Nobody really likes C++ or CMake, and there's no clear path for getting off old toolchains. Every year the pain will get worse.
  • C++ is becoming a legacy language and finding contributors in the future will become difficult, while Rust has an active and growing community.
  • Rust is what we need to turn on concurrent function execution.
  • Being written in Rust will help fish continue to be perceived as modern and relevant.

This should be thought of as a "port" instead of a "rewrite" because we would not start from scratch; instead we would translate C++ to Rust, incrementally, module by module, in the span of one release. We'll use an FFI so the Rust and C++ bits can talk to each other until C++ is gone, and tests and CI keep passing at every commit.

To prove it can work, in this PR I've ported FLOG, topic monitor, wgetopt, builtin_wait, and some others to Rust. The Rust bits live in a crate that lives inside the C++ and links with it. You can just build it the usual way:

  1. Install Rust 1.67 or later
  2. cmake as usual, and it should work, by way of corrosion

It works in GH Actions CI too.

The Plan has a high level description, and the Development Guide has more technical details on how to proceed. Please consider both to be part of this PR.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

PedroHLC, roland-5, ClydeHuibregtse, kkysen, mattrighetti, andrewbanchich, JaszonAlexzander, thebitstick, tim-field, muloka, and 1227 more reacted with thumbs up emoji EmbeddedBacon, hydrobeam, danem, twpayne, vaygr, ipostr08, sumchattering, omar2205, german-e-a, iddev5, and 80 more reacted with thumbs down emoji ho-229, mati865, MaddyGuthridge, matoruru, murlakatamenka, hinell, louwers, andrew-malikov, adriankumpf, arexon, and 83 more reacted with laugh emoji roland-5, kkysen, andrewbanchich, phase, thebitstick, blindside85, pkoch, echelon, freych, PoorlyDefinedBehaviour, and 264 more reacted with hooray emoji EchedelleLR, nymous, matu3ba, donlon, and theoparis reacted with confused emoji krobelus, jtrv, philpax, nazmulidris, matusf, vrmiguel-cw, CosmicHorrorDev, kamulos, anhosh, renato145, and 380 more reacted with heart emoji spacekookie, exploide, krobelus, jtrv, dgudim, philpax, nazmulidris, dbofmmbt, kaanyalova, vrmiguel-cw, and 322 more reacted with rocket emoji exploide, Be-ing, jtrv, philpax, nazmulidris, dbofmmbt, CathalMullan, omentic, michaelBelsanti, cole-h, and 117 more reacted with eyes emoji
All reactions
  • 👍 1237 reactions
  • 👎 90 reactions
  • 😄 93 reactions
  • 🎉 274 reactions
  • 😕 5 reactions
  • ❤️ 390 reactions
  • 🚀 332 reactions
  • 👀 127 reactions
@faho

faho commented Jan 28, 2023

Copy link
Copy Markdown
Member

So, a few quick comments:

  1. I basically don't know rust at all (I believe I've used it for a combined twelve minutes), so I can't speak to any of the code itself.
  2. Rust 1.67 was released literally two days ago. Compared to us sticking to C++11 that's a staggering difference in version support. Is it that much easier to get a new rust on old systems? Our typical targets are old CentOS and Debian.
  3. Following on from that, how easy is this to package from a distro perspective? We've expended quite a bit of effort on making that easy, and I'd hate to drop that aspect.

As of yet unknown compatibility story for Tier 2+ platforms (Cygwin, etc).

Cygwin is mostly a major PITA because of its wchar_t type. If we can get away from using libc that could make some things easier.

kristafari, grantshandy, aameen-tulip, SKTT1Ryze, Tyler799, omninonsense, Arzte, ilyagr, CodingKoopa, fabianhjr, and 45 more reacted with thumbs up emoji
All reactions
  • 👍 55 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@schuelermine

schuelermine commented Jan 29, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

get away from using libc

Rust uses libc under the hood.

kevincox, betancour, tristanisham, adelarsq, Eoic, hcsch, hwmack, azzamsa, bczhc, afiqzx, and 16 more reacted with thumbs up emoji hinell, benelot, rounakdatta, sigmonsays, natdm, Eoic, vasilev-alex, Tristan971, KitsuneSemCalda, azzamsa, and 26 more reacted with laugh emoji rumpelsepp, KitsuneSemCalda, azzamsa, brainwo, garmoned, and vt92i reacted with eyes emoji
All reactions
  • 👍 26 reactions
  • 😄 36 reactions
  • 👀 6 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@faho

faho commented Jan 29, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Rust uses libc under the hood.

Of course technically that's true, but that's not what I'm talking about.

What I mean is that we wouldn't use e.g. libc's "iswdigit" and friends, like we're forced to do now because C++ never got around to replacing them with ones that work with its strings.

And because we use those functions, we're beholden to the libc wchar_t type where we use them, which is everywhere, which means the difference between cygwin (2 byte wchar_t) and as best as I can tell any other system (4 byte wchar_t) can appear everywhere.

And we're beholden to platform differences like "does this provide a uselocale" or "does this have wcscasecmp or std::wcscasecmp", because those directly appear in libc.

In effect what I'm saying is that my hope is rust would not rely on libc for everything and abstract some of the other libc gunk away instead of throwing it in our face like C++ does. And so this historical wchar_t difference could just go away.

ssg, omninonsense, dryya, Th3Whit3Wolf, solson, benjaminbrassart, ax-bronsen, Speykious, bb010g, offsetcyan, and 32 more reacted with thumbs up emoji
All reactions
  • 👍 42 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@zanchey

zanchey commented Jan 29, 2023

Copy link
Copy Markdown
Member

The progress to date is impressive, and the motivation to allow concurrent mode is compelling.

I agree that packaging is important but I'd be happy to tackle it. RHEL 7 is only supported for another 18 months, and I have managed to backport GCC to RHEL in the past so it might be possible to do the same. There's a couple of ways to generate Debian packages, which are worth exploring.

I don't know any rust, but I didn't know any C++ before I started work on fish, so I'd be keen to learn.

alexxbb, wmealing, weihanglo, zzhaolei, hlmtre, tjkirch, zolrath, lu-zero, ax-bronsen, cryptoquick, and 56 more reacted with thumbs up emoji kaleb-itm and vt92i reacted with hooray emoji cryptoquick, lefoun, erlend-sh, jk-gan, bboydflo, Yukaii, lastmjs, rounakdatta, cljoly, garfieldnate, and 31 more reacted with heart emoji bbhoss, Abourass, Th3Whit3Wolf, Chris--B, mattbrandlysonos, hen-x, var-arora, apokolokyntosis, dunxen, Uzaaft, and 29 more reacted with rocket emoji
All reactions
  • 👍 66 reactions
  • 🎉 2 reactions
  • ❤️ 41 reactions
  • 🚀 39 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@zanchey

zanchey commented Jan 29, 2023

Copy link
Copy Markdown
Member

(Maybe a way forward to #972 etc?)

MagnetizedFreckles reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

zanchey
zanchey reviewed Jan 29, 2023
View reviewed changes
Comment thread cmake/Rust.cmake
@@ -0,0 +1,48 @@
include(FetchContent)

@zanchey zanchey Jan 29, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

This is going to make builds using OBS difficult; is it possible to include Corrosion in the tree and use it as a subdirectory instead?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@Be-ing Be-ing Jan 29, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Also, distro packagers are not going to like this, but it's fine if you try find_package first:

find_package(Corrosion)
if (NOT Corrosion_FOUND)
   include(FetchContent)
   ...
endif()

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

anordal, dschmidt, ulidtko, and Justinzobel reacted with thumbs up emoji
All reactions
  • 👍 4 reactions

@grawlinson grawlinson Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Also, distro packagers are not going to like this, but it's fine if you try find_package first:

find_package(Corrosion)
if (NOT Corrosion_FOUND)
   include(FetchContent)
   ...
endif()

Distro packager for Arch Linux here, this would make our lives so much easier with the ability to use system libraries.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

dschmidt, ulidtko, janhicken, envp, stvnksslr, KnotFalse, wkrettek, and chookity-pokk reacted with thumbs up emoji
All reactions
  • 👍 8 reactions

@ridiculousfish ridiculousfish Jan 31, 2023

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

I'm happy to add that, but my hope is that no distro packages fish while it uses Corrosion. This use is meant to be temporary during a single development cycle; by the next release I hope to have no CMake at all, and therefore no Corrosion.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

wezm, Th3Whit3Wolf, solson, Icy-Thought, Chris--B, zanchey, thaliaarchi, var-arora, Resonious, lu-zero, and 25 more reacted with thumbs up emoji
All reactions
  • 👍 35 reactions

@Be-ing Be-ing Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

That's an ambitious goal. Good luck.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

cryptoquick, Dorsug, vvzen, ulidtko, 0xpr03, theotherjimmy, agucova, felix91gr, Tastaturtaste, vimpostor, and 5 more reacted with rocket emoji
All reactions
  • 🚀 15 reactions

@jschwe jschwe Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

This is going to make builds using OBS difficult; is it possible to include Corrosion in the tree and use it as a subdirectory instead?

Corrosion can be added as a subdirectory/ submodule.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@Be-ing Be-ing Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Considering the use of a fork of Corrosion, and that it is intended as a temporary measure that won't be released, I think using Corrosion as a subdirectory would make sense.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@bruxisma bruxisma Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Hello, throwing myself into this conversation with some additional info that distro maintainers might find useful. FetchContent has always supported placing the source directory for any dependency in any location and then setting -DFETCHCONTENT_SOURCE_DIR_<uppercase-name>=<path>.

In this case, this would allow package maintainers to do -DFETCHCONTENT_SOURCE_DIR_CORROSION=<path/to/corrosion/sources> and not interrupt the workflow. No conditional find_package call is required.

Additionally, starting in CMake 3.24, it's possible to tell FetchContent_MakeAvailable to call find_package first (and vice versa where find_package calls FetchContent_MakeAvailable if no file was found).

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Be-ing, workingjubilee, and alexeyr reacted with thumbs up emoji
All reactions
  • 👍 3 reactions

@ridiculousfish ridiculousfish Feb 2, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Thank you, this is helpful. For Corrosion, my preferences are (in order): use FetchContent as in the PR (perhaps using bruxisma's tips), or add Corrosion as a fish-shell submodule, or directly check in Corrosion. Not sure what's best for OBS.

We shouldn't use heroics to keep fish working on older platforms mid-port. That may mean turning off builders for certain platforms, and then turning them back on later when we're no longer obligated to support Corrosion/autocxx/etc.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

workingjubilee and wkrettek reacted with heart emoji
All reactions
  • ❤️ 2 reactions
zanchey
zanchey reviewed Jan 29, 2023
View reviewed changes
Comment thread fish-rust/Cargo.toml
crate-type=["staticlib"]

[patch.crates-io]
cxx = { git = "https://github.com/ridiculousfish/cxx", branch = "fish" }

@zanchey zanchey Jan 29, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Yikes, all this is going to require internet access from build hosts, I think?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@krobelus krobelus Jan 29, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

yeah we need to tell cargo to pre-fetch all dependencies, like https://kressle.in/articles/2021/packaging-rust-apps-in-obs.php

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

bb010g, kevincox, lakoliu, and selvmaya reacted with thumbs up emoji
All reactions
  • 👍 4 reactions

@zanchey zanchey Jan 29, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

OBS can potentially do a lot of the heavy lifting - https://en.opensuse.org/openSUSE:Packaging_Rust_Software

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@Be-ing Be-ing Jan 29, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Cargo can download all dependencies' source code prior to building. See cargo fetch and cargo vendor. The [patch] table in Cargo.toml is an easy way to tell Cargo to use a repository you've forked, which is very convenient before your changes are merged upstream.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

bb010g, Speykious, sburton84, kpcyrd, ulidtko, arudei-dev, agucova, jregistr, afiqzx, projectgus, and 6 more reacted with thumbs up emoji cryptoquick, vvzen, arudei-dev, and selvmaya reacted with heart emoji
All reactions
  • 👍 16 reactions
  • ❤️ 4 reactions
zanchey
zanchey reviewed Jan 29, 2023
View reviewed changes
Comment thread README.rst

- Rust (version 1.67 or later)
- a C++11 compiler (g++ 4.8 or later, or clang 3.3 or later)
- CMake (version 3.5 or later)

@zanchey zanchey Jan 29, 2023

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

I think the use of FindContent bumps CMake to 3.11 (unless corrosion gets included in the tree as discussed elsewhere)

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

bb010g reacted with thumbs up emoji
All reactions
  • 👍 1 reaction

@jschwe jschwe Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Current versions of corrosion require at least CMake 3.15. Some features are only available with CMake 3.19 and newer.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
krobelus
krobelus reviewed Jan 29, 2023
View reviewed changes
Comment thread doc_internal/fish-riir-plan.md

## Risks

- Large amount of work with possible introduction of new bugs.

@krobelus krobelus Jan 29, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

This is amazing, thanks for spearheading this work.
The plan sounds all-around sensible to me.

The port sounds like a great investment while being easier to pull off than a rewrite.
There are many fresh shells these days but I don't think they offer a comparable interactive experience (most of them focus on inventing their language).

Still, the port is a lot of work with late payoff, so it might be hard to find persistent contributors.
Somehow Rust projects seem to be doing fine in this regard.
Granted most of them are written from scratch.
One incremental port that died a slow death is https://github.com/remacs/remacs - but I don't think it's comparable to fish, it's around 6x larger, and the authors didn't have ownership of the code. IIRC they used a simple bindgen build; our toolchain seems much more powerful.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

ridiculousfish, hen-x, var-arora, pgilad, cryptoquick, bb010g, ulidtko, timvisee, hwmack, agucova, and 3 more reacted with thumbs up emoji orangecms reacted with heart emoji
All reactions
  • 👍 13 reactions
  • ❤️ 1 reaction

@LiaRowan LiaRowan Jan 31, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

"might be hard to find persistent contributions"

Just wanted to chime in and say that I love the fish shell and have been using it every day for about 6 or 7 years now. If this goes through, I will absolutely be contributing to the ongoing port and future features. I'm a full time Rust engineer and my main project at work includes quite a lot of C FFI, so I'm no stranger to that. I know I'm just one person, but figured I'd show support

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

timvisee, abhi-glitchhg, pieps, Xiretza, briankung-bpn, SirAlador, hwmack, alper, The0x539, arudei-dev, and 13 more reacted with thumbs up emoji abhi-glitchhg, briankung-bpn, tshepang, sschwarzer, vadik49b, batuhan, janriemer, elidhu, joelsa, hwmack, and 17 more reacted with heart emoji briankung-bpn, rapodaca, felix91gr, antmelnyk, and projectgus reacted with rocket emoji
All reactions
  • 👍 23 reactions
  • ❤️ 27 reactions
  • 🚀 5 reactions

@ridiculousfish ridiculousfish Feb 2, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

That remacs link is sobering, shanks for sharing that. I think the biggest difference is that emacs maintainers don't appear to have been involved, and the fork was scared of touching parts of the codebase.

fish gets a lot of mileage out of being written in C++ here: the types map better, the FFI tools are more powerful, and fish already uses techniques like RAII, scoped locks, shared_ptr etc which map cleanly to Rust. Still, food for thought.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

krobelus and wkrettek reacted with thumbs up emoji
All reactions
  • 👍 2 reactions
Comment thread cmake/Rust.cmake
FetchContent_Declare(
Corrosion
GIT_REPOSITORY https://github.com/ridiculousfish/corrosion
GIT_TAG fish

@krobelus krobelus Jan 29, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

probably we want to have a SHA here, for reproducibility

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Be-ing, kristof-mattei, and ulidtko reacted with thumbs up emoji
All reactions
  • 👍 3 reactions
Comment thread doc_internal/fish-riir-plan.md
- Other languages considered:
- Java, Python and the scripting family are ruled out for startup latency and memory usage reasons.
- Go would be an awkward fit. fork is [quite the problem](https://stackoverflow.com/questions/28370646/how-do-i-fork-a-go-process/28371586#28371586) in Go.
- Other system languages (D, Nim, Zig...) are too niche: fewer contributors, higher risk of the language becoming irrelevant.

@krobelus krobelus Jan 29, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

(FWIW Java startup time can be fixed by compiling a native image)

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

strager, rymiel, markasoftware, ChristianCiach, and kaleb-itm reacted with thumbs up emoji kristof-mattei, Virgiel, Xtrem532, clonardo, 007lva, 95th, xedrac, dzvon, coral, jharrilim, and 19 more reacted with thumbs down emoji jxy, var-arora, lnicola, wizard-28, EdorianDark, Adzz, austince, spacekookie, hwmack, wkrettek, and 2 more reacted with laugh emoji
All reactions
  • 👍 5 reactions
  • 👎 29 reactions
  • 😄 12 reactions

@faho faho Jan 30, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

(edit for posterity: This was in response to a comment asking us to reconsider D, which has since been removed by the author)

Let me put a swift lid on that (and any other discussions of other programming languages, including swift).

Rust has the momentum, some of us already know it and others are interested in it.

This exists, it is reasonably far along, it works. The decision has essentially been made.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

ulidtko, nadir-ishiguro, hwmack, agucova, jkeroes, stvnksslr, kroosec, olebedev, and FHU-yezi reacted with thumbs up emoji rymiel reacted with thumbs down emoji krobelus, pythoneer, matklad, hudson-ayers, philipbjorge, not-matthias, Titaniumtown, blindside85, cemelo, Pratyush, and 18 more reacted with laugh emoji matklad, itsbalamurali, garusis, blindside85, cemelo, Pratyush, ssg, dryya, DianaNites, xedrac, and 16 more reacted with heart emoji
All reactions
  • 👍 9 reactions
  • 👎 1 reaction
  • 😄 28 reactions
  • ❤️ 26 reactions

This comment was marked as off-topic.

Sign in to view

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

This comment was marked as off-topic.

Sign in to view

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

Comment thread doc_internal/fish-riir-plan.md

## Timeline

Handwaving, 6 months? Frankly unknown - there's 102 remaining .cpp files of various lengths. It'll go faster as we get better at it. Peter (ridiculous_fish) is motivated to work on this, other current contributors have some Rust as well, and we may also get new contributors from the Rust community. Part of the point is to make contribution easier.

@krobelus krobelus Jan 29, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

I'm eager to contribute as well, probably at modest capacity.
Seems like you have already overcome the biggest initial hurdles.
I'm always motivated to help people get up to speed with fish and Rust.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@krobelus krobelus Jan 31, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

It took me 3 hours to port util.cpp, which has 200 lines.
With my new knowledge I could probably do it in 1 hour.
Extrapolating the 1-hour estimate to the remaining 60k lines gives us some 300 hours of work.
I'm sure that other modules are harder and might take longer but this number leaves me optimistic.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

faho, Speykious, mhwdvs, amadejpapez, Arzte, MrZLeo, hwmack, arudei-dev, agucova, felix91gr, and 4 more reacted with hooray emoji ridiculousfish and tolik518 reacted with heart emoji ulidtko, arudei-dev, and felix91gr reacted with rocket emoji
All reactions
  • 🎉 14 reactions
  • ❤️ 2 reactions
  • 🚀 3 reactions
Comment thread doc_internal/rust-devel.md
The [autocxx guidance](https://google.github.io/autocxx/workflow.html#how-can-i-see-what-bindings-autocxx-has-generated) is helpful:

1. Install cargo expand (`cargo install cargo-expand`). Then you can use `cargo expand` to see the generated Rust bindings for C++. In particular this is useful for seeing failed expansions for C++ types that autocxx cannot handle.
2. In rust-analyzer, enable Proc Macro and Proc Macro Attributes.

@krobelus krobelus Jan 29, 2023

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Nowadays rust-analyzer enables proc macros by default (but LSP clients may override the default)

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

lnicola reacted with thumbs up emoji
All reactions
  • 👍 1 reaction
Be-ing
Be-ing reviewed Jan 29, 2023
View reviewed changes
Comment thread fish-rust/build.rs
let fish_src_dir = format!("{}/{}", rust_dir, "../src/");

// Where cxx emits its header.
let cxx_include_dir = format!("{}/{}", target_dir, "cxxbridge/rust/");

@Be-ing Be-ing Jan 29, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

While this may work, I warn you that this relies on unstable implementation details of Cargo and the cxx maintainer has adamantly refused to accept any more reasonable solution for integrating cxx with any C++ build system besides Bazel or Buck: dtolnay/cxx#462

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@ridiculousfish ridiculousfish Feb 2, 2023

Copy link
Copy Markdown
Member Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Thanks for the heads-up. I doubt fish will track upstream autocxx: its priorities are somewhat different (focused on long-term safe interop, instead of an aid to porting) so we'll continue to use our fork.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@Be-ing Be-ing Feb 2, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Considering that you are using a fork of cxx, you may consider adding something like dtolnay/cxx#1120 to your fork. Though, if this existing code works, and it's intended to be temporary before the next release, this issue is kinda moot for fish's purposes.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@Be-ing Be-ing Feb 2, 2023

Copy link
Copy Markdown

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

relies on unstable implementation details of Cargo

To clarify, Cargo only provides build.rs scripts with the OUT_DIR environment variable as a path to write files, which is a subdirectory of target with an unreliable path that includes a hash. To create target/cxxbridge, cxx-build uses a hacky method of walking up from OUT_DIR to find the root of the target directory using some files Cargo creates for unrelated reasons, so that could break in some future version of cargo. A few weeks ago, I tried to start a discussion upstream about a better way to handle this, but it didn't go anywhere.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@faho

faho commented Jan 30, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Member

Just throwing an idea out there: Given that this is a big underlying technical change and needs some larger changes in packaging, would it make sense to:

  1. Call fish-in-rust "fish 4"
  2. Support the last C++ series (3.6.x?) for a bit longer with bugfixes, added completions and such

This is, of course, a change in policy and more work, but I believe it may be warranted. These releases could be source-only (just tag a 3.6.3 and send out a mail about it), for those who are unable to install rust, especially distro packagers who find themselves looking at an incompatible rustc version.

It's of course possible I'm overestimating the difficulty here, maybe it's not needed because nobody has a problem switching to 4.0 immediately.

futile, martinetd, SergeyKasmy, danielphan2003, qdot, rben01, TheOnlyMrCat, Slackadays, hlmtre, ssg, and 39 more reacted with thumbs up emoji mbStavola, jtrv, ianchanning, gsora, Yukaii, hwmack, 8573, felix91gr, and FHU-yezi reacted with heart emoji Slackadays, Chris--B, hen-x, jtrv, NatanFreeman, Yukaii, and hwmack reacted with rocket emoji
All reactions
  • 👍 49 reactions
  • ❤️ 9 reactions
  • 🚀 7 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@faho

faho commented Jan 30, 2023

Copy link
Copy Markdown
Member

Building on that old NetBSD VM I have lying around currently fails with

running: "ar" "s" "/home/alfa/fish-shell/build-rust/./cargo/build/x86_64-unknown-netbsd/release/build/fish-rust-6df62e1ec51440cc/out/libfish-rust.a"
  exit status: 0
  cargo:rustc-link-lib=static=fish-rust
  cargo:rustc-link-search=native=/home/alfa/fish-shell/build-rust/./cargo/build/x86_64-unknown-netbsd/release/build/fish-rust-6df62e1ec51440cc/out
  cargo:rustc-env=AUTOCXX_RS=/home/alfa/fish-shell/build-rust/fish-autocxx-gen/rs

  --- stderr

  CXX include path:
    /home/alfa/fish-shell/build-rust/./cargo/build/x86_64-unknown-netbsd/release/build/fish-rust-6df62e1ec51440cc/out/cxxbridge/include
    /home/alfa/fish-shell/build-rust/./cargo/build/x86_64-unknown-netbsd/release/build/fish-rust-6df62e1ec51440cc/out/cxxbridge/crate
  /home/alfa/fish-shell/fish-rust/../src/proc.h:103:23: error: static_assert expression is not an integral constant expression
  /home/alfa/fish-shell/fish-rust/../src/proc.h:103:23: note: cast from 'void *' is not allowed in a constant expression
  Error: 
    × the include_cpp! macro couldn't be expanded into Rust bindings to C++:
    │ Bindgen was unable to generate the initial .rs bindings for this file.
    │ This may indicate a parsing problem with the C++ headers.

--- CMakeFiles/_cargo-build_fish-rust ---
*** [CMakeFiles/_cargo-build_fish-rust] Error code 101

Removing that static_assert (which is fine) makes it go on until it eventually ends in

[ 98%] Linking CXX executable fish
ld: libfish_rust.a(nix-e8ff18d973978598.nix.35ee0c1d-cgu.15.rcgu.o): in function `nix::sys::timer::Timer::get':
nix.35ee0c1d-cgu.15:(.text._ZN3nix3sys5timer5Timer3get17h045b7bbd1ff7f87dE+0x1b): warning: warning: reference to compatibility timer_gettime(); include <time.h> to generate correct reference
ld: libfish_rust.a(nix-e8ff18d973978598.nix.35ee0c1d-cgu.15.rcgu.o): in function `nix::sys::timer::Timer::set':
nix.35ee0c1d-cgu.15:(.text._ZN3nix3sys5timer5Timer3set17h47eed997322493a6E+0x4e): warning: warning: reference to compatibility timer_settime(); include <time.h> to generate correct reference

(and a bunch more nix::sys::timer and nix::sys::aio functions)

It also absolutely requires libclang, and will fail rather late in the build process.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@faho faho added the enhancement label Jan 30, 2023
@faho faho added this to the next-major milestone Jan 30, 2023
@Lokathor

Lokathor commented Jan 30, 2023

Copy link
Copy Markdown

Rust 1.67 was released literally two days ago. Compared to us sticking to C++11 that's a staggering difference in version support. Is it that much easier to get a new rust on old systems? Our typical targets are old CentOS and Debian.

If you want to use the distro version of Rust then you'll need to use a much older rust than latest stable. You can look it up for a particular distro, but Debian's rustc (for example) is often 6 months or more behind the latest stable. If you want to ship your program in a distro you usually need to build the program using that distro's version of the compiler, so I suspect you'd need to push your "minimum supported rust verison" (MSRV) farther into the past if your project is supposed to be part of distros.

If you don't need to be shipped in a distro, it's as easy as rustup update to update to the latest compiler. It's so simple to update the compiler that it's honestly hard to convince people in the rust community to have a library support anything other than the latest stable.

var-arora, lnicola, ishanjain28, ianchanning, sandalbanditten, Lucretiel, cryptoquick, Speykious, bb010g, jakibaki, and 29 more reacted with thumbs up emoji
All reactions
  • 👍 39 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Shnatsel

Shnatsel commented Jan 30, 2023

Copy link
Copy Markdown

You can look it up for a particular distro, but Debian's rustc (for example) is often 6 months or more behind the latest stable.

AFAIK Debian updates both rustc and other packages for a while, and then freezes all of them. So it does have the latest rustc for the duration of the development cycle, and so this should not be an issue for packages shipped by the distro itself.

Third-party repos, however, will need either their own newer rustc for the build, or have all the code written in Rust support an older compiler version, including all dependencies.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Lokathor

Lokathor commented Jan 30, 2023

Copy link
Copy Markdown

Just taking a quick look at the versions in https://packages.debian.org/sid/rustc:

  • buster 1.41 (2020-01-30)
  • bullseye 1.48 (2020-11-19)
  • bookworm 1.63 (2022-08-11)
  • sid 1.63

I'm not sure what you mean by "for the duration of the development cycle", but even sid falls behind "latest stable" on a regular basis until someone goes and updates it.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@BurntSushi

BurntSushi commented Jan 31, 2023

Copy link
Copy Markdown

so I suspect you'd need to push your "minimum supported rust verison" (MSRV) farther into the past if your project is supposed to be part of distros.

You do not. See: BurntSushi/ripgrep#1019

Essentially, distros like Debian will just ship an older version of your program, just like they do for almost everything else.

jhpratt, Shnatsel, Be-ing, roland-5, josephglanville, tshirtman, andrewbanchich, not-matthias, zeenix, maxdeviant, and 68 more reacted with thumbs up emoji matklad, andrewbanchich, not-matthias, echelon, joshtriplett, blindside85, 95th, DianaNites, jtrv, xedrac, and 26 more reacted with heart emoji
All reactions
  • 👍 78 reactions
  • ❤️ 36 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@mqudsi

mqudsi commented Jan 31, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

I've been alternating between obsessed with and simply always entertaining in the back of my mind the idea of a rust-powered fish for many years now (and have discussed that with other team members), so I'm approaching this with an open mind, but also with concerns. I must say that I knew this was coming for many months now from following @ridiculousfish on GitHub (❤️), and have been wondering how it would the topic would be broached.

I passionately believe that rust is the way forward for writing any new code, especially in a cross-platform context. Quite apart from all the memory and concurrency safety it brings to the table, the general approach of the language and the community to always put correctness first and foremost has built a strong culture of correct, well-designed, and fairly maintainable software engineering. The package management is great, the team is fantastic, and support in the broader software world has been extremely positive and welcoming.

To go further, I have written my own fish-compatible rewrite (not port) of fish's tokenizer and was making progress on the AST and parser when I last had my "burning desire" to see something like fish but in rust. I was maintaining it on my private git server and not GitHub, but I've pushed it to GH in case anyone cares to take a look: https://github.com/mqudsi/velvet

Having said all that, I worry that rushing any part of this could be a death knell for the project. A quality rewrite (or port) takes time, on the magnitude of years rather than days. One good example to take inspiration from is tectonic, a xelatex port that started off with machine-rewritten code and then manually made progress on actual, idiomatic rust conversions... but even that was a greenfield project and not a first-party effort and so not saddled with some of the concerns we would be saddled by. The recommended module-by-module approach is definitely a great suggestion for a starting place, and I think it has great potential.

Off the top of my head, some concerns or points:

  • Compatibility, obviously. Fish runs on archaic hardware for fun. This would be the end of that. That's not a reason that should stand in the way of progress, but it's something we can't turn a blind eye to and would have to quite clearly signal that we're ok giving up all platforms that don't run (modern versions of) rust.
  • Idiomatic rust is too high-level for fish. You don't fork in rust, using the standard library interface doesn't give you access to poll/select/epoll/kqueue/whatever natively. async io is a horrible fake cludge with tokio/async_std faking it with thread pools or whatnot and performing far worse than truly native async implementations. We'd have to go that mostly alone to keep the same code we have (thinking "port" and not "rewrite" and aiming to preserve what we have).
  • Despite whether we call it a "port" or a "rewrite" there's going to be a heck of a lot of rewriting taking place. Subtle bugs will creep in. Subtle compatibility fixes that weren't properly documented or annotated will be lost.
  • We will be in a state of partial limbo until this completes one way or the other. We won't want to make any major changes to the C++ codebase while we're trying to get to feature parity in the rust one. Depending on how things unfold this could greatly hinder further progress in the project.
  • Not all core team members are fluent in rust. This seems unfair. (This isn't just something I'm saying in passing but rather something I've given a lot of thought to and broached with others before.)
  • C++ isn't really a "legacy" language (yet), no matter how much we wish the world would start treating it like that given all its warts and shortcomings.
  • I understand what @ridiculousfish meant by "Rust is what we need to turn on concurrent function execution" but respectfully disagree. A complete rewrite (or port, if you prefer) to another language is a great time to facilitate that, but it's hardly a requirement, though I guess it could functionally be considered one if you want to take into account correctness, maintainability, etc.
  • (Really minor compared to everything else, but if we're ultimately going to be a rust project, then I think it makes sense for all types coming from the rust codebase to use idiomatic rust naming conventions, but that would cause churn cpp-side. I suggest using idiomatic rust naming conventions and then using statements to alias them with cpp-style names in the cpp headers.)
jyn514, jeannekamikaze, t1ld3x, ipostr08, korantu, carlstoker, hlmtre, homomorphist, ChrisThrasher, joshuamegnauth54, and 59 more reacted with thumbs up emoji var-arora, SphericalKat, axxop, epsilon-phase, fakeshadow, and Exiled1 reacted with thumbs down emoji axxop reacted with confused emoji mikaelmello, grantshandy, 0xpr03, dryya, peterfaria-lula, sidkang, 0xSNIKI, Delta456, jtrv, hen-x, and 13 more reacted with heart emoji
All reactions
  • 👍 69 reactions
  • 👎 6 reactions
  • 😕 1 reaction
  • ❤️ 23 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ghost

This comment was marked as off-topic.

Sign in to view
@malmod

This comment was marked as off-topic.

Sign in to view
@ghost

This comment was marked as off-topic.

Sign in to view
@pkoch pkoch mentioned this pull request Jan 31, 2023
Rewrite Fish in Rust ansuz/RIIR#94
Closed
@AshtonKem

This comment was marked as off-topic.

Sign in to view
@9999years

This comment was marked as off-topic.

Sign in to view
@mlindner

mlindner commented Jan 31, 2023 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown

Idiomatic rust is too high-level for fish. You don't fork in rust, using the standard library interface doesn't give you access to poll/select/epoll/kqueue/whatever natively. async io is a horrible fake cludge with tokio/async_std faking it with thread pools or whatnot and performing far worse than truly native async implementations. We'd have to go that mostly alone to keep the same code we have (thinking "port" and not "rewrite" and aiming to preserve what we have).

Note that in the Approach section of the documentation there is this:

fish-shell/doc_internal/fish-riir-plan.md

Line 40 in 88ebaeb

We will not use tokio, serde, async, or other fancy Rust frameworks initially.

As a general comment to anyone reading this, it's worth reading the entire fish-riir-plan.md document before commenting.

https://github.com/ridiculousfish/fish-shell/blob/riir/doc_internal/fish-riir-plan.md

var-arora, ianchanning, cryptoquick, bb010g, Speykious, and bboydflo reacted with thumbs up emoji mqudsi, jtrv, 0xSNIKI, and cryptoquick reacted with laugh emoji dryya, jxy, Arzte, jtrv, Throne3d, vrmiguel-cw, 0xSNIKI, pgilad, cryptoquick, jonhoo, and 4 more reacted with heart emoji
All reactions
  • 👍 6 reactions
  • 😄 4 reactions
  • ❤️ 14 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@RexFactorem

This comment was marked as off-topic.

Sign in to view
@0xpr03

0xpr03 commented Jan 31, 2023

Copy link
Copy Markdown

Just leaving a comment here, based on your planning doc:

types cannot represent non-UTF8 filenames

This crate might be what you want to use instead.

yvt, inflation, Throne3d, thaliaarchi, var-arora, EdorianDark, Speykious, eugenesvk, geekyBoogiepop, anupj, and 5 more reacted with thumbs up emoji
All reactions
  • 👍 15 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Slackadays

This comment was marked as off-topic.

Sign in to view
@Diablo-D3

This comment was marked as off-topic.

Sign in to view
krobelus and others added 10 commits February 8, 2023 21:49
@krobelus
Follow Rust naming convention for some types
4639f7e
But don't do it for enum variants just yet.
@krobelus
Remove unused parse error code
8fd1db0
@krobelus
Convert parse_error_code_t to a scoped enum
9ca160e
This will make the Rust port's diff smaller.
@krobelus
Port redirection.cpp to Rust
2581662
@krobelus
Port parse_constants.h to Rust
7f8d247
@krobelus
Port tokenizer.cpp to Rust
39f3c89
In hindsight, I should probably have split this into three different commits.
@krobelus
Document some porting bits
a8c9922
@Xiretza @krobelus
rust: fix typos in documentation, add links
27c8845
Closes fish-shell#9556
@Xiretza @krobelus
Port parse_help_only_cmd_opts to Rust
3ed86fa
This is duplicated for now, since a `&mut [&wstr]` can't be passed over FFI.
@Xiretza @krobelus
Port emit builtin to rust
5a76c7d
@Xiretza

Xiretza commented Feb 16, 2023

Copy link
Copy Markdown
Contributor

Any update on when/how riir will be merged? Right now, master is steadily diverging from it.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ridiculousfish

ridiculousfish commented Feb 18, 2023

Copy link
Copy Markdown
Member Author

I'll tag the "Last C++11" and merge in maybe 12-16 hours, assuming there are no objections from fish shell committers. (It will be a real merge, not a rebase).

faho, futile, zhaofengli, NTBBloodbath, vinicius507, hayd, zanchey, roland-5, krobelus, fasterthanlime, and 12 more reacted with thumbs up emoji Lucretiel, roland-5, Xiretza, auri-gabriel, fasterthanlime, cryptoquick, IngrownMink4, matz-e, howard36, rewhile, and 2 more reacted with hooray emoji Slackadays, yanskun, roland-5, tatsuya6502, ac130kz, Xiretza, fasterthanlime, SeniorMars, cryptoquick, IngrownMink4, and 7 more reacted with rocket emoji
All reactions
  • 👍 22 reactions
  • 🎉 12 reactions
  • 🚀 17 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

zanchey
zanchey approved these changes Feb 19, 2023
View reviewed changes
mqudsi
mqudsi approved these changes Feb 19, 2023
View reviewed changes
@ridiculousfish
ridiculousfish merged commit 5a76c7d into fish-shell:master Feb 19, 2023
@ridiculousfish

ridiculousfish commented Feb 19, 2023

Copy link
Copy Markdown
Member Author

Merged as 27f5490 Here we go! 🤞

theoparis reacted with thumbs down emoji ronjouch, zhaofengli, futile, fitrh, fasterthanlime, DianaNites, novedevo, xanderio, valpackett, zbrox, and 81 more reacted with hooray emoji Slackadays, timvisee, futile, fasterthanlime, shtrophic, DianaNites, novedevo, xanderio, valpackett, SeniorMars, and 62 more reacted with rocket emoji
All reactions
  • 👎 1 reaction
  • 🎉 91 reactions
  • 🚀 72 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@ridiculousfish
ridiculousfish deleted the riir branch February 19, 2023 16:59
@ridiculousfish

ridiculousfish commented Feb 19, 2023

Copy link
Copy Markdown
Member Author

I've deleted the riir branch; please redirect any outstanding PRs to master

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@Xiretza

Xiretza commented Feb 19, 2023

Copy link
Copy Markdown
Contributor

I've deleted the riir branch; please redirect any outstanding PRs to master

Doesn't look like that's possible once they've been force-closed, so they'll have to be recreated.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@branchv branchv mentioned this pull request Feb 20, 2023
fish: add rust for HEAD build Homebrew/homebrew-core#123728
Merged
6 tasks done
archlinux-github pushed a commit to archlinux/aur that referenced this pull request Feb 20, 2023
@akiirui
New makedepends cargo & clang and new checkdepends procps-ng
b071d90
RIIR fish-shell/fish-shell#9512
@faho faho mentioned this pull request Feb 20, 2023
If build.target-dir is set the build test will fail #9600
Closed
@PoignardAzur

PoignardAzur commented Nov 26, 2023

Copy link
Copy Markdown
Contributor

If it's not too much trouble, some people over at r/rust are curious how the rewrite is going? ❤️

Is it at a point where people unfamiliar with the codebase might be able to help with drive-by contributions?

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@faho

faho commented Nov 26, 2023

Copy link
Copy Markdown
Member

@PoignardAzur I've written something up about the state of the port in #10123.

I would ask you to leave any replies there, this PR is quite big and replying here might notify a lot of people.

In short: We're "mostly" done and I don't believe the rest is well-suited for drive-by contributions.

lu-zero reacted with hooray emoji EdorianDark, jonhoo, joshuachp, ErichDonGubler, rrbutani, malobre, var-arora, novedevo, DianaNites, senden9, and 15 more reacted with heart emoji
All reactions
  • 🎉 1 reaction
  • ❤️ 25 reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@scarf005 scarf005 mentioned this pull request Nov 27, 2023
refactor!: rewrite it in rust cataclysmbn/Cataclysm-BN#3766
Closed
1 of 7 tasks
@seffradev seffradev mentioned this pull request Jun 16, 2024
Rewrite it in Rust FelixH-git/Autobar#1
Open
@EliahKagan EliahKagan mentioned this pull request Jul 18, 2024
Git.execute's kill_after_timeout callback assumes procps gitpython-developers/GitPython#1756
Closed
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Dec 23, 2024
@faho faho modified the milestones: next-major, fish 4.0 Apr 2, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Reviewers

@krobelus krobelus krobelus left review comments
@faho faho faho left review comments
@mqudsi mqudsi mqudsi approved these changes
@zanchey zanchey zanchey approved these changes
+21 more reviewers
@Yhodhan Yhodhan Yhodhan left review comments
@mattfbacon mattfbacon mattfbacon left review comments
@jschwe jschwe jschwe left review comments
@qexat qexat qexat left review comments
@bjorn3 bjorn3 bjorn3 left review comments
@LiaRowan LiaRowan LiaRowan left review comments
@matu3ba matu3ba matu3ba left review comments
@spikespaz spikespaz spikespaz left review comments
@Be-ing Be-ing Be-ing left review comments
@superobertking superobertking superobertking left review comments
@The0x539 The0x539 The0x539 left review comments
@bruxisma bruxisma bruxisma left review comments
@Evrey Evrey Evrey left review comments
@grawlinson grawlinson grawlinson left review comments
@leiserfg leiserfg leiserfg left review comments
@senden9 senden9 senden9 left review comments
@guihkx guihkx guihkx left review comments
@heinrich5991 heinrich5991 heinrich5991 left review comments
@ulidtko ulidtko ulidtko left review comments
@ckoehler ckoehler ckoehler left review comments
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

enhancement

Projects

None yet

Milestone

fish 4.0

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

19 participants

@ridiculousfish @faho @schuelermine @zanchey @Lokathor @Shnatsel @BurntSushi @mqudsi @malmod @AshtonKem @9999years @mlindner @RexFactorem @0xpr03 @Slackadays @Diablo-D3 @inflation @korewaChino @mattfbacon
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.