Re[10]: А что мешает заменить JS?
От: vdimas Россия  
Дата: 17.03.17 15:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

V>>Так и в чем прикол продолжать есть кактус?

G>Скорость написания деплоя все равно выше.

Так у вас деплой проблемы вызывает?

Я как инженер просто хочу понять мотивы сугубо технического плана.
Вот есть сетевые задачи, которые достоверно на C# или Джаве решаются проще и лучше, чем на node.js.
Т.е. проблема потом установить такое серверное приложение у клиента?
Re[24]: А что мешает заменить JS?
От: Somescout  
Дата: 17.03.17 15:48
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


I>Теоретизирования у тебя, а здесь факты. Разъяснения в доке gwt, черным по белому.


Значит вам не составит труда привести примеры. А вы, вместо этого уже третье (или второе?) сообщение словоблудием занимаетесь.

I>Скажи честно, как часто ты пишешь код вида a = a или a === a ? Ну, в твоём любимом ЯП. Интересует статистика. Если ты такое пишешь каждый день, то конечно, все меняет.


То есть это не проблема, потому что невелик шанс на неё наткнуться на неё. Интересная точка зрения. Мне не нравится.

I>Представь себе, JS это самый популярный язык.

I>Миллионы людей каждый день отлаживает код.

LOL Миллионы людей в лучшем случае говнокодят, благо js с его широкими возможностями monkey-patching'а к этому располагает.
ARI ARI ARI... Arrivederci!
Re[10]: А что мешает заменить JS?
От: vdimas Россия  
Дата: 17.03.17 16:35
Оценка:
Здравствуйте, Serginio1, Вы писали:

V>>Так и в чем прикол продолжать есть кактус?

S>На самом деле сейчас Angular 2 может подмять под себя кучу Фреймворков.

Одно маленькое замечание Angular 2 был разработан c прицелом на dart.


S>Другое дело, что TS ориентирована JS с ограничениями по типам,

S>неудобно писать постоянно this при обращении к полям класса, хотя конечно он значительно приятнее es5 и все таки поддержка типов и аннотаций значительно предпочтительнее чем es6

В присутствии dart нет никакого смысла продолжать писать на TS.
Re[15]: А что мешает заменить JS?
От: Слава  
Дата: 17.03.17 17:42
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Вопрос на засыпку — node.js реализует модель реактора или проактора?

V>Ну вот ты пользуешься им, насколько я понял, т.е. должен понимать, верно?

Поскольку Нода делалась в первую очередь под линуксы, то и и модель там — реактор, т.к. ниже лежат poll, epoll. Но это никому неинтересно, потому что на настолько низкий уровень мало кто опускается.
Re[11]: А что мешает заменить JS?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.03.17 17:51
Оценка:
Здравствуйте, vdimas, Вы писали:

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


V>>>Так и в чем прикол продолжать есть кактус?

S>>На самом деле сейчас Angular 2 может подмять под себя кучу Фреймворков.

V>Одно маленькое замечание Angular 2 был разработан c прицелом на dart.


Только основным языком является TypeScript

S>>Другое дело, что TS ориентирована JS с ограничениями по типам,

S>>неудобно писать постоянно this при обращении к полям класса, хотя конечно он значительно приятнее es5 и все таки поддержка типов и аннотаций значительно предпочтительнее чем es6

V>В присутствии dart нет никакого смысла продолжать писать на TS.


А чем он лучше? Мне TS нравится больше. Плюс у него куча аннотаций типов.
и солнце б утром не вставало, когда бы не было меня
Что мешает написать JVM на Fortran?
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 17.03.17 18:42
Оценка: 1 (1)
Здравствуйте, gandjustas, Вы писали:

G>>>Тем не менее Джава съела долю рынка C++, а C# съел долю рынка Java.

AK>>Там совершенно другая ситуация.
G>Это ты пошутил так, да?

