Ñ Java íà Swift
Êîìàíäà ðàçðàáîò÷èêîâ èç Apple ïåðåïèñàëà ñ íóëÿ ñèñòåìó ìîíèòîðèíãà ïàðîëåé ïîëüçîâàòåëåé, èñïîëüçóþùóþ òåõíîëîãèè Java, íà ÿçûêå ïðîãðàììèðîâàíèÿ Swift, ïèøåò DevClass.
Ñèñòåìà ìîíèòîðèíãà ïàðîëåé Apple îòâå÷àåò çà ðàáîòó îäíîèìåííîé ôóíêöèè ïðèëîæåíèÿ – ìåíåäæåðà ïàðîëåé «Ïàðîëè» (Passwords), äîñòóïíîãî ïîëüçîâàòåëÿì óñòðîéñòâ êîìïàíèè, ðàáîòàþùèõ ïîä óïðàâëåíèåì iOS 18. Îíà ïðèìåíÿåòñÿ äëÿ ñîïîñòàâëåíèÿ ïàðîëåé, ñîõðàíåííûõ ïîëüçîâàòåëåì â ïðèëîæåíèè, ñî ñïèñêîì íàéäåííûõ êîäîâûõ ôðàç, êîòîðûå òåì èëè èíûì îáðàçîì óòåêëè â Ñåòü.
Ñåðâåðíàÿ ÷àñòü ïðèëîæåíèÿ ïîëó÷àåò «ìèëëèàðäû çàïðîñîâ â äåíü îò óñòðîéñòâ ïî âñåìó ìèðó», îòìå÷àþò ðàçðàáîò÷èêè. Ñåðâèñ ðàáîòàåò ïîä óïðàâëåíèåì Linux è ïîñòîÿííî âûïîëíÿåò ìíîæåñòâî ðåñóðñîåìêèõ îïåðàöèé, òàêèõ êàê øèôðîâàíèå.
Ðàçðàáîò÷èêè ñ÷èòàþò, ÷òî ïîäõîä ê óïðàâëåíèþ ïàìÿòüþ, ðåàëèçîâàííûé â Java, áîëåå íå ñîîòâåòñòâóåò «ðàñòóùèì òðåáîâàíèÿì» è «öåëåâûì ïîêàçàòåëÿì ýôôåêòèâíîñòè», ïðåäúÿâëÿåìûì ê ðàçðàáàòûâàåìîìó èìè ÏÎ. Ïåðåâîä äàííîãî êîíêðåòíîé ñèñòåìû íà Swift, ïî îöåíêå ðàçðàáîò÷èêîâ, ïîçâîëèë äîáèòüñÿ 50-ïðîöåíòíîé ýêîíîìèè âû÷èñëèòåëüíûõ ðåñóðñîâ, ñíèæåíèÿ ïîòðåáëåíèÿ ïàìÿòè íà 90% è 40-ïðîöåíòíîãî ïîâûøåíèÿ ïðîïóñêíîé ñïîñîáíîñòè.
Îñíîâíûå ïðîáëåìû
Îñíîâíûå ïðåòåíçèè ðàçðàáîò÷èêîâ Apple àäðåñîâàíû ñáîðùèêó ìóñîðà Java. Ñáîðùèê ìóñîðà – ÷àñòü ñèñòåìû óïðàâëåíèÿ ïàìÿòüþ, êîòîðàÿ àâòîìàòè÷åñêè îñâîáîæäàåò ó÷àñòêè ïàìÿòè îò áîëåå íåíóæíîé èíôîðìàöèè. Íåñìîòðÿ íà âñå óëó÷øåíèÿ, êîòîðûå áûëè ïðèâíåñåíû â ñáîðùèê, åãî ïðîèçâîäèòåëüíîñòü, ïî ìíåíèþ èíæåíåðîâ Apple, âñå åùå ñòðàäàåò îò íåêîòîðûõ èçúÿíîâ.  ÷àñòíîñòè, îí ïðèîñòàíàâëèâàåò ñâîþ ðàáîòó ïîä áîëüøîé íàãðóçêîé è ïîòðåáëÿåò «ëèøíèå» ðåñóðñû.
Äðóãîé ïðîáëåìà áûëà ñâÿçàíà ñ ìàñøòàáèðîâàíèåì èíôðàñòðóêòóðû. Íàãðóçêà íà ñåðâèñ Apple ñóùåñòâåííî ìåíÿåòñÿ â òå÷åíèå äíÿ, è êîìïàíèÿ âûíóæäåíà ïîñòîÿííî ìàñøòàáèðîâàòü âû÷èñëèòåëüíûå ðåñóðñû, èñïîëüçóåìûå áýêåíäîì äëÿ îáðàáîòêè çàïðîñîâ. Ïðè ðàçâåðòûâàíèè äîïîëíèòåëüíîé èíôðàñòðóêòóðû áîëüøå çíà÷åíèå èìååò ñêîðîñòü èíèöèàëèçàöèè íîâîé ñðåäû.  ýòîì ïëàíå ÿçûêè âðîäå Java ìîãóò ïðîÿâëÿòü ñåáÿ íå ëó÷øèì îáðàçîì, è äëÿ ðåøåíèÿ ïðîáëåìû çàäåðæåê ðàçðàáàòûâàþòñÿ äîïîëíèòåëüíûå èíñòðóìåíòû, òàêèå êàê SnapStart îò AWS.
Âûáîð ïàë íà Swift
Ðàññìîòðåâ ðàçëè÷íûå àëüòåðíàòèâû, êîìàíäà ðàçðàáîò÷èêîâ Apple ïðèíÿëà ðåøåíèå ïåðåïèñàòü ñåðâèñ íà ÿçûêå ïðîãðàììèðîâàíèÿ Swift, êîòîðûé â êîìïàíèè ñ÷èòàþò áîëåå ñîâðåìåííîé àëüòåðíàòèâîé Objective-C. Êðîìå òîãî, äëÿ óïðîùåíèÿ ðàçðàáîòêè èñïîëüçîâàëñÿ ôðåéìâîðê ñ îòêðûòûì èñõîäíûì êîäîì Vapor, òàêæå íàïèñàííûé íà Swift.
Êàê è Java, Swift ïðåäëàãàåò àâòîìàòè÷åñêîå óïðàâëåíèå ïàìÿòüþ, îäíàêî â îòëè÷èå îò äåòèùà Sun Microsystems, â íåì äàííûé ìåõàíèçì ðåàëèçîâàí ñ èñïîëüçîâàíèåì àëãîðèòìà àâòîìàòè÷åñêîãî ïîäñ÷åòà ññûëîê (Automatic Reference Count; ARC), îòìå÷àåò DevClass. Îáà ìåòîäà èìåþò ñâîè ïðåèìóùåñòâà è íåäîñòàòêè, â êîíêðåòíîì ñëó÷àå ñ ñåðâèñîì Apple ïåðåõîä íà ïîñëåäíèé ïðèíåñ îùóòèìûé âûèãðûø. Ðàçðàáîò÷èêè îòìå÷àþò ñíèæåíèÿ îáúåìà ïîòðåáëÿåìîé ïàìÿòè íà 90%, à òàêæå äâóêðàòíîå ñîêðàùåíèå êîëè÷åñòâà ïîòðåáëÿåìûõ àïïàðàòíûõ ðåñóðñîâ ñåðâèñîì, èñïîëüçóþùèì Kubernetes, ñèñòåìû óïðàâëåíèÿ êëàñòåðîì êîíòåéíåðîâ.
Ïåðåïèñàííîå âåá-ïðèëîæåíèå ïîëó÷èëîñü ãîðàçäî áîëåå êîìïàêòíûì è ñ òî÷êè çðåíèÿ îáúåìà ïðîãðàììíîãî êîäà. Ðàçðàáîò÷èêè óòâåðæäàþò, ÷òî íîâûé ïîðò ñîäåðæèò íà 85% ìåíüøå ñòðîê êîäà ïî ñðàâíåíèþ ñ ðåàëèçàöèåé íà Java. Êàê îòìå÷àåò DevClass, âîçìîæíî, èìåííî ýòîò ôàêòîð â áîëåå çíà÷èòåëüíîé ñòåïåíè ïîâëèÿë íà êîíå÷íûé ðåçóëüòàò.
Êîìàíäà ðàçðàáîò÷èêîâ îïðåäåëèëà àñïåêòû Swift, êîòîðûå ïðèâåëè ê ïîëó÷åíèþ áîëåå ÷èñòîãî è ëàêîíè÷íîãî êîäà, âêëþ÷àÿ èñïîëüçîâàíèå ïðîòîêîëîâ (èíòåðôåéñîâ) âìåñòî ìåõàíèçìà íàñëåäîâàíèÿ êëàññîâ; êîíñòðóêöèé async/await, îáåñïå÷èâàþùèõ ñòðóêòóðèðîâàííûé ïàðàëëåëèçì.
Ïåðåõîä íà Swift èëè áîëåå êà÷åñòâåííûé êîä?
Êàê îòìå÷àåò DevClass, âåðîÿòíî, äîáèòüñÿ îïòèìèçàöèè ñåðâèñà ðàçðàáîò÷èêàì Apple óäàëîñü íå òîëüêî çà ñ÷åò ïåðåíîñà ñîñòàâëÿþùåãî åãî êîäà íà Swift, íî è áëàãîäàðÿ áîëåå âûñîêîìó êà÷åñòâó íîâîãî êîäà â ñðàâíåíèè ñî ñòàðûì.
Ïðîãðàììà íà Swift êîìïèëèðóåòñÿ â íàòèâíûé êîä – íàáîð ìàøèííûõ èíñòðóêöèé, êîòîðûå âûïîëíÿþòñÿ íåïîñðåäñòâåííî ïðîöåññîðîì óñòðîéñòâà.
 ñâîþ î÷åðåäü ñðåäà âûïîëíåíèÿ Java (JRE) ðàñïîëàãàåò âèðòóàëüíîé ìàøèíîé Java (JVM), êîòîðàÿ «íà ëåòó» ïðåîáðàçóåò áàéò-êîä (ïðîìåæóòî÷íîå – ìåæäó èñõîäíûì è ìàøèííûì êîäîì – ïðåäñòàâëåíèå ïðîãðàììû). Áàéò-êîä ïîëó÷àþò ïðè ïîìîùè êîìïèëÿòîðà Javac.
Ïðè èñïîëüçîâàíèè òàêîãî ìåõàíèçìà íåèçáåæíî âîçíèêàþò íàêëàäíûå ðàñõîäû ðåñóðñîâ, íåãàòèâíî ñêàçûâàþùèåñÿ íà ïðîèçâîäèòåëüíîñòè èòîãîâîãî ïðèëîæåíèÿ. Äðóãèìè ñëîâàìè, âî ìíîãèõ ñëó÷àÿõ ïðîèçâîäèòåëüíîñòü íàòèâíîãî êîäà, âåðîÿòíî, áóäåò áîëåå âûñîêîé ïî ñðàâíåíèþ ñ òàêîâîé áàéò-êîäà. Îäíàêî Java îáåñïå÷èâàåò ëó÷øóþ ïåðåíîñèìîñòü – íàïèñàííîå íà ýòîì ÿçûêå ïðîãðàììèðîâàíèÿ ïðèëîæåíèå â îáùåì ñëó÷àå áûñòðåå è ïðîùå ïîðòèðîâàòü íà ìíîæåñòâî ðàçëè÷íûõ ïðîãðàììíî-àïïàðàòíûõ ïëàòôîðì.
Âñå åùå íå ñëèøêîì ïîïóëÿðíûé ÿçûê
 Apple íàìåêàþò, ÷òî ê Swift êîìàíäà ðàçðàáîò÷èêîâ ïðèøëà íå ñðàçó è ðàññìàòðèâàëà àëüòåðíàòèâû, íî â êîíöå êîíöîâ âñå æå ðåøèëà îñòàíîâèòüñÿ èìåííî íà íåì. Ïðèíèìàòüñÿ âî âíèìàíèå ïðè ýòîì ìîãëè íå òîëüêî îáúåêòèâíûå ïðåèìóùåñòâà ÿçûêà, íî è äðóãèå ôàêòîðû. Swift – ñîáñòâåííàÿ ðàçðàáîòêà Apple, êîòîðóþ êîìïàíèÿ àêòèâíî ïðîäâèãàåò, ïîýòîìó íåëüçÿ èñêëþ÷àòü, ÷òî íà ðåøåíèå êîìàíäû â êàêîé-òî ìåðå ïîâëèÿëî è ýòî îáñòîÿòåëüñòâî. Êàê îòìå÷àåò DevClass, äîáèòüñÿ ñðàâíèìîãî óðîâíÿ îïòèìèçàöèè, ñêîðåå âñåãî, óäàëîñü áû è ñ ïîìîùüþ ÿçûêîâ ïðîãðàììèðîâàíèÿ Go èëè Kotlin.
Ñîãëàñíî ðåçóëüòàòàì îïðîñà, ïðîâåäåííîãî êîìïàíèåé JetBrains â ðàìêàõ ïîäãîòîâêè îò÷åòà State of Developer Ecosystem 2023, ïîïóëÿðíîñòü ÿçûêà ïðîãðàììèðîâàíèÿ Objective-C, êîòîðûé èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ïðîãðàìì ïîä îïåðàöèîííûå ñèñòåìû Apple iOS è macOS, äîñòèãëà ðåêîðäíî íèçêîãî óðîâíÿ.  òî æå âðåìÿ áûë çàôèêñèðîâàí ðîñò èíòåðåñà ê Swift.
Ïî äàííûì ðåéòèíãà TIOBE, â ìàå 2025 ã. Swift çàíèìàë 23 ìåñòî ñðåäè âñåõ ÿçûêîâ ïðîãðàììèðîâàíèÿ ïî óðîâíþ ïîïóëÿðíîñòè ñ ðåéòèíãîì 0,77%. Àíàëîãè÷íûé ðåéòèíã, ê ïðèìåðó, èìåëè Ruby, Prolog è Lisp. Âûøåóïîìÿíóòûé Kotlin îêàçàëñÿ íà 25 ïîçèöèè. Java ïî-ïðåæíåìó îñòàåòñÿ èç ñàìûõ âîñòðåáîâàííûõ ÿçûêîâ è íàäåæíî çàêðåïèëàñü íà ÷åòâåðòîì ìåñòå ðåéòèíãà TIOBE, îïåðåäèâ C#, JavaScript è Go. Âûøå Java ðàñïîëîæèëèñü C, C++ è Python.



