Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14

Новое направление в программировании - "Кортежно-ориентированное программирование"

25.12.2021, 16:06. Показов 6237. Ответов 72
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Эта тема предназначена для обсуждения предполагаемого будущего программирования. Приглашаю Shamil1 и Элд Хасп присоединиться.
Я уже когда-то упоминал о новой парадигме "кортежно-ориентированного программирования" (КорОП, неформально "коробка", англ. TuOP). Теперь я хочу развить эту теорию. Вот основные тезисы КорОП:
1. Как можно понять из названия, основной элемент новой парадигмы - кортеж (англ. tuple). Он записывается так:
Code
1
(Type1, Type2, ..., TypeN) tuple = (value1, value2, ..., valueN);
Вся соль кортежа - в том, что и последовательность типов, и последовательность значений записываются именно в круглых, а не в каких-либо других скобках. Этот тип скобок - самый удобный вследствие естественных причин (почему-то он является основным в большинстве естественных письменных языков и в математике, значит, наверное же он удобнее?). И компилятор должен уметь отличать последовательность типов от последовательности значений. А еще бывает, что один идентификатор является одновременно и типом, и значением...
2. Также кортежно-ориентированный язык должен реализовывать сингулярный кортеж - последовательность значений одного типа, например, вместо (int, int, int, int, int) можно написать int[5]. В отличие от списка, длину сингулярного кортежа нельзя изменить. Сингулярный кортеж - это не массив и не список. Более того, одна часть кортежа может быть мультиплексной, а другая - сингулярной:
Code
1
(bool, int[3], real) tuple = (false, 5, 10, 15, 2.71828);
Сингулярный кортеж может иметь в том числе и достаточно большую длину, например, int[1000000].
3. Список записывается так же, как кортеж (я имею в виду значения). Компилятор должен уметь различать их по типу переменной. В случае использования var или в другой ситуации, когда тип переменной не различает список и кортеж, последовательность считается кортежом. При этом должны быть преобразования из кортежа в список и обратно (а вообще оптимально будет, если преобразование из сингулярного кортежа в список этого же или неявно-совместимого типа будет неявным) (а при преобразовании списка в кортеж несоответствующие элементы автоматически добавляются или удаляются). Также не ключевым, но желательным элементом КорОП являются автоматические преобразования из списка в список в случае, если возможно преобразование каждого элемента этого списка в нужный тип (опять же, оптимальный вариант - неявное преобразование list() int в list() real или аналогичных случаев).
4. И наоборот предыдущему пункту, в кортеже должно быть возможно получить элемент по индексу так же, как в списке. Если индекс является константным, тип получаемого элемента должен автоматически определяться компилятором, иначе элемент имеет тип, являющийся необходимым и достаточным для совместимости с типами всех элементов кортежа.
5. КорОП считает, что объекты - это... ну, не то чтобы зло, но чем их меньше - тем лучше. Оптимально - три: кортеж, список и словарь. Ну, иногда можно добавить еще три: множество, дерево и список бит. И уже совсем редко - еще шесть: стек, очередь, связной список, отсортированный словарь, отсортированное множество и бинарное дерево. Все остальные объекты - ненужный мусор, многократная уборка которого заставляет программу виснуть. Вместо пользовательских объектов рекомендуется использовать другие конструкции: структуры и рекурсивные типы, да и то только тогда, когда вложенность типов становится уже трудночитаемой, например, как в следующем коде:
Code
1
[(Stack[BlockType, string, int], string), [string, ()(()(bool, ()(string, ()(string, ()string)), Stack[BlockType, string, int], string), Stack[BlockType, string, int], ()(string, ()(string, ()string)), FunctionAttributes, ()(Stack[BlockType, string, int], string, ()(string, ()(string, ()string)), ParameterAttributes, string))]] variable = ...;
Этот код можно упростить так:
Code
1
2
3
4
5
6
7
8
typename Block = (BlockType, string, int);
typename ExtraTypes = ()(string, ExtraTypes);
typename TemplateParameters = ()(bool, ExtraTypes, Stack[Block], string);
typename MethodParameter = (Stack[Block], string, ExtraTypes, ParameterAttributes, string);
typename MethodParameters = ()MethodParameter;
typename MethodOverloads = ()(TemplateParameters, Stack[Block], ExtraTypes, FunctionAttributes, MethodParameters);
typename TypeMethods = [string, MethodOverloads];
[(Stack[Block], string), TypeMethods] variable = ...;
Вместо одной строки длиной 345 символов получилось восемь строк суммарной длиной 513 символов, но зато насколько улучшилась читаемость! Конечно, она и во втором примере не идеальна, но я сомневаюсь, что ее можно еще больше улучшить.
(Дисклеймер: прошу не требовать от меня реальных примеров применения этого кода. Я сам ума не приложу, для чего он может применяться. Это просто демонстрация правильного использования КорОП.)
6. А вот массивы в КорОП - это уже настоящее зло! Такое же, как и goto. В кортежно-ориентированном языке их не должно быть в принципе. Кортежно-ориентированный язык должен быть ультра-высокоуровневым, а массивы - слишком низкоуровневая конструкция для того, чтобы применяться в ультра-высокоуровневых языках. Список содержит все те возможности, которые содержит массив, и некоторые из тех, которые у массива отсутствуют. И отказаться от массива как раз легче, чем отказаться от goto, так как в случае с ним как раз наоборот - goto содержит много возможностей, которые иначе можно реализовать только через сложные костыли или вообще нельзя (например, переход к произвольному месту другой функции). И ничего, как-то же отказались от него настолько, что у многих неиспользование goto стало догмой, переступание через которую приводит к расстрелу без суда и следствия... (Если честно, я считаю, что такое отношение - это уже перебор. Я против вообще любой догматичной веры, и считаю, что категорически запрещено только убивать, воровать и пропагандировать коммунизм или фашизм, а все остальное, в том числе и goto, если в этом есть необходимость в данной ситуации, можно и применять.)
Вот таблица основных способов организации последовательности значений в зависимости от уровня языка:
Класс языков (экземпляр этого класса)Конструкции
Низкоуровневые (Assembler)Только указатель
Среднего уровня (C++)Указатель и массив
Высокоуровневые (Java)Массив и список
Ультра-высокоуровневые (C# .NStar)Список и кортеж
(Примечание: в C++ хоть и присутствует список, но я не знаю, чтобы он часто использовался. Возможно, у меня просто мало опыта по этому языку. С учетом того, что основные для меня средства программирования - это C# и Blueprints.)
7. В КорОП-языке обязательна возможность группового присваивания - присваивания кортежу, сформированному "на лету" из несвязанных переменных, другого такого же, причем в правом кортеже могут смешиваться несвязанные переменные и произвольные выражения, в том числе и с использованием старых значений переменных из левого кортежа. Например, вот так:
Code
1
2
3
(a, b) = (b, a); //Обмен значениями
(x, y, z, t) = (y, t, y - x, (x + z) * (t - y));
(a1, a2, a3) = (a2, a3, a2 + a3); //Фибоначчи
8. Если в ООП всё - объект, то в КорОП далеко не всё - кортеж. Например, строка - это не кортеж. (Хотя список символов - можно сказать, что кортеж.) Делегат - это тоже не кортеж. И стек, очередь, словарь и прочие - не кортежи. Хотя абсолютное большинство того, что раньше было классами - кортежи.
Всё вышенаписанное - вымышлено, все совпадения с реальными событиями случайны. Я не призываю что-либо свергать или обрушивать. Но считаю, что КорОП - следующий этап после ООП. Кто хочет, может высказываться против.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.12.2021, 16:06
Ответы с готовыми решениями:

Какое направление в программировании выбрать?
Посоветуйте пожалуйста, какое направление в программировании будет актуальным на сегодняшний день? Вроде самые популярные JS, C, Python,...

Направление в программировании нетребовательные к глубокому знанию математики
Имеются базовые знания математики. Школьные по сути, 11 классов и всё. Какие направления в программировании не будут требовать знаний в...

Какое нынче самое сложное и мозголомное направление в программировании?
Какое нынче самое сложное и мозголомное направление в программировании?

72
фрилансер
 Аватар для Алексей1153
6502 / 5740 / 1134
Регистрация: 11.10.2019
Сообщений: 15,382
27.12.2021, 11:51
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
способные сразу отпугнуть новичка
а для чего привлекать новичка ? Это же не игра. Если он такой пуганый - пусть идёт в майнкрафты играть

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Помню себя в детстве, как тема с названием "Массивы" казалась мне чем-то запредельным, и я ее просто... пролистывал.
а я помню, когда наткнулся на описание массивов, наоборот радостно подпрыгнул - ведь до этого мне чего-то не хватало, а я не мог понять, чего именно
1
Эксперт .NET
 Аватар для Usaga
14768 / 9542 / 1365
Регистрация: 21.01.2016
Сообщений: 35,984
27.12.2021, 14:03
Цитата Сообщение от Алексей1153 Посмотреть сообщение
я помню, когда наткнулся на описание массивов, наоборот радостно подпрыгнул - ведь до этого мне чего-то не хватало, а я не мог понять, чего именно
Я тоже такое помню) Пытался игрушку делать и категорически не хватало какой-то штуки, чтобы можно был хранить последовательность безымянных однотипных структур (для юнитов). Массив оказался настоящим открытием. Я помню как тогда сделал О_о.
0
 Аватар для zorggish
94 / 92 / 18
Регистрация: 10.03.2017
Сообщений: 306
27.12.2021, 14:49
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Новое направление в программировании
Не такое уж и новое

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
в C++ хоть и присутствует список, но я не знаю, чтобы он часто использовался
C++ это язык, применяющийся в совершенно разных областях. Если важен каждый байт памяти, то используются массивы, во всех остальных случаях используют вектор.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
"массив" и "вектор" - слова, способные сразу отпугнуть новичка
Что вообще может делать в программировании человек, которого способны отпугнуть достаточно простые термины? "Кортежно-ориентированная парадигма", "групповое присваивание", "сингулярный кортеж" - звучит куда сложнее.

Цитата Сообщение от Usaga Посмотреть сообщение
Массив оказался настоящим открытием
Точно такая же была ситуация Эх, ностальгия...

Добавлено через 19 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это язык функционального программирования? Нет, моя идеология для всех, а не для фриков...
В Boeing 747 и 777 используется Allegro NFS Server (сервер, использующий протокол сетевого доступа к файловым системам, NFS), написанный на Common Lisp. Продолжая тему авиации: Boeing и Airbus используют Piano — пакет программ на Common Lisp для разработки и анализа конструкции воздушного судна.
...
Ещё одно применение в области транспорта — Лондонское метро, которое использует ПО от португальской компании Siscog, в которой основной язык разработки — Common Lisp. Компания разрабатывает системы поддержки принятия решений для планирования, распределения и управления ресурсами при транспортировке.
Полнейшие фрики, маргиналы. Создателю таких "шедевров" как LineEdge и C# .NStar, конечно, виднее.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
27.12.2021, 15:13
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Разница: в кортеже доступ к элементу по целочисленному индексу (числовая адресацию), а в структуре - доступ по имени (символьная адресация). Не знаю, есть ли аналог структур из С++ в Пайтоне?
В питоне есть namedtuple - кортеж с именованными элементами. Доступ осуществляется примерно как в структурах. Но они тоже неизменяемые, как обычные кортежи https://docs.python.org/3/libr... namedtuple
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
27.12.2021, 16:05  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Пытался игрушку делать и категорически не хватало какой-то штуки, чтобы можно был хранить последовательность безымянных однотипных структур (для юнитов). Массив оказался настоящим открытием. Я помню как тогда сделал О_о.
Как интересно получается. Меня поливаете грязью за обучение методом тыка, а сами когда-то делали так же?
Цитата Сообщение от zorggish Посмотреть сообщение
Не такое уж и новое
Где можно увидеть год выпуска той статьи? Может, это кто-то по вашей рекомендации написал пару часов назад...
Цитата Сообщение от zorggish Посмотреть сообщение
Полнейшие фрики, маргиналы.
И смех, и грех...

Добавлено через 6 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Где можно увидеть год выпуска той статьи?
Открыл еще раз - оказывается, в самом низу написано - январь 2011 года. У меня еще того старого ноутбука не было... А статья была. Да, много в мире неоцененных творений, возможно, среди них есть и шедевры, о которых никто не знает...
0
 Аватар для zorggish
94 / 92 / 18
Регистрация: 10.03.2017
Сообщений: 306
27.12.2021, 16:16
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
И смех, и грех...
Серьёзно, вы лучше создателей реально используемых программ для разработки самолётов знаете, какой язык им использовать?
Или вы считаете что разработчики таких сложных вещей - фрики?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Да, много в мире неоцененных творений
Тут работает система естественного отбора - то что удобно и практично использовать, остаётся и развивается, то что неудобно и непрактично - отмирает или не получает развития.
Там есть ещё похожие статьи - Table Oriented Programming, CollectionOrientedProgramming...
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
27.12.2021, 16:22  [ТС]
Цитата Сообщение от zorggish Посмотреть сообщение
Серьёзно, вы лучше создателей реально используемых программ для разработки самолётов знаете, какой язык им использовать?
Или вы считаете что разработчики таких сложных вещей - фрики?
Ответить нечего.
Цитата Сообщение от zorggish Посмотреть сообщение
Тут работает система естественного отбора - то что удобно и практично использовать, остаётся и развивается, то что неудобно и непрактично - отмирает или не получает развития.
Есть творения, которые удобно и практично использовать, но они отмирают из-за недостатка маркетинга...
0
Эксперт .NET
 Аватар для Usaga
14768 / 9542 / 1365
Регистрация: 21.01.2016
Сообщений: 35,984
27.12.2021, 16:35
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Как интересно получается. Меня поливаете грязью за обучение методом тыка, а сами когда-то делали так же?
Я не мнил себя умнее всех и не начинал переизобреть всё, до чего мог дотянуться. Я продолжал учиться. Между нами огромная разница.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
27.12.2021, 22:28
Читать долго, спрошу прямо. Тут че, снова убиццу всех языков изобретают?
И снова тот же автор, который своим прошлым языком уже всё убил?
0
Эксперт .NET
 Аватар для Usaga
14768 / 9542 / 1365
Регистрация: 21.01.2016
Сообщений: 35,984
28.12.2021, 06:53
Croessmah, Звания наткнулся на значимые кортежи в C# и его опять осенило новым языком.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
28.12.2021, 06:58
Цитата Сообщение от Croessmah Посмотреть сообщение
Читать долго, спрошу прямо. Тут че, снова убиццу всех языков изобретают?
Не только языков, но и убийцу всех других парадигм. Останется только КорОП
0
Эксперт .NET
 Аватар для Usaga
14768 / 9542 / 1365
Регистрация: 21.01.2016
Сообщений: 35,984
28.12.2021, 07:24
Уже скоро на Хабре:

1
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
28.12.2021, 07:53
Есть люди, которые двигают прогресс... Они желают получить признание.
Я бы не стал троллить человека за саморекламирование и излишний пафос.

Я кстати тоже близок к таким людям как Etyuhibosecyu, и тоже интересуюсь теоретическими обобщениями в программировании. Вот, например, придумал концепт абстрактного языка разработки (в противопоставление к конкретным языкам программирования). Хотите расскажу про этот язык в отдельной теме?
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
28.12.2021, 08:03
Mikhaylo, не знаю, как вы, а ТС с правительскими званиями на этом форуме уже несколько лет заводит одни и те же темы. Каждый раз ему объясняют, что он изобретает велосипед, каждый раз он обежается что его творения не принимают всерьез. Потом выкатывает неюзабельную поделку, призванную продемонстрировать его гениальность. И снова ему объясняют, что с ним не так и даже дают советы как сделать лучше. Каждый раз ТС их напроч игнорирует и через некоторое время появляется с новой, или не очень хорошо забытой старой идеей. Круг замкнулся, начинаем с начала
Так что, мне кажется, между вами с ТСом есть разница.
0
Эксперт .NET
 Аватар для Usaga
14768 / 9542 / 1365
Регистрация: 21.01.2016
Сообщений: 35,984
28.12.2021, 08:05
Mikhaylo, мы троллим его за раздутое как воздушный шар ЧСВ, глупость, жадность и инфантильность. Он не двигает прогресс. Он балуется. Всё, что у него получается после такого баловства он на суд сообщества несёт, хотя такое положено сразу смывать.

Да и достижения его... Вы же сами видите. Подписку на github он купил! Ёк-макарёк! Вот это двинул прогресс, так двинул. И сразу побежал за одобрением. Мол, смотрите, какой он умный. Ребёнка можно похвалить. Здорового мужика, в сарафан одетого, как-то не хочется.

Он себя Д`Артаньяном и бизнесменом может мнить сколько угодно. Изобретать там что угодно. Но дерьмом его проекты не перестанут от этого быть.

Да и мотивы у него, по существу, под стать его проектам. Жалуется, что денег нет и семья у него живёт затянув пояса, а сам, вместо того, чтобы пойти заработать для семьи, тупо паразитирует и присваивает сам себе Звания.

Нет у меня уважения к таким персонажам. Ни к ним самим, ни к их творчеству.
1
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
28.12.2021, 08:05
Ну пусть себе пишет.)
0
Эксперт .NET
 Аватар для Usaga
14768 / 9542 / 1365
Регистрация: 21.01.2016
Сообщений: 35,984
28.12.2021, 08:08
Mikhaylo, так и мы такого же мнения) Пускай пишет и изобретает сколько хочет) Это его время в трубу улетает) А нам возможность лулзов словить)
0
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
28.12.2021, 08:28
Обе стороны позволяют себе все, что угодно. Но есть же варианты как это урегулировать бесконфликтно. Просто взять и прокомментировать вроде "Это очередной велосипед". Но на личности переходить не надо. Нужно быть толерантнее в интернете.

Все, думаю, согласны с моим следующим комментарием: КорОП не представляет собой никакую парадигму, под этим названием кроется простая языковая конструкция, имеющаяся во многих языках, и, более того, во многих она реализована нативно. "ОП" в названии "КорОП" - это буквы из другого слова.

Примерно так надо комментировать. )
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
28.12.2021, 08:52
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Просто взять и прокомментировать вроде "Это очередной велосипед"
Это уже пройденный этап.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
28.12.2021, 08:53
Цитата Сообщение от Mikhaylo Посмотреть сообщение
Примерно так надо комментировать. )
Все это с ТСом уже неоднократно опробовано И так, и иначе, и по всякому пытались до него донести подобные несложные мысли. Не работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2021, 08:53

ПРОГРАММИСТ на новое направление
Senior developer (не менее 3 лет) 1. Server: Php: Symfony2, Zend2, Laravel (возможно Python) 2. Client: Фрэймворк AngularJS/EmberJS или...

Объектно-ориентированный анализ, Объектно-ориентированное проектирование, Объектно-ориентированное программирование
Моё задание: Система Авиакомпания. Авиакомпания имеет список рейсов. Диспетчер формирует летную Бригаду (пилоты, штурман, радист,...

Вывести на экран новое направление движения корабля
С клавиатуры вводится направление движения корабля: ...

Определить и печатать всякий раз новое направление танка
Подскажите, наведите на путь, я реально не могу сообразить как она должна работать!! Танк в компьютерной игре может двигаться в одном из...

Объектно - ориентированное программирование
Разработать пользовательский модуль, содержащий данные и методы об объекте телефонный номер (поля: фамилия владельца, имя владельца,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru