|
Труд вопреки насмешкам
|
|||||||||||||||||||||||||||||||||||||||||
Какие из этих возможностей вам хотелось бы видеть в языке?15.03.2020, 17:27. Показов 3251. Ответов 57
Метки нет (Все метки)
Сейчас мое увлечение программированием находится в кризисе. Поток идей всегда накрывал меня с головой, но сейчас он исчерпал себя. На программы для сжатия нечего и надеяться, свой алгоритм асимметричного шифрования я, вероятно, никогда не смогу создать, операционную систему лучше даже и не начинать делать (даже если допустить, что ядро, написанное на ассемблере, я где-то найду готовое, что маловероятно), для игр нужна хорошая графика, а мне ее взять негде, поэтому остается только язык. (Если это не так, прошу написать, какие еще есть варианты с учетом того, что учебник я уже (почти) прочитал.) Так что если я узнаю, какие есть актуальные запросы к языкам программирования, у меня появится возможность продолжать активную жизнь.
По этим пунктам я уже получил ответ, они точно не нужны в языках программирования: 2. Сокращение кода в ущерб удобству написания. 3. "Статические" массивы. 4. Многомерный список как оператор языка. А по этим - еще не получил: 1. Одновременное наличие типов значений, прямых ссылок (ref T) и управляемых ссылок (des T). Сразу напишу, что типы значений и объектно-ориентированное или "процедурное" программирование никак не связаны. 2. Выполнение фрагментов кода, полученных снаружи относительно "основного" кода (например, из текстового поля), с помощью оператора $string (этот оператор есть на клавиатуре!).3. Рекурсивный тип, как в примере:
Мне кажется, эта возможность не помешала бы достаточно часто. 6. Автоматическое отслеживание, удовлетворяет ли переменная заданным условиям, например:
Добавлю: в C# есть "валидация модели", глава о ней находится на почетном последнем месте, но там это просто атрибуты, а в моем языке (пока что название вакантно) - часть самого типа. 7. Возможность параметризации типов и методов не только типами, но и любыми другими значениями, в том числе и с проверкой попадания в диапазон (см. предыдущий пункт), например:
Class Class1 = Class2 - то, что надо в данном случае.Таким способом, параметризующее значение будет, по сути, обычной переменной: обычная переменная может быть как рекурсивного, так и нерекурсивного типа, и параметризующее значение может быть как рекурсивного, так и нерекурсивного типа. 8. Операторы ?=, ?>, ?<, ?>=, ?<= и ?!=, эквивалентные x == y ? x : z, x > y ? x : z и т. д. Это уже много раз было упомянуто, но еще ни одного раза я не получил конкретную информацию - помогло бы это в языке или нет. Мне кажется, помогло бы.9. Отказ от оператора goto с одновременным введением возможности выйти из вложенных циклов на уровень метки (как в Жабе):
Прошу не судить строго за "возврат к нашим баранам". Поймите, у меня, кроме программирования, других возможностей в жизни нет, поэтому делаю, что могу. Вместо того, чтобы судить, прошу написать по каждому пункту: какая возможность улучшит язык программирования, а какая ухудшит.
0
|
|||||||||||||||||||||||||||||||||||||||||
| 15.03.2020, 17:27 | |
|
Ответы с готовыми решениями:
57
Определить, какие из этих имен встречаются во всех классах, какие есть хотя бы в двух классах, и какие - только в одном классе Какая из этих картинок вам больше всего нравится ? |
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
||||
| 25.03.2020, 17:08 | ||||
|
0
|
||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
|||
| 25.03.2020, 17:50 | |||
|
Нужно, например, Лисп, Хаскель, Пролог, Оз, Го, Кей, Эрланг, Ио. И какой-нибудь язык с зависимыми типами данных. Путь добавления новых фич в ЯП с помощью специального синтаксиса - тупиковый. Язык будет неограниченно усложняться. Это видно на примере С++ и С#. Уже месяца недостаточно, чтобы выучить синтаксис языка, в то время как синтаксис Лисп или Форт учится за 5 минут.
1
|
|||
|
14813 / 9587 / 1368
Регистрация: 21.01.2016
Сообщений: 36,110
|
||
| 26.03.2020, 08:14 | ||
|
Чтобы создать (или хотя бы задумать) действительно практически полезный ЯП, нужно понимать недостатки существующих (популярных). А чтобы понимать недостатки существующих на них нужно хорошо так пописать, что-то большое и сложное. Желательно в команде. Второй момент: надо различать сам язык и его базовую библиотеку классов. Вы это, похоже, не различаете и то, что можно было бы оформить как некую библиотечную возможность (может быть даже стороннюю) вы всё пихаете в синтаксис языка. Etyuhibosecyu, я не буду вас отговаривать, ибо это бесполезно. И обсуждать тупость затеи вашей тоже. Вы никаких аргументов не понимаете. И ладно. Просто напомню: вы в пустую теряете время переизобретая кривые велосипеды. Лучше бы поучились кататься на нормальных.
1
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 26.03.2020, 16:38 | ||
|
var i = 1 ; Как компилятор догадается, что я имел ввиду беззнаковое 1 ? А требуемую разрядность у 1 ? Мне приходилось воевать с Visual Basic Script (выбора не было, именно он был встроен в некую другую программу и сценарии к ней пришлось писать на нем) в котором такая фишка есть. Заставить цикл крутить 0..BFFF была проблема. Он считал что &hBFFF это знаковое отрицательное 16 разрядов и цикл обрывал сразу. Приходилось косвенно воздействовать на его автоматическое назначение типа по принципу "ну догадайся-же, сволочь", ну а если я &hBFFF вот так запишу &h10000-&h4001 догадаешься 32 разряда включить или нет, едрит твою в качель ? Dim i As Long в той программе почему-то не работало, кричало что синтаксически не понимает что это. Добавлено через 4 минуты Вообще идея языка который будет угадывать мысли программиста хороша до тех пор пока он не начнет угадывать неверно.
0
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
|
| 26.03.2020, 16:41 | |
|
Если ты явно указываешь при присвоении тип, то тогда сама идея автоматического назначения типа теряет смысл.
0
|
|
|
Труд вопреки насмешкам
|
|
| 26.03.2020, 16:47 [ТС] | |
|
Ethereal, так вся фишка в том, что автоматически давать переменной тип можно, а не обязательно. Если нужно явно указать тип, никто не мешает.
0
|
|
|
Просто Лис
|
||||||
| 26.03.2020, 16:47 | ||||||
|
Вроде, в расте компилятор вычисляет тип переменной. Если не может - ошибка компиляции.
Да и в с++11 появилось ключевое слово auto:
0
|
||||||
|
Труд вопреки насмешкам
|
||||||
| 26.03.2020, 16:55 [ТС] | ||||||
|
Рыжий Лис, так дело в том, что в C++11 такому auto нужно присвоить значение сразу. А у меня переменная может очень долго быть типа "просто var". Пример:
0
|
||||||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 26.03.2020, 17:03 | ||
|
Сие категорически плохо для начинающих программистов, которые по инерции i понимают как математическую переменную "произвольное целое", а не прокрустово ложе ячейки памяти столько-то разрядов. Это минус. А предполагаемый плюс только для ленивых программистов, которым лень описать переменную, ну так писать тип i = 1 ; сразу описывая и присваивая не напряжно, а тогда реальный, мощный плюс от усложнения языка умолчаниями ускользает. Не стоит в язык добавлять сущностей с эфемерной пользой.
0
|
||
|
Труд вопреки насмешкам
|
||
| 26.03.2020, 17:38 [ТС] | ||
|
Ethereal, если речь идет об int, то да, и то 2 миллиардов для 99.9% целей "начинающих" программистов хватает. А если тип не int, а Dictionary[(Stack[Block], string), Dictionary[string, List[List[bool, List[string, List[string, List[string]]], Stack[Block], string], Stack[Block], List[string, List[string, List[string]]], FunctionAttributes, List[Stack[Block], string, List[string, List[string, List[string]]], ParameterAttributes, string]]]]? И то, этот тип один раз уже будет написан в виде
new ...(), зачем его писать еще раз?Добавлено через 18 минут
0
|
||
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
|
||
| 26.03.2020, 19:33 | ||
|
0
|
||
|
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
|
||
| 27.03.2020, 00:20 | ||
|
shit переменная = значение ; Писать shit не сложнее чем int Добавлено через 22 минуты А вообще твой пример - это демонстация ущербности идеи строгой типизации (если возникают такие громоздкие типы может вообще обойтись без них ?), которая родилась только потому, что при создании первых языков программирования тусило много математиков. Для которых + это абстрактное сложение, которое конкретизируется целостью или вещественностью операндов. Отсюда операнды от рождения с конкретными типами и абстрактный оператор + , который берет тип у операндов. И тут уж никуда не денешься: придется типы операндов проверять, поскольку если один операнд целый, а другой вещественный с типом у оператора + получается ерунда полная. Ну и отсюда уже выплывает вся парадигма полностью. А по моему опыту строгая типизация не помогает вылавливать никаких ошибок, кроме описок. И потому и без нее совсем неплохо. Если не лучше. См. Форт у которого только два типа имеют отношение к данным - символ и ячейка, вся прочая типизация приставлена к операторам. И этого как-то хватает на все про все. Но Форт - это нечто специфичное, а вот если неспецифичное с типами только у операторов ? И уже оператор дает типы операндам ? Зато воевать со строгой типизацией приведением типов не надо, приведение происходит автоматом к типу оператора по принципу "программист всегда прав".
0
|
||
|
14813 / 9587 / 1368
Регистрация: 21.01.2016
Сообщений: 36,110
|
|||
| 27.03.2020, 10:22 | |||
|
1
|
|||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||
| 27.03.2020, 12:42 | ||
|
1. Строгая типизация запрещает неявные преобразования, нестрогая (слабая) - разрешает. Слабая типизация - зло. И, чем слабее, тем больше зло. Основная проблема в том, что часто ошибка всплывает не там, где описка, а совсем в другом месте. Отлавливать описки вида "if(x = y){}" в Си - уже неприятно. В JS операторы уже куча разных примеров, когда код (из-за неявного приведения) работает не так, как (интуитивно) ожидается. Например, операторы сравнения. Или более интересный пример: "["1", "5", "10"].map(parseInt)" возвращает "[1,NaN,2]". В PowerShell, вообще, жуткий ад, так как массив (содержащий 1 элемент?) неявно приводится к типу элемента массива. И что вернёт функция, возвращающая массив массивов, лично мне предсказать очень сложно. 2. Что касается динамической типизации, то это, в принципе, не так страшно. Но в разы увеличивает количество необходимых проверок. И чем больше слоёв содержит приложение, тем больше этих проверок. Пример. От пользователя приходит значение. В коде интерфейса мы проверяем это значение и вызываем в метод бизнес-логики. В методе бизнес-логики мы не можем полагаться на то, что оно проверенное. Поэтому мы ещё раз проверяем его и, например, вызываем метод сторонней библиотеки. И этот метод, опять же, начинается с проверки аргументов. Уже поэтому статическая типизация лучше динамической. А ещё лучше, если типы можно задавать ещё более строго. Например, не просто "string", а "string, not null, length() <= 100". У статической типизации есть и другие преимущества: больше ошибок отлавливается на этапе компиляции, у компилятора больше возможностей для оптимизации кода. И я не знаю ни одного преимущества динамической типизации. Особенно, если в системе типов есть тип dynamic. 3. Что касается явной и неявной типизации, то тут мнения расходятся. При использовании неявной типизации проще писать код, но сложнее его читать. Оптимальный вариант - неявная типизация с возможностью задать тип явно. Итого: Система типов "идеального" ЯП должна быть: - строгая (без неявных преобразований) - статическая (включая зависимые типы и тип dynamic) - неявная (с возможностью задать тип явно)
0
|
||
|
Труд вопреки насмешкам
|
||
| 27.03.2020, 13:05 [ТС] | ||
|
Можно бесконечно спорить об "идеальном". Но это не реальное и смысла в этом споре ноль. Как бы там не было, система типов моего языка программирования такая: - Оператора явного преобразования в принципе нет, только либо неявные преобразования, либо через конструктор. - Есть как статические, так и динамические типы. - Можно задавать тип как явно, так и неявно. С типом var меня убедили, он уходит в прошлое. Нет смыла в двух рекурсивных типах. Теперь нужно будет, как и в C#, либо явно указать значение при конструкции var (если это значение будет null, переменная будет типа null), либо использовать typename.
0
|
||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,920
|
||
| 27.03.2020, 13:13 | ||
|
1
|
||
|
14813 / 9587 / 1368
Регистрация: 21.01.2016
Сообщений: 36,110
|
|||
| 27.03.2020, 13:17 | |||
|
0
|
|||
|
Труд вопреки насмешкам
|
|||
| 27.03.2020, 13:21 [ТС] | |||
|
0
|
|||
|
14813 / 9587 / 1368
Регистрация: 21.01.2016
Сообщений: 36,110
|
|||
| 27.03.2020, 13:25 | |||
|
0
|
|||
| 27.03.2020, 13:25 | |
|
Чего вам не хватает в языке C#?
Какие игры вы бы хотели видеть в переиздании? Какие рэп-исполнители Вам нравятся? Какие кодировки писем Вам известны? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|