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

Действительно ли высокоуровневые языки программирования не позволяют определенных действий умышленно?

12.01.2021, 18:09. Показов 8283. Ответов 94
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Речь идет не о низкоуровневых действиях, таких как прямое управление памятью, а наоборот, об ультра-высокоуровневых конструкциях. В этой теме я наткнулся на реальную ограниченность самого мощного языка современности - C# - далеко не в низкоуровневых действиях. И господин uzhsoft написал:
Цитата Сообщение от uzhsoft Посмотреть сообщение
ограничен и очень сильно... но это больше для того, чтобы в ногу не стрелять
Как написано на другом форуме по поводу выражения "выстрелить себе в ногу":
Это означает, что на языке можно написать команду или конструкцию, которая сломает нормальное поведение программы или системы (или будет выполняться совершенно не так, как можно было бы логически предположить), и при этом компилятор/интерпретатор это скомпилирует и не ругнется.
Каким способом возможно, например, с помощью такого кода (допустим, я напишу язык, похожий на C#, но в котором типизировать универсальным типом функцию, передаваемую в качестве параметра в другую функцию, является возможным):
Code
1
2
3
4
5
6
7
8
9
closed static [(typename T1, typename T2), null Function((() T1, () T2) list1, (() T1, () T2) list2, [typename TInner, Action[() TInner, () TInner]] inner_func)] MyFunc =
{
    (() T1 left_list1, () T2 right_list1) = list1;
    (() T1 left_list2, () T2 right_list2) = list2;
    inner_func(left_list1, left_list2);
    inner_func(right_list1, right_list2);
};
(() int, () string) list1 = ((1, 2, 3), ("A", "B", "C")), list2 = ((5, 10, 15), ("X", "Y", "Z"));
MyFunc(list1, list2, (x, y) => x.Add(y));
- сломать нормальное поведение программы или системы? (Вот таблица соответствий условного языка и C#.)
closedprivate
typenameРекурсивный тип, все другие типы являются его значениями
[A, B] (без типа впереди)Dictionary<A, B>
null Function(...)void(...) (функция, не возвращающая значения)
() TList<T>
Type[...]Type<...>
[A, B] = somethingЭто значение доступно по всем ключам словаря
list.AddМожет добавить как одно значение, так и список
(Эта тема - НЕ презентация возможностей языка. Ее суть - вопрос об ограничениях на некоторые действия в языках программирования в принципе.)
Я понимаю, что какое-то явное издевательство над программированием - нужно запрещать. Но в данном коде я не вижу ничего такого, что нарушает принципы высокоуровневого языка (как, например, goto, подстановка абсолютно любого кода в макрос с любым алфавитно-цифровым именем (таким, как if) или уже упомянутое прямое управление памятью), даже наоборот - это является не просто высокоуровневой, а ультра-высокоуровневой возможностью. Но почему же тогда эта возможность запрещена? И это в Шарпе, который должен давать другим языкам пример для подражания в плане высокоуровневости! Или, может, такая могучая корпорация Microsoft по какой-то причине не может сделать то, что, скорее всего, может любой быдлокодер, нужно только время? Или там сидят такие лентяи, которые не делают себе труда реализовать это? Или такие бездарные люди, которые не представляют себе, что так можно сделать, зато умеют воровать идеи, и пройдет пара лет после того, как я это здесь написал - и эта возможность появится? Или вы хотите сказать, что это по каким-то объективным причинам, которых я не знаю, не получится ни у кого, в том числе и у меня? Нет, мне кажется, что это ограничение было введено умышленно. Но для чего? Прошу ответить.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.01.2021, 18:09
Ответы с готовыми решениями:

Высокоуровневые методы информатики и программирования
Составить программу, имеющую графический интерфейс и окна для ввода/отображения данных. Программа добавляет элементы управления на форму и...

Создание условия: при определенных значениях переменной выполнения определенных арифметических действий
Имеется переменная w2 при значении 1 -происходит вычитание 2 - сложение 3 - умножение 4 - деление ( цельный показатель с остатком). ...

Есть ли вообще аналогичные языки программирования только с уровнем изучения легкий чем язык программирования С
Язык программирования С очень сложный есть ли вообще аналогичный язык программирования только легкий

94
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 09:28  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если строка не известна на момент компиляции, то это уже динамическая типизация получается.
А в Шарпе есть же тип dynamic. Почему-то не то про него все забывают, не то... Почему им не пользуются? Какие проблемы он приносит, кроме того, что нельзя проверить корректность программы на этапе компиляции? Во сколько раз, например, он медленнее - в два-три или в сотни? И может, есть еще какие-то "подводные камни"?
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 09:34
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Почему им не пользуются?
Потому, что это динамическая типизация получается. Dynamic ввели только для работы с COM.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 09:42  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Потому, что это динамическая типизация получается.
Динамическая типизация получается, если все типы неизвестны на этапе компиляции. А если большинство типов известны, а изредка используется dynamic, это полудинамическая типизация. Ну и допустим, даже если частично динамическая, это лучше Пайсена вследствие огромной мощи .NET. Почему же тогда этот тип упоминается только в узкоспециализированных местах, и практически никогда - на форуме? Вот о чем я спрашиваю.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 09:48
Etyuhibosecyu, я ответил почему: оно только для COM. Мешать типизации просто потому, что можно - чистой воды быдлятина.

Добавлено через 3 минуты
Вы не ответили на вопрос о задумке, которую реализуете. Фраза про тип из строки наводит на мысль о новой версии какого-то транслятора\компилятора, которая реализуется через задницу.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 09:53  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
я ответил почему: оно только для COM.
Я прочитал. Но это не ответ на вопрос, почему конкретно этот тип плохой и использовать его - зло.
Цитата Сообщение от Usaga Посмотреть сообщение
Мешать типизации просто потому, что можно - чистой воды быдлятина.
А если не потому, что можно, а потому, что это единственный выход из сложившейся на практике ситуации?
Цитата Сообщение от Usaga Посмотреть сообщение
Вы не ответили на вопрос о задумке, которую реализуете. Фраза про тип из строки наводит на мысль о новой версии какого-то транслятора\компилятора, которая реализуется через задницу.
Вы угадали. А как можно реализовать иначе? Только без слов в стиле того, что это никому не нужно.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 10:01
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Я прочитал. Но это не ответ на вопрос, почему конкретно этот тип плохой и использовать его - зло.
Почитайте про динамическую типизацию и минусы, что она несёт.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А если не потому, что можно, а потому, что это единственный выход из сложившейся на практике ситуации?
Такого не бывает. В принципе. Только, если компетенция на уровне плинтуса. Но это уже не проблема языка.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Вы угадали. А как можно реализовать иначе? Только без слов в стиле того, что это никому не нужно.
Почитайте "Книгу Дракона". Там рассказывается и показывается. Если осилите. Вы пытаетесь спроецировать транслируемую программу на код собственно транслятора. Оттуда такая потребность "строки в типы" преобразовывать. Между тем, транслятор должен строить внутренее представление программы транслируемой, а все её типы должны быть только идентификаторами и метаданными к самому C# отношения не имеющими.

Бесполезно это всё расписывать тут. Читайте специальную литературу. И не пытайтесь обвинять язык в недостаточной гибкости, когда используете его неправильно.
1
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
14.01.2021, 10:06
Etyuhibosecyu,
Вы, похоже, считаете, что чем больше "возможностей" (конструкций) предоставляет язык, тем лучше. На самом деле, наоборот, чем меньше, тем лучше (при условии, что язык позволяет эффективно решать поставленные задачи).

Возьмём, например, брелок автомобильной сигнализации с одной кнопкой, которая включает/отключает сигнализацию. А теперь добавим ещё 20 дополнительных возможностей - от открывания капота до проверки уровня топлива. Станет только хуже. Вместо одной большой кнопки, которую можно нажать, не вынимая руки из кармана, будет 20 маленьких, среди которых ещё нужно найти нужную.

С ЯП то же самое. Лишние возможности только мешают. Особенно те, которые дают возможность писать в плохом стиле.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 10:12
Shamil1, именно так он и считает. Когда он начинает что-то делать и у него не получается, то он делает вывод, что это язык недостаточно гибок, а не он чего-то не знает. Оттуда и потребность запилить свой язык, который будет реализовывать все возможности, которые только ему и нужны.

Добавлено через 2 минуты
Etyuhibosecyu, я вам уже сколько раз говорил: если вам что-то неудобно и где-то не хватает "мощи языка", то посмотрите как подобное делают другие. Может оказать, что решение принципиально иное. А так как плохой танцор: куда не плюнь, всё неудобно и негибко.
0
фрилансер
 Аватар для Алексей1153
6501 / 5737 / 1134
Регистрация: 11.10.2019
Сообщений: 15,369
14.01.2021, 10:14
Etyuhibosecyu, научись задавать вопросы в таком виде:

как мне сделать A ?
это мне нужно для того, чтобы сделать B
а это мне нужно, чтобы решить C
... и так далее, до самого корня проблемы...
в таком случае будет сильно экономиться время, так как тебе сразу подскажут, что C решается совсем иначе, и A и B - не нужны
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 10:21  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
На самом деле, наоборот, чем меньше, тем лучше (при условии, что язык позволяет эффективно решать поставленные задачи).
Почему-то ключевую фразу вы взяли в скобки. Перед брелком для сигнализации стоит задача включать и отключать сигнализацию, тут все понятно. А перед языком программирования стоит такая задача: с минимальными усилиями писать потенциально любую программу. Поэтому к брелку для сигнализации и к языку программирования должны использоваться разные подходы.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 10:34
Etyuhibosecyu, язык программирования - инструмент. А как всяким инструментом им надо уметь правильно пользоваться. В вашем случае, почему-то, вы решили, что осциллограф сломанный, раз вы не можете им нормально воспользоваться.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 10:44  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
А как всяким инструментом им надо уметь правильно пользоваться. В вашем случае, почему-то, вы решили, что осциллограф сломанный, раз вы не можете им нормально воспользоваться.
Ну, у осциллографа есть хоть и непонятные народному быдлу, но конечные, дискретные и детерминированные правила пользования. А "правила пользования" языком программирования бесконечные и детерминированы только для машины. Поэтому сравнение не совсем корректно.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 10:48
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну, у осциллографа есть хоть и непонятные народному быдлу, но конечные, дискретные и детерминированные правила пользования.
Так и у ЯП и разработки в целом тоже. Только читать эти правила вы наотрез отказваетесь. А потом начинаете изобретать невесть что.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 10:54  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Так и у ЯП и разработки в целом тоже. Только читать эти правила вы наотрез отказваетесь.
Прямо они конечные, дискретные и детерминированные? Если уложатся в 64 КБ, я с удовольствием почитаю. Только если получу прямую ссылку на них и если это действительно исчерпывающие правила разработки чего угодно. Ну и естественно, если это не требует ученой степени.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 10:59
Etyuhibosecyu, я вам уже давал название сборника таких правил для разработки компиляторов: "Книга Дракона". Помнится, вы бросили её читать сказав, что слишком сложно и непонятно.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Если уложатся в 64 КБ
А если нет, то продолжите велосипеды делать и жаловаться, что C# невыразительный и ничего на нём не сделать, за что бы вы ни взялись?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 11:27  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
я вам уже давал название сборника таких правил для разработки компиляторов: "Книга Дракона".
Эта книга не проходит по трем с половиной пунктам - хоть ученой степени и не требует, но требует узкоспециализированных знаний из дискретной математики, по остальным пунктам не проходит абсолютно.
Цитата Сообщение от Usaga Посмотреть сообщение
А если нет, то продолжите велосипеды делать и жаловаться, что C# невыразительный и ничего на нём не сделать, за что бы вы ни взялись?
Долго думал, что ответить, но ответить нечего.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 11:37
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Эта книга не проходит по трем с половиной пунктам - хоть ученой степени и не требует, но требует узкоспециализированных знаний из дискретной математики, по остальным пунктам не проходит абсолютно.
Не требует она математики. Там концепции и идеи вполне понятно расписаны. Несколько поколений разработчиков на ней выросло. А вам опять неудобно.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Долго думал, что ответить, но ответить нечего.
И не надо. Надо осознать критику и попробовать пересмотреть свои подходы к работе.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
14.01.2021, 11:45
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А если не потому, что можно, а потому, что это единственный выход из сложившейся на практике ситуации?
Компилятор сишарпа написан на сишарпе. Вывод - для написания трансляторов возможностей сишарпа абсолютно достаточно. Недостаточно только знаний у вас.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
но требует узкоспециализированных знаний из дискретной математики
Так а нафига вы взялись за задачу, которую абсолютно не понимаете как решать? Чем то напоминает карго-культ, когда туземцы собирали увиденные когда-то самолеты из веток и листьев в надежде, что им за это дары с неба перепадут.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
14.01.2021, 11:54
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
но требует узкоспециализированных знаний из дискретной математики
Кстати, вот тоже момент. Если книга по разработке компиляторов требует каких-то знаний, которых у вас нет, то почему вы решили, что сама разработка компиляторов этих знаний не требует? И почему вы решили, что раз вы не можете этот материал осилить и всё равно берётесь за задачу, которая у вас закономерно не получается, то виноват C#, а не отсутствие у вас этих знаний? Где тут логика?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 12:18  [ТС]
Usaga, а вы уверены, что книга о создании собственного языка программирования называется именно "Книгой Дракона"? Что-то запрос в Google нашел бог знает что.
Миниатюры
Действительно ли высокоуровневые языки программирования не позволяют определенных действий умышленно?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.01.2021, 12:18

языки программирования
На каких языках программирования сейчас в основном пишится весь софт

Языки программирования
Пройдите, пожалуйста, гугл опрос по поводу языков программирования ...

Языки программирования
Здравствуйте. Пишу вам сюда,так как не знаю куда обратится. Есть несколько вопросов. Надеюсь тут мне дадут четкий и лаконичный ответ. ...

Языки программирования
Мои знания на данный момент ограничиваются на довольно хорошем уровне html, css, и совсем немного Java Script. Я хотел бы заняться...

Языки программирования
Как вы считаете который из языков программирование легче и лучше изучать? Дельфи,С++ и т.д


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для 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
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru