Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

rename epoch to edition #49035

Merged
merged 2 commits into from
Mar 23, 2018
Merged

rename epoch to edition #49035

merged 2 commits into from
Mar 23, 2018

Conversation

klnusbaum
Copy link
Contributor

@klnusbaum klnusbaum commented Mar 15, 2018

As outlined in #49001 we'd like to rename all instances of epoch to edition. I developed the following bash script to assist in the rename. It renames all instances of epoch to edition and Epoch to Edition in all of the files I was able to determine were relevant. It then renames a few relevant files that had epoch in there name and finally prints out all of the remaining instance of the strings epoch and Epoch (which, as far as I can tell should not be changed). Here is the script:

replace() {
	sed -i '' "s/epoch/edition/g" "$1"
    sed -i '' "s/Epoch/Edition/g" "$1"
}

replace "src/librustc/lint/context.rs"
replace "src/librustc/lint/mod.rs"
replace "src/librustc/session/config.rs"
replace "src/librustc/session/mod.rs"
replace "src/librustc_driver/driver.rs"
replace "src/librustc_lint/lib.rs"
replace "src/librustc_typeck/check/method/probe.rs"
replace "src/libsyntax/config.rs"
replace "src/libsyntax/epoch.rs"
replace "src/libsyntax/feature_gate.rs"
replace "src/libsyntax/lib.rs"
replace "src/test/compile-fail/epoch-raw-pointer-method-2015.rs"
replace "src/test/compile-fail/epoch-raw-pointer-method-2018.rs"
replace "src/test/run-pass/dyn-trait.rs"
replace "src/test/run-pass/epoch-gate-feature.rs"
replace "src/test/ui/inference-variable-behind-raw-pointer.stderr"

git mv src/libsyntax/epoch.rs src/libsyntax/edition.rs
git mv src/test/compile-fail/epoch-raw-pointer-method-2015.rs src/test/compile-fail/edition-raw-pointer-method-2015.rs
git mv src/test/compile-fail/epoch-raw-pointer-method-2018.rs src/test/compile-fail/edition-raw-pointer-method-2018.rs

git grep "epoch" ./*
git grep "Epoch" ./*

And here is the output of the script:

kurtis-rust$ ./epoch_to_edition.sh
src/Cargo.lock: "crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
src/Cargo.lock:name = "crossbeam-epoch"
src/Cargo.lock:"checksum crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59796cc6cbbdc6bb319161349db0c3250ec73ec7fcb763a51065ec4e2e158552"
src/ci/docker/scripts/android-start-emulator.sh:# Using the default qemu2 engine makes time::tests::since_epoch fails because
src/ci/docker/scripts/android-start-emulator.sh:# the emulator date is set to unix epoch (in armeabi-v7a-18 image). Using
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = u64::from_str_radix(s, INT_ENCODE_BASE as u32);
src/librustc_incremental/persist/fs.rs:    if micros_since_unix_epoch.is_err() {
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = micros_since_unix_epoch.unwrap();
src/librustc_incremental/persist/fs.rs:    let duration = Duration::new(micros_since_unix_epoch / 1_000_000,
src/librustc_incremental/persist/fs.rs:                                 1000 * (micros_since_unix_epoch % 1_000_000) as u32);
src/libstd/sys/cloudabi/abi/cloudabi.rs:  /// The epoch of this clock is undefined. The absolute
src/libstd/time.rs:        let one_second_from_epoch = UNIX_EPOCH + Duration::new(1, 0);
src/libstd/time.rs:        let one_second_from_epoch2 = UNIX_EPOCH + Duration::new(0, 500_000_000)
src/libstd/time.rs:        assert_eq!(one_second_from_epoch, one_second_from_epoch2);
src/libstd/time.rs:    fn since_epoch() {
src/test/run-pass/issue-29540.rs:    pub mon_min_osdmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_pgmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_log_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_mdsmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_map_share_max_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_pg_epoch_persisted_max_stale: String,

If it looks like I've missed any things that should be converted, please let me know. There were also some notes in src/libsyntax/epoch.rs that indicated there might be some necessary/parallel changes that need to made in cargo. But we should probably make a separate issue for that.

@rust-highfive
Copy link
Collaborator

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @cramertj (or someone else) soon.

If any changes to this PR are deemed necessary, please add them as extra commits. This ensures that the reviewer can see what has changed since they last reviewed the code. Due to the way GitHub handles out-of-date commits, this should also make it reasonably obvious what issues have or haven't been addressed. Large or tricky changes may require several passes of review and changes.

Please see the contribution instructions for more information.

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Mar 15, 2018
@klnusbaum
Copy link
Contributor Author

is there a preferred way of resolving merge conflicts, or can I do that however I want?

@klnusbaum
Copy link
Contributor Author

Ah, I can already see there's a string that I missed. EPOCH. I'll start working on getting that fixed.

@klnusbaum
Copy link
Contributor Author

I've modified my script to replace all instances of EPOCH to EDITION and I think I've got them all now. Here is the output from a grep of the whole repo:

kurtis:rust $ git grep epoch; git grep Epoch; git grep EPOCH
src/Cargo.lock: "crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
src/Cargo.lock:name = "crossbeam-epoch"
src/Cargo.lock:"checksum crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59796cc6cbbdc6bb319161349db0c3250ec73ec7fcb763a51065ec4e2e158552"
src/ci/docker/scripts/android-start-emulator.sh:# Using the default qemu2 engine makes time::tests::since_epoch fails because
src/ci/docker/scripts/android-start-emulator.sh:# the emulator date is set to unix epoch (in armeabi-v7a-18 image). Using
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = u64::from_str_radix(s, INT_ENCODE_BASE as u32);
src/librustc_incremental/persist/fs.rs:    if micros_since_unix_epoch.is_err() {
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = micros_since_unix_epoch.unwrap();
src/librustc_incremental/persist/fs.rs:    let duration = Duration::new(micros_since_unix_epoch / 1_000_000,
src/librustc_incremental/persist/fs.rs:                                 1000 * (micros_since_unix_epoch % 1_000_000) as u32);
src/libstd/sys/cloudabi/abi/cloudabi.rs:  /// The epoch of this clock is undefined. The absolute
src/libstd/time.rs:        let one_second_from_epoch = UNIX_EPOCH + Duration::new(1, 0);
src/libstd/time.rs:        let one_second_from_epoch2 = UNIX_EPOCH + Duration::new(0, 500_000_000)
src/libstd/time.rs:        assert_eq!(one_second_from_epoch, one_second_from_epoch2);
src/libstd/time.rs:    fn since_epoch() {
src/test/run-pass/issue-29540.rs:    pub mon_min_osdmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_pgmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_log_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_mdsmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_map_share_max_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_pg_epoch_persisted_max_stale: String,
RELEASES.md:  * [`UNIX_EPOCH`]
RELEASES.md:[`UNIX_EPOCH`]: http://doc.rust-lang.org/nightly/std/time/constant.UNIX_EPOCH.html
src/bootstrap/util.rs:        let start = self.start_time.duration_since(UNIX_EPOCH);
src/bootstrap/util.rs:        let finish = end_time.duration_since(UNIX_EPOCH);
src/librustc/dep_graph/graph.rs:        use std::time::{SystemTime, UNIX_EPOCH};
src/librustc/dep_graph/graph.rs:        let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
src/librustc_incremental/persist/fs.rs:use std::time::{UNIX_EPOCH, SystemTime, Duration};
src/librustc_incremental/persist/fs.rs:    let mut best_candidate = (UNIX_EPOCH, None);
src/librustc_incremental/persist/fs.rs:    let duration = timestamp.duration_since(UNIX_EPOCH).unwrap();
src/librustc_incremental/persist/fs.rs:    Ok(UNIX_EPOCH + duration)
src/librustc_incremental/persist/fs.rs:            (UNIX_EPOCH + Duration::new(4, 0), PathBuf::from("4"), None),
src/librustc_incremental/persist/fs.rs:            (UNIX_EPOCH + Duration::new(1, 0), PathBuf::from("1"), None),
src/librustc_incremental/persist/fs.rs:            (UNIX_EPOCH + Duration::new(5, 0), PathBuf::from("5"), None),
src/librustc_incremental/persist/fs.rs:            (UNIX_EPOCH + Duration::new(3, 0), PathBuf::from("3"), None),
src/librustc_incremental/persist/fs.rs:            (UNIX_EPOCH + Duration::new(2, 0), PathBuf::from("2"), None),
src/librustc_incremental/persist/fs.rs:        let time = UNIX_EPOCH + Duration::new(i * 1_434_578, (i as u32) * 239_000);
src/libstd/sys/cloudabi/time.rs:pub const UNIX_EPOCH: SystemTime = SystemTime { t: 0 };
src/libstd/sys/redox/net/mod.rs:        let time = time::SystemTime::now().duration_since(time::UNIX_EPOCH).unwrap();
src/libstd/sys/redox/time.rs:pub const UNIX_EPOCH: SystemTime = SystemTime {
src/libstd/sys/unix/time.rs:pub use self::inner::{Instant, SystemTime, UNIX_EPOCH};
src/libstd/sys/unix/time.rs:    pub const UNIX_EPOCH: SystemTime = SystemTime {
src/libstd/sys/unix/time.rs:    pub const UNIX_EPOCH: SystemTime = SystemTime {
src/libstd/sys/wasm/time.rs:pub const UNIX_EPOCH: SystemTime = SystemTime(Duration::from_secs(0));
src/libstd/sys/windows/time.rs:const INTERVALS_TO_UNIX_EPOCH: u64 = 11_644_473_600 * INTERVALS_PER_SEC;
src/libstd/sys/windows/time.rs:pub const UNIX_EPOCH: SystemTime = SystemTime {
src/libstd/sys/windows/time.rs:        dwLowDateTime: INTERVALS_TO_UNIX_EPOCH as u32,
src/libstd/sys/windows/time.rs:        dwHighDateTime: (INTERVALS_TO_UNIX_EPOCH >> 32) as u32,
src/libstd/time.rs:/// Although a `SystemTime` cannot be directly inspected, the [`UNIX_EPOCH`]
src/libstd/time.rs:/// [`UNIX_EPOCH`]: ../../std/time/constant.UNIX_EPOCH.html
src/libstd/time.rs:/// measurement lies, and using `UNIX_EPOCH + duration` can be used to create a
src/libstd/time.rs:/// use std::time::{SystemTime, UNIX_EPOCH};
src/libstd/time.rs:/// match SystemTime::now().duration_since(UNIX_EPOCH) {
src/libstd/time.rs:///     Err(_) => panic!("SystemTime before UNIX EPOCH!"),
src/libstd/time.rs:pub const UNIX_EPOCH: SystemTime = SystemTime(time::UNIX_EPOCH);
src/libstd/time.rs:    use super::{Instant, SystemTime, Duration, UNIX_EPOCH};
src/libstd/time.rs:        let one_second_from_epoch = UNIX_EPOCH + Duration::new(1, 0);
src/libstd/time.rs:        let one_second_from_epoch2 = UNIX_EPOCH + Duration::new(0, 500_000_000)
src/libstd/time.rs:        let a = ts.duration_since(UNIX_EPOCH).unwrap();
src/libstd/time.rs:        let b = ts.duration_since(UNIX_EPOCH - Duration::new(1, 0)).unwrap();

In doing a quick scan of this output, it looks like we've got everything now. Unless there is some weird casing of epoch hanging around.

@shepmaster
Copy link
Member

shepmaster commented Mar 18, 2018

Unless there is some weird casing of epoch

git grep -i "epoch" should find those, I'd hope. I'd probably use git grep -i '\bepoch\b' as my sanity check search.

@shepmaster
Copy link
Member

Ping from triage, @cramertj !

@shepmaster
Copy link
Member

@klnusbaum you do have another merge conflict at this point.

is there a preferred way of resolving merge conflicts, or can I do that however I want?

I believe that in general, it's preferred if you rebase. (I'd personally also squash your "fix one more..." commit with the appropriate earlier commit.

@cramertj
Copy link
Member

This seems fine to me so far, but it doesn't look like CI has been able to run successfully due to merge conflicts.

@Manishearth
Copy link
Member

Rebased and pushed.

@bors r+

@Manishearth
Copy link
Member

@klnusbaum I'll shepherd this from here, thanks for doing this! If you'd like, we need the same thing to be done on the cargo codebase. Note that the tests won't pass until this PR lands and is in a nightly, but you can start working on it earlier.

@klnusbaum
Copy link
Contributor Author

@Manishearth sorry, just saw your message. I rebased, and did a little squashing. Hopefully that doesn't screw things up for you. I'll let you take it from here, but let me know if there's anything else you need :)

@klnusbaum
Copy link
Contributor Author

Also, happy to take a crack at cargo. I'll make a new task in the cargo project :)

@Manishearth
Copy link
Member

I'd already rebased! 😄

Doesn't screw anything up, just need to re-r+

@bors r+

@bors
Copy link
Contributor

bors commented Mar 20, 2018

📌 Commit 11f1406 has been approved by Manishearth

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Mar 20, 2018
@frewsxcv
Copy link
Member

@bors rollup

frewsxcv added a commit to frewsxcv/rust that referenced this pull request Mar 23, 2018
rename epoch to edition

As outlined in rust-lang#49001 we'd like to rename all instances of `epoch` to `edition`. I developed the following bash script to assist in the rename. It renames all instances of `epoch` to `edition` and `Epoch` to `Edition` in all of the files I was able to determine were relevant. It then renames a few relevant files that had `epoch` in there name and finally prints out all of the remaining instance of the strings `epoch` and `Epoch` (which, as far as I can tell should not be changed). Here is the script:

```
replace() {
	sed -i '' "s/epoch/edition/g" "$1"
    sed -i '' "s/Epoch/Edition/g" "$1"
}

replace "src/librustc/lint/context.rs"
replace "src/librustc/lint/mod.rs"
replace "src/librustc/session/config.rs"
replace "src/librustc/session/mod.rs"
replace "src/librustc_driver/driver.rs"
replace "src/librustc_lint/lib.rs"
replace "src/librustc_typeck/check/method/probe.rs"
replace "src/libsyntax/config.rs"
replace "src/libsyntax/epoch.rs"
replace "src/libsyntax/feature_gate.rs"
replace "src/libsyntax/lib.rs"
replace "src/test/compile-fail/epoch-raw-pointer-method-2015.rs"
replace "src/test/compile-fail/epoch-raw-pointer-method-2018.rs"
replace "src/test/run-pass/dyn-trait.rs"
replace "src/test/run-pass/epoch-gate-feature.rs"
replace "src/test/ui/inference-variable-behind-raw-pointer.stderr"

git mv src/libsyntax/epoch.rs src/libsyntax/edition.rs
git mv src/test/compile-fail/epoch-raw-pointer-method-2015.rs src/test/compile-fail/edition-raw-pointer-method-2015.rs
git mv src/test/compile-fail/epoch-raw-pointer-method-2018.rs src/test/compile-fail/edition-raw-pointer-method-2018.rs

git grep "epoch" ./*
git grep "Epoch" ./*
```
And here is the output of the script:
```
kurtis-rust$ ./epoch_to_edition.sh
src/Cargo.lock: "crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
src/Cargo.lock:name = "crossbeam-epoch"
src/Cargo.lock:"checksum crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59796cc6cbbdc6bb319161349db0c3250ec73ec7fcb763a51065ec4e2e158552"
src/ci/docker/scripts/android-start-emulator.sh:# Using the default qemu2 engine makes time::tests::since_epoch fails because
src/ci/docker/scripts/android-start-emulator.sh:# the emulator date is set to unix epoch (in armeabi-v7a-18 image). Using
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = u64::from_str_radix(s, INT_ENCODE_BASE as u32);
src/librustc_incremental/persist/fs.rs:    if micros_since_unix_epoch.is_err() {
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = micros_since_unix_epoch.unwrap();
src/librustc_incremental/persist/fs.rs:    let duration = Duration::new(micros_since_unix_epoch / 1_000_000,
src/librustc_incremental/persist/fs.rs:                                 1000 * (micros_since_unix_epoch % 1_000_000) as u32);
src/libstd/sys/cloudabi/abi/cloudabi.rs:  /// The epoch of this clock is undefined. The absolute
src/libstd/time.rs:        let one_second_from_epoch = UNIX_EPOCH + Duration::new(1, 0);
src/libstd/time.rs:        let one_second_from_epoch2 = UNIX_EPOCH + Duration::new(0, 500_000_000)
src/libstd/time.rs:        assert_eq!(one_second_from_epoch, one_second_from_epoch2);
src/libstd/time.rs:    fn since_epoch() {
src/test/run-pass/issue-29540.rs:    pub mon_min_osdmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_pgmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_log_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_mdsmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_map_share_max_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_pg_epoch_persisted_max_stale: String,
```

If it looks like I've missed any things that should be converted, please let me know. There were also some notes in `src/libsyntax/epoch.rs` that indicated there might be some necessary/parallel changes that need to made in cargo. But we should probably make a separate issue for that.
frewsxcv added a commit to frewsxcv/rust that referenced this pull request Mar 23, 2018
rename epoch to edition

As outlined in rust-lang#49001 we'd like to rename all instances of `epoch` to `edition`. I developed the following bash script to assist in the rename. It renames all instances of `epoch` to `edition` and `Epoch` to `Edition` in all of the files I was able to determine were relevant. It then renames a few relevant files that had `epoch` in there name and finally prints out all of the remaining instance of the strings `epoch` and `Epoch` (which, as far as I can tell should not be changed). Here is the script:

```
replace() {
	sed -i '' "s/epoch/edition/g" "$1"
    sed -i '' "s/Epoch/Edition/g" "$1"
}

replace "src/librustc/lint/context.rs"
replace "src/librustc/lint/mod.rs"
replace "src/librustc/session/config.rs"
replace "src/librustc/session/mod.rs"
replace "src/librustc_driver/driver.rs"
replace "src/librustc_lint/lib.rs"
replace "src/librustc_typeck/check/method/probe.rs"
replace "src/libsyntax/config.rs"
replace "src/libsyntax/epoch.rs"
replace "src/libsyntax/feature_gate.rs"
replace "src/libsyntax/lib.rs"
replace "src/test/compile-fail/epoch-raw-pointer-method-2015.rs"
replace "src/test/compile-fail/epoch-raw-pointer-method-2018.rs"
replace "src/test/run-pass/dyn-trait.rs"
replace "src/test/run-pass/epoch-gate-feature.rs"
replace "src/test/ui/inference-variable-behind-raw-pointer.stderr"

git mv src/libsyntax/epoch.rs src/libsyntax/edition.rs
git mv src/test/compile-fail/epoch-raw-pointer-method-2015.rs src/test/compile-fail/edition-raw-pointer-method-2015.rs
git mv src/test/compile-fail/epoch-raw-pointer-method-2018.rs src/test/compile-fail/edition-raw-pointer-method-2018.rs

git grep "epoch" ./*
git grep "Epoch" ./*
```
And here is the output of the script:
```
kurtis-rust$ ./epoch_to_edition.sh
src/Cargo.lock: "crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
src/Cargo.lock:name = "crossbeam-epoch"
src/Cargo.lock:"checksum crossbeam-epoch 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "59796cc6cbbdc6bb319161349db0c3250ec73ec7fcb763a51065ec4e2e158552"
src/ci/docker/scripts/android-start-emulator.sh:# Using the default qemu2 engine makes time::tests::since_epoch fails because
src/ci/docker/scripts/android-start-emulator.sh:# the emulator date is set to unix epoch (in armeabi-v7a-18 image). Using
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = u64::from_str_radix(s, INT_ENCODE_BASE as u32);
src/librustc_incremental/persist/fs.rs:    if micros_since_unix_epoch.is_err() {
src/librustc_incremental/persist/fs.rs:    let micros_since_unix_epoch = micros_since_unix_epoch.unwrap();
src/librustc_incremental/persist/fs.rs:    let duration = Duration::new(micros_since_unix_epoch / 1_000_000,
src/librustc_incremental/persist/fs.rs:                                 1000 * (micros_since_unix_epoch % 1_000_000) as u32);
src/libstd/sys/cloudabi/abi/cloudabi.rs:  /// The epoch of this clock is undefined. The absolute
src/libstd/time.rs:        let one_second_from_epoch = UNIX_EPOCH + Duration::new(1, 0);
src/libstd/time.rs:        let one_second_from_epoch2 = UNIX_EPOCH + Duration::new(0, 500_000_000)
src/libstd/time.rs:        assert_eq!(one_second_from_epoch, one_second_from_epoch2);
src/libstd/time.rs:    fn since_epoch() {
src/test/run-pass/issue-29540.rs:    pub mon_min_osdmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_pgmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_log_epochs: String,
src/test/run-pass/issue-29540.rs:    pub mon_max_mdsmap_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_map_share_max_epochs: String,
src/test/run-pass/issue-29540.rs:    pub osd_pg_epoch_persisted_max_stale: String,
```

If it looks like I've missed any things that should be converted, please let me know. There were also some notes in `src/libsyntax/epoch.rs` that indicated there might be some necessary/parallel changes that need to made in cargo. But we should probably make a separate issue for that.
bors added a commit that referenced this pull request Mar 23, 2018
@alexcrichton alexcrichton merged commit 11f1406 into rust-lang:master Mar 23, 2018
@klnusbaum klnusbaum deleted the 49001_epoch branch March 25, 2018 15:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants