Re[6]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 07.02.11 18:53
Оценка:
Здравствуйте, alvas, Вы писали:

ВВ>>Посмотрите, как реализован ElaArray. У массива есть встроенные поля, представляющие собой функции для изменения его in-place. Также полезно глянуть на ElaRecord. Он как раз поддерживает GetField|SetField.


A>Спасибо за информацию, но я просил код примера.


А чем приведенные мной ссылки не нравятся?
Re[7]: Ela. Разработка интерпретируемого языка программирова
От: alvas  
Дата: 07.02.11 19:03
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

A>>Спасибо за информацию, но я просил код примера.


ВВ>А чем приведенные мной ссылки не нравятся?


Да всем нравится, но глянь как все красиво начиналось.
Можно "передать любой — целое число, массив, собственный тип — неважно".
А закончилось ...


Все начиналось как плевое дело, а теперь нас посылают служить в Боснию? (с) Карты, деньги, два ствола.



Так можешь выложить пример как изменить заголовок формы или там ее размер передав в Ela?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[8]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 07.02.11 19:51
Оценка:
Здравствуйте, alvas, Вы писали:

A>Да всем нравится, но глянь как все красиво начиналось.

A>Можно "передать любой — целое число, массив, собственный тип — неважно".
A>А закончилось ...

Я ведь тебе сказал, что автоматических биндингов нет. Следовательно, нужно писать враппер. Что никак не отменяет вышесказанного.

A>Так можешь выложить пример как изменить заголовок формы или там ее размер передав в Ela?


Пишешь враппер
Как-то так:

public sealed class ElaForm : ElaObject
{
    private Form form;

    public ElaForm(Form form) : base(ElaTraits.GetField|ElaTraits.SetField)
    {
        this.form = form;
    }
    
    
    protected override ElaValue GetField(string field, ExecutionContext ctx)
    {
        if (field == "Text")
            return new ElaValue(form.Text);
        else
        {
            ctx.UnknownField(field, new ElaValue(this));
            return Default();
        }
    }


    protected override void SetField(string field, ElaValue value, ExecutionContext ctx)
    {
        if (field == "Text")
            form.Text = value.AsString(ctx);
        else
            ctx.UnknownField(field, new ElaValue(this));
    }
}


Далее выполняешь код, используя исправленную функцию Eval из доки:

Eval("$obj.Text <- \"New form caption\"", new { obj = new ElaForm(myForm) });
Re[9]: Ela. Разработка интерпретируемого языка программирова
От: alvas  
Дата: 07.02.11 19:58
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Далее выполняешь код, используя исправленную функцию Eval из доки:


ВВ>
ВВ>Eval("$obj.Text <- \"New form caption\"", new { obj = new ElaForm(myForm) });
ВВ>


Вот это другое дело
Буду копать
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[10]: Ela. Разработка интерпретируемого языка программиров
От: Воронков Василий Россия  
Дата: 07.02.11 20:29
Оценка:
Здравствуйте, alvas, Вы писали:

A>Вот это другое дело

A>Буду копать

На самом деле имитировать классы для Ela не очень удобно. Лучше все-таки готовить более функциональное АПИ. Его и из языка будет удобнее использовать. Например, альтернативная реализация вышеприведенного, но через модуль будет выглядеть так:

//Универсальный враппер для любого объекта, для Ela - это блек бокс. Работать можно только через ваше АПИ.
public sealed class ElaWrapper<T> : ElaObject
{
    public T Value { get; private set; }

    public ElaForm(T value) : base(ElaTraits.None)
    {
        Value = value;
    }
}


public class FormModule : Ela.Linking.ForeignModule
{   
    public override void Initialize()
    {  
        base.Add<ElaObject>("create", CreateForm);  
        base.Add<String,ElaObject,ElaObject>("setCaption", SetCaption);  
        base.Add<ElaObject,String>("getCaption", GetCaption);  
        
        base.Add<Int32,ElaObject,ElaObject>("setWidth", SetWidth);  
        base.Add<ElaObject,Int32>("getWidth", GetWidth);  
        
        base.Add<Int32,ElaObject,ElaObject>("setHeight", SetHeight);  
        base.Add<ElaObject,Int32>("getHeight", GetHeight);  
    }
    
    
    public ElaObject CreateForm()
    {
        return new ElaWrapper<Form> { Value = new Form { Text = caption } };
    }
    
    
    public ElaObject SetCaption(string caption, ElaObject obj)
    {
        var frm = (ElaWrapper<Form>)obj;
        obj.Value.Text = caption;
        return obj;
    }
    
    
    public string GetCaption(ElaObject obj)
    {
        var frm = (ElaWrapper<Form>)obj;
        return obj.Value.Text;
    }
    
    
    public ElaObject SetWidth(int width, ElaObject obj)
    {
        var frm = (ElaWrapper<Form>)obj;
        obj.Value.Width = width;
        return obj;
    } 
    
    
    public int GetWidth(ElaObject obj)
    {
        var frm = (ElaWrapper<Form>)obj;
        return obj.Value.Width;
    }
    
    public ElaObject SetHeight(int height, ElaObject obj)
    {
        var frm = (ElaWrapper<Form>)obj;
        obj.Value.Height = height;
        return obj;
    } 
    
    public int GetHeight(ElaObject obj)
    {
        var frm = (ElaWrapper<Form>)obj;
        return obj.Value.Height;
    }
}


Использование:

open Form with create, setCaption, setWidth, setHeight

//В конце получаем инициализированную форму
let frm = create () |> setCaption "Form1" |> setWidth 100 |> setHeight 200
Re: Ela. Разработка интерпретируемого языка программирования
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.03.11 06:50
Оценка:
Здравствуйте, Воронков Василий Владимирович, Вы писали:

Всетаки для динамических языков нужна псевдотипизация для интеллисенсе прежде всего.
Очень удобно получатьподсказку через точку,сигнатуры методв итд. При этом резко уменьшается число опечаток и набор текста, т.к. писать приходится оочень много.
По поврду наследования тожеспорно, т.к. при наличии иерархии общих полей и методов,общую часть приходится выводить в отдельные модули а при развитом наследовании вызывает путаницу, чего нет при перекрытии предка. Здесь опять же речь идет не о контракте, а о повторном использовании кода, что в реализации не сложно при налчии модулей предка.
и солнце б утром не вставало, когда бы не было меня
Re[2]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 28.03.11 09:07
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Всетаки для динамических языков нужна псевдотипизация для интеллисенсе прежде всего.

S>Очень удобно получатьподсказку через точку,сигнатуры методв итд. При этом резко уменьшается число опечаток и набор текста, т.к. писать приходится оочень много.

Ну это отедльная задача. Делать ограниченный вывод типов можно и для динамического языка. Собственно, так нередко делается. См. тот же pychecker.

S> По поврду наследования тожеспорно, т.к. при наличии иерархии общих полей и методов,общую часть приходится выводить в отдельные модули а при развитом наследовании вызывает путаницу, чего нет при перекрытии предка. Здесь опять же речь идет не о контракте, а о повторном использовании кода, что в реализации не сложно при налчии модулей предка.


Вовсе необязательно. Наследование по сути не более чем ad hoc полиморфизм. Причем далеко не самая удачная его форма. Те же тайп-классы в Хаскеле с этой функцией справляются куда удачнее. Динамическому языку ничего и делать-то особо не нужно, чтобы получить такой полиморфизм. Он там как бы "первоклассный". Чтобы на каком-нибудь ДжаваСкрипте имитировать наследование не нужны даже прототипы — достаточно обычных объеков. Разница по сравнению, скажем, с Питоном в том, что ДжаваСкрипте функция-конструктор объекта будет просто функцией. В питоне — она будет делать вид, что является классом, тогда как на самом деле не более чем функция конструктор.

Здесь важно то, что в динамических языках классов нет. Ибо нет системы типов — в том смысле, в котором этот термин употреблял, скажем, Пирс, — и класс не может выступать в роли "контракта", ибо этот контракт просто некому проверять. Поэтому что бы ты ни делал, все равно будет просто утиная типизация.
Re[3]: Ela. Разработка интерпретируемого языка программирова
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.03.11 10:10
Оценка:
Здравствуйте, Воронков Василий, Вы писали:


ВВ>Здесь важно то, что в динамических языках классов нет. Ибо нет системы типов — в том смысле, в котором этот термин употреблял, скажем, Пирс, — и класс не может выступать в роли "контракта", ибо этот контракт просто некому проверять. Поэтому что бы ты ни делал, все равно будет просто утиная типизация.

Может я не совсем понял, но объектные функции мало ничем не отличаются от функций расширения. В том же питоне объект указывается явно.
Вот очень неудобно работать со структурами, т.к. они не поддерживают наследование и перекрытие функций. По сути наследование без классов это использование методов структуры принятую за предка. Контракт существует, но на уровне имен и сигнатуры методов.При этом проверка происходит только во время исполнения.
Но и можно в теле метода наследника ссылаеться на метод предка без копирования метода.
А иерархия в моей работе неизбежна, и недостатки наследования для меня очевидны.
и солнце б утром не вставало, когда бы не было меня
Re[4]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 28.03.11 10:45
Оценка:
Здравствуйте, Serginio1, Вы писали:

ВВ>>Здесь важно то, что в динамических языках классов нет. Ибо нет системы типов — в том смысле, в котором этот термин употреблял, скажем, Пирс, — и класс не может выступать в роли "контракта", ибо этот контракт просто некому проверять. Поэтому что бы ты ни делал, все равно будет просто утиная типизация.

S> Может я не совсем понял, но объектные функции мало ничем не отличаются от функций расширения. В том же питоне объект указывается явно.
S> Вот очень неудобно работать со структурами, т.к. они не поддерживают наследование и перекрытие функций. По сути наследование без классов это использование методов структуры принятую за предка. Контракт существует, но на уровне имен и сигнатуры методов.При этом проверка происходит только во время исполнения.

Все, что ты описываешь, решается без наследования. "Структура" на самом деле представляет собой просто хэш-таблицу с функциями. Наследование — копирование хэш-таблицы. Перекрытие — замена отдельных ключей в хэш-таблице. Это, если хочешь, готовая таблица диспетчеризации, которую ты можешь заполнять ручками.

В реальности классы а ля Питон — это не более чем сахар над подобным механизмом. Ну т.е. сахар этот может и уместен и упрощает использование языка, но это совсем не те же самые классы, что в С++, шарпе, Джаве и пр.

Тайп-классы еще лучше. Лучше тем, что это все та же хэш-таблица с функциями — причем именно так все и реализовано в том же Хаскеле. Но хэш-таблица не прибита гвоздями к объекту, а передается отдельно. Т.о. можно передать один и тот же набор методов для разных объектов. Мы просто-напросто перестаем прикидываться классами и выворачиваем механизм с хэш-таблицами явно, и он в результате становится более гибким.

Я лишь хочу сказать, что программировать в ООП-стиле можно практически на любом динамическом языке, для этого не нужно каких-то специальных фич. ООП — это фактически ad hoc полиморфизм через объекты, он присутствует в любой динамике, если там вообще есть возможность создать объект.

Но под class based OOP я все же понимаю вполне конкретную штуку. И эта штука, если посмотреть объективно, нереализуема в динамически-типизированном языке просто потому что она изначально расчитана на статику и требует наличия системы типов.
Re[5]: Ela. Разработка интерпретируемого языка программирова
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.03.11 12:59
Оценка:
Здравствуйте, Воронков Василий, Вы писали:


ВВ>Но под class based OOP я все же понимаю вполне конкретную штуку. И эта штука, если посмотреть объективно, нереализуема в динамически-типизированном языке просто потому что она изначально расчитана на статику и требует наличия системы типов.

Под ООП подразумевается наследование, перекрытие. А как оно будет реализовано никого не волнунет.
Так или иначе присутствуют некая структура (Хэш таблица) с методами, методы внутри могут ссылаться на метод другой структуры являющейся для данной структуры base.
То есть присутсвует поле base.
Решение просто генерить методы которые присутствуют в base если эти методы не перекрыватся, внутри которых вызов методов base.
Это не противоречит и твоим понятиям об ООП. Просто добавить другой вид сахара.
Так и в структурах из-за того что нет наследования присутствует поля структуры являющиеся по сути родителем.
Так или иначе суть иерархи присутсвет во многис случаях, и удобное повторное использование кода c перекрытием всегда будет приветствоваться.
А ООП по сути свой и есть сахар.
и солнце б утром не вставало, когда бы не было меня
Re[6]: Ela. Разработка интерпретируемого языка программирова
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 28.03.11 13:04
Оценка:
Здравствуйте, Serginio1, Вы писали:

Можно даже не имея предварительно информации о типе родителя, пересылать все методы которые не находятся в объекте
пересылать полю являющемся родителем. Это поле может быть единственным, а может и нет (при множественном наследовании).
Сдесь уже от реализации зависит.
и солнце б утром не вставало, когда бы не было меня
Re[7]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 28.03.11 15:32
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Можно даже не имея предварительно информации о типе родителя, пересылать все методы которые не находятся в объекте

S>пересылать полю являющемся родителем. Это поле может быть единственным, а может и нет (при множественном наследовании).
S>Сдесь уже от реализации зависит.

Ты уже практически изобрел Prototype based OOP через делегацию
Re: Ela. Разработка интерпретируемого языка программирования
От: alvas  
Дата: 19.04.11 10:46
Оценка:
Здравствуйте, Воронков Василий Владимирович, Вы писали:

ВВВ>Статья:

ВВВ>Ela. Разработка интерпретируемого языка программирования на .NET Framework
Автор(ы): Воронков Василий Владимирович
Дата: 23.12.2010
Описание проекта, посвященного разработке языка программирования Ela.


ВВВ>Авторы:

ВВВ> Воронков Василий Владимирович

ВВВ>Аннотация:

ВВВ>Описание проекта, посвященного разработке языка программирования Ela с использованием C# и .NET Framework.

С удовольствием смотрю за развитием Ela.
Хотел спросить. Вы книгу сразу на английском пишете или есть русские черновики?
Если есть — не могли бы вы их выслать или выложить в открытый доступ?
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[2]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 19.04.11 11:32
Оценка:
Здравствуйте, alvas, Вы писали:

A>С удовольствием смотрю за развитием Ela.

A>Хотел спросить. Вы книгу сразу на английском пишете или есть русские черновики?
A>Если есть — не могли бы вы их выслать или выложить в открытый доступ?

Черновиков русских нет. Да вроде мой английский... эээ... достаточно "русский"

А на русском я недавно блог завел: http://blogs.msdn.com/b/__1/
Там скорее в целом об ФП "простым языком", так сказать. Но есть и пересечения с книгой.
Re[3]: Ela. Разработка интерпретируемого языка программирова
От: alvas  
Дата: 19.04.11 12:15
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Черновиков русских нет. Да вроде мой английский... эээ... достаточно "русский"


Печально. Просто последнюю версию ela скачало 6 человек. Последнюю книгу 15. Я в том числе.
Я это 17% и 7% аудитории соответственно = русскоязычная аудитория. Как минимум. Надеюсь больше
Стоит ли игнорировать эту аудиторию, ориентируясь на абстрактных англоязычных?

P.S. Nemerle потому и ожил, что вокруг него собралось комьюнити. В данном случае русскоговрящее.

P.P.S. В общем я за русскую версию книги
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[4]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 19.04.11 12:37
Оценка:
Здравствуйте, alvas, Вы писали:

A>Печально. Просто последнюю версию ela скачало 6 человек. Последнюю книгу 15. Я в том числе.

A>Я это 17% и 7% аудитории соответственно = русскоязычная аудитория. Как минимум. Надеюсь больше

Честно, не очень понял, что за проценты

A>Стоит ли игнорировать эту аудиторию, ориентируясь на абстрактных англоязычных?

A>P.S. Nemerle потому и ожил, что вокруг него собралось комьюнити. В данном случае русскоговрящее.

Мне казалось, английскую смогут читать все, как русскоговорящие, так и англоговорящие. А русскую — только русские.

A>P.P.S. В общем я за русскую версию книги


Из идеологических соображений или на английском действительно тяжело читать?
Re[5]: Ela. Разработка интерпретируемого языка программирова
От: alvas  
Дата: 19.04.11 13:09
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, alvas, Вы писали:


A>>Печально. Просто последнюю версию ela скачало 6 человек. Последнюю книгу 15. Я в том числе.

A>>Я это 17% и 7% аудитории соответственно = русскоязычная аудитория. Как минимум. Надеюсь больше

ВВ>Честно, не очень понял, что за проценты


A>>Стоит ли игнорировать эту аудиторию, ориентируясь на абстрактных англоязычных?

A>>P.S. Nemerle потому и ожил, что вокруг него собралось комьюнити. В данном случае русскоговрящее.

ВВ>Мне казалось, английскую смогут читать все, как русскоговорящие, так и англоговорящие. А русскую — только русские.


A>>P.P.S. В общем я за русскую версию книги


ВВ>Из идеологических соображений или на английском действительно тяжело читать?


Тяжело читать потому что не родной.
Как я читаю доку на русском? Распечатываю на принтере и привет диван
Как я читаю доку на английском? Гугл Транслейт и прощай диван

