General Category > Общий раздел

Цель транслятора Оберона в Javascript

(1/2) > >>

kkkk:
Посмотрел на код, который выдает транслятор и впечатлился объемом по сравнению с тем, что мог бы написать непосредственно программист. С учетом того, что Оберон более низкоуровневый язык по сравнению с JS, что означает в среднем большее количество кода для выполнения той же задачи, то ситуация усугубляется. Можно долго дорабатывать транслятор, но вряд ли разрыв удастся свести к 0. В связи с этим возникает вопрос о назначении и применимости инструмента. По моему Алексей упоминал, что не исключает его использования для серьезных задач. Каких?

vlad:

--- Цитата: kkkk от Ноябрь 17, 2013, 04:46:52 pm ---Посмотрел на код, который выдает транслятор и впечатлился объемом по сравнению с тем, что мог бы написать непосредственно программист.

--- Конец цитаты ---

Ну на самом деле там не так много мусора. В основном лишние присваивания. Или есть конкретные примеры для разбора?


--- Цитата: kkkk от Ноябрь 17, 2013, 04:46:52 pm ---С учетом того, что Оберон более низкоуровневый язык по сравнению с JS, что означает в среднем большее количество кода для выполнения той же задачи, то ситуация усугубляется.

--- Конец цитаты ---

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


--- Цитата: kkkk от Ноябрь 17, 2013, 04:46:52 pm ---Можно долго дорабатывать транслятор, но вряд ли разрыв удастся свести к 0. В связи с этим возникает вопрос о назначении и применимости инструмента.

--- Конец цитаты ---

Ну назначение точно не в том, чтобы получать читаемый жабаскрипт. Он должен быть достаточно читаемый, чтобы определить соответствующее место в оригинальном исходнике. На данном этапе это важною Потом это может стать вообще не важным - так же как сейчас мало кого интересует читаемость ассемблерного листинга после компиляции ЯВУ.


--- Цитата: kkkk от Ноябрь 17, 2013, 04:46:52 pm ---По моему Алексей упоминал, что не исключает его использования для серьезных задач. Каких?

--- Конец цитаты ---

Веб наступает. И на стороне клиента нет ничего, кроме жабаскрипта. Точнее есть, конечно, разные трепыхания на тему (Dart, TypeScript), но ни разу не мэйнстрим и со своими фатальными недостатками. И это пугает. Очень скоро мой рабочий мегапроект на теплом ламповом С++ надо будет переписывать под веб. На чем писать? Ну конечно на жабаскрипте. Но почему бы не попробовать самому сделать что-то лучшее, чтоб потом можно было сказать самому себе: "сделал все, что мог, чтоб не писать на жабаскрипте". Тем более, что всегда хотелось поэкспериментировать со своим самым правильным языком.

kkkk:

--- Цитата: vlad от Ноябрь 17, 2013, 07:40:59 pm ---Ну на самом деле там не так много мусора. В основном лишние присваивания. Или есть конкретные примеры для разбора?

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

--- Цитировать ---Ну назначение точно не в том, чтобы получать читаемый жабаскрипт. Он должен быть достаточно читаемый, чтобы определить соответствующее место в оригинальном исходнике. На данном этапе это важною Потом это может стать вообще не важным - так же как сейчас мало кого интересует читаемость ассемблерного листинга после компиляции ЯВУ.

--- Конец цитаты ---
Да читаемость - то действительно не особо важна, но код же будет проседать по производительности.


--- Цитировать ---Веб наступает. И на стороне клиента нет ничего, кроме жабаскрипта. Точнее есть, конечно, разные трепыхания на тему (Dart, TypeScript), но ни разу не мэйнстрим и со своими фатальными недостатками. И это пугает. Очень скоро мой рабочий мегапроект на теплом ламповом С++ надо будет переписывать под веб. На чем писать? Ну конечно на жабаскрипте. Но почему бы не попробовать самому сделать что-то лучшее, чтоб потом можно было сказать самому себе: "сделал все, что мог, чтоб не писать на жабаскрипте". Тем более, что всегда хотелось поэкспериментировать со своим самым правильным языком.

--- Конец цитаты ---
Понятно, желаю удачи

valexey_u:

--- Цитата: kkkk от Ноябрь 17, 2013, 08:38:10 pm ---Да читаемость - то действительно не особо важна, но код же будет проседать по производительности.

--- Конец цитаты ---
Не будет. Много кода - не означает что оно медленней работает. Скорее наоборот. Кода много, но семантически он простой, следовательно jit'у много проще его соптимизировать и скомпилировать производительный нативный код.

Алсо если компилить не в generic js, а в asm js, то оно будет существенно быстрее на FF работать чем pure js.

vlad:

--- Цитата: kkkk от Ноябрь 17, 2013, 08:38:10 pm ---Да читаемость - то действительно не особо важна, но код же будет проседать по производительности.

--- Конец цитаты ---

Добавлю к тому, что ответил Алексей. Писать хороший с точки зрения производительности код  на JS не так просто. Поэтому никто особо не заморачивается. Например, из-за отсутствия инкапсуляции на уровне объектов (с объектом и его полями может делать кто угодно и что угодно) очень широко пользуются замыканиями для полноценного сокрытия состояния:

--- Код: ---function makeObject(){
    var state = "abc";
   
    return {
        get: function(){return state;}
    };
}

--- Конец кода ---

Хотя с точки зрения GC намного оптимальнее писать вот так (таким образом был переписан кусочек популярной библиотеки, используемой у нас, и получен большой выигрыш по используемой памяти):

--- Код: ---function MyObject(){
    this.state = "abc";
}
MyObject.prototype.get = function(){return this.state;}
function makeObject(){
    return new MyObject();
}

--- Конец кода ---

Помимо того, что писать надо больше, любой залетевший дятел может написать вот так:

--- Код: ---var o = makeObject();
o.state = 123; // до свидания инкапсуляция

--- Конец кода ---

Причем это может произойти совсем неявно и отладка превращается в кошмар.

Так вот, трансляция с нормального языка замечательно решает описанную проблему - и с производительностью все хорошо, и безопасно, и писать много не надо (ну тут, конечно, от языка зависит).

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии