Большинство языков позволяют «настраивать» определенные части синтаксиса ( C ++ , C # ) и / или семантики, которые вы будете использовать в своем коде (Катахдин , луа ).Но я не слышал о языке, который может полностью определить, как будет выглядеть ваш код.Так не существует ли уже существующего языка, который бы обладал такими возможностями для переопределения синтаксиса all и определения семантики?
Пример того, что я хочу сделать, в основном из кода C # ниже:
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%.
Преимущества, которые приходят мне в голову, если смотреть с точки зрения кодера на этот «воображаемый» язык:
- Очень ясно, что происходит (самоописание) - это ясноАнглийский, в конце концов, даже ребенок будет понимать мою программу
- Скрывает все сложности, которые я должен написать на C #.Но почему я должен знать, что операторы 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.
InПриведенный выше код «в основном» компилятор должен: 1) сгенерировать обработчик событий 2) проверить, есть ли какой-либо квадрат в середине формы и, если есть - 3) скрыть форму и показать другую форму
Это выглядит очень сложно, но для меня это не выглядит невозможным. По крайней мере, для меня это приблизительное значение (я могу лично сгенерировать парсер для выполнения 3 шагов выше np, и это в основном то же самое, что и в любом случае, когда вы добавляете дажев C # a.MyEvent=+handler;
, поэтому я не вижу здесь проблемы) поэтому я думаю, может быть, кто-то уже сделал что-то подобное?Или есть какое-то практическое бремя сложности для создания такого языка программирования в стиле эссе, которого я не вижу?Я имею в виду, что хуже может случиться, если парсер не так хорош?- ваша программа потерпит крах, поэтому вы должны перефразировать ее:)