OSDev

для всех
Текущее время: 01 июл 2025, 11:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 285 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 29  След.
Автор Сообщение
СообщениеДобавлено: 16 дек 2014, 19:33 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 976
Откуда: Дагоба
эмбрион писал(а):
На эталон я не претендовал. Но язык мне нравится. Особенно важно - на нём я делю НА МНОГО меньше ошибок. И именно благодаря небольшому набору жёстко соблюдаемых правил.

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

эмбрион писал(а):
А если мне вдруг понадобится выход на мегаэффективность - я просто вызову из Java ассемблерную функцию (но при этом потеряю переносимость на другие платформы).

Так ведь мы обсуждаем, как сделать эффективный ЯВУ, а не как писать ассемблерные функции.

эмбрион писал(а):
Ограничения обходят построением слегка модифицированных алгоритмов. Это просто, стоит только попробовать.

Да мы уже видим ваши предложения. Поверьте, постоянно писать "слегка модифицированные алгоритмы" применительно к большим массивам, а потом наслаждаться в РАЗЫ (если не в десятки раз) упавшей скоростью - сомнительное удовольствие, которое может позволить себе только человек, настолько фанатично преданный джаве, что его позицию не поколеблют никакие разумные аргументы.

эмбрион писал(а):
Но почему возникла Java ? Потому что в С все видят кучу недостатков...

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

эмбрион писал(а):
А это ведёт к удешевлению процесса разработки. А это в свою очередь ведёт к отмиранию С и превращению его в нишевый язык вроде ассемблера.

Что-то этот труп живее всех живых. И не надо ставить знак равенства между С и ассемблером, это неправда.

эмбрион писал(а):
Наоборот, мне бы хотелось понять, в чём заключается то лучшее, чего нет в Java. Но приводимые примеры, вращающиеся вокруг скобок и суффиксов меня как-то не убеждают в преимуществах нового.

Так это ВЫ не видите ничего кроме скобок и суффиксов.

эмбрион писал(а):
Yoda писал(а):
Попахивающим учОным требуются языки, которые позволяли бы работать с гигантскими массивами данных без ничем не оправданной потери эффективности на совершенно чуждое архитектуре процессора ограничение в 2Гб на массив и постоянно-периодический сбор мусора.

Здесь вы путаете ограничение процессора с ограничением психологии человека. Вам просто неохота думать про разделение массива на Х частей.

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

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

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

эмбрион писал(а):
И да, мусор можно собирать по умному, то есть программист может вспомнить о такой необходимости и озаботиться минимизацией выделения памяти. Например - можно просто использовать один и тот же массив для работы с разными порциями данных. Это на столько очевидно, что я удивлён, почему вы всё ещё настаиваете на "дикости" недостатков, связанных со сбором мусора.

Сборщик мусора будет активироваться независимо от того, насколько оптимально вы использовали массивы, и будет трясти ваши объекты, даже если трясти там почти нечего. Это настолько очевидно, что я удивлён, почему вы настаиваете на преимуществах сбора мусора в плане скорости работы.

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

Вот опять вы влезли со своей джавой даже несмотря на то, что в джаве этого нет!

эмбрион писал(а):
Хочу. Но есть важный момент - я, как полный баран в математике, буду задавать кучу глупых вопросов, а вы в ответ заявите - ну вот видите, ещё один Java-писатель нифига не может.

Ну так поверьте тогда как дилетант профессионалу, что ваша джава в сфере высокопроизводительных вычислений не способна вызвать ничего кроме улыбки, а в отдельных случаях (когда её с фантастической настойчивостью проталкивают в качестве панацеи) - сильного раздражения!

Эмбрион, я вам вторично разъясняю: эта тема не является спором любителей C против джавы. Здесь никто из участников (кроме вас) не пишет: "язык XXX лучше всех!" Здесь обсуждают разные языковые концепции применительно к идее создания нового языка. Поэтому прекратите проталкивать сюда (да и в другие темы тоже) джаву всеми доступными способами, - это оффтоп. Хотите участвовать в обсуждении - обсуждайте конкретные языковые концепции.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 19:41 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1449
Yoda писал(а):
pavia писал(а):
Размер умножать на число мягко говоря не кашерно. На самом деле требуется, видимо вы забыли математику.

