| krlz ( @ 2009-02-28 17:25:00 |
Во многих функциональных и динамических языках, есть тип кортеж. Котреж это последователь=ность фиксированного размера. Например, пара, тройка, четверка, это все кортежи. Они бывают полезны, когда мы хотим возвратить из метода несколько значений, и в том коде, который работает с сущностями, состоящими из нескольких элементов, но они не настолько важны, чтобы заводить отдельный класс под них.
Давайте посмотрим, как это было реализовано в MPS.
У нас есть тип кортежа, вот так, например, мы определяем пару из строки и целого числа:

Также у нас есть специальный литерал для создания кортежей:

У каждого элемента кортежа есть имя, при помощи которого можно получить к нему доступ:

Кортежи не изменяемы, так что вы можете создавать новые кортежи, но не можете изменять уже созданные. Если типы кортежей имеют одни и те же типы соответсвующих элементов, то их можно присваивать друг другу. Т.е можно написать что-то вроде:

Чтобы реализовать кортежи потребовалось около пол дня, что, по моему, очень продуктивно :-). Фичу можно будет повертеть в руках в Бета2, которую мы выпустим на днях
Основная сила MPS заключается именно в возможности таких расширений. Взяв несколько расширений baseLanguage, можно быть уверенным в том, что они будут совместимы друг с другом. В MPS тажке можно делать обычные DSL-и, но это не самый лучший способ использовать его. Простые DSL-и хороши, но без возможностей расширения/встраивания кода туда, возможность их повторно использовать будет существенно ограничена.