|
Труд вопреки насмешкам
|
||||||||||||||||||||||||||||||||||||
Новое направление в программировании - "Кортежно-ориентированное программирование"25.12.2021, 16:06. Показов 6249. Ответов 72
Метки нет (Все метки)
Всем привет! Эта тема предназначена для обсуждения предполагаемого будущего программирования. Приглашаю Shamil1 и Элд Хасп присоединиться.
Я уже когда-то упоминал о новой парадигме "кортежно-ориентированного программирования" (КорОП, неформально "коробка", англ. TuOP). Теперь я хочу развить эту теорию. Вот основные тезисы КорОП: 1. Как можно понять из названия, основной элемент новой парадигмы - кортеж (англ. tuple). Он записывается так:
2. Также кортежно-ориентированный язык должен реализовывать сингулярный кортеж - последовательность значений одного типа, например, вместо (int, int, int, int, int) можно написать int[5]. В отличие от списка, длину сингулярного кортежа нельзя изменить. Сингулярный кортеж - это не массив и не список. Более того, одна часть кортежа может быть мультиплексной, а другая - сингулярной:
int[1000000].3. Список записывается так же, как кортеж (я имею в виду значения). Компилятор должен уметь различать их по типу переменной. В случае использования var или в другой ситуации, когда тип переменной не различает список и кортеж, последовательность считается кортежом. При этом должны быть преобразования из кортежа в список и обратно (а вообще оптимально будет, если преобразование из сингулярного кортежа в список этого же или неявно-совместимого типа будет неявным) (а при преобразовании списка в кортеж несоответствующие элементы автоматически добавляются или удаляются). Также не ключевым, но желательным элементом КорОП являются автоматические преобразования из списка в список в случае, если возможно преобразование каждого элемента этого списка в нужный тип (опять же, оптимальный вариант - неявное преобразование list() int в list() real или аналогичных случаев).4. И наоборот предыдущему пункту, в кортеже должно быть возможно получить элемент по индексу так же, как в списке. Если индекс является константным, тип получаемого элемента должен автоматически определяться компилятором, иначе элемент имеет тип, являющийся необходимым и достаточным для совместимости с типами всех элементов кортежа. 5. КорОП считает, что объекты - это... ну, не то чтобы зло, но чем их меньше - тем лучше. Оптимально - три: кортеж, список и словарь. Ну, иногда можно добавить еще три: множество, дерево и список бит. И уже совсем редко - еще шесть: стек, очередь, связной список, отсортированный словарь, отсортированное множество и бинарное дерево. Все остальные объекты - ненужный мусор, многократная уборка которого заставляет программу виснуть. Вместо пользовательских объектов рекомендуется использовать другие конструкции: структуры и рекурсивные типы, да и то только тогда, когда вложенность типов становится уже трудночитаемой, например, как в следующем коде:
(Дисклеймер: прошу не требовать от меня реальных примеров применения этого кода. Я сам ума не приложу, для чего он может применяться. Это просто демонстрация правильного использования КорОП.) 6. А вот массивы в КорОП - это уже настоящее зло! Такое же, как и goto. В кортежно-ориентированном языке их не должно быть в принципе. Кортежно-ориентированный язык должен быть ультра-высокоуровневым, а массивы - слишком низкоуровневая конструкция для того, чтобы применяться в ультра-высокоуровневых языках. Список содержит все те возможности, которые содержит массив, и некоторые из тех, которые у массива отсутствуют. И отказаться от массива как раз легче, чем отказаться от goto, так как в случае с ним как раз наоборот - goto содержит много возможностей, которые иначе можно реализовать только через сложные костыли или вообще нельзя (например, переход к произвольному месту другой функции). И ничего, как-то же отказались от него настолько, что у многих неиспользование goto стало догмой, переступание через которую приводит к расстрелу без суда и следствия... (Если честно, я считаю, что такое отношение - это уже перебор. Я против вообще любой догматичной веры, и считаю, что категорически запрещено только убивать, воровать и пропагандировать коммунизм или фашизм, а все остальное, в том числе и goto, если в этом есть необходимость в данной ситуации, можно и применять.) Вот таблица основных способов организации последовательности значений в зависимости от уровня языка:
7. В КорОП-языке обязательна возможность группового присваивания - присваивания кортежу, сформированному "на лету" из несвязанных переменных, другого такого же, причем в правом кортеже могут смешиваться несвязанные переменные и произвольные выражения, в том числе и с использованием старых значений переменных из левого кортежа. Например, вот так:
Всё вышенаписанное - вымышлено, все совпадения с реальными событиями случайны. Я не призываю что-либо свергать или обрушивать. Но считаю, что КорОП - следующий этап после ООП. Кто хочет, может высказываться против.
0
|
||||||||||||||||||||||||||||||||||||
| 25.12.2021, 16:06 | |
|
Ответы с готовыми решениями:
72
Какое направление в программировании выбрать? Направление в программировании нетребовательные к глубокому знанию математики Какое нынче самое сложное и мозголомное направление в программировании? |
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
|
| 25.12.2021, 20:48 | |
|
0
|
|
|
Труд вопреки насмешкам
|
|
| 25.12.2021, 20:49 [ТС] | |
|
Алексей1153, про скорость компьютера забыли?
0
|
|
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
|
| 25.12.2021, 20:50 | |
|
к слову, не-в-дебаге оптимизатор выкинет весь цикл и заменит загрузкой константы в переменную ))
0
|
|
|
Труд вопреки насмешкам
|
||
| 25.12.2021, 20:55 [ТС] | ||
|
0
|
||
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
|
| 25.12.2021, 21:01 | |
|
0
|
|
|
Труд вопреки насмешкам
|
||||||||
| 25.12.2021, 21:11 [ТС] | ||||||||
|
Алексей1153, а как поступит этот оптимизатор в таком случае:
n++; заменено на n += sin(i);?Добавлено через 49 секунд Добавлено через 5 минут
0
|
||||||||
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
||||
| 25.12.2021, 21:16 | ||||
n=len;а во втором - сложно сказать. Может, прогонит в компайлтайме, а, может, и нет Добавлено через 2 минуты
0
|
||||
|
Труд вопреки насмешкам
|
|||
| 25.12.2021, 21:18 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
14776 / 9550 / 1366
Регистрация: 21.01.2016
Сообщений: 36,010
|
|
| 26.12.2021, 09:09 | |
|
0
|
|
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
|
|
| 26.12.2021, 10:58 | |
|
Кортеж - это такая структура (в понимании С++ struct{}), в которой элементы имеют не только имена, но и пронумерованы?
0
|
|
|
|
||
| 26.12.2021, 12:16 | ||
|
tuple my_tuple = ( int, string, float ) my_tuple = ( 10, "Вася", 3.1415 ) print( my_tuple[2] ) Вася При этом как у структуры размер фиксирован. my_tuple = ( 10, "Вася", 3.1415, 12345 ) -- ошибка ps: я честное слово не знаю, для чего может быть нужна эта конструкция. Добавлено через 2 минуты pps: в Питоне, утверждается, кортежи весят меньше списков. Добавлено через 15 минут ppps: впрочем, был такой язык - Рапира. В ней кортежами назывались фактически динамические массивы с разнородными элементами. Причем можно было к примеру спокойно их объединять через операнд сложения. Такие вот выкрутасы...
0
|
||
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
|
|
| 26.12.2021, 13:30 | |
|
Я в Пайтоне иногда использую кортежи. Например, координаты (x, y). Очень удобно, когда пишешь:
[(x1, y1), (x2, y2)] - координаты двух точек отрезка. В Пайтоне разница между кортежом и списком - только в том, что круглые скобки вместо квадратных и нельзя удалять или добавлять элементы. Но удобно. Правило простое: если можно использовать кортеж, то сделай это! Я просто думал, тут КорОП - это что-то новое в программировании. Но я хочу сказать, что по возможности нужно использовать структуры вместо кортежей. Разница: в кортеже доступ к элементу по целочисленному индексу (числовая адресацию), а в структуре - доступ по имени (символьная адресация). Не знаю, есть ли аналог структур из С++ в Пайтоне? Я думал КорОП предлагает совместить числовую и символьную адресации/индексации. P.S. А что делают вместо динамических массивов в КорОП?
0
|
|
|
Труд вопреки насмешкам
|
||||
| 26.12.2021, 14:05 [ТС] | ||||
|
0
|
||||
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
|
|||||||||||
| 26.12.2021, 18:34 | |||||||||||
|
В C++ используйте структуры вместо кортежей. Только проблема, наверное, в том, что отсутствует операция присвоения, которая позволяет назначить значения сразу нескольким полям структуры. Вот и все.
Можно сделать так:
Добавлено через 7 минут Если говорить о новом в программировании, то прикольно было следующее: все программные объекты (кортежи, списки, массивы) должны иметь одновременно три вида индексации: символьную (struct1.member1), числовую (struct1[0]) и физическую (struct1[0x00000000]). Последнее - это про указатели.
0
|
|||||||||||
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
|||||||
| 26.12.2021, 18:34 | |||||||
0
|
|||||||
|
821 / 580 / 75
Регистрация: 20.09.2014
Сообщений: 3,826
|
||||||
| 26.12.2021, 18:36 | ||||||
|
Ну значит претензии товарища Etyuhibosecyu к языку С++ несколько притянуты за уши.
Не сработает только присвоение:
0
|
||||||
|
фрилансер
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
|
|
| 26.12.2021, 18:46 | |
|
0
|
|
|
14776 / 9550 / 1366
Регистрация: 21.01.2016
Сообщений: 36,010
|
||
| 27.12.2021, 07:06 | ||
|
0
|
||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
|
|||
| 27.12.2021, 10:14 | |||
|
Добавлено через 8 минут Реализация изменяемого вектора довольно проста. Но в большинстве случаев лучше подходит неизменяемый вектор. Замечательная реализация неизменяемого вектора есть в Cloujure. з.ы. В C# вектор сначала назвали ArrayList, а позже (в момент добавления обобщённых типов) сократили до List.
0
|
|||
|
Труд вопреки насмешкам
|
||||
| 27.12.2021, 11:37 [ТС] | ||||
0
|
||||
| 27.12.2021, 11:37 | |
|
ПРОГРАММИСТ на новое направление Объектно-ориентированный анализ, Объектно-ориентированное проектирование, Объектно-ориентированное программирование Вывести на экран новое направление движения корабля
Объектно - ориентированное программирование Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение 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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|