Информация об изменениях

Сообщение Re[21]: А что мешает заменить JS? от 18.03.2017 19:33

Изменено 19.03.2017 12:09 Serginio1

Re[21]: А что мешает заменить JS?
Здравствуйте, vdimas, Вы писали:

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


V>>>Байткод дотнета или джавы принципиально НЕ может быть оптимизированным.

S>> Угу при этом .Net Native создается именно из .Net Core

V>Еще раз.

V>В .Net Native оптимизируется конечный нейтивный код из байт-кода дотнетной VM.
V>Но сам этот байт-код не оптимизирован и не может быть оптимизирован.
V>Гугл, напротив, предлагает уже оптимизированный байт-код.
И чем он не оптимизирован. Для примера

roslyn-linq-rewrite

На самом деле есть две возможности оптимизации при компиляции в Il Roslyn и компиляция в натив RyuJIT

S>>Так и TS и C# тоже ооочень похожи.


V>Э, нет.



S>>Отличие только в обявлении типа.


V>В аннотациях типа.

V>Это серьезное отличие синтаксиса, которое тянет за собой много чего.
Так в Darte и этого нет. Ничего это за собой не тянет. Поверь мне. Я то в отличие от тебя пишу на нем.

V>В С-подобных языках указание типа переменной одновременно означает объявление переменной.

V>Т.е. операция два в одном получается.
V>А если не хочется указывать тип (аннотацию), например, если тип переменной может быть выведен, то требуется ключевое слово для объявления переменных. Мы же не хотим пользоваться не объявленными переменными верно?

Так и в Ts тоже самое. Только вместо

string value

имеем
 value:string


V>А если при этом, таки, требуется указать тип переменной, то получается совсем ж-па, т.к. у нас будет и ключевое слово, и имя переменной и аннотация её типа. Неудобно, как по мне.


ты в чем жопу то увидел.

Для тебя value:string жопа по отношению string value


S>>Плюс автовывод типа в функциях.


V>Так и в Dart автовывод присутствует.

V>И ковариантность полноценная:
V>
V>Mammal peekMammalList(List<Mammal> list) {
V>  return list[2];
V>}

   Где? Mammal  то ты объявил

В TS это так

[cs]
peekMammalList(list:List<Mammal> ) {
 return list[2];
}




V>А в C# полноценная ковариантность поддерживается только на встроенных массивах.

V>Но это же бред, верно?

Почему? в Дженериках и в делегатах

https://msdn.microsoft.com/ru-ru/library/dd469487.aspx
https://msdn.microsoft.com/ru-ru/library/dd469484.aspx

 // Covariant interface.
    interface ICovariant<out R> { }

    // Extending covariant interface.
    interface IExtCovariant<out R> : ICovariant<R> { }

    // Implementing covariant interface.
    class Sample<R> : ICovariant<R> { }

    class Program
    {
        static void Test()
        {
            ICovariant<Object> iobj = new Sample<Object>();
            ICovariant<String> istr = new Sample<String>();

            // You can assign istr to iobj because
            // the ICovariant interface is covariant.
            iobj = istr;
        }
    }
Re[21]: А что мешает заменить JS?
Здравствуйте, vdimas, Вы писали:

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


V>>>Байткод дотнета или джавы принципиально НЕ может быть оптимизированным.

S>> Угу при этом .Net Native создается именно из .Net Core

V>Еще раз.

V>В .Net Native оптимизируется конечный нейтивный код из байт-кода дотнетной VM.
V>Но сам этот байт-код не оптимизирован и не может быть оптимизирован.
V>Гугл, напротив, предлагает уже оптимизированный байт-код.
И чем он не оптимизирован. Для примера

roslyn-linq-rewrite

На самом деле есть две возможности оптимизации при компиляции в Il Roslyn и компиляция в натив RyuJIT

S>>Так и TS и C# тоже ооочень похожи.


V>Э, нет.



S>>Отличие только в обявлении типа.


V>В аннотациях типа.

V>Это серьезное отличие синтаксиса, которое тянет за собой много чего.
Так в Darte и этого нет. Ничего это за собой не тянет. Поверь мне. Я то в отличие от тебя пишу на нем.

V>В С-подобных языках указание типа переменной одновременно означает объявление переменной.

V>Т.е. операция два в одном получается.
V>А если не хочется указывать тип (аннотацию), например, если тип переменной может быть выведен, то требуется ключевое слово для объявления переменных. Мы же не хотим пользоваться не объявленными переменными верно?

Так и в Ts тоже самое. Только вместо

string value

имеем
 value:string


V>А если при этом, таки, требуется указать тип переменной, то получается совсем ж-па, т.к. у нас будет и ключевое слово, и имя переменной и аннотация её типа. Неудобно, как по мне.


ты в чем жопу то увидел.

Для тебя value:string жопа по отношению string value


S>>Плюс автовывод типа в функциях.


V>Так и в Dart автовывод присутствует.

V>И ковариантность полноценная:
V>
V>Mammal peekMammalList(List<Mammal> list) {
V>  return list[2];
V>}


Где? Mammal то ты объявил

В TS это так

peekMammalList(list:List<Mammal> ) {
 return list[2];
}




V>А в C# полноценная ковариантность поддерживается только на встроенных массивах.

V>Но это же бред, верно?

Почему? в Дженериках и в делегатах

https://msdn.microsoft.com/ru-ru/library/dd469487.aspx
https://msdn.microsoft.com/ru-ru/library/dd469484.aspx

 // Covariant interface.
    interface ICovariant<out R> { }

    // Extending covariant interface.
    interface IExtCovariant<out R> : ICovariant<R> { }

    // Implementing covariant interface.
    class Sample<R> : ICovariant<R> { }

    class Program
    {
        static void Test()
        {
            ICovariant<Object> iobj = new Sample<Object>();
            ICovariant<String> istr = new Sample<String>();

            // You can assign istr to iobj because
            // the ICovariant interface is covariant.
            iobj = istr;
        }
    }