Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

Использование Out   Найти похожие ветки 

 
REA   (2004-12-24 16:20) [0]

А кто использует ключевые слова вроде Out, нетипированные параметры и прочую экзотику в программах?


 
Sandman25 ©   (2004-12-24 16:22) [1]

out замедляет работу по сравнению с var


 
Nikolay M. ©   (2004-12-24 16:23) [2]

Вот один товарищ по экзотике есть, можешь у него спросить...
http://delphimaster.net/view/14-1103881947/


 
y-soft ©   (2004-12-24 16:52) [3]

Ну, я использую в некоторых случаях и out, и нетипированные параметры, и еще много чего, но экзотикой это не считаю... :)

Наоборот - хорошо, что язык предоставляет такое многообразие средств...

>Nikolay M. ©   (24.12.04 16:23) [2]

И как-то странно, что в один рад с такими легальными средствами ставится изменение счетчика в теле цикла for...


 
asafr ©   (2004-12-24 16:53) [4]

Это и не экзотика вовсе... При работе с COM, например, этих OUT - ну просто завались.. Но это уже не экзотика, а суровая правда жизни от майкрософт...


 
DiamondShark ©   (2004-12-24 16:55) [5]


> Sandman25 ©   (24.12.04 16:22) [1]
> out замедляет работу по сравнению с var

???


 
Digitman ©   (2004-12-24 16:59) [6]


> REA   (24.12.04 16:20)  


я использую.
и достаточно часто.


> Sandman25 ©   (24.12.04 16:22) [1]


похоже, ты глупость сморозил.


 
Sandman25 ©   (2004-12-24 17:03) [7]

[5] DiamondShark ©   (24.12.04 16:55)

procedure BOut(out B: String);
begin
end;

procedure BVar(var B: String);
begin
end;

procedure TForm1.bt1Click(Sender: TObject);
var
 C: String;
begin
 BVar(C);
 BOut(C);
end;

Перед вызовом BOut(C) увидим Call @LStrClr
Delphi6


 
Digitman ©   (2004-12-24 17:07) [8]


> Sandman25


out отличается от var всего лишь разными "командами" компилятору

procedure BOut(out B: чего_то_там);
var
 s: чего_то_там;
begin
 s: = B; //низя ! параметр доступен только для записи
end;

procedure BVar(var B: чего_то_там);
var
 s: чего_то_там;
begin
 s: = B; //запросто ! параметр доступен и для записи и для чтения
end;


 
Nikolay M. ©   (2004-12-24 17:09) [9]


> y-soft ©   (24.12.04 16:52) [3]
> И как-то странно, что в один рад с такими легальными средствами
> ставится изменение счетчика в теле цикла for...

Чем это не

> прочая экзотика в программах

?


 
REA   (2004-12-24 17:11) [10]

Я это к тому, что вроде как оно нагляднее - не надо дополнительно писать, что из параметров на выходе.
(А еще было бы лучше, если бы к процедурам можно было приписать скрытые комментарии типа Hint, чтобы места не занимали, но код был документирован и генерировался CHM для разработчика).
Не знал, что такой вызов бывает медленее...


 
Sandman25 ©   (2004-12-24 17:12) [11]

[8] Digitman ©   (24.12.04 17:07)

И этим тоже, конечно. Рассматривался случай о получении значения через var, иначе нельзя сравнивать.


 
DiamondShark ©   (2004-12-24 17:12) [12]


> Sandman25 ©   (24.12.04 17:03) [7]

Угу.
А для BVar вызов @LStrClr увидим внутри процедуры.


 
REA   (2004-12-24 17:13) [13]

2Nikolay M: под экзотикой я понимал отклонения от синтаксиса Паскаля (ну не считая собственно классов, Property и т.п.)


 
Sandman25 ©   (2004-12-24 17:14) [14]

[12] DiamondShark ©   (24.12.04 17:12)

Нет, в BVar всего одна команда ret.
А вообще не поленись и посмотри код своими глазами.


 
y-soft ©   (2004-12-24 17:15) [15]

>Nikolay M. ©   (24.12.04 17:09) [9]

