Автор Тема: Цель транслятора Оберона в Javascript  (Прочитано 14258 раз)

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Цель транслятора Оберона в Javascript
« : Ноябрь 17, 2013, 04:46:52 pm »
Посмотрел на код, который выдает транслятор и впечатлился объемом по сравнению с тем, что мог бы написать непосредственно программист. С учетом того, что Оберон более низкоуровневый язык по сравнению с JS, что означает в среднем большее количество кода для выполнения той же задачи, то ситуация усугубляется. Можно долго дорабатывать транслятор, но вряд ли разрыв удастся свести к 0. В связи с этим возникает вопрос о назначении и применимости инструмента. По моему Алексей упоминал, что не исключает его использования для серьезных задач. Каких?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Цель транслятора Оберона в Javascript
« Ответ #1 : Ноябрь 17, 2013, 07:40:59 pm »
Посмотрел на код, который выдает транслятор и впечатлился объемом по сравнению с тем, что мог бы написать непосредственно программист.

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

С учетом того, что Оберон более низкоуровневый язык по сравнению с JS, что означает в среднем большее количество кода для выполнения той же задачи, то ситуация усугубляется.

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

Можно долго дорабатывать транслятор, но вряд ли разрыв удастся свести к 0. В связи с этим возникает вопрос о назначении и применимости инструмента.

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

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

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

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Цель транслятора Оберона в Javascript
« Ответ #2 : Ноябрь 17, 2013, 08:38:10 pm »
Ну на самом деле там не так много мусора. В основном лишние присваивания. Или есть конкретные примеры для разбора?
Я уже не помню, с чем я экспериментировал с утра, а браузер после перезагрузки не сохранил, но там присутствовала функция, работающая с массивом. Возможно, я был впечатлен лишь потому, что не знаком с JS и особенностями его виртуальными машинами, и на самом деле полученный код выполнялся бы шустро, но полагаю, что на чистом JS код бы выглядел более просто, поэтому как минимум возрастает время трансляции.
Цитировать
Ну назначение точно не в том, чтобы получать читаемый жабаскрипт. Он должен быть достаточно читаемый, чтобы определить соответствующее место в оригинальном исходнике. На данном этапе это важною Потом это может стать вообще не важным - так же как сейчас мало кого интересует читаемость ассемблерного листинга после компиляции ЯВУ.
Да читаемость - то действительно не особо важна, но код же будет проседать по производительности.

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

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Цель транслятора Оберона в Javascript
« Ответ #3 : Ноябрь 17, 2013, 08:51:59 pm »
Да читаемость - то действительно не особо важна, но код же будет проседать по производительности.
Не будет. Много кода - не означает что оно медленней работает. Скорее наоборот. Кода много, но семантически он простой, следовательно jit'у много проще его соптимизировать и скомпилировать производительный нативный код.

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

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Цель транслятора Оберона в Javascript
« Ответ #4 : Ноябрь 18, 2013, 04:11:40 am »
Да читаемость - то действительно не особо важна, но код же будет проседать по производительности.

Добавлю к тому, что ответил Алексей. Писать хороший с точки зрения производительности код  на 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; // до свидания инкапсуляция

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

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

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Цель транслятора Оберона в Javascript
« Ответ #5 : Октябрь 26, 2016, 12:45:41 pm »
Веб наступает. И на стороне клиента нет ничего, кроме жабаскрипта. Точнее есть, конечно, разные трепыхания на тему (Dart, TypeScript), но ни разу не мэйнстрим и со своими фатальными недостатками. И это пугает. Очень скоро мой рабочий мегапроект на теплом ламповом С++ надо будет переписывать под веб. На чем писать? Ну конечно на жабаскрипте. Но почему бы не попробовать самому сделать что-то лучшее, чтоб потом можно было сказать самому себе: "сделал все, что мог, чтоб не писать на жабаскрипте". Тем более, что всегда хотелось поэкспериментировать со своим самым правильным языком.
Не так давно мне и самому довелось хорошо почувствовать, что веб наступает, и возникла необходимость использования моей библиотеки, изначально рассчитанной на микроконтроллер и ПК, в браузере. Поскольку она была написана на Си, то я решил задействовать Emscripten. В целом, всё работает без нареканий, но удобным это было трудно назвать.

В связи с этим возникает вопрос. Помимо исследовательского опыта, удалось извлечь из транслятора практическую пользу? Понадобилось ли переписывать с C++ на что-нибудь другое, или тоже удалось задействовать Emscripten, оставшись на тёплом ламповом? Что думаете по поводу перспектив надвигающегося WebAssembly, который должен усугубить удобство использования С++ в вебе?

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: Цель транслятора Оберона в Javascript
« Ответ #6 : Октябрь 27, 2016, 02:38:58 pm »
В связи с этим возникает вопрос. Помимо исследовательского опыта, удалось извлечь из транслятора практическую пользу? Понадобилось ли переписывать с C++ на что-нибудь другое, или тоже удалось задействовать Emscripten, оставшись на тёплом ламповом? Что думаете по поводу перспектив надвигающегося WebAssembly, который должен усугубить удобство использования С++ в вебе?

До практики так дело и не дошло. Проект в стабильном состоянии, возможно буду еще ковырять (идеи есть, но особого вдохновения в последнее время не было). Ну а вообще транслятор это интересно, само по себе.
Проект на С++ пока живой, в процессе перехода на распоследний С++ (VS2016, XCode8).

WebAssembly это хорошо: как минимум это еще один шаг к закреплению идеи в широких массах, что писать на js руками это моветон.