VladD2 пишет статьи на русском, а потом просит перевести ее на английский. Ты же не считаешь его тупым?

Если перевод на русский будешь делать только для меня — естественно шкурка выделки не стоит. Но есть хороший шанс создать комьюнити вокруг Ela на rsdn. Много тебе фидбека от "абстрактных англоговорящих"? Если, да — не парься. Если нет — подумай над моими словами.

P.S. Я ощутил потенциал Ela + твоя скорость обновлений вдохновляют.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re[6]: Ela. Разработка интерпретируемого языка программирова
От: Воронков Василий Россия  
Дата: 19.04.11 13:29
Оценка:
Здравствуйте, alvas, Вы писали:

Ты понимаешь, я так вопрос не ставил. И действительно не думал, что кто-то будет читать через Гугл Транслейт. С т.з. скорости мне все равно, на каком языке писать — я много лет писал техническую документацию на английском. Если бы на русском я бы смог писать книгу, скажем, в два раза быстрее, то тут вопроса бы не возникло.
Влад, кстати, в первую очередь, так сказать, художественно переводил материалы с nemerle.org, которые уже были доступны на английском. Т.е. фактически знакомтл русское комьюнити с Немерле. Причем первоначальную документацию на английском по Немерле писали тоже не англичане, а поляки.
В общем выбор английского языка мне показался достаточно естественным

Перевести, конечно, можно, но поддерживать версию на двух языках сложновато.

A>Если перевод на русский будешь делать только для меня — естественно шкурка выделки не стоит. Но есть хороший шанс создать комьюнити вокруг Ela на rsdn. Много тебе фидбека от "абстрактных англоговорящих"? Если, да — не парься. Если нет — подумай над моими словами.


Ну а как определить, какое количество людей отпугивает документация на английском?

A>P.S. Я ощутил потенциал Ela + твоя скорость обновлений вдохновляют.


Ну пока можешь блог почитать. Кстати, УРЛ починили: http://blogs.msdn.com/b/vorov/
Половина книги "обще-теоретического" характера туда переедет.
Re[7]: Ela. Разработка интерпретируемого языка программирова
От: alvas  
Дата: 19.04.11 14:06
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, alvas, Вы писали:


ВВ>Ты понимаешь, я так вопрос не ставил. И действительно не думал, что кто-то будет читать через Гугл Транслейт. С т.з. скорости мне все равно, на каком языке писать — я много лет писал техническую документацию на английском. Если бы на русском я бы смог писать книгу, скажем, в два раза быстрее, то тут вопроса бы не возникло.

ВВ>Влад, кстати, в первую очередь, так сказать, художественно переводил материалы с nemerle.org, которые уже были доступны на английском. Т.е. фактически знакомтл русское комьюнити с Немерле. Причем первоначальную документацию на английском по Немерле писали тоже не англичане, а поляки.
ВВ>В общем выбор английского языка мне показался достаточно естественным

И не только тебе. И полякам тоже. И кто в конце концов занимается разработкой N? Абстрактные англоговорящие?

ВВ>Перевести, конечно, можно, но поддерживать версию на двух языках сложновато.


Если не сложно сделай первую версию перевода. А там как пойдет.

A>>Если перевод на русский будешь делать только для меня — естественно шкурка выделки не стоит. Но есть хороший шанс создать комьюнити вокруг Ela на rsdn. Много тебе фидбека от "абстрактных англоговорящих"? Если, да — не парься. Если нет — подумай над моими словами.


ВВ>Ну а как определить, какое количество людей отпугивает документация на английском?


A>>P.S. Я ощутил потенциал Ela + твоя скорость обновлений вдохновляют.


ВВ>Ну пока можешь блог почитать. Кстати, УРЛ починили: http://blogs.msdn.com/b/vorov/

ВВ>Половина книги "обще-теоретического" характера туда переедет.

Ага.
http://alvas.net — Аудио-инструменты для .Net разработчиков
Re: Ela. Разработка интерпретируемого языка программирования
От: dotneter  
Дата: 26.04.11 10:15
Оценка:
Здравствуйте, Воронков Василий Владимирович, Вы писали:

ВВВ>Итак, было уже немало сказано о преимуществах динамически-типизированных языков

Что то я так и не понял в чем преимущество? Есть вывод типов, есть структурные типы, зачем нужна динамика?
Talk is cheap. Show me the code.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.