Экзотика, это те средства, которые законны, но по каким-то причинам применяются редко. Например, часто ли Вы употребляете при объявлении переменных Absolute?

Изменение же переменной счетчика цикла в теле цикла легальным (да и вообще допустимым) средством назвать нельзя, о чем в указанной Вами ветке было неоднократно сказано...


 
Sandman25 ©   (2004-12-24 17:19) [16]

[6] Digitman ©   (24.12.04 16:59)

Для out: Integer разницы действительно нет, но для типов с контролируемым временем жизни есть. Я всегда фичи на String проверяю на всякий случай.


 
DiamondShark ©   (2004-12-24 17:22) [17]


> Sandman25 ©   (24.12.04 17:14) [14]

Блин. Вот охота сферическими конями заниматься.
То замедление в 0.0000001% искать, то пустые процедуры пейсать.

Ведь в реальной процедуре наверняка внутри будет присваивание -- иначе нафига вообще var-параметр.


 
DiamondShark ©   (2004-12-24 17:24) [18]


> Например, часто ли Вы употребляете при объявлении переменных
> Absolute?

Часто. Очень полезно против конструкций типа

PByteArray(@Data)^[i]


 
Rule ©   (2004-12-24 17:27) [19]

DiamondShark ©   (24.12.04 17:24) [18]
ого, а это что за извращение, можно узнать назначение вот этого, что в результате намечалось получить ?


 
Sandman25 ©   (2004-12-24 17:27) [20]

[17] DiamondShark ©   (24.12.04 17:22)

Вызов остался. В следующий раз сначала проверяй свои слова сам.

procedure BOut(out B: String);
begin
 B := Chr(Ord("0") + Random(2));
end;

procedure BVar(var B: String);
begin
 B := Chr(Ord("0") + Random(2));
end;

procedure TForm1.bt1Click(Sender: TObject);
var
C: String;
begin
BVar(C);
ShowMessage(C);
BOut(C);
ShowMessage(C);
end;


 
y-soft ©   (2004-12-24 17:28) [21]

>DiamondShark ©   (24.12.04 17:24) [18]

Значит, для Вас это и не экзотика вовсе :)

Я тоже иногда так делаю...


 
Суслик ©   (2004-12-24 17:28) [22]


>  [20] Sandman25 ©   (24.12.04 17:27)


> Вызов остался. В следующий раз сначала проверяй свои слова
> сам.

Ты "удавись" забыл добавить - здесь это модно :)))


 
Sandman25 ©   (2004-12-24 17:30) [23]

[17] DiamondShark ©   (24.12.04 17:22)

Кстати, кроме LStrClr есть еще замедление:
в начале BVar 2 команды, в Bout целых 8


 
Sandman25 ©   (2004-12-24 17:31) [24]

[22] Суслик ©   (24.12.04 17:28)

Я стараюсь не писать собеседнику того, что он не писал мне.


 
Nikolay M. ©   (2004-12-24 17:32) [25]


> y-soft ©   (24.12.04 17:15) [15]
> Экзотика, это те средства, которые законны, но по каким-то
> причинам применяются редко.

Это есть непреложная истина в последней инстанции?


 
begin...end ©   (2004-12-24 17:32) [26]

> [19] Rule ©   (24.12.04 17:27)

Похоже на получение определённого байта переменной Data.


 
Суслик ©   (2004-12-24 17:33) [27]


>  [24] Sandman25 ©   (24.12.04 17:31)
>
> Я стараюсь не писать собеседнику того, что он не писал мне.


Тебя минуло предложение удавиться? Удивительно :)))


 
Sandman25 ©   (2004-12-24 17:35) [28]

[27] Суслик ©   (24.12.04 17:33)

Вообще-то неудивительно. Мы с DS немало спорили (не только на этом сайте), но никогда не доходило до грубости из-за тупости оппонента или его нежелания понимать собеседника... Пока не доходило :)


 
Danilka ©   (2004-12-24 17:38) [29]

[24] Sandman25 ©   (24.12.04 17:31)
> Я стараюсь не писать собеседнику того, что он не писал мне.

