рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рд▓реЗрдЦ Apple рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░
рдПрд▓реЗрд╕реНрдЯреЗрдпрд░ рдкрд░рдЧрд╛рд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ
рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ рдФрд░ рдЗрд╕рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдкрд╛рдпрдерди, рдкреАрдПрдЪрдкреА, рдЬрд╛рд╡рд╛, рд╕реНрдХрд╛рд▓рд╛, рд╣рд╛рд╕реНрдХреЗрд▓, рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рд░рд╕реНрдЯ рдЬреИрд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдПрд▓реЗрд╕реНрдЯреЗрдпрд░ рдиреЗ рдЕрдкрдиреА "рднрд╛рд╖рд╛" рдЪреБрдирдиреЗ рдФрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╢реБрд░реБрдЖрддреА рдФрд░ рдкреЗрд╢реЗрд╡рд░реЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдЬреЛ рдПрдХ рдирдпрд╛ рдЯреВрд▓рдХрд┐рдЯ рдЪреБрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЪрд╛рд╣реЗ рдЖрдк рд░реЛрдЬрдЧрд╛рд░ рдпрд╛ рдЙрдиреНрдирдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ, рдпрд╛ рдпрд╣ рд╢реБрджреНрдз рд╢реМрдХ рд╣реИ, рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЛ рдЙрдирдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рдкреНрд░рд╢реНрди рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╣реИ: рд╣рдЬрд╛рд░реЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕реЗ рд╣рд░ рджрд┐рди рдХрд░рддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреБрдЫ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо "рдкреЗрд╢реЗ рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░" ред
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: рд╣реИрдмрд░ рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - рд╣реИрдмрд░ рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯ
ред
рддреБрд▓рдирд╛рддреНрдордХ рд╕рдВрдХреЗрддрдХ
рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕реНрддрд░рдпрджрд┐ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рддреАрди рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- "рдлрд╛рд╕реНрдЯ", рдЬреЛ рдЬрд▓реНрджреА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ рдЙрдирдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- "рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░", рдЬреЛ рдЕрдкрдиреА рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
- рддрдерд╛рдХрдерд┐рдд рд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ, рдЬрд┐рдирдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдореЗрдореЛрд░реА рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЗрд╢рдХ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреБрджрд╛рдИ рдХрдо рд╕рдЦреНрдд рд╣реИ: рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдордзреНрдпрд╡рд░реНрддреА, рд╕рдВрдХрд░ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред
рдЕрдЧрд░ рд╣рдо рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ - "рддреЗрдЬрд╝" рднрд╛рд╖рд╛рдУрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП: рд╡реЗ рдЖрдкрдХреЛ рддреБрд░рдВрдд рдХрд╛рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдФрд░ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпреЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ PHP, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд░реВрдмреА, рдФрд░ рдкрд╛рдпрдерди рд╣реИрдВред рдпрд╣рд╛рдВ рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛ рдиреНрдпреВрдирддрдо рд╣реИ, рдФрд░ рдЖрдк рдереЛрдбрд╝реЗ рд╕рдордп рдореЗрдВ рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рд╕реАрдорд╛ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИред
from concurrent.futures import ThreadPoolExecutor from http.client import HTTPException from urllib import request from typing import Union, Dict, Any, List def get_request_task(url: str) -> Union[List[Dict[str, Any]], None]: try: contents = None with request.urlopen(url) as response: contents = response.read() return contents except HTTPException: return None with ThreadPoolExecutor() as executor: for result in executor.map(get_request_task, [ "https://jsonplaceholder.typicode.com/posts", "https://jsonplaceholder.typicode.com/comments", "https://jsonplaceholder.typicode.com/albums" ]): if result is None: print("Something terrible has happened!") else: print(result)
рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рдореЗрдВ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдП, рдмреА рдФрд░ рд╕реА рдХрд╣рддреЗ рд╣реИрдВ)ред рдЬрдмрдХрд┐ рдПрдХ рдХрд╛рд░реНрдп (рдХрд╣рддреЗ рд╣реИрдВ, рдХрд╛рд░реНрдп A) I / O рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреБрдЫ рдСрдкрд░реЗрд╢рди рдХрд░рддрд╛ рд╣реИ (рдФрд░, рдЗрд╕рд▓рд┐рдП, рдХреЛрдИ рдЧрдгрдирд╛ рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ), рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред"рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░" рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпреЗ рдЬрд╛рд╡рд╛, рдХреЛрдЯрд▓рд┐рди, рд╕реНрдХрд╛рд▓рд╛, рдХреНрд▓реЛрдЬрд░, рд╕рд╛рде рд╣реА рдЧреЛрд▓рд╛рдВрдЧ, рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рд╣реИрдВред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЦрд┐рдВрдЪрд╛рд╡ рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рджрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдореЗрдВ рдХрдо рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рддрддреНрд╡, рд╕рдЯреАрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рднрд╛рд╖рд╛рдПрдВ рдЕрдЪреНрдЫреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
import Foundation import Dispatch func getRequestTask(url: String, dispatchGroup: DispatchGroup) { dispatchGroup.enter() let request = URLRequest(url: URL(string: url)!) let task = URLSession(configuration: URLSessionConfiguration.default).dataTask( with: request, completionHandler: { (data, response, error) in if let data = data { if let dataAsString = String(data: data, encoding: .utf8) { print(dataAsString) dispatchGroup.leave() return } } print("Something terrible has happened!") dispatchGroup.leave() } ) task.resume() } let requestDispatchGroup = DispatchGroup() for url in [ "https://jsonplaceholder.typicode.com/posts", "https://jsonplaceholder.typicode.com/comments", "https://jsonplaceholder.typicode.com/albums" ] { getRequestTask(url: url, dispatchGroup: requestDispatchGroup) } requestDispatchGroup.wait()
рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рдпрдерди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдКрдкрд░ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдЕрдм рд╡реНрдпрд╛рдкрд╛рд░ рдореЗрдВ - рд╕реНрд╡рд┐рдлреНрдЯредрд╕рд┐рд╕реНрдЯрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ - C, C ++, Rustред рд╡реЗ рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рд╕рд╣рд┐рдд рдЖрд╡реЗрджрди рдкрд░ рдЕрдзрд┐рдХрддрдо рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдпреЗ рднрд╛рд╖рд╛рдПрдВ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░, рдХрд╕реНрдЯрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╛рд▓реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИрдВред рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдПрдБ рдЕрднреА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрднрд╛рд╡рдирд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд░рд╣реЗрдЧреАред
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рднрд╛рд╖рд╛рдПрдВ рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдмреАрдЪ "рд╕рдВрдЪрд╛рд░" рдХрд╛ рдПрдХ рд╕рд╛рдзрди рд╣реИрдВред рдЗрд╕ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
module Main where import Control.Monad.IO.Class (liftIO) import Control.Monad.Trans.Resource (runResourceT) import Data.Conduit (($$+-), ($=+), runConduit) import Data.Conduit.List (mapM_, map, filter, catMaybes) import Data.Text (unpack) import Data.Maybe (fromJust) import Web.Twitter.Types (StreamingAPI(SStatus, SRetweetedStatus) , Status(Status), statusText, statusLang , RetweetedStatus(RetweetedStatus), rsRetweetedStatus ) import Web.Twitter.Conduit.Stream (stream)
рд╣рд╛рд╕реНрдХреЗрд▓ рдПрдХ рд╕рдЦреНрдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИред рд╡рд╣ рдЖрдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдкрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд░рдирдЯрд╛рдЗрдо - рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдПрдХ рднрд╛рд╖рд╛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрджрд╛ред рдкрд╛рдпрдерди, рдиреЛрдбрдЬ, рдкреАрдПрдЪрдкреА)? рдХреНрдпрд╛ рдПрдХ рдкреНрд░рдгрд╛рд▓реА-рдирд┐рд░реНрднрд░ рдмрд╛рдЗрдирд░реА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ (рдЬреИрд╕реЗ рд╕реНрд╡рд┐рдлреНрдЯ рдФрд░ рдЧреЛрд▓рд╛рдВрдЧ)? рдХреНрдпрд╛ рдЪрдпрдирд┐рдд рднрд╛рд╖рд╛ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреБрдЫ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (рдЬрд╛рд╡рд╛, рд╕реНрдХрд╛рд▓рд╛, рдХреНрд▓реЛрдЬрд░) рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рд╡реИрд╕реЗ, рдЙрддреНрдХреГрд╖реНрдЯрддрд╛ рдХреЗ рдорд╛рд░реНрдЧ рдкрд░, рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╢рд╛рд╕рди рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░ рдкреНрд▓рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп - рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХреНрд╕ рдХреА рдХрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЬреЗрдбреАрдмреАрд╕реА рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдорд╛рдирдХреАрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдорд░реНрдерди рдФрд░ рдЕрдкрд╛рдЪреЗ рдлрд╛рдЙрдВрдбреЗрд╢рди рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдЬреИрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╡рд╣реА рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рд╣реИ - рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕рдХреЗ рд╡реНрдпрд╛рдХрд░рдг, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдФрд░ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд╛рде рд╣рд╛рд╕реНрдХреЗрд▓ред рднрд╛рд╖рд╛ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рдореБрджрд╛рдп рдХрд╛ рдЖрдХрд╛рд░ рджреЛ рдФрд░ рддрд░реНрдХ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдореБрджрд╛рдп рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреА рдПрдореНрдмреБрд▓реЗрдВрд╕ рд╕рд╣рд╛рдпрддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмрдбрд╝рд╛ рд╕рдореБрджрд╛рдп рдФрд░ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛, рддреЗрдЬреА рд╕реЗ рдЖрдк рдПрдХ рдХрдард┐рди рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рд╕реЗ рд╕рд▓рд╛рд╣ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдореГрддрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдПрдХ рд░реВрдк рд╣реИред рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдирд╛рдордХ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╣рдЯрд╛рдХрд░ рд╕реНрдореГрддрд┐ рдХреЛ рдореБрдХреНрдд рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХреА рдЕрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдРрд╕рд╛ рдХрд░рддреА рд╣реИред
рдкрд╛рдпрдерди рдиреЗ рд╕реНрдЯреЙрдк-рдж-рд╡рд░реНрд▓реНрдб рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ, рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред "рд╕рдлрд╛рдИ" рдХреЗ рджреМрд░рд╛рди 3 рдЕрд▓рдЧ-рдЕрд▓рдЧ "рдкреАрдврд╝рд┐рдпреЛрдВ" рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ - "рдХрдЪрд░реЗ рдХреЗ рдвреЗрд░" рдХрд╛ рдПрдХ рд╕реЗрдЯред рд╢реВрдиреНрдп рдореЗрдВ "рд╕рдмрд╕реЗ рддрд╛рдЬрд╝реА" рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдлрд┐рд░ рдкреАрдврд╝рд┐рдпреЛрдВ 1 рдФрд░ 2 рдХрд╛ рдкрд╛рд▓рди рд╣реЛрддрд╛ рд╣реИред
import gc import ctypes gc.set_debug(gc.DEBUG_SAVEALL) class PyObject(ctypes.Structure): _fields_ = [("refcnt", ctypes.c_long)] object1 = {} object2 = {} object3 = {} object1['reference_to_2'] = object2 object2['reference_to_1'] = object1 object3['some_key'] = 1 object1_memory_address = id(object1) object2_memory_address = id(object2) object3_memory_address = id(object3) print "Before garbage collection --->" print "Refcount for object1: {count}".format( count=PyObject.from_address(object1_memory_address).refcnt ) print "Refcount for object2: {count}".format( count=PyObject.from_address(object2_memory_address).refcnt ) print "Refcount for object3: {count}".format( count=PyObject.from_address(object3_memory_address).refcnt ) del object1, object2, object3 gc.collect() print "After garbage collection --->" print "Refcount for object1: {count}".format( count=PyObject.from_address(object1_memory_address).refcnt ) print "Refcount for object2: {count}".format( count=PyObject.from_address(object2_memory_address).refcnt ) print "Refcount for object3: {count}".format( count=PyObject.from_address(object3_memory_address).refcnt ) print "Objects that cannot be cleaned up by reference counting: --->" for x in gc.garbage: print x
рдкрд╛рдпрдерди рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдКрдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЗ рдкрд░рд┐рдгрд╛рдоPHP (рд╕рдВрд╕реНрдХрд░рдг PHP5.3 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ) рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдХреА рдЬрд╛рддреА рд╣реИред рд╕рдмрдЧреНрд░рд╛рдл рдЬреЛ рд░реВрдЯ рд╕реЗ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрд╡рд┐рдлреНрдЯ рднреА рд╕рдВрджрд░реНрдн рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХрдЪрд░рд╛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рддрд░реАрдХреЗ рдирд╣реАрдВ рд╣реИрдВред рдорд╛рдорд▓реЗ рдХреЛ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ "рдордЬрдмреВрдд" рдХрд╛рдЙрдВрдЯрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ 0 рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рдФрд░ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рд╕рд╣рд╕рдВрдмрджреНрдз рд╣реИ)ред
class Person { let name: String init(name: String) { self.name = name } var apartment: Apartment? deinit { print("\(name) is being deinitialized") } } class Apartment { let unit: String init(unit: String) { self.unit = unit } weak var tenant: Person? deinit { print("Apartment \(unit) is being deinitialized") }

рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рддрдВрддреНрд░ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд╡реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЖрд╡реЗрджрди рдпрд╛ рдХрд╛рдо рдХреЗ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ
рдкреИрдХреЗрдЬ рдмрдирд╛рдирд╛ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛рд╕реНрдЯреЛрд░рд┐рдВрдЧ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде "рдЕрд╕реЗрдВрдмрд▓реА" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ (рдкреИрдХреЗрдЬ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ, рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд┐) рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВред
рдкрд╛рдпрдерди
рдЯреЗрдВрдбреЗрдо рдореЗрдВ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░рддрд╛ рд╣реИред
рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдФрд░
setup.py рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдлрд╝рд╛рдЗрд▓ , рд╣рд╛рд╕реНрдХреЗрд▓ рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдХреИрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд╛рд╡рд╛ рдореЗрдВ
рдорд╛рд╡реЗрди рдФрд░
рдЧреНрд░реИрдбрд▓ рд╣реИ , рд╕реНрдХрд╛рд▓рд╛
рдПрд╕рдмреАрдЯреА рдХреЗ рдХрд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, PHP
рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, NodeJS -
рдПрдирдкреАрдПрдо , рдЖрджрд┐ред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ - рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред PHP рдХреЗ рд▓рд┐рдП Phpbrew, рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП pyenv, рдФрд░ NodeJS рдХреЗ рд▓рд┐рдП nvm рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВред
рдкрд╛рдЗрдиреЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рдпрдерди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреВрд╕рд░реЛрдВ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдЪ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд╛рдпрдерди рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╛рдЗрдерди рдХреЗ рд▓рд┐рдП
virtualenv / venv , PHP рдХреЗ рд▓рд┐рдП
virtphp рдФрд░ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдП
Cabal Sandboxes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯрдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛ рдХреЗ I / O рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИред рдЙрд╕реА рд╕рдордп, рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдФрд░ рд╕реНрдЯреИрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

const https = require("https"); const urlList = [ "https://reqres.in/api/users?page=1", "https://reqres.in/api/users?page=2", "https://reqres.in/api/users?page=3" ]; function getSiteContents(url) { return new Promise(function (resolve, reject) { https.get(url, function (res) { var bodyData = ""; res.on("data", function (chunk) { bodyData += chunk; }); res.on("end", function () { resolve(bodyData); }); res.on("error", function (error) { reject(error.message); }); }); }); }
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ "рдмрддрд╛рдиреЗ" рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖрдЬ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВ:
рдорд╛рдирдЪрд┐рддреНрд░ ,
рдлрд╝рд┐рд▓реНрдЯрд░ ,
рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд░рдирд╛ , рдЖрджрд┐ред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдиреАрдЪреЗ рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдРрд╕реА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
<?php
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдкрд╣рд▓рд╛ рдЪрд░рдг рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЦреЛрдЬ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк "рд╡рд╛рдИ рдПрдХреНрд╕ рдореЗрдВ рдЬрд╛рдиреЗрдВ рдПрдХреНрд╕" рдЬреИрд╕реЗ рд▓реЗрдЦреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрдИ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг
рдХреЗ рд▓рд┐рдП GoLang рдФрд░
GoLang рдХрд╛ рдПрдХ рджреМрд░рд╛ (GoLang рдХреЗ рд▓рд┐рдП),
NodeSchool рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЕрднреНрдпрд╛рд╕ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, рдЕрд░реНрдерд╛рддреН NodeJS),
рд╕реНрдХрд╛рд▓рд╛ рдПрдХреНрд╕рд░рд╕рд╛рдЗрдЬ (рд╕реНрдХрд╛рд▓рд╛ рдХреЗ рд▓рд┐рдП,
рдкрд╛рдпрдерди рдХреЛрдиреНрд╕ (рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП), рдФрд░ рдЗрддрдиреЗ рдкрд░ред рдПрдиред
рдХреБрдЫ рдЬрдЯрд┐рд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЫреЛрдЯреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдирд╛ рдПрдХ рд╢реБрд░реБрдЖрддреА рдХреА рдЬрд░реВрд░рдд рд╣реИред рдРрд╕реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдХреЛрдб рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ 300-400 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдХрд┐рд╕реА рднреА рд╕рд╛рдорд╛рдиреНрдп рдЧрддрд┐ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╕рдордЭрдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
func containedClosureIncrementer() -> (() -> Int) { var anInt = 0 func incrementer() -> Int { anInt = anInt + 1 return anInt } return incrementer } func containedClosureIncrementer2() -> () -> Int { var anInt = 0 return { anInt = anInt + 1 return anInt } } let closureIncrementer = containedClosureIncrementer() print("containedClosureIncrementer call - should be 1: \(closureIncrementer() == 1)") print("containedClosureIncrementer call - should be 2: \(closureIncrementer() == 2)") var someOptionalValue: Optional<String> = nil; print("Optional - someOptionalValue is null: \(someOptionalValue == nil)") someOptionalValue = "real value" print("Optional - someOptionalValue is 'real value' \(someOptionalValue == "real value")") (["real value", nil] as Array<Optional<String>>).forEach({ someOptionalValue in if let someValue = someOptionalValue { if someValue.hasPrefix("real") { print("someValue: has real") } else { print("someValue: doesn't have real") } } else { print("someValue: has nil") } }) if (someOptionalValue ?? "").hasPrefix("real") { print("Has real 2") } else { print("Doesn't have real") } let numbersList: [Int] = Array(1...10) print("List of numbers 1 to 10: \(numbersList)") let numbersListTimes2 = numbersList.map({ (someNumber: Int) -> Int in let multiplicand = 2 return someNumber * multiplicand }) let numbersListTimes2V2 = numbersList.map({ number in number * 2 }) let numbersListTimes2V3 = numbersList.map { $0 * 2 } print("List of numbers * 2: \(numbersListTimes2)") print("V1, V2 Map operations do the same thing: \(numbersListTimes2 == numbersListTimes2V2)") print("V1, V3 Map operations do the same thing: \(numbersListTimes2 == numbersListTimes2V3)") func testGuard() { let someOptionalValue: Optional<String> = nil; guard let someOptionalValueUnwrapped = someOptionalValue else { print("testGuard: Thrown exception - nil value") return } print("testGuard: no exception - non-nil value: \(someOptionalValueUnwrapped)") } testGuard() class RuntimeError: Error {} [{throw RuntimeError()}, {1} as () throws -> Int].forEach { let returnValue = try? $0() if let returnValueUnwrapped = returnValue { print("List of closures: A normal value was returned \(returnValueUnwrapped)") } else { print("List of closures: An error was thrown") } }
рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдиреМрд╕рд┐рдЦрд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдХрд╛ рдХреЛрдб рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИрджреВрд╕рд░рд╛ рдЪрд░рдг рднрд╛рд╖рд╛ рдХрд╛ рдЧрд╣рди рдЕрдзреНрдпрдпрди рд╣реИ, рдПрдХ рдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдЬрд┐рд╕реЗ рдЕрдм "рдмрдЪреНрдЪреЛрдВ рдХрд╛" рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рд▓рд┐рдП
рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдбреЙрдХреНрд╕ , рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП
рд╕реНрд╡рд┐рдлреНрдЯ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХреНрд╕ , рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП
рдЬрд╛рд╡рд╛ рд▓рд░реНрдирд┐рдВрдЧ рдЯреНрд░реЗрд▓реНрд╕ ,
рдкрд╛рдпрдерди рдСрдлрд┐рд╢рд┐рдпрд▓ рдбреЙрдХреНрд╕ рдЯреА рд╣реИрдВред рдЕрдЪреНрдЫреЗ рд╢рд┐рдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдЕрдиреНрдп рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд╛рдпрдХ
рднреА рд╣реИред
рдПрдиреЛрдЯреЗрдЯреЗрдб jQuery рд╕реНрд░реЛрдд рдпрд╛
рдПрдиреЛрдЯреЗрдЯреЗрдб рдмреИрдХрдмреЛрдирдЬреЗрдПрд╕ рд╕реНрд░реЛрдд рдЬреИрд╕реЗ рд╕рдВрд╕рд╛рдзрди рдпрд╣ рдЕрдиреБрдорд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреЗрд╢реЗрд╡рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдЖрдкрдХреА рдЦреБрдж рдХреА рдЧрдВрднреАрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдоред рдЬрдм рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреВрд▓ рдФрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рддреЛ рдмрд╛рд╣рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛, рд╣рдореЗрд╢рд╛ рдирд╡реАрдирддрдо рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕реАрдЦрдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рдЕрдирдВрдд рд╣реИрдВ, рдЖрдк рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ, рдЖрдк рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╢реБрд░реБрдЖрддреА рд╕реЗ рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдмрди рдЧрдП рд╣реИрдВ - рдФрд░ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдмрд╕ рдХреЛрдИ рдмреЗрд╣рддрд░ рднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: