Skip to content

Commit 75242ea

Browse files
committed
Fix a part of conflicts
1 parent ba7b419 commit 75242ea

5 files changed

Lines changed: 33 additions & 168 deletions

File tree

1-js/04-object-basics/03-garbage-collection/article.md

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,7 @@ let admin = user;
7474
user = null;
7575
```
7676

77-
<<<<<<< HEAD
78-
...سپس شیء هنوز توسط متغیر global `admin` قابل دسترس است، پس در حافظه وجود دارد. اگر ما `admin` را هم بازنویسی کنیم، سپس این شیء حذف می‌شود.
79-
=======
80-
...Then the object is still reachable via `admin` global variable, so it must stay in memory. If we overwrite `admin` too, then it can be removed.
81-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
77+
...سپس شیء هنوز توسط متغیر گلوبال `admin` قابل دسترس است، پس در حافظه وجود دارد. اگر ما `admin` را هم بازنویسی کنیم، سپس این شیء حذف می‌شود.
8278

8379
## شیءهای بهم پیوسته
8480

@@ -173,19 +169,11 @@ family = null;
173169

174170
![](garbage-collection-2.svg)
175171

176-
<<<<<<< HEAD
177-
سپس مرجع‌های آنها علامت گذاری می‌شود:
172+
سپس مرجع‌های آنها را دنبال می‌کنیم و شیءهایی که به آنها رجوع شده است را علامت گذاری می‌کنیم:
178173

179174
![](garbage-collection-3.svg)
180175

181-
...و تا جایی که ممکن باشد، مرجع‌های آنها:
182-
=======
183-
Then we follow their references and mark referenced objects:
184-
185-
![](garbage-collection-3.svg)
186-
187-
...And continue to follow further references, while possible:
188-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
176+
...و تا جایی که ممکن باشد، دنبال کردن مرجع‌های بعدی را ادامه می‌دهیم:
189177

190178
![](garbage-collection-4.svg)
191179

@@ -195,54 +183,30 @@ Then we follow their references and mark referenced objects:
195183

196184
همچنین می‌توانیم فرایند را اینگونه فرض کنیم که یک سطل رنگ بسیار بزرگ از ریشه ریخته می‌شود که بین تمام مرجع‌ها جریان می‌یابد و تمام شیءهای قابل دسترس را علامت گذاری می‌کند. سپس شیءهایی که علامت گذاری نشده‌اند پاک می‌شوند.
197185

198-
<<<<<<< HEAD
199-
این مفهوم کلی چگونگی کار کردن زباله‌روبی است. موتورهای جاوااسکریپت بهینه‌سازی‌های زیادی را اعمال می‌کنند تا آن را سریع‌تر کنند و روی اجراشدن برنامه تاثیری نگذارد.
200-
=======
201-
That's the concept of how garbage collection works. JavaScript engines apply many optimizations to make it run faster and not introduce any delays into the code execution.
202-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
186+
این مفهوم کلی چگونگی کار کردن زباله‌روبی است. موتورهای جاوااسکریپت بهینه‌سازی‌های زیادی را اعمال می‌کنند تا آن را سریع‌تر کنند و باعث ایجاد تاخیر در اجرا شدن برنامه نشوند.
203187

204188
بعضی از بهینه‌سازی‌ها:
205189

206-
<<<<<<< HEAD
207-
- **جمع‌آوری نسلی** -- شیءها به دو دسته تقسیم می‌شوند: "جدیدها" و " قدیمی‌ها". بسیاری از شیءها به وجود می‌آیند، کارشان را انجام می‌دهند و به سرعت می‌میرند، آنها می‌توانند به سرعت پاک می‌شوند. شیءهایی که برای مدت زیاد باقی می‌مانند، "قدیمی" می‌شوند و کمتر بررسی می‌شوند.
208-
- **جمع‌آوری افزایشی** -- اگر شیءهای زیادی وجود داشته باشند و ما تلاش کنیم که یک باره برویم و تمام دسته شیء را علامت گذاری کنیم، ممکن است این کار زمان ببرد و اختلال‌های قابل رویت را در اجرا ایجاد کند. پس موتور سعی می‌کند که جمع‌آوری زباله را به چند بخش تقسیم کند. سپس هر بخش یکی یکی به صورت جداگانه انجام می‌شود. این کار برای دنبال کردن تغییرات به ثبت کردن بیشتری نیاز دارد، اما ما به جای اختلالی بزرگ اختلال‌های خیلی کوچک را خواهیم داشت.
209-
- **جمع‌آوری زمان بیکاری** -- زباله جمع‌کن سعی می‌کند که فقط زمانی که پردازنده (CPU) بیکار است کار خود را انجام دهد تا تاثیر ممکن روی اجراشدن را کاهش دهد.
210-
=======
211-
- **Generational collection** -- objects are split into two sets: "new ones" and "old ones". In typical code, many objects have a short life span: they appear, do their job and die fast, so it makes sense to track new objects and clear the memory from them if that's the case. Those that survive for long enough, become "old" and are examined less often.
212-
- **Incremental collection** -- if there are many objects, and we try to walk and mark the whole object set at once, it may take some time and introduce visible delays in the execution. So the engine splits the whole set of existing objects into multiple parts. And then clear these parts one after another. There are many small garbage collections instead of a total one. That requires some extra bookkeeping between them to track changes, but we get many tiny delays instead of a big one.
213-
- **Idle-time collection** -- the garbage collector tries to run only while the CPU is idle, to reduce the possible effect on the execution.
214-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
190+
- **جمع‌آوری نسلی** -- شیءها به دو دسته تقسیم می‌شوند: "جدیدها" و " قدیمی‌ها". در کد معمولی، بسیاری از شیءها به وجود می‌آیند، کارشان را انجام می‌دهند و به سرعت می‌میرند، آنها می‌توانند به سرعت پاک می‌شوند، پس منطقی است که شیءهای جدید تحت نظر قرار بگیرند و اگر این موضوع صادق باشد آنها را از حافظه پاک کنیم. شیءهایی که برای مدت زیاد باقی می‌مانند، "قدیمی" می‌شوند و کمتر بررسی می‌شوند.
191+
- **جمع‌آوری افزایشی** -- اگر شیءهای زیادی وجود داشته باشند و ما تلاش کنیم که یک باره برویم و تمام دسته شیء را علامت گذاری کنیم، ممکن است این کار زمان ببرد و اختلال‌های قابل رویت را در اجرا ایجاد کند. پس موتور تمام شیءهای موجود را به چند بخش تقسیم کند. سپس هر بخش یکی پس از دیگری پاک‌سازی می‌شوند. زباله‌روبی‌های کوچک زیادی به جای یک زباله‌روبی کامل وجود خواهد داشت. این کار برای دنبال کردن تغییرات به ثبت کردن بیشتری نیاز دارد، اما ما به جای اختلالی بزرگ اختلال‌های خیلی کوچک را خواهیم داشت.
192+
- **جمع‌آوری زمان بیکاری** -- زباله جمع‌کن سعی می‌کند که فقط زمانی که پردازنده (CPU) بیکار است کار خود را انجام دهد تا تاثیر ممکن روی اجرا شدن را کاهش دهد.
215193

216194
بهینه‌سازی و روش‌های دیگری هم برای الگوریتم‌های زباله‌روبی وجود دارد. همان قدر که دوست دارم آنها را اینجا توضیح دهم، نباید ادامه دهم، چون موتورهای مختلف تکنیک و فن‌های مختلفی را پیاده‌سازی می‌کنند. و این حتی مهم تر است که همانطور که موتورها پیشرفت می‌کنند چیزهایی هم تغییر می‌کنند، پس مطالعه‌ی عمیق‌تر "پیشرفته" بدون نیاز واقعی احتمالا ارزش ندارد. مگر اینکه، موضوع کاملا مربوط به علاقه باشد که در این صورت لینک‌هایی برای شما در پایین قرار داده شده است.
217195

218196
## خلاصه
219197

220198
چیزهای مهم که باید بدانیم:
221199

222-
<<<<<<< HEAD
223200
- زباله‌روبی به صورت خودکار انجام می‌شود. ما نمی‌توانیم آن را مجبور یا از آن جلوگیری کنیم.
224201
- شیءها تا زمانی که قابل دسترس باشند در حافظه باقی می‌مانند.
225-
- مرجع بودن با قابل دسترس بودن (از یک ریشه) یکسان نیست : یک دسته‌ی شیءهای بهم پیوسته می‌توانند به طور کامل غیر قابل دسترس شوند.
226-
=======
227-
- Garbage collection is performed automatically. We cannot force or prevent it.
228-
- Objects are retained in memory while they are reachable.
229-
- Being referenced is not the same as being reachable (from a root): a pack of interlinked objects can become unreachable as a whole, as we've seen in the example above.
230-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
202+
- مرجع بودن با قابل دسترس بودن (از یک ریشه) یکسان نیست: همانطور که در مثال بالا دیدیم، یک دسته‌ی شیءهای بهم پیوسته می‌توانند به طور کامل غیر قابل دسترس شوند.
231203

232204
موتورهای مدرن الگوریتم‌های پیشرفته‌ی زباله‌روبی را پیاده‌سازی می‌کنند.
233205

234206
کتاب کلی "The Garbage Collection Handbook: The Art of Automatic Memory Management" (R. Jones و بقیه افراد) بعضی از آنها را پوشش می‌دهد.
235207

236-
<<<<<<< HEAD
237208
اگر شما با برنامه‌نویسی سطح پایین آشنایی دارید، اطلاعاتی با جزییات درباره زباله‌روبی V8 در این مقاله است [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
238209

239210
[بلاگ V8](https://v8.dev/) هم هر چند گاهی مقاله‌هایی درباره تغییرات مدیریت حافظه منتشر می‌کند. طبیعتا، برای یادگیری زباله‌روبی، شما بهتر است به طور کلی با یاد گرفتن چیزهای داخلی V8 آماده شوید و بلاگ [Vyacheslav Egorov](http://mrale.ph) که یکی از مهندس‌های V8 بود را بخوانید. من می‌گویم: "V8" چون مقاله‌های زیادی درباره آن در اینترنت وجود دارد. برای موتورهای دیگر، بیشتر روش‌ها مشابه هستند، اما زباله‌روبی در جنبه‌های زیادی متفاوت است.
240211

241212
اگر شما بهینه‌سازی‌های سطح پایین را نیاز دارید، دانایی عمیق موتورها چیز خوبی است. این کار عاقلانه‌ای است که بعد از آشنایی با زبان برای آن برنامه‌ریزی کنید.
242-
=======
243-
If you are familiar with low-level programming, more detailed information about V8's garbage collector is in the article [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
244-
245-
The [V8 blog](https://v8.dev/) also publishes articles about changes in memory management from time to time. Naturally, to learn more about garbage collection, you'd better prepare by learning about V8 internals in general and read the blog of [Vyacheslav Egorov](http://mrale.ph) who worked as one of the V8 engineers. I'm saying: "V8", because it is best covered by articles on the internet. For other engines, many approaches are similar, but garbage collection differs in many aspects.
246-
247-
In-depth knowledge of engines is good when you need low-level optimizations. It would be wise to plan that as the next step after you're familiar with the language.
248-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322

1-js/04-object-basics/04-object-methods/7-calculator/task.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,9 @@ importance: 5
66

77
یک شیء `calculator` با سه متد بسازید:
88

9-
<<<<<<< HEAD
10-
- `read()` برای دو مقدار prompt می‌کند و آنها را به عنوان ویژگی‌های شیء ذخیره می‌کند.
9+
- `read()` برای دو مقدار prompt می‌کند و آنها را به عنوان ویژگی‌های شیء با نام‌های `a` و `b` ذخیره می‌کند.
1110
- `sum()` مجموع مقدارهای ذخیره‌شده را برمی‌گرداند.
1211
- `mul()` مقدارهای ذخیره‌شده را ضرب می‌کند و نتیجه را برمی‌گرداند.
13-
=======
14-
- `read()` prompts for two values and saves them as object properties with names `a` and `b` respectively.
15-
- `sum()` returns the sum of saved values.
16-
- `mul()` multiplies saved values and returns the result.
17-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
1812

1913
```js
2014
let calculator = {
@@ -26,8 +20,4 @@ alert( calculator.sum() );
2620
alert( calculator.mul() );
2721
```
2822

29-
<<<<<<< HEAD
3023
[دمو]
31-
=======
32-
[demo]
33-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322

1-js/04-object-basics/04-object-methods/article.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,8 @@ let user = {
5050
*!*
5151
// اول تعریف می‌کنیم
5252
function sayHi() {
53-
<<<<<<< HEAD
5453
alert("سلام!");
5554
};
56-
=======
57-
alert("Hello!");
58-
}
59-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
6055

6156
// سپس به عنوان متد آن را اضافه می‌کنیم
6257
user.sayHi = sayHi;
@@ -95,11 +90,7 @@ user = {
9590

9691
همانطور که نشان داده شد، ما می‌توانیم `"function"` را حذف کنیم و فقط `sayHi()` را بنویسیم.
9792

98-
<<<<<<< HEAD
9993
حقیقتا این دو روش کاملا یکسان نیستند. تفاوت‌هایی جزئی و مربوط به وراثت شیء (بعدا آن را می‌آموزیم) وجود دارند، اما آنها الان مهم نیستند. تقریبا در تمام موارد سینتکس کوتاه‌تر ترجیح داده می‌شود.
100-
=======
101-
To tell the truth, the notations are not fully identical. There are subtle differences related to object inheritance (to be covered later), but for now they do not matter. In almost all cases, the shorter syntax is preferred.
102-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
10394

10495
## "this" در متدها
10596

1-js/04-object-basics/07-optional-chaining/article.md

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ alert( user?.address?.street ); // undefined (بدون خطا)
103103
اینجا مثالی با استفاده از `document.querySelector` داریم:
104104
105105
```js run
106-
let html = document.querySelector('.elem')?.innerHTML; // will be undefined, if there's no element
106+
let html = document.querySelector('.elem')?.innerHTML; // خواهد بود undefined اگر المانی وجود نداشته باشد
107107
```
108108
109109
خواندن آدرس با استفاده از `user?.address` حتی اگر شیء `user` وجود نداشته باشد هم کار می‌کند:
@@ -182,11 +182,7 @@ userGuest.admin?.(); // چیزی اتفاق نمی‌افتد (چنین متدی
182182

183183
اینجا، در هر دو خط، ما ابتدا از نقطه (`userAdmin.admin`) برای گرفتن ویژگی ‍`admin` استفاده می‌کنیم به خاطر اینکه فرض می‌کنیم که شیء ‍`user` حتما وجود دارد پس خواندن از آن مطمئن است.
184184

185-
<<<<<<< HEAD
186185
سپس `().?` عبارت سمت چپ را بررسی می‌کند: اگر تابع ‍admin وجود داشته باشد اجرا می‌شود (برای `userAdmin` صدق می‌کند). در غیر اینصورت (برای `userGuest`) ارزیابی بدون خطا متوقف می‌شود.
187-
=======
188-
Then `?.()` checks the left part: if the `admin` function exists, then it runs (that's so for `userAdmin`). Otherwise (for `userGuest`) the evaluation stops without errors.
189-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
190186

191187
سینتکس `[].?` نیز کار می‌کند، اگر ما می‌خواهیم از براکت به جای نقطه `.` برای دستیابی به ویژگی‌ها استفاده کنیم. مشابه موارد قبلی، این سینتکس اجازه می دهد تا با خیال راحت یک ویژگی از شیءای که ممکن است وجود نداشته باشد را بخوانیم.
192188

@@ -209,13 +205,8 @@ alert( user2?.[key] ); // undefined
209205
delete user?.name; // را حذف کن user.name وجود داشت user اگر
210206
```
211207

212-
<<<<<<< HEAD
213208
````warn header="ما می‌توانیم از`.?` برای پاک کردن و خواندن مطمئن استفاده کنیم ولی مقداردهی نه."
214209
زنجیره‌ی اختیاری `.?` هیچ کاربردی برای سمت چپ مساوی ندارد.
215-
=======
216-
````warn header="We can use `?.` for safe reading and deleting, but not writing"
217-
The optional chaining `?.` has no use on the left side of an assignment.
218-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
219210

220211
برای مثال:
221212
```js run

0 commit comments

Comments
 (0)