Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 25.09.13 10:18
Оценка:
В NemerleWeb мы умеем генерировать классы из описания типизации JavaScript на базе TypeScript-а.
Однако у TypeSript-а структурная типизация , что позволяет писать такой код:

interface A {
 F() : { x : any; y : string; };
 F(a : any) : { x : number; };

 G(val : { x : any; y? : string; }) : void; // y? - означает что в типе не обязан быть 'y'
}

...
var a = GetA();
a.G(a.F());
a.G(a.F(1));


Неясно как лучше это перевести на Nemerle.
Есть несколько вариантов , но в итоге все сводится к тому, что нужна структурная типизация в CLR

Может есть свежие идеи ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Анонимные типы и структурная типизация
От: STDray http://stdray.livejournal.com
Дата: 25.09.13 12:54
Оценка:
_NN>Может есть свежие идеи ?
Надо посмотреть, как в Скале сделано.
Re[2]: Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 25.09.13 13:01
Оценка:
Здравствуйте, STDray, Вы писали:

_NN>>Может есть свежие идеи ?

STD>Надо посмотреть, как в Скале сделано.

На StackOverflow пишут что через рефлексию.

Это конечно интересно, но мне из этого еще нужно генерировать простой JS
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 25.09.13 13:07
Оценка:
Здравствуйте, _NN_, Вы писали:

Самое то главное, я хочу во время компиляции проверять типы, а не падать во время работы.
http://rsdn.nemerleweb.com
http://nemerleweb.com
йм
Re[4]: Анонимные типы и структурная типизация
От: STDray http://stdray.livejournal.com
Дата: 25.09.13 13:50
Оценка:
_NN>Самое то главное, я хочу во время компиляции проверять типы, а не падать во время работы.
Я вариантов кроме рефлексии и генерации кучи перегрузок по использованию не вижу.
Re[5]: Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 25.09.13 14:22
Оценка:
Здравствуйте, STDray, Вы писали:

_NN>>Самое то главное, я хочу во время компиляции проверять типы, а не падать во время работы.

STD>Я вариантов кроме рефлексии и генерации кучи перегрузок по использованию не вижу.

Есть вариант решения на базе макросов типа :
def x = a.F();
a.G(structural_cast x);

И тут макрос проверит типы и если можно, то создаст объект нового типа с копированием значений.

Хотя я тут подумал, ведь в самом коде JS преобразований то не будет, тем более наверное такого макроса достаточно.
Код все равно будет в JS без преобразований.
Похоже это и есть решение =)
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Анонимные типы и структурная типизация
От: Аноним  
Дата: 25.09.13 17:47
Оценка:
Здравствуйте, _NN_, Вы писали:

я думал забили вы на это уже давно
Re[2]: Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 25.09.13 18:05
Оценка:
Здравствуйте, Аноним, Вы писали:

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


А>я думал забили вы на это уже давно


Забили на что ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Анонимные типы и структурная типизация
От: Аноним  
Дата: 25.09.13 18:09
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Аноним, Вы писали:


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


А>>я думал забили вы на это уже давно


_NN>Забили на что ?


На NemerleWeb. До сих пор нет компонентной части (кнопочки, едиторы и прочий хлам без нтмл). Нет возможности скомпилировать в файл и применять на десктопе (замена винформам). И т д.

Но вообщем порадовали, что не забросили проект.
Re[4]: Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 25.09.13 18:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>На NemerleWeb. До сих пор нет компонентной части (кнопочки, едиторы и прочий хлам без нтмл). Нет возможности скомпилировать в файл и применять на десктопе (замена винформам). И т д.

Делаем по мере возможного времени.
NemerleWeb нигде не позиционировался как замена винформам .

Если хотите получить выхлоп JS через NemerleWeb это не проблема, а что дальше то делать будете ?

А>Но вообщем порадовали, что не забросили проект.

Вы присоединяйтесь , это действительно порадует
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Анонимные типы и структурная типизация
От: Аноним  
Дата: 25.09.13 19:43
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Аноним, Вы писали:


А>>На NemerleWeb. До сих пор нет компонентной части (кнопочки, едиторы и прочий хлам без нтмл). Нет возможности скомпилировать в файл и применять на десктопе (замена винформам). И т д.

_NN>Делаем по мере возможного времени.
_NN>NemerleWeb нигде не позиционировался как замена винформам .

_NN>Если хотите получить выхлоп JS через NemerleWeb это не проблема, а что дальше то делать будете ?


А>>Но вообщем порадовали, что не забросили проект.

_NN>Вы присоединяйтесь , это действительно порадует

Говори что надо делать.
Я попробую.
Re[6]: Анонимные типы и структурная типизация
От: _NN_ www.nemerleweb.com
Дата: 26.09.13 07:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Говори что надо делать.

А>Я попробую.

А что хотите делать ? Работы то немало

Во первых есть баги которые нужно когда-то починить.
Потом в планах улучшение сайта с добавлением примеров и хорошим объяснением как пользоваться фреймворком.
Далее еесть еще Дерево для rsdn.ru созданнео на NemerleWeb
Автор: ionoy
Дата: 23.05.13
(адрес будет другим в итоге).

Выбирайте что вам по душе
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[6]: Анонимные типы и структурная типизация
От: ionoy Эстония www.ammyui.com
Дата: 26.09.13 08:20
Оценка: 30 (1)
Здравствуйте, Аноним, Вы писали:

А>Говори что надо делать.

А>Я попробую.

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

Я тут для примера накидал Button dropdown из Bootstrap

Результат: http://www.nemerleweb.com/workbench
Код:

  public enum ButtonStyle { | Default | Primary | Success | Info | Warning | Danger }
    
  [Unit]
  class ButtonDropdown
  {    
    _buttons : list[(string * string)];
    _buttonStyle : ButtonStyle;
    
    public ButtonClass : string {
      get {
        match(_buttonStyle) {
        | Default => "btn-default"
        | Primary => "btn-primary"
        | Success => "btn-success"
        | Info => "btn-info"
        | Warning => "btn-warning"
        | Danger => "btn-danger"
        }
      }
    }
    
    public this(buttons : list[(string * string)], buttonStyle : ButtonStyle) {
      _buttons = buttons;
      _buttonStyle = buttonStyle;
    }
    
    [Html]
    public View() : string {
      <#
      <div class="btn-group">
        <button type="button" attr-class="$("btn dropdown-toggle " + ButtonClass)" data-toggle="dropdown">
          Action <span class="caret"></span>
        </button>
        <ul class="dropdown-menu">
          <li $foreach(button in _buttons)> 
            <a attr-href="$(button[1])">$(button[0])</a>
          </li>
        </ul>
      </div>
      #>
    }
  }


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

  [Unit]
  class Page
  {    
    _buttonDropdown : ButtonDropdown;
        
    public this() {
      _buttonDropdown = ButtonDropdown([("google.com", "http://www.google.com"), ("rsdn.ru", "http://www.rsdn.ru")], ButtonStyle.Danger);
    }
    
    [Html]
    public View() : string {
      <#
        <div template="$(template(_buttonDropdown))"></div>
      #>
    }
  }
www.livexaml.com
www.ammyui.com
www.nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.