Прикольно - обвинять математика в том, что он забыл математику :mrgreen:.
pavia, математики с размерами чисел обычно не работают. Они или считают размер бесконечным или берут логарифм от числа.


Причём логарифм от бесконечного числа тоже будет бесконечным :) Так что, сколько математикам ресурсов не дай, они всё сожрут :)

Цитата:
pavia писал(а):
Расширяемость до добра не доводит. Всё равно завтра изобретут новый процессоры с новой архитектурой и будем менять стандарты.

Если бы стандарты не менялись, мы бы жили в каменном веке.


Представил себе ГОСТ на "Топор каменный обоюдоострый" :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 19:46 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1449
Yoda писал(а):
эмбрион писал(а):
На эталон я не претендовал. Но язык мне нравится. Особенно важно - на нём я делю НА МНОГО меньше ошибок. И именно благодаря небольшому набору жёстко соблюдаемых правил.

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


Ага, Ада рулит! :)) Кстати, я на ассемблере делаю меньше ошибок, чем на Це/Це++. Ну, может, по абсолютному количеству ошибок и больше, но вот по времени их поиска точно -- по той простой причине, что на ассемблере ошибки примитивны, как и сам язык (чуть ли не важнейшая лично у меня -- неправильное имя регистра тип R8 вместо R9 -- когда палец мажет мимо нужной цифры). Ну а жабу я видал в гробу и в белых тапках -- хотя б потому, что мне надо писать под голое железо, причём низкопроизводительное.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 20:22 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
эмбрион писал(а):
Хочу.

Пожалуйста, подключайтесь к этой теме. И все желающие тоже.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 20:38 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
pavia писал(а):
А кто-то говорил об обратном страниц эдак 10 назад.

Возможно. Я уже предупреждал, что в этой теме БУДУ противоречить сам себе и, возможно, даже чаще, чем хотел сам. Концепции же нет, нет основы, на которой можно было бы прочно стоять. Мне даже приходится иногда перечитывать тему и даже свои посты, чтобы не запутаться.


pavia писал(а):
Надо четко провести грань от чего мы абстрагируемся, а что специфичное.

Мы абстрагируемся от машинных команд, делая одинаковый интерфейс для числовых операторов, но в голове должны держать чёткую мысль о том, что некоторые типы данных (int8 -- int64) ложатся на регистры процессора, а некоторые уже нет (int128), поэтому что-то будет сильно тормозить, а что-то не сильно. Хотя операторы для работы с этими типами должны быть идентичными по интерфейсу.


pavia писал(а):
Zealint писал(а):
Косяк в такой логике в другом: непонятно как перемножать переменный с разной точностью. Например целое число с бесконечной точностью помножить на один байт (тут преобразование типа не требуется).

Размер умножать на число мягко говоря не кашерно. На самом деле требуется, видимо вы забыли математику. Так как операции определены в классе чисел. А между классами их не определяют дабы не плодить сущьностей. Конечно есть исключения.

Ой, ну ладно прикалываться : ) Понятно же, что я имел в виду? Есть тип данных "длинное число", а есть короткое, например, размером в 1 байт. Нужно длинное умножить на короткое. Это делается совершенно другим алгоритмом, чем выполняется умножение длинного на длинное. Если мы сначала приведём короткое число к длинному типу, то эффективность вычисления их произведения сильно заметно упадёт.

Цитата:
Тут надо понять какие классы чисел у нас будут а какие не нужны. И стоит ли закладывать расширяемость.

Всему своё время. Да, расширяемость нужна. А то будет как в C, сначала short, int, long, потом long long, а что потом? long long long? Названия тоже нужно продумать, кстати. Например, IntegerXX, где XX - это число бит (8, 16, ..., 128 и т. д., если понадобится).

Цитата:
Расширяемость до добра не доводит. Всё равно завтра изобретут новый процессоры с новой архитектурой и будем менять стандарты. Как в свое время было с DirectX при появление видео картами с шейдерами.

Нужно делать расширяемым то, что либо изменится не завтра, либо это изменение не испортит ничего.

Цитата:
Ну не бесконечной, а переменной длины или фиксированной. Не вижу тут особых правил.

Разумеется, не с бесконечной, это просто так принято говорить. Здесь имеется в виду, что алгоритм манипуляции с такими числами не зависит от их длины и (в теории) работает с любой наперёд заданной длиной числа, потому тип и называется бесконечным. Все остальные названия не отражают того факта, что нас не волнует длина числа. А на практике да, обычно чисел размером больше 100 Мб не встречается, чуть меньше да, было дело, сражался я с ними, ох была битва : )

Цитата:
Лично мне свистопляска с приведением типов надоела. И хочется простого.
Вижу как бы 2 группы классов чисел
фиксированной длины, переменной длины.
Из фиксированных выделить int64, float64 - 64 в виду современности. - основной базовый тип.

Да, я что-то такое сейчас держу в голове, но выскажусь позже.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 22:14 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Yoda писал(а):
Скорость в данном случае - вообще не аргумент. Если вы заказали результат типа double, значит вам НУЖЕН результат с такой точностью. Если нужна скорость, приводите результат умножения перед присвоением к типу float.

Тогда уж пусть сразу тип переменных неявно меняется на double, раз уж на то пошло. В вопросе повышения точности вычисления нужно идти до конца.
Yoda писал(а):
В схеме, предложенной мной, ничего не конфликтует и всё логично.

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


Последний раз редактировалось Himik 16 дек 2014, 22:21, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 22:15 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
Yoda писал(а):
Который байт? По-моему, сейчас всё в порядке.

Result.h имеет размер 40 бит?
Yoda писал(а):
Так я и говорю, - вопрос решается отказом от отступов в пользу ограничителей ({}, begin/end или любые другие формы). Это убирает и неоднозначность, и необходимость накладывать какие-либо формальные запреты на табуляции и их трактовку.

Но оставляет проблему tab-hell (так я буду её называть), когда открываешь чужой код, а там... приходится бежать за тазиком, чтобы на пол не вырвало.
Yoda писал(а):
То есть, приходим к выводу, что определённые преобразования типов, которые можно считать условно-безопасными, можно (а с моей точки зрения даже желательно) производить молча, без явного приведения и без замечаний компилятора. Важно только определить класс таких преобразований.

Да. Только слово "условно" тут лишнее.
Yoda писал(а):
Да ну, бросьте. Это лишь частный пример, - функций могут быть десятки, даже сотни, вы же не будете их все переопределять только ради того, чтобы избежать постоянного использования вполне безопасного преобразования типа. И данный случай - очень хороший пример такого применения.

Тут два варианта: либо преобразование типов действительно безопасно, либо, создавая новый тип, мы пишет ещё 100 функций его безопасного преобразования куда нужно. Небезопасное приведение (то, которое может привести к неожидаемой образованным программистом потере точности), нужно исключить из языка.
Yoda писал(а):
Ага, значит мы должны согласиться с тем, что иногда должны производиться молча даже небезопасные приведения типов.

Нет, такое преобразование не будет небезопасным, программист знает заранее, что будет обрублено, а что нет.
Yoda писал(а):
Да, я полагаю, что у меня есть удачное решение данной проблемы. Компилятор всегда должен производить результат удвоенной разрядности по всем операциям кроме деления и молча отбрасывать лишние разряды при условии, что целевая разрядность не меньше, чем максимальная разрядность исходных операндов. Поясню на примере.
d = a*(b*c);
Если d - 64-битный, a, b, c - 32-битные, то результат умножения (b*c) будет 64 битным.
Если d - 32-битный, то результат (b*c) - 32-битный.
Если d - 16-битный, то результат (b*c) будет 16-битным (причём, для эффективности лучше умножать только младшие части b и c), но с выводом замечания.
Если d - 32-битный, b и c - 32-битные, a - 64-битное, то результат (b*c) - 32-битный, но с выводом замечания по второй операции т.к. размер операнда a больше размера d.
Собственно, при таком подходе скобки и явные расширяющие приведения типов становятся просто не нужны, т.к. такая логика одновременно гарантирует и корректность результата и эффективность выполнения.

Хорошо, я подумаю над этим. Точно ли, что компилятор всегда сможет определить размер промежуточных результатов правильно?
Yoda писал(а):
Нет, исследований у меня нет. Но есть некоторые обоснования.
Начнём с того, что системы счисления непосредственно в коде программы, отличные от десятичной, требуются в основном для системных целей. Математикам они не требуются или требуются только при вводе/выводе.
Далее, восьмеричная система счисления на самом деле имеет чисто исторические корни, …

Ах, вот откуда ноги растут? Интересно.
Yoda писал(а):
отсутствие в С/С++ двоичных констант - такая же ошибка, как и введение восьмеричных.

Согласен.
Yoda писал(а):
Красота здесь, вероятно, не главное, более важна понятность. Возьмём три записи: 0badh, bad'h и badh. Только первая запись, очевидно, является числом. Второй вариант уже вызывает серьёзный когнитивный диссонанс, а третий вообще неотличим от идентификатора никакими разумными правилами.

Да я, в общем-то, согласен. Просто жалко. Представьте, таблицу из 16-теричных чисел, которую хочется выровнять и сделать красивой, чтобы столбцы ровными были, и придётся каждое из чисел начинать с 0 или с пробела. Либо будет лишний 0 где-то, либо «рваная» граница столбца из-за пробелов.
Yoda писал(а):
Я так понял из ваших примеров, что break вы хотите распространить и на оператор if, верно? Ваш первый пример не имеет циклов. Если так, то я категорически против, это только запутает логику, уж лучше пользоваться оператором goto. Оператор break должен выходить только из циклов.

Иногда хочется выйти из блока кода, который не в цикле, собственно, я и привёл такой пример, в котором программист вынужден делать фальшивый цикл (do..while (false)) ради такой возможности. Делать это с помощью goto плохо, это требует создавать метку после блока. Данная метка кажется явно лишней.
Yoda писал(а):
Далее. Я согласен, что должен быть механизм задания уровня, однако мне не очень понятно, как его сопрячь с моим механизмом.
...
Необходимо продумать, как в синтаксисе совместить опциональное задание уровня вложенности с опциональным же условием.

Ну, если синтаксис break с условием уже устоялся, тогда лучше именовать циклы.
Код:
first : for ( ) {
  second : for ( ) {
    break [first] ( условие );
  }
}

Чем это отличается от goto? Наличием условия и тем, что метка находится перед циклом, можно давать осмысленные имена циклам, не нужно делать метку за циклом, и вообще посимпатичнее.

Квадратные скобки в break как бы намекают на свою необязательность и не конфликтуют не с чем другим, если Вы в своём синтаксисе используете их примерно так же, как они сейчас используются в C++. Я надеюсь, Вам не пришло в голову, например, передавать параметры в функцию через квадратные скобки, как это пришло в голову Стивену Вольфраму?

Тот факт, что квадратные скобки идут именно перед круглыми избавляет сразу от двух неудобств, которые возникнут, если поместить их позади. Во-первых, нам важнее, откуда мы выходим и почему, а не почему и откуда. Во-вторых, квадратные скобки после круглых иногда используются в C++, если функция возвращает массив или указатель. Это плохо, но это можно, а значит уже как бы провоцирует.

Или же такой вариант (метка же не может быть числом, значит неоднозначности нет, выходим из глубины 2)
Код:
for ( ) {
  for ( ) {
    break [2] ( условие );
  }
}

Yoda писал(а):

- Размер результата взятия остатка от деления равен размеру делимого.

Почему? Остаток же не превосходит частного. Кстати, остаток от деления «математический» или «программистский»?
Yoda писал(а):

- Размер результата возведения в степень равен 128 бит независимо от размеров операндов.

Хм... 2^1000 не будет считать? Язык должен поддерживать бесконечный целый тип, и если результат влезет только в него, то его-то и нужно использовать. Кстати, у Вас будет оператор возведения в степень? Это как бы не совсем отражает архитектуру и неочевиден вопрос его эффективной реализации. Есть много вариантов: Вы который предпочитаете?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 23:06 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
[ 13 ] :: Числовые типы данных

Целые числа

Должны быть типы данных, отражающие размерность регистров ЭВМ. Int8, int16, int32, int64. Со знаком и без него. Как мы их будем называть – это сейчас не важно. Эти типы данных реализуются аппаратно.

Должны быть типы данных, которые имеют больший размер. Int128, int256 и некоторые другие (пояснения ниже). Эти типы реализованы программно.

Важно! Интерфейс всех этих типов должен быть одинаковым. То есть искусственный тип int128 не должен чем-то отличаться по интерфейсу от естественного типа int64. Должен быть стандарт, который разрешает программисту выдумывать любой новый тип данных, например, int72, но с тем условием, что программист не может придумать для него тех операций, которые не предусмотрены в стандарте. Зачем это нужно? Для возможностей грамотного изменения компилятора под платформу.