Нет. Вы не понимаете, о чём я говорю.
Чтобы провести аналогию с JS, представьте, что операционная система не поддерживает ничего кроме языка C. Или, ещё лучше — какого-нибудь FORTRAN'а. Все остальные платформы запрещены и не поддерживаются, все эмуляторы и интерпретаторы можно писать только на фортране. Использовать ассемблер нельзя — операционная система не разрешает установку любого низкоуровневого софта, только софт в исходниках на фортране.

Вот попробуйте теперь представить, каков был бы путь Java в таких условиях.
С уважением, Artem Korneev.
Отредактировано 17.03.2017 18:45 Artem Korneev . Предыдущая версия .
Re[10]: А что мешает заменить JS?
От: vdimas Россия  
Дата: 17.03.17 20:28
Оценка: 1 (1)
Здравствуйте, gandjustas, Вы писали:

V>>Тебе коллега правильно сказал — там используется функциональность браузера (АПИ DOM), а не языка JS.

V>>От JS там только динамическое выполнение кода в ячейках, но это умеют, наверно, вообще все динамические языки.
G>Накатай на любом удобном тебе языке. Уложись в 30 строк. Представь что у тебя в любом языке есть DOM API и уложись в 30 строк.

С таким форматированием? ))
Спасибо.
А если с другим форматированием в чуть большее кол-во строк на C#?
  Так пойдёт?
        void MakeExcel()
        {
            dynamic document = webBrowser1.Document.DomDocument;
            var localStorage = new Dictionary<string, string>();
            dynamic table = document.querySelector("table");

            for (var i = 0; i < 6; i++) {
                dynamic row = table.insertRow(-1);

                for (var j = 0; j < 6; j++) {
                    char letter = (char)('A' + j - 1);
                    row.insertCell(-1).innerHtml = i != 0 && j != 0
                        ? "<input id='" + letter + i + "'/>"
                        : i == 0 ? letter.ToString() : i.ToString();
                }
            }

            dynamic inputs = document.querySelectorAll("input");
            var INPUTS = new List<HtmlElement>();

            for (int i = 0, length = inputs.length; i < length; i++) {
                dynamic input = inputs[i];
                INPUTS.Add(webBrowser1.Document.GetElementById(input.id));
            }

            Func<string, object> getter = (id) => {
                if (!localStorage.ContainsKey(id))
                    return "";

                string value = localStorage[id];

                if (value.FirstOrDefault() == '=')
                    return Eval(localStorage, value.Substring(1));
                else {
                    float parsed;
                    return float.TryParse(value, out parsed) ? parsed : (object)value;
                }
            };

            Action computeAll = () => {
                foreach (var elm in INPUTS) {
                    try {
                        dynamic e = elm.DomElement;
                        e.value = getter(e.id);
                    } catch {}
                };
            };

            foreach (var elm in INPUTS) {
                elm.GotFocus += (obj, args) => {
                    dynamic e = ((HtmlElement)obj).DomElement;
                    string value;
                    if (localStorage.TryGetValue(e.id, out value))
                        e.value = value;
                    else
                        e.value = "";
                };

                elm.LostFocus += (obj, args) => {
                    dynamic e = ((HtmlElement)obj).DomElement;
                    localStorage[e.id] = e.value;
                    computeAll();
                };
            };

            computeAll();
        }


Работает...
Основные ужимки и прыжки были в том, что для доступа к DOM нужно переводить в dynamic, но при этом не получается подписаться на события, т.е. делегат не принимается.
В одном коде пришлось совместить как dynamic, так и типизированный HtmlElement сугубо для подписки на события.
Основные лишние строки именно отсюда.

И да, пытался сначала сделать на VBS в браузере, но мой IE11 говорит, что больше не поддерживает VBS.
Так шта, конкретно JS тут не при чём, он уродлив в любом случае.
А DOM мощный, это да...

  За отдельную доплату будет Eval в C#
static string Eval(Dictionary<string, string> vars, string expression)
        {
            CSharpCodeProvider c = new CSharpCodeProvider();
            ICodeCompiler icc = c.CreateCompiler();
            CompilerParameters cp = new CompilerParameters();

            cp.ReferencedAssemblies.Add("system.dll");
            cp.ReferencedAssemblies.Add("system.xml.dll");
            cp.ReferencedAssemblies.Add("system.data.dll");
            cp.ReferencedAssemblies.Add("system.windows.forms.dll");
            cp.ReferencedAssemblies.Add("system.drawing.dll");

            cp.CompilerOptions = "/t:library";
            cp.GenerateInMemory = true;

            StringBuilder sb = new StringBuilder("");
            sb.Append("using System;\n");
            sb.Append("using System.Xml;\n");
            sb.Append("using System.Data;\n");
            sb.Append("using System.Data.SqlClient;\n");
            sb.Append("using System.Windows.Forms;\n");
            sb.Append("using System.Drawing;\n");

            sb.Append("namespace CSCodeEvaler{ \n");
            sb.Append("public class CSCodeEvaler{ \n");
            sb.Append("public object EvalCode(){\n");

            foreach (var pair in vars)
            {
                float value;
                if (pair.Value == null || pair.Value.ToString() == "" ||
                    !float.TryParse(pair.Value.ToString(), out value))
                    sb.Append("float " + pair.Key + "=0;\n");
                else
                    sb.Append("float " + pair.Key + "=" + pair.Value.ToString() + ";\n");
            }

            sb.Append("return " + expression + "; \n");
            sb.Append("} \n");
            sb.Append("} \n");
            sb.Append("}\n");

            CompilerResults cr = icc.CompileAssemblyFromSource(cp, sb.ToString());

            if (cr.Errors.Count > 0)
                return "#Error";

            System.Reflection.Assembly a = cr.CompiledAssembly;
            object o = a.CreateInstance("CSCodeEvaler.CSCodeEvaler");

            Type t = o.GetType();
            MethodInfo mi = t.GetMethod("EvalCode");

            object s;
            try
            {
                s = mi.Invoke(o, null);
            }
            catch
            {
                return "#Error";
            }

            return s.ToString();
        }


  И не забыть саму HTML страницу+стили из исходного примера
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta charset="utf-8" />
    <title></title>
    <style>
        input {
            border: none;
            width: 80px;
            font-size: 14px;
            padding: 2px;
        }
        input:hover {
            background-color: #eee;
        }
        input:focus {
            background-color: #ccf;
        }
        input:not(:focus) {
            text-align: right;
        }
        table {
            border-collapse: collapse;
        }
        td {
            border: 1px solid #999;
            padding: 0;
        }
        tr:first-child td,
        td:first-child {
            background-color: #ccc;
            padding: 1px 3px;
            font-weight: bold;
            text-align: center;
        }
        footer {
            font-size: 80%;
        }
    </style>
</head>

<body>
    <p>Пример на C#</p>
    <table></table>
</body>

</html>


Там изначально о 30-ти строках не было и речи. ))

  Остальной код, подгружаем страницу в веб-контрол
        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            try
            {
                MakeExcel();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var assembly = Assembly.GetExecutingAssembly();
            var resourceName = "WindowsFormsApplication1.HTMLPage1.html";

            using (Stream stream = assembly.GetManifestResourceStream(resourceName))
            using (StreamReader reader = new StreamReader(stream))
            {
                webBrowser1.DocumentText = reader.ReadToEnd();
            }
        }
Re[10]: А что мешает заменить JS?
От: vdimas Россия  
Дата: 17.03.17 20:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Накатай на любом удобном тебе языке.


Кстате. Подобное в форме вызова означает, что ты НЕ понял пример по ссылке.
Ай, как стыдно должно быть... ))

За исключением функциональности показанного Eval, на обычном контроле-гриде всё остальное выражается в еще меньшее кол-во значимых строк.
Re[16]: А что мешает заменить JS?
От: vdimas Россия  
Дата: 17.03.17 20:40
Оценка:
Здравствуйте, Слава, Вы писали:

С>Поскольку Нода делалась в первую очередь под линуксы, то и и модель там — реактор, т.к. ниже лежат poll, epoll.


Садись, два. ))
Из низлежащего реактора можно сделать проактор.


С>Но это никому неинтересно, потому что на настолько низкий уровень мало кто опускается.


Это пока не начинается асинхронщина и не начинаются вопросы, кто вперёд кого полезет. ))
Re[12]: А что мешает заменить JS?
От: vdimas Россия  
Дата: 17.03.17 20:42
Оценка:
Здравствуйте, Serginio1, Вы писали:

V>>В присутствии dart нет никакого смысла продолжать писать на TS.

S>А чем он лучше? Мне TS нравится больше.

Он еще чуть больше TS чем сам TS. ))
Плюс еще немножко удобств и синтаксического сахара.
Re[13]: А что мешает заменить JS?
От: Somescout  
Дата: 17.03.17 21:13
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Он еще чуть больше TS чем сам TS. ))

V>Плюс еще немножко удобств и синтаксического сахара.

Если правда что "Utilizing existing JavaScript code and libraries is more difficult, you need to access them through an interoperability library.", то не взлетит (да, собственно, уже не взлетело) — Гугля радостно наступает на те же самые грабли, что и с GWT.

ЗЫ. Кроме того Dart это гугль. Кому-то МС не нравится, кто-то Эппл не переваривает, а кого-то от гугли тошнит.
ARI ARI ARI... Arrivederci!
Re[11]: А что мешает заменить JS?
От: Lloyd Россия  
Дата: 17.03.17 21:39
Оценка:
Здравствуйте, vdimas, Вы писали:

G>>Ага, и пилит v8 движок, который собственно и дал развитие современному JS


V>Пилили в конце 2000-х.

V>Последние серьезные изменения были в 2011-м, они упёрлись в "непреодолимые проблемы" и выступили с инициативой NaCL.

Каждые 6 недель (+/-) у v8 выходит новый стабильный релиз.
Re[11]: А что мешает заменить JS?
От: Lloyd Россия  
Дата: 17.03.17 21:50
Оценка:
Здравствуйте, vdimas, Вы писали:

V>В присутствии dart нет никакого смысла продолжать писать на TS.


А по какой причине тогда google пишет angular на ts?
Re[23]: А что мешает заменить JS?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.17 01:37
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ну что тебе мешает показать мои ошибки?

V>Ля-ля — не мешки ворочать? ))
В общем — ты не знаешь современного JS. Ты все время делаешь утверждение, которые были актуальны лет 10-15 назад.
В конкретные места тебя тыкнуть?
Re[17]: А что мешает заменить JS?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.17 01:45
Оценка: :)
Здравствуйте, vdimas, Вы писали:

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


V>>>Брехня же. Java сначала вытеснила VB в корпоративе, а не С/С++.

G>>VB всегда был для клиентских приложений , пока MS его не похоронил.

V>VB в интранете прекрасно работал и на серверной стороне.

В теории работал. На практике 99,9% приложений VB — формочки.

V>Похоже, ты страшно далёк от этой темы.

V>Курить DCOM — он целиком и полностью, считай, был заточен под компоненты VB.
Ты теоретизируешь только.


G>>А Java пробралась на сервера и выкинула оттуда C++.

V>Да никого она оттуда не выкидывала. 3-хуровневых приложений тогда толком еще не было, кроме специализированных систем управления предприятием (ERP), коих было мало. И то, никого из крупных Джава никуда не выкинула. А мелкие системы сплошняком были клиент-серверные, т.е. клиент обращался непосредственно к базе. И в этом месте Джава тоже никакой С++ никуда не выкинула, бо мейнстримом для этих вещей был VB и Дельфи.
Это в России не было, потому что у нас очень прижилось delphi (потому что все беслпатно ставили).


V>>>До прихода джавы в трейдинг было еще целых 8-10 лет, потому что там ограничением было быстродействие серваков на джаве.

G>>Это ты про HFT говоришь, а трейдинг далеко не только HFT.

V>А на чем были писаны первые Axapta и Navision, кста?

Хз, очень старые системы. С тех пор как МС купили — на .NET.


V>>>Потому что до стандарта Джавы-2 это был дырявый матрас, а не "защищённая среда". Первый стандарт Джава-2 вышел в 99-м году, но до версии 1.3 (2000-й год) на что-то серьёзное Джаву никто не брал. Банковские джава-апплеты более-менее широко распространились как раз после выхода Джава-2.

G>>В 2001 джава уже захватила все что можно было, а начался процесс сильно раньше.

V>На ней стали писать новый заказной софт, угу.

V>Особенно когда Оракл сделал интеграцию Джавы в свой сервак.
V>Но старые системы никуда не делись при этом.
Большинство систем выводится из эксплуатации примерно через 3 года после внедрения. Переживают дольше очень мало.
Re[11]: А что мешает заменить JS?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.17 01:49
Оценка:
Здравствуйте, vdimas, Вы писали:

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


V>>>Гугл проводит ежегодные конференции на тему того, почему JS плох и почему Гугл отказыватся во внутренних ключевых своих разработках от JS.

G>>Ага, и пилит v8 движок, который собственно и дал развитие современному JS

V>Пилили в конце 2000-х.

V>Последние серьезные изменения были в 2011-м, они упёрлись в "непреодолимые проблемы" и выступили с инициативой NaCL.
https://ru.wikipedia.org/wiki/V8_(%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript)
Последняя версия 5.1.130 (15 марта 2016)[5]

V>>>Тебе сколько видео с конференций гугла на эту тему накидать? 10? 20? Ты ни одного доклада не смотрел/не читал? ))

G>>Все смотрел и читал. Гугл пытается всем продать dart, чтобы доминировать в браузерах.
V>Он не просто пытается продать dart кому-то, он сам внутри себя в двух самых ключевых проектах от JS уже ушел.
Это из области политики, там далеко не технические причины.


G>>>>В современном стандарте есть import и arrow functions, в стандарте 2015 года появились. А примерно с 2014 были доступны в TS. Фактически 3 уже года можно использовать.

V>>>Нельзя. Потому что совместимость. Т.е. если еще в каком-нить node.js можно, то на веб-страницах — нет.
G>>Опаньки, а как я это делал 3 года назад? Именно классы и arrow functions...
V>Что, прямо на страницах, передаваемых клиенту?
Не понял вопроса. .ts + tsc — и все.


G>>Внезапно TS умеет компилять из в es3.

V>TS — это не JS, на страницу его не кинешь.
Ты не понимаешь современного JS. Уже давно никто не пишет js в блокнотах.


G>>Все можно если хотеть, а не брызгать слюной на форуме какой JS плохой.

V>Ты бы научился отвечать на конкретные аргументы (выделил), а не спорил сам с собой. ))
Ты пишешь столько ошибочных утверждений, что отвечать на каждое банально лениво.
Re[15]: А что мешает заменить JS?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.17 01:57
Оценка:
Здравствуйте, vdimas, Вы писали:

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


V>>>И эти люди вполне себе приносят некую пользу на своих проектах, почти всегда не понимая до конца, как "оно" устроено и работает.

G>>Это хорошо или плохо?

V>Мне всё-равно. Я отвечал на "независимо от языка".

V>Еще как зависимо по моим наблюдениям.

Есть некоторая зависимость, которая обусловлена обучением. Если сравнить книги и статьи про PHP и asp.net, то разница видна невооружённым глазом.
Но свойства самого языка не при чем.


V>>>А если программист начинает что-то понимать, то он обычно уходит на другие языки.

V>>>Аналогично с JS.
G>>Не аналогично
V>Да ладно.
В твоей голове может и аналогично. У тебя JS остановился в развитии в 93 году.

V>Вопрос на засыпку — node.js реализует модель реактора или проактора?

Проактор.

V>Ну вот ты пользуешься им, насколько я понял, т.е. должен понимать, верно?

Это совершенно пофиг, ты можешь пользоваться паттерном и не знать как он называется. Название в данном случае искусственное.



V>>>Например, я не раз наблюдал примерно такую деэволюцию у коллег: Дельфи -> Джава/C# -> JS (распространённый сценарий, кста).

G>>Это путь роста продуктивности и кроссплатформенности.

V>Это путь вполне определённого слоя коллег, которые дальше сугубо прикладной области принципиально не заходят.

V>Именно в среде этих программистов живут и разможаются всевозможные мифы и заблуждения о собственных технологиях, которыми они оперируют. ))
Среди C++ников таких сильно больше, чем среди тех, кто знает делфи, C# и JS.


V>>>Но никогда не JS -> Джава/C# -> С++. ))

G>>Это путь падения продуктивности. Никто в здравом уме не станет решать задачу на C++ и даже на C#, если может её же решить на JS.
V>Речь не шла об одной и той же задаче, заметь.
Тогда непонятно что ты хочешь сказать.

V>Я так думаю, что программист с ростом должен уметь решать всё более сложные задачи.

Сложность задач ограничена сверху, а продуктивность — нет. Поэтому программист должен именно продуктивность повышать.
Re[11]: А что мешает заменить JS?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.17 02:00
Оценка:
Здравствуйте, vdimas, Вы писали:

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


V>>>Так и в чем прикол продолжать есть кактус?

G>>Скорость написания деплоя все равно выше.

V>Так у вас деплой проблемы вызывает?

Проблема скорости поставки решения существует всегда. Скорость — офигенный конкурентный фактор.

V>Я как инженер просто хочу понять мотивы сугубо технического плана.

V>Вот есть сетевые задачи, которые достоверно на C# или Джаве решаются проще и лучше, чем на node.js.
V>Т.е. проблема потом установить такое серверное приложение у клиента?
Да, зачастую деплой java или C# это не только перекинуть файлы.
Re: Что мешает написать JVM на Fortran?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.17 02:01
Оценка:
Здравствуйте, Artem Korneev, Вы писали:

AK>Чтобы провести аналогию с JS, представьте, что операционная система не поддерживает ничего кроме языка C. Или, ещё лучше — какого-нибудь FORTRAN'а. Все остальные платформы запрещены и не поддерживаются, все эмуляторы и интерпретаторы можно писать только на фортране. Использовать ассемблер нельзя — операционная система не разрешает установку любого низкоуровневого софта, только софт в исходниках на фортране.


AK>Вот попробуйте теперь представить, каков был бы путь Java в таких условиях.

Джава бы компилировалась в C.
Re[12]: А что мешает заменить JS?
От: fmiracle  
Дата: 18.03.17 06:23
Оценка: 2 (1)
Здравствуйте, gandjustas, Вы писали:

V>>Пилили в конце 2000-х.

V>>Последние серьезные изменения были в 2011-м, они упёрлись в "непреодолимые проблемы" и выступили с инициативой NaCL.
G>https://ru.wikipedia.org/wiki/V8_(%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript)
G>Последняя версия 5.1.130 (15 марта 2016)[5]

Март 16го — это просто никто не обновляет. На странице проекта V8

Roughly every 6 weeks a new major Stable release is done.


И там в релизах уже 5.9.xxx идут.

Например, родная поддержка await/async в V8 (и следом сразу в хроме и ноде) появилась, емнип, в районе конце прошлого года.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.