Большинство языков позволяют "tweek" некоторым расширенным частям синтаксиса (С++, С#) и/или семантики, которые вы будете использовать в своем коде (Katahdin, lua). Но я не слышал о языке, который может просто полностью определить, как будет выглядеть ваш код. Итак, не существует ли уже существующего языка, который имеет такие возможности для переопределения синтаксиса all и определения семантики?
Пример того, что я хочу сделать, в основном из кода С# ниже:
foreach(Fruit fruit in Fruits)
{
if(fruit is Apple)
{
fruit.Price = fruit.Price/2;
}
}
Я хочу, чтобы у меня была возможность написать вышеприведенный код на моем идеальном языке:
Check if any fruits are Macintosh apples and discount the price by 50%.
Преимущества, которые приходят мне на ум с точки зрения кодера на этом "мнимом" языке:
- Очень ясно, что происходит (самоописательно) - это простой английский, ведь даже ребенок поймет мою программу.
- Скрывает все сложности, которые я должен написать на С#. Но почему я должен знать, что if, арифметические операторы и т.д., поскольку уже реализованы
Недостатки, которые я вижу для кодера, который будет поддерживать эту программу, следующие:
- Возможно, вы выразили бы эту программу по-другому от меня, чтобы не получить все информацию, которую я выразил в своем предложении
- Программы могут быть довольно многословными и сложными для отладки, но, если возможно, даже приблизить этот тип синтаксиса, возможно, больше людей начнут программировать правильно? Думаю, это было бы потрясающе. Я могу пойти на работу и просто написать эссе, чтобы нарисовать квадрат на winform следующим образом:
Create a form called MyGreetingForm. Draw a square with in the middle of
MyGreetingFormwith a side of 100 points. In the middle of the square write "Hello! Click here to continue" in Arial font.
В приведенном выше коде анализатор должен в основном предположить, что я хочу использовать безымянный квадрат из предыдущего предложения, было бы сложно написать такой интеллектуальный парсер, я думаю, но все же так просто, что я хочу делать.
If the user clicks on square in the middle of MyGreetingForm show MyMainForm.
В приведенном выше коде "в основном" компилятор должен: 1) сгенерировать обработчик события 2) проверить, есть ли какой-либо квадрат в середине формы, а если есть - 3) скрыть форму и показать другую форму
Мне очень сложно это сделать, но это не выглядит невероятно. IMO для меня хотя бы приближает это (я могу лично создать парсер для выполнения 3 шагов выше np, и это в основном то же самое, что он должен делать любым способом, когда вы добавляете даже в С# a.MyEvent=+handler;
, поэтому я не вижу здесь проблемы), поэтому я думаю, что кто-то уже сделал что-то вроде этого? Или существует какое-то практическое бремя сложности для создания такого языка программирования "эссе", который я не вижу? Я имею в виду, что еще хуже, если парсер не так хорош? - ваша программа выйдет из строя, поэтому вам придется переформулировать ее:)