ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Как сделать максимально плохой язык?

Сообщений 1 страница 11 из 11

1

С целью сделать его быстро.

1) динамическая типизация.
https://ru.wikipedia.org/wiki/Динамическая_типизация

да, это верно, что получается менее эффективный код, но его сложность увеличивается константно (умножается на константу).
Прогресс в миниатюризации электроники и увеличении производительности делает это вовсе не проблемой

2) "ракетная" сборка мусора.
Бортовая вычислительная система боевой ракеты выделяет память для расчётов и не освобождает её.
Всё равно, после того как ракета попадёт в цель, все объекты в памяти станут разрушены.

3) рекурсивный спуск
Парсить надо именно с помощью него. Единственное место, где это будет мешать - правоассоциативные операции.
Но для целей написания компилятора вряд ли понадобится операция возведения в степень,
она просто не нужна. Вон, в C# все операции левоассоциативные, и ничего, живут как-то.

4) безразмерные массивы
«Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется словарем или ассоциативным массивом. Соответствующая структура данных в языке Питон называется dict»
«Особенностью ассоциативного массива является его динамичность: в него можно добавлять новые элементы с произвольными ключами и удалять уже существующие элементы. При этом размер используемой памяти пропорционален размеру ассоциативного массива.»

Самое главное, что заранее не нужно объявлять или знать размер.

5) расширяемая система типов (опционально)
Поскольку язык динамический, то описание составного типа - это просто склейка нужных переменных, отличающихся только именами.
(склейка одинакового - это примерно как массив, а массивы у нас, как мы помним, - когда просто по ключу (имени) можно получить значение)
Никакие виртуальные функции делать не надо, это всё можно сделать свитчами, таблицами переходов, в общем, реализуемо вручную, как в GObject

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

Отредактировано Лис (2023-05-17 23:46:52)

0

2

Ко всем этим принципам (особенно к №2) можно добавить иммутабельность.
Подпрограммы(функции) должны иметь ровно один входной параметр, и ровно один выходной (новый).
Это позволит единообразно их все обрабатывать, всегда ведь несколько параметров можно в одну структуру упаковать?
Иммутабельность - это модно.
Переменная с одним именем считается после присвоения уже другой переменной, поэтому совпадение типов можно не проверять.

Единобразность обработки может позволить (в будущем) более просто "делать замыкания", захватывать контекст выполнения функции.
Ещё можно лазить вверх по стеку и оттуда что-нибудь выковыривать.
Или исключения обрабатывать - всегда понятно как разматывать стек.

Отредактировано Лис (2023-05-17 23:59:57)

0

3

МаПлЯ - название по первым буквам слов (МАксимально ПЛохой Язык)

Муляж - мощный универсальный лучший язык-жемчужина

Отредактировано Лис (2023-05-18 04:14:55)

0

4

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

Топ по популярности, между прочим!
https://www.simplilearn.com/best-progra … ay-article
Below is a list of the most popular and best programming languages that will be in demand in 2023.

1. Javascript
2. Python
3. Go
4. Java
5. Kotlin
6. PHP
7. C#
8. Swift
9. R
10. Ruby
11. C and C++
12. Matlab
13. TypeScript
14. Scala
15. SQL
16. HTML
17. CSS
18. NoSQL
19. Rust
20. Perl

Отредактировано Лис (2023-05-17 23:56:17)

0

5

http://compiler.su/opisanie-yazyka.php#13

Юрий написал(а):

Многие люди не видят разницы между созданием языка и созданием компилятора к нему. Создание языка заканчивается описанием его синтаксиса и семантики. Описание может быть формальным (в каком-то документе), формализованным (например, в виде входного файла для генератора компиляторов) или неформальным. А компилятор — это лишь программная реализация этих описаний.

Если какие-то пункты можно понимать двояко, то рекурсивный спуск — это точно не про создание языка. Это исключительно про реализацию компилятора. А перечисленные выше пункты местами смахивают на классификацию Борхеса.

Метод рекурсивного спуска — это не про плохой или хороший язык, это про один из методов реализации компилятора. Этот метод имеет как плюсы, так и минусы. Есть хороший материал на эту тему: «Рекурсивный спуск в современных компиляторах», хотя и не исчерпывающий. Из плюсов я бы отметил

    возможность реализации нетривиального синтаксиса,
    возможность выдачи максимально детальных сообщений об ошибках,
    возможность держать всё в своих руках и не зависеть от сторонних технологий типа YACC (да, в эпоху санкций это актуально).

Минусы тоже есть, я их могу перечислить, если хотите. Сам метод нельзя считать «отсталым», достаточно посмотреть на список компиляторов, построенных этим методом: GCC, Clang, RustC, Go, Swift, Kotlin, D и т. д.

Процитирую раннюю статью:

вот другое мнение, мнение практика, который не только разрабатывал компиляторы (Zortech C++, D), он ещё и автор языка D. Это Уолтер Брайт. Из интервью с ним:
Вопрос:
Еще раз касательно вашего вышесказанного комментария про ошибки программирования, анализаторы YACC LALR нелюбимы за получаемые сообщения типа «где-то тут есть ошибка, но я не уверен, где именно». Ruby особенно плох в этом плане — вы хотите сказать, что D использует лучший «мешок фокусов» чем YACC?
Уолтер Брайт
Я никогда не использовал YACC; все сделанные мной лексеры и анализаторы полностью самодельные. Хорошее диагностирование ошибок, хорошее восстановление после ошибок для того, чтобы анализ мог быть продолжен без генерации моря ложных сообщений, — всё это в большей степени искусство, чем наука.
Что же касается остальных пунктов, то зачем им Ваше внимание? Вы же не собираетесь создавать какой-то язык или писать компилятор. Значит, можно просто пройти мимо этой темы.