Хм, а разве в этом случае диалог возможен? :))


 
Rule ©   (2004-12-24 17:38) [30]

begin...end ©   (24.12.04 17:32) [26]

да оно то понятно, вопрос то в том как абсолют с этим связан и часто ли возникает потребность в вот таком выковыривании байтов ?


 
y-soft ©   (2004-12-24 17:39) [31]

>Nikolay M. ©   (24.12.04 17:32) [25]

Я ведь не гуру, чтобы изрекать непреложные истины, а всего лишь по воле судьбы скромный профессионал (в смысле: зарабатываю на жизнь исключительно программированием) :))

А по сути дела - что для одних экзотика, то для других норма...


 
Sandman25 ©   (2004-12-24 17:39) [32]

[29] Danilka ©   (24.12.04 17:38)

:) Особенно если буквы одинаковые использовать  :)


 
begin...end ©   (2004-12-24 17:40) [33]

> [30] Rule ©   (24.12.04 17:38)

http://delphimaster.net/view/14-1103881947/


 
Sandman25 ©   (2004-12-24 17:41) [34]

Лень смотреть в словаре, но, по-моему, экзотика - это нечто вроде раритета.
Для нас экзотическими фруктами являются африканские бананы и ананасы, для африканцев - яблоки и груши.


 
Digitman ©   (2004-12-24 17:41) [35]


> Sandman25 ©   (24.12.04 17:19) [16]
> Для out: Integer разницы действительно нет, но для типов
> с контролируемым временем жизни есть. Я всегда фичи на String
> проверяю на всякий случай.


out-то , кстати, и был введен Борландом в 1-ю очередь не из-за "капризов" OP RTL, где это самое "контролируемое время жизни" в полный рост может использоваться, а для обеспечения правильного и беспроблемного взаимодействия и совместимости со средами/языками, отличающимися от OP


 
y-soft ©   (2004-12-24 17:42) [36]

>Rule ©   (24.12.04 17:38) [30]

да оно то понятно, вопрос то в том как абсолют с этим связан и часто ли возникает потребность в вот таком выковыривании байтов ?

Это распространенная задача. Например, при парсинге динамических пакетов переменной структуры...


 
Sandman25 ©   (2004-12-24 17:42) [37]

[35] Digitman ©   (24.12.04 17:41)

Для совместимости с COM-параметрами, если я правильно помню.


 
DiamondShark ©   (2004-12-24 17:45) [38]


> Sandman25 ©   (24.12.04 17:30) [23]
> [17] DiamondShark ©   (24.12.04 17:22)
>
> Кстати, кроме LStrClr есть еще замедление:
> в начале BVar 2 команды, в Bout целых 8

Убедил.


 
Nikolay M. ©   (2004-12-24 17:47) [39]


> y-soft ©   (24.12.04 17:39) [31]

Именно. Все зависит лишь от точки зрения.
:)


 
Rule ©   (2004-12-24 17:51) [40]

begin...end ©   (24.12.04 17:40) [33]
спасибо, не про тот абсолют подумал :), если этот, то да ... :)
y-soft ©   (24.12.04 17:42) [36]
Это распространенная задача. Например, при парсинге динамических пакетов переменной структуры...

ну извините, не все с этим работают ... но мне понятно ... это ближе к нижнему уровню, давно с этим не работал, мы "всё выше и выше и выше" как в пестне ... а печально :(


 
DiamondShark ©   (2004-12-24 17:57) [41]


> Rule ©   (24.12.04 17:27) [19]
> DiamondShark ©   (24.12.04 17:24) [18]
> ого, а это что за извращение, можно узнать назначение вот
> этого, что в результате намечалось получить ?

Отчего же извращение?

Вот примерчик из жизни.
Есть некий девайс, который хочет обмениваться через порт такими пакетами:

type
 TPacket = packed record
   Signature: word;
   Size: word;
   case Command: byte of
   // Здесь разные наборы полей в зависимости от кода команды
   // а последний байт -- контрольная сумма
 end;

И процедура:

procedure CalcChecksum(var Data: TPacket);
var
 ByteData: TByteArray absolute Data;
 i: integer;
 b: byte;
begin
 b := 0;
 for i := 0 to Data.Size - 2 do b := b + ByteData[i];
 ByteData[Data.Size - 1] := b;
end;


 
Anatoly Podgoretsky ©   (2004-12-24 17:57) [42]

Так out для строк по смыслу требует обязательной инициализации, в отличии от var. И как раз указание out и предназначено на уменьшение ошибок в программе. var означает что переменная есть и она инициализирована, то есть и входно и выходной параметр одновременно и с ней не обязательно работать, а вот с out нет, это выходной параметр. Аналог var это inout

An out parameter, like a variable parameter, is passed by reference. With an out parameter, however, the initial value of the referenced variable is discarded by the routine it is passed to. The out parameter is for output only; that is, it tells the function or procedure where to store output, but doesn’t provide any input.


 
y-soft ©   (2004-12-24 17:58) [43]

>Rule ©   (24.12.04 17:51) [40]

При работе с потоками байтов иногда только так и приходится...
Иногда через указатель на массив байтов, иногда вообще инкрементируя по мере надобности указатель на байт...


 
Rule ©   (2004-12-24 18:04) [44]

DiamondShark ©   (24.12.04 17:57) [41]
понял понял, спасибо, в данном контексте, я просто не привык к программам на сравнительно низком уровне, написаных на паскале :), не много их :)


 
Rule ©   (2004-12-24 18:05) [45]

y-soft ©   (24.12.04 17:58) [43]
а ты уверен что только так ???
или может тебе это только кажется ...


 
begin...end ©   (2004-12-24 18:08) [46]

> [44] Rule ©   (24.12.04 18:04)

> понял понял

Нет уж, смотри дальше про "извращения":

http://delphimaster.net/view/14-1103881947/

:-)))


 
PVOzerski ©   (2004-12-24 18:11) [47]

Нетипизированные параметры использую очень часто. Также обожаю GetMem/FreeMem/ReallocMem - для виртовского паскаля это совершенная экзотика. Дело в том, что у меня много что написано на D3, где нет еще одной экзотики - динамических массивов - вот сам их делаю. А классы, да и объекты, - это тоже ведь экзотика  с такой точки зрения :^). Кстати, кто-нибудь помнит: есть ли в виртовском паскале приведение типов и адресный оператор?


 
y-soft ©   (2004-12-24 18:15) [48]

>Rule ©   (24.12.04 18:05) [45]

DiamondShark © привел пример очень простой структуры пакета, реально используются и гораздо более извращенные структуры с многоуровневыми вложенными блоками данных, которые невозможно описать целиком в виде packed record (сами используем такие).

К тому же при работе с коммуникационными каналами оптимизация кода по скорости обычно не бывает лишней, а низкоуровневая работа как раз скорость и обеспечивает...

В прочем, я не настаиваю на единственности такого подхода - возникнет задача, так решайте способом, который Вам кажется более правильным... :)


 
Rule ©   (2004-12-24 18:20) [49]

begin...end ©   (24.12.04 18:08) [46]
ну добил, стучу три раза по мату :)))

зачем же так издеваться :))))

y-soft ©   (24.12.04 18:15) [48]
В прочем, я не настаиваю на единственности такого подхода - возникнет задача, так решайте способом, который Вам кажется более правильным... :)


абсолютно согласен, главное - лишь бы на пользу :)))

я надеюсь
так решайте способом
не лично ко мне, а то во первых "навыканья" не заслужил ни по возрасту не по соц.статусу, а во-вторых вроде бы это не прилично в сети "выкать"
так что если ко мне, то прошу лучше на "ты" ... а то неудобно както


 
y-soft ©   (2004-12-24 18:26) [50]

>Rule ©   (24.12.04 18:20) [49]

не лично ко мне, а то во первых "навыканья" не заслужил ни по возрасту не по соц.статусу, а во-вторых вроде бы это не прилично в сети "выкать"

А я вот как раз по возрасту и воспитанию не привык к "тыканью".

А насчет якобы неприличности "выканья" в сети - вопрос весьма спорный... IMHO вежливость (без расшаркивания) всегда прилична...


 
Rule ©   (2004-12-24 18:32) [51]

y-soft ©   (24.12.04 18:26) [50]
ну тут можно спорить ...

во первых когда общаешься в сети, то очень часто приходиться общаться на разных языках, а вот известно что во многих языках, в частности английском нет даже такого понятия, поэтому для так сказать "совместмости" принято "ты"

во-вторых в сети очень трудно определить что говорить "ты" или "вы", так как в реале это очень размыто, то в сети - это вообще воздушный вопрос

в-третих уважение,помоему, проявляется в содеражании написанного, а не в способе обращения ..., ИМХО конечно ...

и ещё одним оправданием "тыкания" может служить тот факт, что в сети все равны (исключаю деловую переписку и спец. ситуации конечно) ...

все конечно "ИМХО", но  как бывший фидошник и радиолюбитель (кстати в эфире такие же правила :) ) смею утверждать всё вышенаписаноое :)))


 
y-soft ©   (2004-12-24 18:38) [52]

>Rule ©   (24.12.04 18:32) [51]

Правильно упоминаете английский язык. Тем более, что правила "нетикета" первоначально на этом языке и были написаны.

Только вот местоимение "You" означает в переводе "Вы", а метоимение "Thou" ("Ты") употребляется исключительно при обращении к Богу и в поэзии...


 
Rule ©   (2004-12-24 18:46) [53]

y-soft ©   (24.12.04 18:38) [52]
мне право неудобно, когда вы мне на "вы" называете :))))))

уж не заслужил, ей богу, и очень неудобно, а вот общаться с собеседником так, чтоб ему было неудобно - это, согласитесь, неэтично, как минимум ...

Только вот местоимение "You" означает в переводе "Вы", а метоимение "Thou" ("Ты") употребляется исключительно при обращении к Богу и в поэзии...
ого, я так глубоко не вникал, сильно забурился в технический и американский (в процессе общения) английский и забыл об английской классике :)))....
спасибо за инфо, буду знать


 
Verg ©   (2004-12-24 18:47) [54]


> [47] PVOzerski ©   (24.12.04 18:11)


На сколько память не изменяет есть (был), только он возвращает строго типизированный указатель.

Приведение типа разрешено во многих канонических языках, но я считаю, что применять это бездумно - чревато прежде всего для себя же. Вырабатывается привычка, которая приводит уже на "автопилоте" к вообще-то некорректным действиям, на что потом (в очередной ситуации) начнает "отваливаться челюсь" и кажется, что мир перевернулся.
А все потому, что "если работает - значит правильно" - в корне неверное, даже вредное утверждение.
Например, это преславутое приведение поинтера к интегеру или чего-нибудь к boolean, или получение младших/старших байтов слова подразумевая единственное (как им кажется) устройство endian - это вообще полная за...ца, хотя люди этим пользуются меного раз и беззаботно... до поры, до времени...
После того, как обстоятельства повозят "мордой об асфальт", вырабатывается жесткий эммунитет от всяго рода сомнительных "операций над"....


 
y-soft ©   (2004-12-24 18:48) [55]

>Rule ©   (24.12.04 18:46) [53]

В любом случае прошу мое старческое "Выканье" ни в коем случае не воспринимать в качестве попытки оскорбления :)


 
Rule ©   (2004-12-24 18:49) [56]

y-soft ©   (24.12.04 18:38) [52]
обратная логика, тоесть Бога на ты, а всех остальных на вы ?, очень интересно и кстати может не в тему, но интересный факт, может просветите,
заметил что даже аттеисты пишут слово "Бог" с большой буквы, слышал теорию что с маленькой буквы - это будет противоположно значение этого слова, тоест  дьявол, а почему ?


 
y-soft ©   (2004-12-24 18:52) [57]

Rule ©   (24.12.04 18:49) [56]

Ну, это тема для отдельной ветки. В прочем, исторических корней, почему именно так, я не знаю (наверное, по причине атеизма:) )


 
Rule ©   (2004-12-24 18:52) [58]

y-soft ©   (24.12.04 18:48) [55]
тогда как вым/тебе будет лучше, чтоб я обращался к вам/тебе, на "ты" или на "вы" ?

а оскарбленным от того что меня на "вы" не чувствую, только если бы меня назвал бы 10 летний мальчик на "вы", то ничего, а когда человек постарше и помудрее, то чувствую себя очень неуютно и автоматически переходишь на "ВЫ", так как чувствуешь себя невеждой ... а вроде всё по общепринятым правилам (это так, полет мысли :))


 
Rule ©   (2004-12-24 18:53) [59]

y-soft ©   (24.12.04 18:52) [57]
пока модераторы спят, можно и сдеся :)))
(шутка),
а если они это читают, то прошу их искринне нас извинить за разведенный оффтоп ...


 
y-soft ©   (2004-12-24 18:54) [60]

>Rule ©   (24.12.04 18:52) [58]

Это, млинн, наш полуазиатский менталитет сказывается :)


 
Rule ©   (2004-12-24 19:00) [61]

y-soft ©   (24.12.04 18:54) [60]
эт точно :))))

ЗЫ: а по поводу первой части вороса ?


 
y-soft ©   (2004-12-24 19:15) [62]

По первой части в общем-то без большой разницы.
Лишь бы не в оскорбительном контексте :)


 
тварь   (2004-12-24 19:20) [63]

о даже аттеисты пишут слово "Бог" с большой буквы
Это как имя. Почему атеисты пишут "Велес" или "Один" с большой буквы? Это имена.


 
DiamondShark ©   (2004-12-24 19:30) [64]


> PVOzerski ©   (24.12.04 18:11) [47]
> Кстати, кто-нибудь
> помнит: есть ли в виртовском паскале приведение типов и
> адресный оператор?

Именно в виртовском не было ни того, ни другого.
Более того, сам Вирт сильно сокрушался по поводу того, что в язык, таки, попало средство, допускающее приведение типов, а именно -- записи с вариантами, позволяющие трактовать физическое представление одного типа как значение другого типа.
В Обероне он убрал из языка вариантные записи.

Зато в авторской версии Паскаля были другие интересные кострукции.
Например, параметры-процедуры:


procedure TabulateFunc(function F(X: integer): real);
var
 x: integer;
begin
 for x := 0 to 100 do
   writeln("x=", x, " f(x)=", F(x));
end;

function MyFunc(X: integer): real;
begin
 MyFunc := sin(x) * cos(x) / sqrt(x);
end;
...
begin
 TabulateFunc(MyFunc);
 ...

Или расширение процедуры New для вариантных записей:


type
 TData = record
   Field: TType;
   case Selector: integer of
     0: (...);
     1: (...);
     2: (...)
 end;
 PData = ^TData;
...
var
 P: PData;
begin
 New(P, 1); { выделяем память для варианта 1 }
 ...


 
PVOzerski ©   (2004-12-24 19:35) [65]

С параметрами-функциями я встречался в Think Pascal для Mac. Кстати, не понимаю, что мешало Борланду оставить эту конструкцию, как альтернативу процедурным переменным. Еще убирание get/put понять могу (это увеличило эффективность работы с файловыми переменными, пожалуй), а вот это - не понимаю.


 
DiamondShark ©   (2004-12-24 19:43) [66]


> PVOzerski ©   (24.12.04 19:35) [65]

Видимо, посчитали излишеством.
Да и процедурные типы всё-таки, красивше смотрятся.

Вирт сам к этому пришёл: в Обероне есть тип POINTER TO PROCEDURE(...), причём, он включает и аналог борландовского procedure(...)  of object.



Страницы: 1 2 вся ветка

Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.65 MB
Время: 0.037 c
6-1097940975
Луарвик
2004-10-16 19:36
2005.01.16
idTCPClient: отсылка запроса через проксю?


1-1104353001
SilverDragon
2004-12-29 23:43
2005.01.16
Работа с динамическими обьектами


1-1104141949
Vyacheslav
2004-12-27 13:05
2005.01.16
Как определить тип операционной системы ???


1-1104314237
denis24
2004-12-29 12:57
2005.01.16
Поток и переменная


4-1101439026
Ozone
2004-11-26 06:17
2005.01.16
Консольное приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский