zespri>>Что плохого вы видите в этой идее?[»]Balancer>Слово может снимать разное число аргументов. В первую очередь по побочным эффектам, конечно, типа глобальных переменных, но, ИМХО, лишать Форт такой возможности - над этим надо сильно думать
[»]
Я предлагаю оставить возможность слову снимать произвольное количество элементов, я лишь хочу зафикчировать количество аргументов при данном конкретном запуске этого слова.
Откуда ноги растут. Идеи c rtti типами и переключением словарей, конечно здоровские идеи для канонического форта. Но если мы пишем фортоподобный язык под дот нет я бы хотел видеть у него следующие свойства:
1) Возможность без извратов пользоваться любыми уже созданными дотнетными классами
2) Возможность создавать классы которыми без извратов смогут пользоваться другие дотнетные классы
Точно так же как форт накладывает ограничения на реализацию, точно так же и дот нет накладывает свои ограничения. То есть без выполнения 1) и 2) и начинать смысла не имеет.
Далее. Для того что бы вызвать любой дотнетный метод необходимо знать его сигнатуру. Без этого никак. Следовательно надо знать число его параметров. Поэтому когода выполняется слово, то количество его параметров должно быть заранее известно. Я в данном случае представляю, что слова будут реализоваться как дотнетые методы, а не как шитый код. Почему? Всё потому же, я хочу получить язык который может interoperate с другими языками дотнетной платформы, и я хочу избежать написания artificial кода единственным назначением которого является мэпить совершенно не ложащиеся в структкру дотнета фичи языка. Я хочу что бы язык ложился на .net стольже органично как скажем C# и VB.
Я представляю себе это так. На стеке живут не числа а объекты в смысле дот нета. Словарь представляет собой класс со статическими методами. Соотвественно для выполнения слов из текущего словаря не необходимости задавать объект класса, достаточно просто метода и параметров. Для того что бы положить на стек класс необходимо его инициализировать. Для этого будет предназначено слово из стандартного словаря которое будет снимать со стека параметры для конструктора и класть на стек готовый объект. Таким же образом можно будет вызывать методы на верхнем объекте стека, описывать новые объекты состоящие из полей и методов, а так же добавлять статические методы-слова в классы словари.
Это грубая идея. Но это всё не будет работать без того что бы при вызове любого слова не знать на перёд количество его параметров.