Представьте, что появился регистр размером 128 бит (ну мало ли). Тогда тип int128 из искусственного должен перекочевать в естественный для нашего языка, но при этом абсолютно все программы, которые можно написать с его участием, будут компилироваться правильно. Если бы мы разрешили добавлять в тип int128 какие-то особые функции, которых нет во встроенном типе int64 и более мелких, мы потеряли бы совместимость при таком переходе. Для программиста типы int128, int256 и другие подобные должны выглядеть так, как будто они родные. Разумеется, он будет знать, что они более медленные.

Таким образом, все типы данных intXX подчинены единому стандарту. Если пользователю нужен, например, особый тип int32 «с блэкджеком», то пусть делает его сам и называет иначе.

До каких пор нам нужны типы int128, int256, int512... ? Здесь нет общего мнения. Теоретически, нужно оставить возможность увеличивать их до бесконечности. Просто зарезервировать ключевое слово intXXXXX под типы данных для всех случаев, когда XXXXX кратно 8.

Дело вот всё в чём. Есть у нас GMP и MPIR - самая лучшая на сегодня длинная арифметика. Но когда мы заведомо знаем, что наши числа не превосходят 1024 бита, то искусственно созданный тип такого размера будет выигрывать по скорости и по памяти у GMP. Если нам нужно 2048 и больше, то здесь выигрыш уже будет менее существенным, и игра не стоит свеч. Число 1024 я тут взял навскидку, можно провести исследование и отыскать эту «золотую середину», но сейчас это не нужно. Общая мысль такая: нужно отыскать баланс по эффективности и создать достаточно целых типов данных, чтобы обеспечить программиста эффективным инструментом. В моей практике приходилось работать с int512 и по эффективности рвать GMP на части благодаря этому.

Должен быть тип int, который объемлет в себе все остальные типы и имеет бесконечную разрядность (mpz_t в GMP).

Числа с плавающей точкой

Здесь нужно придерживаться имеющихся стандартов и возможностей ЭВМ. То есть создать типы real32, real64, real80 и пока успокоиться на этом, зарезервировав все подобные названия типов на будущее.

Должен быть тип real, который объемлет все плавающие типы и имеет бесконечную точность.

Если с этими двумя типами всё более-менее ясно, то с двумя другими уже сложнее. Делать ли их частью встроенных типов или реализовать отдельной библиотекой?

Рациональные числа

Должен быть тип rational, который содержит числитель и знаменатель типа int. То есть дробь с бесконечной точностью.

Нужен ли быть, например, тип rational32, числитель и знаменатель которого будет int32? Это вопрос интересный. Дело в том, что иногда возникает необходимость в таких типах, когда мы знаем, что результат будет довольно безобидным. Но проблема в том, что промежуточные данные (как для числителя, так и для знаменателя), особенно после многократного сложения/вычитания дробей, могут уйти далеко за пределы int32, что совершенно неочевидно предсказывается.

Комплексные числа

Аналогично рациональным. Это может быть немного печально, но придётся для них сделать суффикс i. Будем писать 2+3i.

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

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

[ Продолжение следует ]


Последний раз редактировалось Zealint 18 дек 2014, 18:34, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 23:12 
Аватара пользователя

Зарегистрирован: 17 фев 2013, 16:13
Сообщения: 163
SII писал(а):
Цитата:
Они или считают размер бесконечным или берут логарифм от числа.

Причём логарифм от бесконечного числа тоже будет бесконечным :) Так что, сколько математикам ресурсов не дай, они всё сожрут :)

Здесь имеется в виду, что если взять логарифм от числа, то мы получим оценку на его размер. Если размера мы не знаем (или он нас не волнует), то считаем, что он бесконечный, хотя на деле это, конечно, не так. Да, чистые математики действительно всё сожрут. Сколько раз я слышал от таких: "какой изврат, тебе трудно было задать матрицу миллион на миллион?" : )


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 16 дек 2014, 23:15 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Комплексные значит взяли. А как же кватернионы, матрицы, тензоры и тп?

Цитата:
Должен быть тип real, который объемлет все плавающие типы и имеет бесконечную точность.
А как вы себе это представляете? Ведь деление таких чисел бесконечный процесс?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 285 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13 ... 29  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB