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

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

12.01.2021, 18:09. Показов 8386. Ответов 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
Эксперт .NET
 Аватар для Usaga
14773 / 9548 / 1365
Регистрация: 21.01.2016
Сообщений: 36,001
14.01.2021, 12:29
Студворк — интернет-сервис помощи студентам
Etyuhibosecyu, это книга о компиляторах в целом.

Компиляторы: принципы, технологии и инструментарий. Альфред Ахо, Моника С. Лам, Рави Сети, Джеффри Ульман

Вы даже это нагуглить не в состоянии. Какие вам трансляторы и шифроваторы?... Вот серьёзно.

Добавлено через 2 минуты
Блин, поиск информации - обязательный скил любого разработчика. Нафига вы списки какие-то составляете того, что "изучили", если тупо гуглить не можете? Или это поисковики виноваты? Следующий ваш проект будет "Etyuhibosecyu Search Systems"?
0
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
14.01.2021, 15:57
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Эта книга не проходит по трем с половиной пунктам - хоть ученой степени и не требует, но требует узкоспециализированных знаний из дискретной математики, по остальным пунктам не проходит абсолютно.
Книгу вы оценили.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
а вы уверены, что книга о создании собственного языка программирования называется именно "Книгой Дракона"? Что-то запрос в Google нашел бог знает что.
Исходя из этого - по названию...
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 16:52  [ТС]
Прочитал первую главу. Причем подряд. Ничего особенного, обычные давно избитые азы истории информатики и демагогические утверждения, что "задача построить более быструю программу с тем же самым функционалом в общем случае неразрешима" (что значит "в общем случае"? как быть, если рассматриваемый алгоритм уже является доказанно оптимальным (не во всех же задачах оптимальное значение невычислимо)?), "нет ни одного полностью безошибочного оптимизирующего компилятора" ("чистые" функции - это оптимизация? кэширование результата вычислений "чистой" функции может изменить функционал программы?). Узнал, что я, сам того не подозревая, написал семантический анализатор (выделенные восемь слов являются "солью" пятидесяти страниц (!)) (интересно, может кто-то подобным способом выразить "соль" всей книги, к примеру, в ста словах - выкинуть избитые всем известные "прописные истины" и наоборот - никому не нужные низкоуровневые детали, а также демагогию - и оставить только пять-десять предельно кратких и безгранично емких ключевых утверждений о том, как конкретно пишутся компиляторы не через задний проход?).
Цитата Сообщение от uzhsoft Посмотреть сообщение
Исходя из этого - по названию...
Возможно, вы не знали, но я уже когда-то знакомился с этой книгой, только полное название забыл. Хотя да, подряд до сегодняшнего дня не читал.
0
 Аватар для JustinTime
964 / 582 / 268
Регистрация: 20.12.2016
Сообщений: 1,506
14.01.2021, 17:00
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
но я уже когда-то знакомился с этой книгой
а сегодня нагуглили "Как приручить дракона"?

Не по теме:

Мне кажется вы пишете вопросы ради вопросов... ответы вам особо и не нужны.

0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
14.01.2021, 17:04
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
демагогические утверждения, что "задача построить более быструю программу с тем же самым функционалом в общем случае неразрешима" (что значит "в общем случае"? как быть, если рассматриваемый алгоритм уже является доказанно оптимальным (не во всех же задачах оптимальное значение невычислимо)?),
"В общем случае" - банальная математическая терминология, так что демагогичность утверждения вам опять померещилась по незнанию. В данном случае это означает, невозможно построить алгоритм, который для любой произвольный программы построит более быструю программу. Ключевое слово здесь - произвольной.
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 17:08  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
В данном случае это означает, невозможно построить алгоритм, который для любой произвольный программы построит более быструю программу.
Это как раз факт, так как для многих задач существуют доказанно оптимальные алгоритмы.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
14.01.2021, 17:13
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Это как раз факт, так как для многих задач существуют доказанно оптимальные алгоритмы.
Не понял, что именно "факт"? Для многих существуют, а для еще больших не существуют. Дальше что? Однако, построить универсальную оптимизирующую программу не возможно. И даже такую, которая оставляет неизменными "оптимальные", но оптимизирует все неоптимальные.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
может кто-то подобным способом выразить "соль" всей книги, к примеру, в ста словах - выкинуть избитые всем известные "прописные истины"
Как видим, нифига они не прописные, раз вы даже в таком виде их не смогли понять

Добавлено через 1 минуту
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
"чистые" функции - это оптимизация? кэширование результата вычислений "чистой" функции может изменить функционал программы?
Причем тут чистые функции?
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 17:17  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Не понял, что именно "факт"?
То, что в цитате.
Цитата Сообщение от Катафалк Посмотреть сообщение
И даже такую, которая оставляет неизменными "оптимальные", но оптимизирует все неоптимальные.
А это еще почему?
Цитата Сообщение от Катафалк Посмотреть сообщение
Причем тут чистые функции?
Как пример, что может быть гарантированно ускоряющая и гарантированно безошибочная оптимизация. При этом вызовы в стиле eval() можно пометить как не "чистые" и отсечь сразу.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
14.01.2021, 17:33
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
То, что в цитате.
Ну да, это факт, но не потому, что существуют доказанно оптимальные алгоритмы.
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Как пример, что может быть гарантированно ускоряющая и гарантированно безошибочная оптимизация.
Ну а теперь оптимизируйте этим оптимизатором программу, не имеющую чистых функций Или такую, которая уже все кэширует.
Что до доказательства рассматриваемого факта в общем случае, предлагаю вам заняться его поиском самостоятельно, если в книге этого нет, а вас интересует. А мне лень за вас информацию искать
0
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 17:38  [ТС]
Цитата Сообщение от Катафалк Посмотреть сообщение
Ну а теперь оптимизируйте этим оптимизатором программу, не имеющую чистых функций. Или такую, которая уже все кэширует.
Заметьте, я не написал, что эта оптимизация работает в "общем" случае. Этим утверждением я опровергал совсем другое утверждение из книги. А именно о том, что абсолютно никакая оптимизация не преобразует программу в строго эквивалентную.
0
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,020
14.01.2021, 17:58
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
нет ни одного полностью безошибочного оптимизирующего компилятора
Могу предположить, что эта цитата говорит не о багованных компиляторах, изменяющих функционал программы, а под "ошибками" имеются в виду случаи, когда оптимизирующий компилятор на самом деле делает программу менее оптимальной. Но точно не знаю, потому что вы контекста употребления цитаты не дали.

Добавлено через 15 минут
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Этим утверждением я опровергал совсем другое утверждение из книги. А именно о том, что абсолютно никакая оптимизация не преобразует программу в строго эквивалентную.
Например, у вас чистая функция вычисляется очень быстро, но после кеширования программа начинает жрать столько памяти, что вся система стает колом, начинает виснуть на сборке мусора и т.д. А может быть это происходит не всегда и не на всех входных данных - на некоторых соптимизировалась, а на некоторых наоборот. Вот и превратилась ваша "гарантированная" оптимизация в большой пшик.
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
14.01.2021, 19:37
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Поэтому к брелку для сигнализации и к языку программирования должны использоваться разные подходы.
Подходы одинаковые. Каждая новая фича помогает решать задачи, в которых она используется, и мешает решать задачи, в которых она не используется. Поэтому полезна фича или вредна зависит от того, насколько часто она используется и насколько сильно она помогает.

Если Вам не нравится аналогия с брелком, могу привести аналогию с языком. Предположим, Вас попросили объяснить дорогу. Ваш ответ:
Идите прямо до ближайшего светофора и потом поверните направо. Затем перейдите на другую сторону по подземному переходу и идите прямо два квартала.
Получается долго и неэффективно. Давайте добавим в русский язык слова:
йцук = идите прямо до ближайшего светофора и потом поверните направо
фыва = перейдите на другую сторону по подземному переходу
ячсм = идите прямо столько кварталов
Тогда Вы бы смогли объяснить дорогу в 4 слова: йцук фыва два ячсм. Очень удобно... вот только придется учить 10 тыс. новых слов (для описания различных вариантов дороги). Стоит оно того?

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
с минимальными усилиями писать потенциально любую программу
Во-первых, не писать, а читать. Программист читает код в 100 раз больше, чем пишет. Облегчающая написание фича вредна, если она затрудняет чтение.
Во-вторых, не любую. С минимальными усилиями нужно решать наиболее часто встречающиеся задачи. Добавление конструкций для упрощения решения редко встречаемых задач ухудшает язык (см. пример с объяснением дороги).

Например, Ваша фича:
string x = 5;
Увидев такой код, начинаешь думать, автор намеренно использует неявное преобразование или опечатался (хотел написать "int x = 5"). То есть, автор сэкономил пару секунд при написании, а читающие код будут тратить лишних пару минут на то, чтобы разобраться.
1
Труд вопреки насмешкам
 Аватар для Etyuhibosecyu
363 / 181 / 41
Регистрация: 13.07.2017
Сообщений: 4,845
Записей в блоге: 14
14.01.2021, 20:25  [ТС]
Shamil1, прямо в точку! Жаль, что не могу поставить отзыв, так как уже ставил вам же. Но спасибо поставил. Надеюсь, вы цените благодарность, что называется, "от души", а не только количество очков. Я вижу, вас вообще мало кто благодарит. Очень жаль, что такие ценные посылы во Вселенную остаются без ответа.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Программист читает код в 100 раз больше, чем пишет.
Ну, думаю, что прямо в 100 - это преувеличение, но от 5 до 20 - скорее всего.
Цитата Сообщение от Shamil1 Посмотреть сообщение
То есть, автор сэкономил пару секунд при написании, а читающие код будут тратить лишних пару минут на то, чтобы разобраться.
А например, такая фича:
Code
1
2
3
4
5
6
7
8
return x => task is x + string s switch
{
    "Class " => Action1(s);
    "Interface " => Action2(s);
    "Function " => Action3(s);
    "Extent " => Action4(s);
    ...
};
- вместо такого:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (task.StartsWith("Class "))
{
    return Action1(task.Substring("Class ".Length));
}
else if (task.StartsWith("Interface "))
{
    return Action2(task.Substring("Interface ".Length));
}
else if (task.StartsWith("Function "))
{
    return Action3(task.Substring("Function ".Length));
}
else if (task.StartsWith("Extent "))
{
    return Action4(task.Substring("Extent ".Length));
}
...
- не заставит тратить лишнее время на то, чтобы разобраться? Мне кажется, если в принципе знать, что это switch-выражение означает "по порядку подставлять в верхнее лямбда-выражение вместо x каждую из перечисленных констант, проверять, является ли в таком случае task результатом конкатенации x и неизвестной строки (то есть начинается ли на x), и если для какой-то константы верхнее лямбда-выражение вернет true, то вернуть выражение, соответствующее этой константе в switch-блоке, в качестве параметра использовав полученную при проверке неизвестную строку - вторую часть task", то ничего сложного в чтении такого кода нет. И пригождался бы он хоть и не каждый день, но в определенных программах достаточно часто. Или неправда?
0
Эксперт .NET
 Аватар для Usaga
14773 / 9548 / 1365
Регистрация: 21.01.2016
Сообщений: 36,001
15.01.2021, 04:52
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну, думаю, что прямо в 100 - это преувеличение, но от 5 до 20 - скорее всего.
Чем старше проект, тем дольше ходят по одни и тем же кускам кода. Особенно, когда разработчики меняются в команде. Никто не ведёт подсчёт, чтобы сказать "О! Я тут уже был 20 раз, больше мне сюда нельзя".
0
Модератор
Эксперт функциональных языков программирования
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,913
15.01.2021, 11:16
Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
Ну, думаю, что прямо в 100 - это преувеличение, но от 5 до 20 - скорее всего.
Скорее преуменьшение. В серьёзном проекте за десятки лет его поддержки отдельные части кода переписываются много раз по разным причинам - исправление багов, рефакторинг, переход на новые технологии, добавление новых фич и т.д. Перед каждым таким переписыванием обычно приходится много читать - чтобы найти нужное место, чтобы разобраться, как этот код работает, чтобы убедиться, что изменение не приведёт к сбою в других местах и так далее.

Цитата Сообщение от Etyuhibosecyu Посмотреть сообщение
А например, такая фича:
В C# постепенно добавляют вещи, которые в функциональных языках есть уже полсотни лет. Не так давно добавили сопоставление с образцом (Pattern Matching, C# 7.0) и switch выражение (switch expression, C# 8.0).

Теперь вместо
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static double ComputeArea(object shape)
{
    if (shape is Square)
    {
        var s = (Square)shape;
        return s.Side * s.Side;
    }
    else if (shape is Circle)
    {
        var c = (Circle)shape;
        return c.Radius * c.Radius * Math.PI;
    }
    
    throw new ArgumentException("shape is not a recognized shape", nameof(shape));
}
можно писать
C#
1
2
3
4
5
6
7
public static double ComputeAreaModernSwitch(object shape) => 
    shape switch
    {
        Square s => s.Side * s.Side,
        Circle c => c.Radius * c.Radius * Math.PI,
        _ => throw new ArgumentException("shape is not a recognized shape", nameof(shape))
    };
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2021, 11:16

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
95
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru