mirror of
https://github.com/google/comprehensive-rust.git
synced 2025-01-01 22:19:21 +02:00
Fix Day 4 of the Korean translation (#351)
* Fix Day 4 morning of the Korean translation * Fix newline issues * KO translation for day 4 afternoon * Address comments from jooyunghan
This commit is contained in:
parent
1835896e58
commit
cc9c39cc16
334
po/ko.po
334
po/ko.po
@ -10536,19 +10536,19 @@ msgstr "# 4일차 개요"
|
||||
|
||||
#: src/welcome-day-4.md:3
|
||||
msgid "Today we will look at two main topics:"
|
||||
msgstr "오늘 강의는 두가지 주제를 다룹니다:"
|
||||
msgstr "오늘 강의는 두 가지 주제를 다룹니다:"
|
||||
|
||||
#: src/welcome-day-4.md:5
|
||||
msgid "* Concurrency: threads, channels, shared state, `Send` and `Sync`."
|
||||
msgstr "* 동시성: 쓰레드, 채널, 상태 공유(쉐어 스테이트), `Send`와 `Sync`"
|
||||
msgstr "* 동시성: 쓰레드, 채널, 상태 공유, `Send`와 `Sync`"
|
||||
|
||||
#: src/welcome-day-4.md:7
|
||||
msgid ""
|
||||
"* Android: building binaries and libraries, using AIDL, logging, and\n"
|
||||
" interoperability with C, C++, and Java."
|
||||
msgstr ""
|
||||
"* 안드로이드: 바이너리와 라이브러리 작성, AIDL 사용, 로깅과 C/C++, 자바와의 "
|
||||
"상호 운용성"
|
||||
"* 안드로이드: 바이너리와 라이브러리 만드는 방법, AIDL 사용법, 로깅하는 방법, "
|
||||
"C/C++, 자바와의 상호 운용성"
|
||||
|
||||
#: src/welcome-day-4.md:10
|
||||
msgid ""
|
||||
@ -10560,10 +10560,9 @@ msgid ""
|
||||
"that\n"
|
||||
"> parses some raw bytes would be ideal."
|
||||
msgstr ""
|
||||
"> 우리는 오늘 당신의 프로젝트를 호출해볼 것입니다. 따라서 가지고 있는 코드 중"
|
||||
"에 작은 부분을 찾아보세요\n"
|
||||
"> 종속성이 적고 특이 타입이 적을 수록 좋습니다. raw byte를 분석하는 종류의 것"
|
||||
"이 이상적입니다."
|
||||
"> 우리는 오늘 여러분의 프로젝트에서 러스트 코드를 호출해볼 것입니다. 그 프로젝트에서 \n"
|
||||
"> 러스트로 옮길만 한 작은 부분을 정하세요. 의존성이 적고 \"특이한\" 타입이 적을 수록 \n"
|
||||
"> 좋습니다. 바이트 몇 개를 파싱하는 코드라면 완벽합니다."
|
||||
|
||||
#: src/concurrency.md:1
|
||||
msgid "# Fearless Concurrency"
|
||||
@ -10574,8 +10573,7 @@ msgid ""
|
||||
"Rust has full support for concurrency using OS threads with mutexes and\n"
|
||||
"channels."
|
||||
msgstr ""
|
||||
"러스트는 뮤텍스와 채널이 있는 OS 스레드를 사용하여 동시성을 완전히 지원합니"
|
||||
"다."
|
||||
"러스트는 동시성 지원이 막강합니다. 운영체제 레벨의 스레드를 사용하며, 뮤택스와 채널도 지원합니다."
|
||||
|
||||
#: src/concurrency.md:6
|
||||
msgid ""
|
||||
@ -10585,9 +10583,9 @@ msgid ""
|
||||
"you\n"
|
||||
"can rely on the compiler to ensure correctness at runtime."
|
||||
msgstr ""
|
||||
"러스트의 타입 시스템은 많은 동시성 버그가 컴파일 시 버그를 일으키는 중요한 "
|
||||
"역할을 합니다. 이는 컴파일러를 사용하여 런타임의 정확성을 보장할 수 있기 때"
|
||||
"문에 종종 _겁없는 동시성(fearless concurrency)_라고 합니다."
|
||||
"러스트의 타입 시스템은 프로그램에 동시성 버그가 있을 경우, 컴파일 시에 에러가 "
|
||||
"발생하도록 해 줍니다. 컴파일러를 이용해서 프로그램이 수행시에 정확히 동작함을 "
|
||||
"미리 보장해 주기 때문에, 사람들은 이를 종종 _겁없는 동시성_ 이라고 합니다."
|
||||
|
||||
#: src/concurrency/threads.md:1
|
||||
msgid "# Threads"
|
||||
@ -10631,11 +10629,10 @@ msgid ""
|
||||
"* Thread panics are independent of each other.\n"
|
||||
" * Panics can carry a payload, which can be unpacked with `downcast_ref`."
|
||||
msgstr ""
|
||||
"* 스레드는 모두 데몬 스레드입니다. 따라서 주 스레드는 이를 기다리지 않습니"
|
||||
"다.\n"
|
||||
"* 스레드의 패닉은 서로 독립적으로 발생합니다.\n"
|
||||
" * (스레드의) 패닉은 (주 스레드에게) 페이로드를 전달하고, 이는 "
|
||||
"`downcast_ref`로 풀어볼 수 있습니다."
|
||||
"* 스레드는 모두 데몬 스레드입니다. 따라서 메인 스레드는 이 스레드들이 끝나기를 "
|
||||
"기다리지 않습니다.\n"
|
||||
"* 한 스레드에서 발생한 패닉은 다른 스레드에게 영향을 끼치지 않습니다.\n"
|
||||
" * 패닉은 추가정보(페이로드)를 포함할 수 있으며, 이는 `downcast_ref`로 풀어볼 수 있습니다."
|
||||
|
||||
#: src/concurrency/threads.md:32
|
||||
msgid ""
|
||||
@ -10643,8 +10640,7 @@ msgid ""
|
||||
"is\n"
|
||||
" not waiting."
|
||||
msgstr ""
|
||||
"* 주 스레드가 기다리지 않기 때문에 생성된 스레드의 for문은 10까지 가지 않습니"
|
||||
"다."
|
||||
"* 메인 스레드가 자식 스레드를 기다리지 않기 때문에 자식 스레드의 for문은 10까지 가지 않습니다."
|
||||
|
||||
#: src/concurrency/threads.md:35
|
||||
msgid ""
|
||||
@ -10652,13 +10648,13 @@ msgid ""
|
||||
"for\n"
|
||||
" the thread to finish."
|
||||
msgstr ""
|
||||
"* 만약 주 스레드가 스레드 동작을 대기 하기 원한다면 `let handle = thread::"
|
||||
"* 만약 메인 스레드가 자식 스레드가 끝날 때 까지 기다리기를 원한다면 `let handle = thread::"
|
||||
"spawn(...)`으로 스레드를 선언한 후 `handle.join()`로 연결하여 사용합니다."
|
||||
|
||||
#: src/concurrency/threads.md:38
|
||||
msgid "* Trigger a panic in the thread, notice how this doesn't affect `main`."
|
||||
msgstr ""
|
||||
"* 스레드에서 유발된 패닉(for 강제 종료)이 주 스레드에는 영향이 없음을 확인하"
|
||||
"* 자식 스레드에서 발생한 패닉이 메인 스레드에는 영향을 주지 않음을 확인하"
|
||||
"시기 바랍니다."
|
||||
|
||||
#: src/concurrency/threads.md:40
|
||||
@ -10667,8 +10663,8 @@ msgid ""
|
||||
"panic\n"
|
||||
" payload. This is a good time to talk about [`Any`]."
|
||||
msgstr ""
|
||||
"* `handle.join()`사용시 `Result` 반환값을 통해 패닉 페이로드에 접근할 수 있습"
|
||||
"니다. [`Any`]를 참조하시기 바랍니다."
|
||||
"* `handle.join()`사용시 `Result` 반환값을 통해 패닉의 추가정보에 접근할 수 있습"
|
||||
"니다. 이 시점에서 [`Any`]에 대해 이야기를 해 보면 좋습니다."
|
||||
|
||||
#: src/concurrency/threads.md:43
|
||||
msgid "[`Any`]: https://doc.rust-lang.org/std/any/index.html"
|
||||
@ -10680,7 +10676,7 @@ msgstr "# 범위 스레드(Scoped Threads)"
|
||||
|
||||
#: src/concurrency/scoped-threads.md:3
|
||||
msgid "Normal threads cannot borrow from their environment:"
|
||||
msgstr "일반 스레드는 그들의 환경(주 스레드)에서 빌릴수 없습니다:"
|
||||
msgstr "보통, 스레드는 스레드 밖에서 데이터를 빌릴 수 없습니다."
|
||||
|
||||
#: src/concurrency/scoped-threads.md:5
|
||||
msgid ""
|
||||
@ -10742,8 +10738,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"<details>\n"
|
||||
" \n"
|
||||
"* `thread::scope` 함수가 완료되면 모든 스레드의 결합이 보장되므로 빌린 데이터"
|
||||
"를 반환 할 수 있습니다. \n"
|
||||
"* `thread::scope` 함수가 완료되면 그 안에서 생성된 모든 스레드들이 종료했음이 "
|
||||
"보장되기 때문에, 그 때 빌렸던 데이터들을 다시 반환할 수 있기 때문입니다.\n"
|
||||
"* 일반적인 러스트의 빌림 규칙이 적용됩니다: 한 스레드에 의한 가변 빌림 또는 "
|
||||
"여러 스레드에 대한 불변 빌림중 하나만 가능합니다.\n"
|
||||
" \n"
|
||||
@ -10760,7 +10756,8 @@ msgid ""
|
||||
"are connected via the channel, but you only see the end-points."
|
||||
msgstr ""
|
||||
"러스트의 채널은 `Sender<T>` 와 `Receiver<T>` 두 부분으로 구성됩니다.\n"
|
||||
"두 부분은 채널을 통해 연결되지만 우리는 종단만을 확인할 수 있습니다."
|
||||
"이 둘은 채널을 통해 서로 연결되어 있지만, 우리는 채널을 볼 수는 없고 이 양 "
|
||||
"끝단만을 사용하게 됩니다."
|
||||
|
||||
#: src/concurrency/channels.md:6
|
||||
msgid ""
|
||||
@ -10802,7 +10799,7 @@ msgid ""
|
||||
"counterpart `Sender` or `Receiver` is dropped and the channel is closed."
|
||||
msgstr ""
|
||||
"* `send()`와 `recv()`는 `Result`를 반환합니다. 만일 `Err`가 반환된다면, 상대"
|
||||
"방의 `Sender`또는 `Receiver`는 삭제되고 채널이 닫힙니다."
|
||||
"방의 `Sender`또는 `Receiver`가 삭제되었고 채널이 닫혔다는 뜻입니다."
|
||||
|
||||
#: src/concurrency/channels/unbounded.md:1
|
||||
msgid "# Unbounded Channels"
|
||||
@ -10810,7 +10807,7 @@ msgstr "# 무경계 채널(Unbounded Channels)"
|
||||
|
||||
#: src/concurrency/channels/unbounded.md:3
|
||||
msgid "You get an unbounded and asynchronous channel with `mpsc::channel()`:"
|
||||
msgstr "`mpsc::channel()`함수는 무제한, 비동기 채널을 생성합니다: "
|
||||
msgstr "`mpsc::channel()` 함수는 경계가 없는 비동기 채널을 생성합니다: "
|
||||
|
||||
#: src/concurrency/channels/unbounded.md:5
|
||||
#: src/concurrency/channels/bounded.md:5
|
||||
@ -10847,11 +10844,11 @@ msgstr ""
|
||||
|
||||
#: src/concurrency/channels/bounded.md:1
|
||||
msgid "# Bounded Channels"
|
||||
msgstr "# 경계 채널(Bounded Channels)"
|
||||
msgstr "# 경계가 있는 채널(Bounded Channels)"
|
||||
|
||||
#: src/concurrency/channels/bounded.md:3
|
||||
msgid "Bounded and synchronous channels make `send` block the current thread:"
|
||||
msgstr "경계가 있는 동기 채널은 `send`가 주 스레드를 차단하도록 만듭니다:"
|
||||
msgstr "경계가 있는 동기 채널은 `send`가 현제 스레드를 블로킹 하도록 만듭니다:"
|
||||
|
||||
#: src/concurrency/channels/bounded.md:10
|
||||
msgid ""
|
||||
@ -10869,7 +10866,7 @@ msgid ""
|
||||
"is\n"
|
||||
"primarily done via two types:"
|
||||
msgstr ""
|
||||
"러스트는 주로 아래 두 가지 타입 시스템을 이용해서 공유 데이터 동기화를 수행합"
|
||||
"러스트는 주로 아래 두 가지 타입을 이용해서 공유 데이터 동기화를 수행합"
|
||||
"니다: "
|
||||
|
||||
#: src/concurrency/shared_state.md:6
|
||||
@ -10879,9 +10876,9 @@ msgid ""
|
||||
" takes care to deallocate `T` when the last thread exits,\n"
|
||||
"* [`Mutex<T>`][2]: ensures mutual exclusion access to the `T` value."
|
||||
msgstr ""
|
||||
"* [`Arc<T>`][1], atomic[^역주1] 참조 카운트 `T`: 스레드 사이의 공유를 담당하"
|
||||
"고, 마지막 스레드 종료시 T를 해제합니다.\n"
|
||||
"* [`Mutex<T>`][2]: `T`값에 대한 상호배제 엑세스를 보장합니다."
|
||||
"* [`Arc<T>`][1], `T`에 대한 아토믹 참조 카운트: 이 참조는 다수의 스레드 사이에서 "
|
||||
"공유될 수 있고, 참조하던 마지막 스레드가 종료할 경우 `T`를 반환합니다.\n"
|
||||
"* [`Mutex<T>`][2]: `T`값에 대한 상호 배제 엑세스를 보장합니다."
|
||||
|
||||
#: src/concurrency/shared_state.md:10
|
||||
msgid ""
|
||||
@ -10889,9 +10886,7 @@ msgid ""
|
||||
"[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html"
|
||||
msgstr ""
|
||||
"[1]: https://doc.rust-lang.org/std/sync/struct.Arc.html\n"
|
||||
"[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html\n"
|
||||
"[^역주1]: C++의 atomic을 구현했다고 합니다. 원자적 연산(한번에 일어나는 명령"
|
||||
"어 연산)으로 1개의 명령어로 처리했다/안했다로만 존재합니다."
|
||||
"[2]: https://doc.rust-lang.org/std/sync/struct.Mutex.html"
|
||||
|
||||
#: src/concurrency/shared_state/arc.md:1
|
||||
msgid "# `Arc`"
|
||||
@ -10899,7 +10894,9 @@ msgstr "# `Arc`"
|
||||
|
||||
#: src/concurrency/shared_state/arc.md:3
|
||||
msgid "[`Arc<T>`][1] allows shared read-only access via its `clone` method:"
|
||||
msgstr "[`Arc<T>`][1]는 `clone` 메서드를 통해 읽기전용 접근을 허용합니다:"
|
||||
msgstr "[`Arc<T>`][1]의 `clone` 메서드를 이용하면 여러 스레드가 한 데이터를 동시에 "
|
||||
"(_역주_: 그리고 안전하게. 스레드가 하나라도 살아있는 동안에는 `T`가 반환되지 않음) "
|
||||
"읽을 수 있습니다:"
|
||||
|
||||
#: src/concurrency/shared_state/arc.md:5
|
||||
msgid ""
|
||||
@ -10946,12 +10943,13 @@ msgid ""
|
||||
" \n"
|
||||
"</details>"
|
||||
msgstr ""
|
||||
"* `Arc`는 원자 연산을 사용하는 `RC`의 스레드 세이프 버전인 원자 참조 카운트"
|
||||
"(Atomic Reference Counted)입니다.\n"
|
||||
"* `Arc::clone()`는 원자 연산을 수행하는 코스트가 있지만 그 이후의 `T`를 사용 "
|
||||
"하는 것은 노 코스트입니다. \n"
|
||||
"* 참조 주기를 주의해야 합니다. 러스트는 이를 감지할 GC가 없습니다\n"
|
||||
" * `std::sync::Weak`가 도움이 될 것입니다. \n"
|
||||
"* `Arc`는 \"Atomic Reference Counted\"를 의미하며, 스레드 안정성을 보장하는 "
|
||||
"`Rc`라고 생각하면 됩니다.\n"
|
||||
"* `Arc::clone()`는 아토믹 연산을 수행하기 때문에 그 때 코스트가 좀 있지만, "
|
||||
"일단 `clone()`이 끝난 후 `T`를 사용하는 대에는 아무런 오버헤드가 없습니다.\n"
|
||||
"* 순환 참조가 발생하지 않도록 주의해야 합니다. 러스트는 순환 참조를 감지하는 "
|
||||
"가비지 컬랙터가 없습니다.\n"
|
||||
" * 순환 참조를 피하는데 `std::sync::Weak`가 도움이 될 것입니다.\n"
|
||||
"</details>"
|
||||
|
||||
#: src/concurrency/shared_state/mutex.md:1
|
||||
@ -10963,8 +10961,8 @@ msgid ""
|
||||
"[`Mutex<T>`][1] ensures mutual exclusion _and_ allows mutable access to `T`\n"
|
||||
"behind a read-only interface:"
|
||||
msgstr ""
|
||||
"[`Mutex<T>`][1]는 상호배제를 보장하고, 일기전용 인터페이스 뒤에서 `T`에 대한 "
|
||||
"가변 접근을 허용합니다:"
|
||||
"[`Mutex<T>`][1]를 이용하면 불변 참조를 통해서도 `T`의 값을 수정할 수가 있으며, "
|
||||
"_이에 더해서_ 한 번에 한 스레드만 `T`의 값을 접근(읽거나 쓰거나)함을 보장해 줍니다:"
|
||||
|
||||
#: src/concurrency/shared_state/mutex.md:6
|
||||
msgid ""
|
||||
@ -10999,7 +10997,8 @@ msgstr ""
|
||||
msgid ""
|
||||
"Notice how we have a [`impl<T: Send> Sync for Mutex<T>`][2] blanket\n"
|
||||
"implementation."
|
||||
msgstr "[`impl<T: Send> Sync for Mutex<T>`][2]를 참조하시기 바랍니다"
|
||||
msgstr ""
|
||||
"모든 `Mutex<T>`는 [`impl<T: Send> Sync for Mutex<T>`][2]를 자동으로 구현함을 참조하세요."
|
||||
|
||||
#: src/concurrency/shared_state/mutex.md:26
|
||||
msgid ""
|
||||
@ -11028,19 +11027,19 @@ msgstr ""
|
||||
"<details>\n"
|
||||
" \n"
|
||||
"* 러스트의 `Mutex`는 오직 하나의 데이터만 담을 수 있는 컬렉션처럼 볼 수도"
|
||||
" 있습니다. 다른 컬렉션과 다른 점은, 그 데이터가 동시성 문제로부터 보호된다는"
|
||||
" 있습니다. 다른 컬렉션과 다른 점은, 그 데이터가 동시성 문제로부터 자유롭다는"
|
||||
" 점입니다.\n"
|
||||
" * `Mutex`는 mutax를 획득하지 않으면 보호된 데이터에 접근하는 것을 불가능"
|
||||
" * `Mutex`는 뮤텍스를 획득하지 않으면 보호된 데이터에 접근하는 것이 불가능"
|
||||
" 하도록 디자인 되어 있습니다.\n"
|
||||
"* `Mutex`는 읽기와 쓰기에 대한 잠금을 구별하지 않기 때문에 여러 스레드에서"
|
||||
" 데이터를 \"읽기\"만 하려고 해도 이를 동시에 지원할 수 없습니다. 한 번에 한"
|
||||
" 데이터를 \"읽기\"만 하려고 해도 이를 동시에 허용하지 않습니다. 즉, 한 번에 한"
|
||||
" 스레드에서의 읽기만 허용이 됩니다. \"읽기\"에 대한 동시성을 지원하면서"
|
||||
" \"쓰기\"에 대해서 안전하고 싶다면 `RwLock`을 사용할 수 있습니다.\n"
|
||||
"* 어째서 `lock()`이 `Result`를 반환합니까?\n"
|
||||
"* 왜 `lock()`이 `Result`를 반환할까요?\n"
|
||||
" * `Mutex`를 획득한 스레드에서 패닉이 발생하면, 데이터가 올바르지 않은 상황이"
|
||||
" 될 수 있습니다. 이를 `Mutex`가 \"중독(poisoned)\" 되었다고 표현하며, 중독된"
|
||||
" 뮤텍스에서 `lock()`을 호출하면 실패하고 [`PoisonError`]가 발생합니다."
|
||||
" 오류로부터 데이터를 복구하기 위해 `into_inner()`를 호출할 수 있습니다."
|
||||
" 이러한 오류로부터 데이터를 복구하기 위해 `into_inner()`를 호출할 수 있습니다."
|
||||
|
||||
#: src/concurrency/shared_state/mutex.md:38
|
||||
msgid ""
|
||||
@ -11052,7 +11051,7 @@ msgstr ""
|
||||
|
||||
#: src/concurrency/shared_state/example.md:3
|
||||
msgid "Let us see `Arc` and `Mutex` in action:"
|
||||
msgstr "`Arc`와 `Mutex`의 동작을 살펴봅니다:(동작하도록 수정해보세요)"
|
||||
msgstr "`Arc`와 `Mutex`의 동작을 살펴봅시다:"
|
||||
|
||||
#: src/concurrency/shared_state/example.md:5
|
||||
msgid ""
|
||||
@ -11150,11 +11149,12 @@ msgid ""
|
||||
"possible.\n"
|
||||
"* We still need to acquire the `Mutex` to print our `Vec`."
|
||||
msgstr ""
|
||||
"* `v`는 `Arc`와 `Mutex`와 직교성을 가지므로 둘 모두로부터 래핑되있습니다.\n"
|
||||
"* `v: Arc<_>`는 다른 스레드로 이동하기 전 'v2'로부터 복제해야 합니다. 따라"
|
||||
"서 익명함수 시그니처에 `move`키워드가 추가되었습니다.\n"
|
||||
"* `v`는 `Arc`와 `Mutex` 모두에 포함되어 있습니다. 이는 `Arc`와 `Mutex`가 서로 "
|
||||
"완전히 다른 문제를 위한 도구이기 때문입니다.\n"
|
||||
"* `v: Arc<_>`를 다른 스레드에서 사용하려면, 먼저 `v2`로 복사를 하고 이를 그 "
|
||||
"스레드로 이동 해야 합니다. 그래서 람다의 시그니처에 `move`가 있는 것입니다.\n"
|
||||
"* 블록은 `LockGuard`의 범위를 최대한 좁히기 위해 사용되었습니다.\n"
|
||||
"* `Vec`을 출력하기위해 `Mutex`를 먼저 획득합니다."
|
||||
"* `Vec`을 단순히 출력하기 위해서도 여전히 `Mutex`를 획득해야 합니다."
|
||||
|
||||
#: src/concurrency/send-sync.md:1
|
||||
msgid "# `Send` and `Sync`"
|
||||
@ -11165,8 +11165,8 @@ msgid ""
|
||||
"How does Rust know to forbid shared access across thread? The answer is in "
|
||||
"two traits:"
|
||||
msgstr ""
|
||||
"러스트는 아래 두가지 트레이트를 이용하여 스레드 간 공유 접근을 금지된 것을 "
|
||||
"알 수 있습니다:"
|
||||
"러스트는 어떻게 해서 스레드 간에 특정 데이터 타입이 공유될 수 있거나, 안된다는 것을 "
|
||||
"알까요? 정답은 다음 두 트레이트에 있습니다:"
|
||||
|
||||
#: src/concurrency/send-sync.md:5
|
||||
msgid ""
|
||||
@ -11188,8 +11188,8 @@ msgid ""
|
||||
"when \n"
|
||||
"the compiler determines it’s appropriate."
|
||||
msgstr ""
|
||||
"두 트레이트는 컴파일러가 적합한지 자동으로 판단하여 구현하므로 직접 구현하지 "
|
||||
"않습니다."
|
||||
"이 트레이트는 프로그래머가 수동으로 구현을 해야 하는 트레이트가 아닙니다. "
|
||||
"컴파일러는 적당하다고 판단되면 이 두 트레이트를 자동으로 구현합니다."
|
||||
|
||||
#: src/concurrency/send-sync.md:13
|
||||
msgid ""
|
||||
@ -11205,10 +11205,9 @@ msgid ""
|
||||
" \n"
|
||||
"</details>"
|
||||
msgstr ""
|
||||
"* 이러한 트레이트들은 타입이 특정한 스레드-안전 속성을 가지도록 하는 마커로 "
|
||||
"* `Sync`와 `Send`는 어떤 타입이 특정한 스레드-안전 속성을 가짐을 나타내는 마커로 "
|
||||
"생각할 수 있습니다.\n"
|
||||
"* 제너릭 제약 조건 하에서 정상적인 트레이트로 사용 될 수 있습니다.\n"
|
||||
" \n"
|
||||
"* 이 두 트레이트는 제너릭에서 제약 조건을 나타내는 트레이트로 사용될 수도 있습니다.\n"
|
||||
"</details>"
|
||||
|
||||
#: src/concurrency/send-sync/send.md:1
|
||||
@ -11219,7 +11218,7 @@ msgstr "# `Send`"
|
||||
msgid ""
|
||||
"> A type `T` is [`Send`][1] if it is safe to move a `T` value to another "
|
||||
"thread."
|
||||
msgstr "> `T`가 스레드 간 이동이 안전하다면, `T`의 타입은 `Send`입니다."
|
||||
msgstr "> `T`가 스레드 간에 안전하게 이동될 수 있다면, `T`의 타입은 `Send`입니다."
|
||||
|
||||
#: src/concurrency/send-sync/send.md:5
|
||||
msgid ""
|
||||
@ -11247,7 +11246,7 @@ msgid ""
|
||||
"multiple\n"
|
||||
"> threads at the same time."
|
||||
msgstr ""
|
||||
"> `&T`가 여러 스레드에서 접근이 안전하다면, `&T`의 타입은 `Sync`입니다."
|
||||
"> `&T`가 여러 스레드에서 안전하게 접근될 수 있다면, `&T`의 타입은 `Sync`입니다."
|
||||
|
||||
#: src/concurrency/send-sync/sync.md:6
|
||||
msgid "More precisely, the definition is:"
|
||||
@ -11255,7 +11254,7 @@ msgstr "좀 더 정확한 정의는 다음과 같습니다:"
|
||||
|
||||
#: src/concurrency/send-sync/sync.md:8
|
||||
msgid "> `T` is `Sync` if and only if `&T` is `Send`"
|
||||
msgstr "`&T`만 `Send`인 경우, `T`의 타입은 `Sync`입니다."
|
||||
msgstr "`&T`가 `Send`인 경우에만 `T`의 타입이 `Sync`가 됩니다."
|
||||
|
||||
#: src/concurrency/send-sync/sync.md:10
|
||||
msgid "[1]: https://doc.rust-lang.org/std/marker/trait.Sync.html"
|
||||
@ -11267,8 +11266,8 @@ msgid ""
|
||||
"thread-safe for shared use, it is also thread-safe to pass references of it "
|
||||
"across threads."
|
||||
msgstr ""
|
||||
"어떤 타입이 공유 사용을 위해 스레드 안전한 경우, 스레드를 통해 참조를 전달하는"
|
||||
" 것도 스레드 안전하다는 의미입니다."
|
||||
"위 문장을 풀어서 이야기 하면, 어떤 타입이 스레드 간에 공유되어서 사용되기에 안전하다면 "
|
||||
"그 타입의 참조 타입은 스레드 간에 이동 가능하다는 것입니다."
|
||||
|
||||
#: src/concurrency/send-sync/sync.md:16
|
||||
msgid ""
|
||||
@ -11278,11 +11277,11 @@ msgid ""
|
||||
"is also safe to move to another thread, because the data it references can "
|
||||
"be accessed from any thread safely."
|
||||
msgstr ""
|
||||
"타입이 Sync라는 것은 데이터 레이스(경합)이나 다른 동기화 문제가 없이 여러"
|
||||
" 스레드에서 공유 접근이 가능하다는 의미이고, 이는 다른 스레드로 이동하는 것이"
|
||||
" 안전하다는 것입니다. \n"
|
||||
"타입이 참조하는 데이터는 모든 스레드에서 안전하게 접근할 수 있으므로 타입에"
|
||||
" 대한 참조는 다른 스레드로 이동해도 안전합니다."
|
||||
"이는 다음과 같이 증명할 수 있습니다: 어떤 타입이 `Sync`라는 말은 곧 그 타입이 여러 스레드들 사이에서 "
|
||||
"데이터 레이스나 여타 동기화 문제 없이 공유 가능하다는 말입니다. "
|
||||
"스레드 간 공유가 안전하다면, 스레드간 이동도 안전할 수 밖에 없습니다. "
|
||||
"어떤 타입의 스레드간 이동이 안전하다면, 그 타입의 참조 또한 스레드간 이동이 "
|
||||
"안전할 수 밖에 없습니다."
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:1
|
||||
msgid "# Examples"
|
||||
@ -11294,7 +11293,7 @@ msgstr ""
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:5
|
||||
msgid "Most types you come across are `Send + Sync`:"
|
||||
msgstr "대부분의 타입은 Send + Sync입니다:"
|
||||
msgstr "여러분이 다루게 될 대부분의 타입은 `Send + Sync`입니다:"
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:7
|
||||
msgid ""
|
||||
@ -11308,16 +11307,16 @@ msgstr ""
|
||||
"* `i8`, `f32`, `bool`, `char`, `&str`, ...\n"
|
||||
"* `(T1, T2)`, `[T; N]`, `&[T]`, `struct { x: T }`, ...\n"
|
||||
"* `String`, `Option<T>`, `Vec<T>`, `Box<T>`, ...\n"
|
||||
"* `Arc<T>`: atomic 참조 카운트로 명시적 스레드-세이프.\n"
|
||||
"* `Mutex<T>`: 내부 잠금을 통해 명시적 스레드-세이프.\n"
|
||||
"* `AtomicBool`, `AtomicU8`, ...: 특별한 atomic 명령을 사용합니다."
|
||||
"* `Arc<T>`: 참조 카운트 조작을 아토믹 하기 때문에 스레드 안전함.\n"
|
||||
"* `Mutex<T>`: 값을 접근하기 위해 뮤택스를 잠궈야 하기 때문에 스레드 안전함.\n"
|
||||
"* `AtomicBool`, `AtomicU8`, ...: 값을 접근할 때 특별한 아토믹 명령어들을 사용합니다."
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:14
|
||||
msgid ""
|
||||
"The generic types are typically `Send + Sync` when the type parameters are\n"
|
||||
"`Send + Sync`."
|
||||
msgstr ""
|
||||
"제너릭 타입은 일반적으로 타입파라메터가 `Send + Sync`이면 `Send + Sync` 입니"
|
||||
"제너릭 타입은 일반적으로 타입 파라메터가 `Send + Sync`이면 `Send + Sync` 입니"
|
||||
"다."
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:17
|
||||
@ -11329,8 +11328,8 @@ msgid ""
|
||||
"These types can be moved to other threads, but they're not thread-safe.\n"
|
||||
"Typically because of interior mutability:"
|
||||
msgstr ""
|
||||
"아래 타입들은 일반적으로 내부 가변성으로 인해 다른 스레드로 이동될 수 있지만 "
|
||||
"스레드-세이프 하지 않습니다."
|
||||
"아래 타입들은 다른 스레드로 이동될 수 있지만 내부적으로 값이 변경될 수 있기 때문에 "
|
||||
"스레드 안전하지 않습니다."
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:22
|
||||
msgid ""
|
||||
@ -11347,14 +11346,16 @@ msgstr ""
|
||||
#: src/concurrency/send-sync/examples.md:29
|
||||
msgid ""
|
||||
"These types are thread-safe, but they cannot be moved to another thread:"
|
||||
msgstr "아래 타입들은 스레드-세이프 하지만 다른 스레드로 이동될 수 없습니다:"
|
||||
msgstr "아래 타입들은 스레드 안전하지만 다른 스레드로 이동될 수 없습니다:"
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:31
|
||||
msgid ""
|
||||
"* `MutexGuard<T>`: Uses OS level primitives which must be deallocated on "
|
||||
"the\n"
|
||||
" thread which created them."
|
||||
msgstr "* `MutexGuard<T>`: OS레벨에서 생성한 스레드에서 할당해제해야합니다"
|
||||
msgstr ""
|
||||
"* `MutexGuard<T>`: 내부적으로, 운영체제가 제공하는 primitive를 사용하는데, 이 primitive는 "
|
||||
"생성된 스레드에서 해제가 이루어져야 합니다. (_역주_: 그래서 다른 스레드로 옮길 수 없습니다.)"
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:34
|
||||
msgid "## `!Send + !Sync`"
|
||||
@ -11362,7 +11363,7 @@ msgstr ""
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:36
|
||||
msgid "These types are not thread-safe and cannot be moved to other threads:"
|
||||
msgstr "아래 타입들은 스레드-세이프 하지도 않고 다른 스레드로 이동될 수도 없습니다:"
|
||||
msgstr "아래 타입들은 스레드 안전하지도 않고 다른 스레드로 이동될 수도 없습니다:"
|
||||
|
||||
#: src/concurrency/send-sync/examples.md:38
|
||||
msgid ""
|
||||
@ -11371,10 +11372,9 @@ msgid ""
|
||||
"* `*const T`, `*mut T`: Rust assumes raw pointers may have special\n"
|
||||
" concurrency considerations."
|
||||
msgstr ""
|
||||
"* `Rc<T>`: 각 `Rc<T>` 는 비 atomic 참조 카운트를 포함하는 `RcBox<T>`를 참조합"
|
||||
"* `Rc<T>`: `Rc<T>` 는 아토믹하지 않은 방식으로 참조 카운트를 조작하는 `RcBox<T>`를 참조합"
|
||||
"니다.\n"
|
||||
"* `*const T`, `*mut T`: 러스트는 raw 포인터가 특별한 동시성 고려사항을 가질 "
|
||||
"수 있다고 가정합니다."
|
||||
"* `*const T`, `*mut T`: 러스트는 포인터가 스레드 안전하지 않다고 가정합니다."
|
||||
|
||||
#: src/exercises/day-4/morning.md:1 src/exercises/day-4/afternoon.md:1
|
||||
msgid "# Exercises"
|
||||
@ -11382,7 +11382,7 @@ msgstr "# 연습문제"
|
||||
|
||||
#: src/exercises/day-4/morning.md:3
|
||||
msgid "Let us practice our new concurrency skills with"
|
||||
msgstr "이번 훈련에서는 동시성 기술을 연습합니다:"
|
||||
msgstr "동시성 기법들을 연습해 봅시다:"
|
||||
|
||||
#: src/exercises/day-4/morning.md:5
|
||||
msgid "* Dining philosophers: a classic problem in concurrency."
|
||||
@ -11393,8 +11393,8 @@ msgid ""
|
||||
"* Multi-threaded link checker: a larger project where you'll use Cargo to\n"
|
||||
" download dependencies and then check links in parallel."
|
||||
msgstr ""
|
||||
"* 멀티 스레드 링크 검사: 카고를 사용하여 종속성을 다운로드하면서 링크를 체크"
|
||||
"하는 큰 프로젝트입니다"
|
||||
"* 멀티 스레드 링크 검사기: 병렬적으로 웹페이지의 링크들을 체크합니다. "
|
||||
"카고를 통해 몇 가지 의존성들을 다운도르 받아야 하는 큰 프로젝트 입니다."
|
||||
|
||||
#: src/exercises/day-4/dining-philosophers.md:1
|
||||
msgid "# Dining Philosophers"
|
||||
@ -11423,12 +11423,12 @@ msgstr ""
|
||||
"> 5명의 철학자가 원탁에서 식사를 하고 있습니다. \n"
|
||||
"> 철학자는 원탁에서 자신의 자리에 앉아있습니다.\n"
|
||||
"> 포크는 각 접시 사이에 있습니다. \n"
|
||||
"> 제공되는 요리를 먹기 위해서는 2개의 포크를 모두 사용해야합니다.\n"
|
||||
"> 철학자는 생각을 하다가 배가 고프면 자신의 좌우의 포크를 들어 요리를 먹습니"
|
||||
"> 제공되는 요리를 먹기 위해서는 두 개의 포크를 모두 사용해야합니다.\n"
|
||||
"> 철학자는 생각을 하다가 배가 고프면 자신의 좌,우의 포크를 들어 요리를 먹습니"
|
||||
"다.\n"
|
||||
"> 철학자는 요리를 먹은 후에는 포크를 다시 자리에 내려놓습니다.\n"
|
||||
"> 철학자는 자신의 좌,우에 포크가 있을때만 요리를 먹을 수 있습니다.\n"
|
||||
"> 따라서 두개의 포크는 오직 자신의 좌,우 철학자가 생각을 할 때만 사용할 수 있"
|
||||
"> 따라서 두 개의 포크는 오직 자신의 좌,우 철학자가 생각을 할 때만 사용할 수 있"
|
||||
"습니다."
|
||||
|
||||
#: src/exercises/day-4/dining-philosophers.md:13
|
||||
@ -11439,10 +11439,10 @@ msgid ""
|
||||
"blanks,\n"
|
||||
"and test that `cargo run` does not deadlock:"
|
||||
msgstr ""
|
||||
"이번 훈련에서는 [로컬 카고 설치](../../cargo/running-locally.md)가 필요합니"
|
||||
"이번 훈련에서는 [카고 설치하기](../../cargo/running-locally.md)가 필요합니"
|
||||
"다.\n"
|
||||
"아래 코드를 복사해서 `src/main.rs`에 붙여놓고 빈 부분을 채우고, `cargo run` "
|
||||
"커맨드로 테스트 해서 교착상태(데드락)이 되지 않는지 확인합니다:"
|
||||
"커맨드로 테스트 해서 교착상태(데드락)가 발생하지 않는지 확인합니다:"
|
||||
|
||||
#: src/exercises/day-4/dining-philosophers.md:17
|
||||
msgid ""
|
||||
@ -11530,7 +11530,7 @@ msgid ""
|
||||
"pages have been validated."
|
||||
msgstr ""
|
||||
"새로 배운것들을 활용해서 멀티 스레드 링크 검사기를 만듭니다. \n"
|
||||
"검사기는 웹페이지가 유효한지 확인합니다. \n"
|
||||
"이 검사기는 웹페이지 안에 있는 링크들이 유효한지 확인합니다. \n"
|
||||
"그리고 재귀적으로 동일 도메인의 다른 모든 페이지가 유효한지 확인합니다."
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:8
|
||||
@ -11539,7 +11539,7 @@ msgid ""
|
||||
"Cargo project and `reqwest` it as a dependency with:"
|
||||
msgstr ""
|
||||
"이를 위해서 [`reqwest`][1]와 같은 HTTP 클라이언트가 필요합니다. 새로운 로컬 "
|
||||
"프로젝트를 만들고 [`reqwest`][1]를 종속성에 추가하십시요"
|
||||
"프로젝트를 만들고 [`reqwest`][1]를 의존성에 추가하십시요"
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:11
|
||||
msgid ""
|
||||
@ -11557,7 +11557,7 @@ msgid ""
|
||||
"> `Cargo.toml` file by hand. Add the dependencies listed below."
|
||||
msgstr ""
|
||||
"> 만일 `cargo add` 커맨드가 `error: no such subcommand` 로 실패한다면 \n"
|
||||
"> `Cargo.toml` 파일을 직접 수정해도 됩니다. 아래에 전체 종속성 내용이 있습니"
|
||||
"> `Cargo.toml` 파일을 직접 수정해도 됩니다. 아래에 전체 의존성 내용이 있습니"
|
||||
"다."
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:20
|
||||
@ -11588,7 +11588,7 @@ msgstr ""
|
||||
#: src/exercises/day-4/link-checker.md:32
|
||||
msgid ""
|
||||
"The `cargo add` calls will update the `Cargo.toml` file to look like this:"
|
||||
msgstr "모든 `cargo add`이 끝나면 `Cargo.toml`에 아래 내용이 추가 되있습니다:"
|
||||
msgstr "모든 `cargo add`가 끝나면 `Cargo.toml`에 아래 내용이 추가됩니다:"
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:34
|
||||
msgid ""
|
||||
@ -11686,7 +11686,7 @@ msgstr ""
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:95
|
||||
msgid "## Tasks"
|
||||
msgstr "## 할일"
|
||||
msgstr "## 할 일"
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:97
|
||||
msgid ""
|
||||
@ -11701,7 +11701,7 @@ msgstr ""
|
||||
"* 스레드를 사용하여 링크를 병렬로 확인합니다: URL을 채널로 보내서 몇 개의 스"
|
||||
"레드가 URL을 병렬로 체크하도록 합니다.\n"
|
||||
"* `www.google.org`도메인의 모든 페이지를 재귀적으로 확인하기 위해 코드를 확장"
|
||||
"해서 작성합니다: 사이트에 의해 차단되지 않도록 100페이지 정도로 제한을 두시"
|
||||
"해서 작성합니다: 차단당하지 않도록 100페이지 정도로 제한을 두시"
|
||||
"기 바랍니다."
|
||||
|
||||
#: src/exercises/day-4/link-checker.md:103
|
||||
@ -11722,8 +11722,8 @@ msgid ""
|
||||
"you can write new operating system services in Rust, as well as extending\n"
|
||||
"existing services."
|
||||
msgstr ""
|
||||
"러스트는 안드로이드 네이티브 플랫폼 개발을 지원합니다. 즉, 기존 서비스를 확"
|
||||
"장 할 뿐 아니라 새로운 OS서비스를 작성할 수 있음을 뜻합니다."
|
||||
"러스트는 안드로이드 네이티브 플랫폼 개발을 지원합니다. 기존의 OS 서비스를 "
|
||||
"확장하거나, 새로운 서비스를 만드는데 러스트를 쓸 수 있습니다."
|
||||
|
||||
#: src/android/setup.md:1
|
||||
msgid "# Setup"
|
||||
@ -11735,8 +11735,8 @@ msgid ""
|
||||
"have\n"
|
||||
"access to one or create a new one with:"
|
||||
msgstr ""
|
||||
"Android Virtual Device를 사용하여 코드를 테스트합니다. \n"
|
||||
"액세스 권한이 있는지 확인하거나 다음을 사용하여 새 액세스 권한을 만드십시오:"
|
||||
"안드로이드 가상 디바이스(Android Virtual Device)를 사용하여 여러분의 코드를 "
|
||||
"수행할 겁니다. 새로운 가상 디바이스를 생성하려면 아래의 명령어를 사용하세요."
|
||||
|
||||
#: src/android/setup.md:6
|
||||
msgid ""
|
||||
@ -11762,7 +11762,7 @@ msgstr "# 빌드 규칙(Build Rules)"
|
||||
#: src/android/build-rules.md:3
|
||||
msgid "The Android build system (Soong) supports Rust via a number of modules:"
|
||||
msgstr ""
|
||||
"안드로이드 빌드 시스템(Soong)은 다음과 같은 여러 모듈을 통해 러스트를 지원합"
|
||||
"안드로이드 빌드 시스템(Soong)은 다음과 같은 여러 모듈을 통해 러스트를 지원합"
|
||||
"니다:"
|
||||
|
||||
#: src/android/build-rules.md:5
|
||||
@ -11792,28 +11792,15 @@ msgstr ""
|
||||
"| Module Type | Description "
|
||||
"|\n"
|
||||
"|-------------------|------------------------------------------------------|\n"
|
||||
"| `rust_binary` | 러스트 바이너리(Rust binary)를 생성합니다. "
|
||||
"|\n"
|
||||
"| `rust_library` | 러스트 라이브러리를 생성하고, rlib와 dylib variants"
|
||||
"를 제공합니"
|
||||
"다. |\n"
|
||||
"| `rust_ffi` | cc모듈에서 사용할 수 있는 Rust C library를 생성하"
|
||||
"고, static and shared variants를 제공합니"
|
||||
"다. |\n"
|
||||
"| `rust_proc_macro` | proc-macro Rust library를 생성합니다. 컴파일"
|
||||
"러 플러그인과 유사합니"
|
||||
"다. |\n"
|
||||
"| `rust_test` | standard Rust test harness를 사용하는 러스트 테스"
|
||||
"트 바이너리를 생성합니"
|
||||
"다. |\n"
|
||||
"| `rust_fuzz` | libfuzzer를 사용하여 Rust fuzz 바이너리를 생성합니"
|
||||
"다.|\n"
|
||||
"| `rust_protobuf` | 소스를 생성하고 특정 protobuf에 대한 인터페이스"
|
||||
"를 제공하는 러스트 라이브러리를 생성합니"
|
||||
"다. |\n"
|
||||
"| `rust_bindgen` | 소스를 생성하고 C 라이브러리에 대한 러스트 바인딩"
|
||||
"을 포함하는 러스트 라이브러리를 생성합니"
|
||||
"다 |"
|
||||
"| `rust_binary` | 러스트 바이너리를 생성합니다.|\n"
|
||||
"| `rust_library` | 러스트 라이브러리(rlib혹은 dylib)를 생성합니다.|\n"
|
||||
"| `rust_ffi` | cc 모듈에서 사용할 수 있는 C library (정적 혹은 동적)를 생성합니다.|\n"
|
||||
"| `rust_proc_macro` | `proc-macro`를 구현하는 러스트 라이브러리를 생성합니다. "
|
||||
"컴파일러의 플러그인으로 생각해도 좋습니다.|\n"
|
||||
"| `rust_test` | 표준 러스트 테스트 러너를 사용하는 테스트 바이너리를 생성합니다.|\n"
|
||||
"| `rust_fuzz` | `libfuzzer`를 사용하여 fuzz 바이너리를 생성합니다.|\n"
|
||||
"| `rust_protobuf` | 프로토버프(protobuf) 인터페이스를 제공하는 러스트 라이브러리를 생성합니다.|\n"
|
||||
"| `rust_bindgen` | C 라이브러리에 대한 러스트 바인딩을 제공하는 러스트 라이브러리를 생성합니다.|"
|
||||
|
||||
#: src/android/build-rules.md:16
|
||||
msgid "We will look at `rust_binary` and `rust_library` next."
|
||||
@ -11868,7 +11855,7 @@ msgstr ""
|
||||
|
||||
#: src/android/build-rules/binary.md:27
|
||||
msgid "You can now build, push, and run the binary:"
|
||||
msgstr "이제 바이너리를 빌드, 푸시, 실행할 수 있습니다:"
|
||||
msgstr "그런 다음, 이 바이너리를 빌드하고, 가상 디바이스에 넣고, 실행합니다:"
|
||||
|
||||
#: src/android/build-rules/binary.md:29
|
||||
msgid ""
|
||||
@ -11886,11 +11873,11 @@ msgstr "# 러스트 라이브러리"
|
||||
|
||||
#: src/android/build-rules/library.md:3
|
||||
msgid "You use `rust_library` to create a new Rust library for Android."
|
||||
msgstr "`rust_library`를 사용하여 Android용 새 Rust 라이브러리를 만듭니다."
|
||||
msgstr "`rust_library`를 사용하여 안드로이드용 새 러스트 라이브러리를 만듭니다."
|
||||
|
||||
#: src/android/build-rules/library.md:5
|
||||
msgid "Here we declare a dependency on two libraries:"
|
||||
msgstr "여기서 2개의 라이브러리 의존성을 선언합니다."
|
||||
msgstr "여기서 두 개의 라이브러리에 대한 의존성을 선언합니다."
|
||||
|
||||
#: src/android/build-rules/library.md:7
|
||||
msgid ""
|
||||
@ -11898,8 +11885,8 @@ msgid ""
|
||||
"* `libtextwrap`, which is a crate already vendored in\n"
|
||||
" [`external/rust/crates/`][crates]."
|
||||
msgstr ""
|
||||
"* 아래에 정의한 libgreeting.\n"
|
||||
"* [`external/rust/crates/`][crates]에 존재하는 libtextwrap"
|
||||
"* 아래에 정의한 `libgreeting`.\n"
|
||||
"* [`external/rust/crates/`][crates]에 존재하는 `libtextwrap`."
|
||||
|
||||
#: src/android/build-rules/library.md:11
|
||||
msgid ""
|
||||
@ -11974,7 +11961,7 @@ msgstr ""
|
||||
|
||||
#: src/android/build-rules/library.md:59
|
||||
msgid "You build, push, and run the binary like before:"
|
||||
msgstr "이제 이전과 같이 바이너리를 빌드, 푸시, 실행할 수 있습니다:"
|
||||
msgstr "이전처럼, 빌드하고, 가상 디바이스로 넣고, 실행합니다:"
|
||||
|
||||
#: src/android/build-rules/library.md:61
|
||||
msgid ""
|
||||
@ -11998,15 +11985,15 @@ msgid ""
|
||||
"(AIDL)](https://developer.android.com/guide/components/aidl) is supported in "
|
||||
"Rust:"
|
||||
msgstr ""
|
||||
"러스트는 안드로이드 [인터페이스 정의 언어(AIDL)](https://developer.android."
|
||||
"com/guide/components/aidl)을 지원합니다:"
|
||||
"러스트는 [안드로이드 인터페이스 정의 언어(AIDL)](https://developer.android."
|
||||
"com/guide/components/aidl)를 지원합니다:"
|
||||
|
||||
#: src/android/aidl.md:6
|
||||
msgid ""
|
||||
"* Rust code can call existing AIDL servers,\n"
|
||||
"* You can create new AIDL servers in Rust."
|
||||
msgstr ""
|
||||
"* 러스트 코드는 기존 AIDL 서버를 호출 할 수 있습니다. \n"
|
||||
"* 러스트 코드에서 기존 AIDL 서버를 호출 할 수 있습니다. \n"
|
||||
"* 러스트에서 새로운 AIDL 서버를 생성할 수 있습니다."
|
||||
|
||||
#: src/android/aidl/interface.md:1
|
||||
@ -12064,7 +12051,7 @@ msgid ""
|
||||
"vendor\n"
|
||||
"partition."
|
||||
msgstr ""
|
||||
"AIDL 파일이 벤더 파티션의 바이너리에서 사용되는 경우 `vendor_available: true`"
|
||||
"AIDL 파일이 벤더 파티션에 있는 바이너리에서 사용될 경우 `vendor_available: true`"
|
||||
"를 추가합니다."
|
||||
|
||||
#: src/android/aidl/implementation.md:1
|
||||
@ -12198,7 +12185,7 @@ msgstr "# 배포"
|
||||
|
||||
#: src/android/aidl/deploy.md:3
|
||||
msgid "We can now build, push, and start the service:"
|
||||
msgstr "서비스를 빌드, 푸시, 시작 할 수 있습니다:"
|
||||
msgstr "서비스를 빌드하고, 가상 디바이스에 넣고, 시작 할 수 있습니다:"
|
||||
|
||||
#: src/android/aidl/deploy.md:5
|
||||
msgid ""
|
||||
@ -12211,7 +12198,7 @@ msgstr ""
|
||||
|
||||
#: src/android/aidl/deploy.md:11
|
||||
msgid "In another terminal, check that the service runs:"
|
||||
msgstr "다른 터미널에서 서비스 구동을 확인합니다:"
|
||||
msgstr "다른 터미널을 띄워서 서비스가 잘 수행되고 있는지 확인합니다:"
|
||||
|
||||
#: src/android/aidl/deploy.md:13
|
||||
msgid ""
|
||||
@ -12223,7 +12210,7 @@ msgstr ""
|
||||
|
||||
#: src/android/aidl/deploy.md:18
|
||||
msgid "You can also call the service with `service call`:"
|
||||
msgstr "`service call`로 서비스를 호출할 수도 있습니다:"
|
||||
msgstr "`service call`명렁어로 서비스를 호출할 수도 있습니다:"
|
||||
|
||||
#: src/android/aidl/deploy.md:20
|
||||
msgid ""
|
||||
@ -12247,7 +12234,7 @@ msgstr "# AIDL 클라이언트"
|
||||
|
||||
#: src/android/aidl/client.md:3
|
||||
msgid "Finally, we can create a Rust client for our new service."
|
||||
msgstr "마지막으로, 새로운 서비스를 위한 러스트 클라이언트를 만들 수 있습니다."
|
||||
msgstr "마지막으로, 아까 추가한 서비스에 대한 클라이언트를 러스트로 만들겠습니다."
|
||||
|
||||
#: src/android/aidl/client.md:5
|
||||
msgid "*birthday_service/src/client.rs*:"
|
||||
@ -12314,11 +12301,11 @@ msgstr ""
|
||||
|
||||
#: src/android/aidl/client.md:52
|
||||
msgid "Notice that the client does not depend on `libbirthdayservice`."
|
||||
msgstr "클라이언트는 `libbirthdayservice`에 의존하지 않습니다. "
|
||||
msgstr "클라이언트는 `libbirthdayservice`에 의존하지 않음에 주목하세요. "
|
||||
|
||||
#: src/android/aidl/client.md:54
|
||||
msgid "Build, push, and run the client on your device:"
|
||||
msgstr "장치에서 빌드, 푸시, 실행합니다: "
|
||||
msgstr "빌드하고, 가상 디바이스로 넣고, 실행합니다: "
|
||||
|
||||
#: src/android/aidl/client.md:56
|
||||
msgid ""
|
||||
@ -12340,8 +12327,8 @@ msgid ""
|
||||
"specify a\n"
|
||||
"list of lines for the birthday card:"
|
||||
msgstr ""
|
||||
"API를 확장하여 더 많은 기능을 제공합니다. 클라이언트가 생일 카드에 대한 줄 목"
|
||||
"록을 지정할 수 있도록 합니다:"
|
||||
"API를 확장하여 더 많은 기능을 제공해 봅시다. 클라이언트가 생일 카드에 담길 "
|
||||
"내용을 지정할 수 있도록 하겠습니다:"
|
||||
|
||||
#: src/android/aidl/changing.md:9
|
||||
msgid ""
|
||||
@ -12363,8 +12350,8 @@ msgid ""
|
||||
"or\n"
|
||||
"`stdout` (on-host):"
|
||||
msgstr ""
|
||||
"`log`크레이트를 사용하여 `logcat`(장치)나 `stdout`(호스트)에서 자동으로 로그"
|
||||
"를 기록하도록 합니다:"
|
||||
"`log` 크레이트를 사용하면 안드로이드 디바이스 안에서 수행될 때에는 `logcat`으로, "
|
||||
"호스트에서 수행될 때에는 `stdout`으로 로그가 자동으로 출력이 되도록 할 수 있습니다."
|
||||
|
||||
#: src/android/logging.md:6
|
||||
msgid "_hello_rust_logs/Android.bp_:"
|
||||
@ -12420,7 +12407,7 @@ msgstr ""
|
||||
#: src/android/logging.md:42 src/android/interoperability/with-c/bindgen.md:98
|
||||
#: src/android/interoperability/with-c/rust.md:73
|
||||
msgid "Build, push, and run the binary on your device:"
|
||||
msgstr "장치에서 바이너리를 빌드, 푸시, 실행합니다:"
|
||||
msgstr "빌드하고, 가상 디바이스에 넣고, 실행합니다:"
|
||||
|
||||
#: src/android/logging.md:44
|
||||
msgid ""
|
||||
@ -12457,15 +12444,14 @@ msgid ""
|
||||
"means\n"
|
||||
"that you can:"
|
||||
msgstr ""
|
||||
"러스트는 다른 언어와의 상호운용성을 훌륭히 지원합니다. 즉, 다음을 수행할 수 "
|
||||
"있습니다:"
|
||||
"러스트는 다음과 같이 다른 언어와의 상호운용성을 훌륭히 지원합니다:"
|
||||
|
||||
#: src/android/interoperability.md:6
|
||||
msgid ""
|
||||
"* Call Rust functions from other languages.\n"
|
||||
"* Call functions written in other languages from Rust."
|
||||
msgstr ""
|
||||
"* 타 언어에서 rust 함수를 호출합니다. \n"
|
||||
"* 타 언어에서 러스트 함수를 호출합니다. \n"
|
||||
"* 타 언어의 함수를 러스트에서 호출합니다."
|
||||
|
||||
#: src/android/interoperability.md:9
|
||||
@ -12485,12 +12471,12 @@ msgid ""
|
||||
"Rust has full support for linking object files with a C calling convention.\n"
|
||||
"Similarly, you can export Rust functions and call them from C."
|
||||
msgstr ""
|
||||
"러스트는 C 호출규약과 함께 객체 파일을 연결하는 것을 완벽하게 지원합니다. \n"
|
||||
"반대로 러스트 함수를 내보내서 C에서 호출 할 수 있습니다. "
|
||||
"러스트는 C 호출규약을 따르는 오브젝트 파일과 링킹할 수 있습니다.\n"
|
||||
"또한, 반대로 러스트 함수를 내보내서 C에서 호출 할 수 도 있습니다. "
|
||||
|
||||
#: src/android/interoperability/with-c.md:6
|
||||
msgid "You can do it by hand if you want:"
|
||||
msgstr "원하는 경우 직접 코딩할 수 있습니다: "
|
||||
msgstr "원한다면 아래와 같이 수동으로 코딩할 수 있습니다:"
|
||||
|
||||
#: src/android/interoperability/with-c.md:8
|
||||
msgid ""
|
||||
@ -12523,12 +12509,12 @@ msgid ""
|
||||
"> This assumes full knowledge of the target platform. Not recommended for\n"
|
||||
"> production."
|
||||
msgstr ""
|
||||
"> 이는 대상 플랫폼에 대한 완전한 지식을 전제로 합니다. 실 제품에는 권장하진 "
|
||||
"않습니다."
|
||||
"> 이러한 방법은 타겟 플랫폼의 모든 부분을 사전에 알고 있다는 전제를 깔고 있습니다.\n"
|
||||
"> 상용 프로젝트에서는 권장하지 않습니다."
|
||||
|
||||
#: src/android/interoperability/with-c.md:26
|
||||
msgid "We will look at better options next."
|
||||
msgstr "다음으로 좀 더 나은 옵션을 살펴보겠습니다."
|
||||
msgstr "좀 더 나은 옵션을 살펴보겠습니다."
|
||||
|
||||
#: src/android/interoperability/with-c/bindgen.md:1
|
||||
msgid "# Using Bindgen"
|
||||
@ -12541,11 +12527,11 @@ msgid ""
|
||||
"can auto-generate bindings from a C header file."
|
||||
msgstr ""
|
||||
"[bindgen](https://rust-lang.github.io/rust-bindgen/introduction.html)는 C 헤"
|
||||
"더파일에서 자동으로 생성하는 도구입니다."
|
||||
"더파일에서 러스트 바인딩을 자동으로 생성하는 도구입니다."
|
||||
|
||||
#: src/android/interoperability/with-c/bindgen.md:6
|
||||
msgid "First create a small C library:"
|
||||
msgstr "작은 C라이브러리를 생성합니다."
|
||||
msgstr "먼저 작은 C라이브러리를 만들어 보겠습니다:"
|
||||
|
||||
#: src/android/interoperability/with-c/bindgen.md:8
|
||||
msgid "_interoperability/bindgen/libbirthday.h_:"
|
||||
@ -12614,7 +12600,7 @@ msgid ""
|
||||
"Create a wrapper header file for the library (not strictly needed in this\n"
|
||||
"example):"
|
||||
msgstr ""
|
||||
"라이브러리에 대한 래퍼 헤더 파일을 만듭니다(이 예시에서는 필요하지 않습니다):"
|
||||
"라이브러리에 대한 헤더 파일을 만듭니다(이 예시에서는 반드시 필요한 것은 아닙니다.):"
|
||||
|
||||
#: src/android/interoperability/with-c/bindgen.md:47
|
||||
msgid "_interoperability/bindgen/libbirthday_wrapper.h_:"
|
||||
@ -12700,7 +12686,7 @@ msgstr ""
|
||||
|
||||
#: src/android/interoperability/with-c/bindgen.md:106
|
||||
msgid "Finally, we can run auto-generated tests to ensure the bindings work:"
|
||||
msgstr "마지막으로, 바인딩이 작동하는지 자동생성 테스트를 실행할 수 있습니다:"
|
||||
msgstr "마지막으로, 바인딩이 잘 작동하는지 확인하기 위해, 자동 생성된 테스트를 실행해 보겠습니다:"
|
||||
|
||||
#: src/android/interoperability/with-c/bindgen.md:110
|
||||
msgid ""
|
||||
@ -12803,7 +12789,7 @@ msgstr ""
|
||||
|
||||
#: src/android/interoperability/with-c/rust.md:48
|
||||
msgid "We can now call this from a C binary:"
|
||||
msgstr "이제 C바이너리에서 호출할 수 있습니다:"
|
||||
msgstr "이제 이 러스트 함수를 C바이너리에서 호출할 수 있습니다:"
|
||||
|
||||
#: src/android/interoperability/with-c/rust.md:50
|
||||
msgid "_interoperability/rust/analyze/main.c_"
|
||||
@ -12856,9 +12842,9 @@ msgid ""
|
||||
"the function. You can also use `#[export_name = \"some_name\"]` to specify "
|
||||
"whatever name you want."
|
||||
msgstr ""
|
||||
"`#[no_mangle]`은 러스트의 일반적인 name mangling을 비활성화하므로 함수의 이름"
|
||||
"이 내보낸 심볼이 됩니다. `#[export_name = \"some_name\"]`을 사용하여 원하는 "
|
||||
"이름을 지정할 수 있습니다."
|
||||
"`#[no_mangle]`은 러스트의 네임 맹글링(name mangling)을 비활성화하므로 외부로 노출되는 "
|
||||
"심볼의 이름은 함수의 이름 그대로가 됩니다.\n"
|
||||
"심볼 이름을 바꾸고 싶다면 `#[export_name = \"some_name\"]`을 사용합니다."
|
||||
|
||||
#: src/android/interoperability/cpp.md:1
|
||||
msgid "# With C++"
|
||||
@ -12902,8 +12888,8 @@ msgid ""
|
||||
"crate](https://docs.rs/jni/) allows you to create a compatible library."
|
||||
msgstr ""
|
||||
"자바는 [Java Native Interface(JNI)](https://en.wikipedia.org/wiki/"
|
||||
"Java_Native_Interface)를 통해 공유 객체를 로드할 수 있습니다. [`jni` 크레이"
|
||||
"트](https://docs.rs/jni/)를 사용하여 호환 라이브러리를 만들 수 있습니다."
|
||||
"Java_Native_Interface)를 통해 공유 라이브러리를 로드할 수 있습니다. [`jni` 크레이"
|
||||
"트](https://docs.rs/jni/)를 사용하여 JNI 라이브러리를 만들 수 있습니다."
|
||||
|
||||
#: src/android/interoperability/java.md:7
|
||||
msgid "First, we create a Rust function to export to Java:"
|
||||
@ -12962,7 +12948,7 @@ msgstr ""
|
||||
|
||||
#: src/android/interoperability/java.md:43
|
||||
msgid "Finally, we can call this function from Java:"
|
||||
msgstr "마침내, 자바에서 이 함수를 호출 할 수 있습니다:"
|
||||
msgstr "자바에서 이 함수를 호출 할 수 있습니다:"
|
||||
|
||||
#: src/android/interoperability/java.md:45
|
||||
msgid "_interoperability/java/HelloWorld.java_:"
|
||||
@ -13023,8 +13009,8 @@ msgid ""
|
||||
"Let us\n"
|
||||
"group up and do this together. Some suggestions:"
|
||||
msgstr ""
|
||||
"마지막 연습문제는 당신의 프로젝트 중 하나를 FFI로 러스트와 연계 해보는 것입니"
|
||||
"다. 몇가지 예시입니다: "
|
||||
"마지막 연습문제는 여러분이 작업하고 있는 프로젝트 중 하나를 FFI로 러스트와 연계 해보는 것입니"
|
||||
"다. 몇 가지 예시입니다: "
|
||||
|
||||
#: src/exercises/day-4/afternoon.md:6
|
||||
msgid "* Call your AIDL service with a client written in Rust."
|
||||
@ -13087,7 +13073,7 @@ msgstr "## 공식 문서들"
|
||||
#: src/other-resources.md:8
|
||||
msgid "The Rust project hosts many resources. These cover Rust in general:"
|
||||
msgstr ""
|
||||
"러스트 프로젝트는 여러 리소스를 호스팅합니다. 일반적인 내용을 다루는 몇가지 "
|
||||
"러스트 프로젝트에는 참조할 만한 자료가 많습니다. 일반적인 내용을 다루는 몇가지 "
|
||||
"참고 문서들입니다:"
|
||||
|
||||
#: src/other-resources.md:10
|
||||
|
Loading…
Reference in New Issue
Block a user