Ну не нравится Вам динамическая типизация. Но как это скажется на судьбе языков — как настоящих, так и будущих? Если Вы не создаёте языки и компиляторы с учётом изложенных пунктов, то слова так и останутся словами.

1) то, что я не хочу делать сам, это значит, что я хочу чтобы это сделал кто-то другой. Чтобы разжечь пламя, надо разбрасывать искры.
2) про то, нужен или не нужен рекурсивный спуск - мне безразлично, просто рекурсивным спуском я уже программировал, ещё раз мне не интересно. Но вот кому-то другому... может найтись какая-то другая мотивация
3) с динамической типизацией то же самое, что с рекурсивным спуском. Её я уже делал, а вот шаблоны не осилил.
4) про не видят разницы, Борхеса (и собак императора), а так же рекурсивный спуск - это не в тему, из-за непонимания моих целей (который не совпадают с целями Юрия, некорректно приписываемыми мне). Можно видеть разницу и написать так в силу каких-то других причин. А потом обидеться за приписывание несуществующих свойств (например человечности зверю).
В целом ответ Юрия выглядит плохо, является понтованием/пережевыванием более ранних выступлений и не мотивирует.
А между тем идея у меня свежая - максимально плохой, но максимально лёгкий язык сделать на его сайте ещё не предлагали.
При этом язык всё ещё должен удовлетворять каким-то минимальным требованиям (иначе выйдет брайнфак). Обсуждение именно таких требований хотел бы я видеть.

Отредактировано Лис (2023-05-18 04:43:12)

0

6

Лис написал(а):

4) безразмерные массивы
«Структура данных, позволяющая идентифицировать ее элементы не по числовому индексу, а по произвольному, называется словарем или ассоциативным массивом. Соответствующая структура данных в языке Питон называется dict»
«Особенностью ассоциативного массива является его динамичность: в него можно добавлять новые элементы с произвольными ключами и удалять уже существующие элементы. При этом размер используемой памяти пропорционален размеру ассоциативного массива.»

Самое главное, что заранее не нужно объявлять или знать размер.

В РЯП для переменных уже реализована философия описанного текста.
То есть существуют те переменные, которые присвоены.
Объявлять их не надо, так как все они вещественные изначально.

Так же и будет с массивами.
И не надо объявлять длину массива,
так как изначально по умолчанию любой массив динамичен.
А количество значимых элементов в нём определяется,
тем, какие индексы в массиве были присвоены.
Неприсвоенные элементы массива возвращают ноль.
Так же и неприсвоенные переменные возвращают ноль.

Есть задумка в качестве индекса массива использовать вещественное число,
но при использовании могут быть нюансы,
то есть округление вещественного числа до какого-то знака
может некорректно сработать (на одну последнюю циферку неправильно округлит).

Можно замутить аппроксимацию значений массива по индексам массива.
Это будет полезно при навигации дронов.
Но дроны могут сейчас использоваться в военных целях.
А я не рассматриваю в своей деятельности приоритетной
военную область применения,
поэтому пока что не буду ничего делать,
пока всё не уляжется.

0

7

NuShaman написал(а):

уже реализована

NuShaman написал(а):

и будет с массивами

Я вижу некоторое противоречие в этих двух фразах. Так реализовано, или будет?
Если "будет", то получается, что сейчас не реализовано.

NuShaman написал(а):

поэтому пока что не буду ничего делать

Да-да.

Отредактировано Лис (2023-05-18 06:51:57)

0

8

Тема выбрана интригующе: "Как сделать максимально плохой язык?"
Язык - это качество человека.
То есть человек хочет выдумать язык программирования,
на котором было бы легко писать программы.
Но у машины есть только нули и единицы,
и нет языка (пока человек ни прикрутит ей язык).

Язык программирования, где нули и единицы,
это уже что-то типа брэйнфака.
Но сложная вычислительная программа,
написанная на брэйнфаке,
будет выполняться десятилетиями (даже с учётом возможного будущего увеличения мощностей).
За это время программист погасит ипотеку, выйдет на пенсию и умрёт.

Поэтому человеку нужно быстро.
Машине-то фиолетово, она может столетиями вычислять,
аккумуляторы только заряжай.

0

9

Пропаганда ипотек (и таким образом потреблендства).

0

10

Лис написал(а):

Пропаганда ипотек (и таким образом потреблендства).

Пропаганда пустой (или осмысленной, но бесполезной) болтовни.

0

11

http://compiler.su/opisanie-yazyka.php#14

MihalNik написал(а):

Рекурсивный спуск — простой, но ограниченный механизм.
Поэтому ему соответствует именно простой синтаксис — тогда достижимы быстрая компиляция и легкость обучения.
Дело лишь в том, насколько он соответствует языку. А то придется, например, расставлять дополнительные скобки в исходниках, чтобы компилятор жутко не тормозил и люди потом не путались, это в лучшем случае.

MihalNik - молоде́ц, рубит правду-матку. Буду на него ссылаться и цитировать в качестве эксперта по этому вопросу.
А Юрия нельзя подпускать к государственным комиссиям.

0