Автор Тема: [OberonJS] Мнения  (Прочитано 16401 раз)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
[OberonJS] Мнения
« : Июль 26, 2013, 06:18:44 am »
OberonJS - отказать.
Цитата: Дважды мудак
Посмотрел я на http://oberspace.dyndns.org/oberonjs.html
MODULE test;
IMPORT JS;
 
PROCEDURE Foo*;
VAR a : ARRAY 10 OF REAL;
BEGIN
  JS.alert("Hello, World!")
END Foo;


BEGIN
   
END test.
Транслируется в:
var RTL$ = {
    makeArray: function (/*dimensions, initializer*/){
        var forward = Array.prototype.slice.call(arguments);
        var result = new Array(forward.shift());
        var i;
        if (forward.length == 1){
            var init = forward[0];
            if (typeof init == "function")
                for(i = 0; i < result.length; ++i)
                    result[i] = init();
            else
                for(i = 0; i < result.length; ++i)
                    result[i] = init;
        }
        else
            for(i = 0; i < result.length; ++i)
                result[i] = this.makeArray.apply(this, forward);
        return result;
    }
};
var JS = function(){return this;}();
var test = function (){

function Foo(){
var a = RTL$.makeArray(10, 0);
JS.alert("Hello, World!");
}
}();
По пунктам:

1. человекочитаемый выходной код - есть (идентификаторы сохраняются)
2. старый дизайн выходного кода - нет (отличается семантика массивов, из-за чего появляется шлак в виде RTL$ вместо new Array(10))
3. новая система типов - есть*
4. новый синтаксис - есть*
5. компактный новый язык - есть*

* - но это же 1950-е годы, Алгол-58

По списку - [1,3,4,5]

Это было в продолжение его поста "HNC и Javascript":
Цитата: Дважды мудак
Внезапно у моего вечно мертвого HNC появилось второе после сей поле для применения: Javascript. С и JS оба а) неизбежны в своих областях применения б) убоги.

Интересно, однако, что если при компиляции в Си среди конкурентов имеем сплошь страх и ужас (генерация неидиоматического кода, попытки изменить семантику), при компиляции в JS всё не так плохо: некоторые изобретатели языков, компилирующихся в JS, осознают необходимость генерировать на выходе качественный код, а не кашу.

Также интересно, что предпринимаются попытки и выделить каноническое подмножество старого языка, правда, только в виде замены 100500 возможных в JS объектных моделей на захардкоженную в кодогенератор одну каноническую. Например, декларации классов в CoffeeScript и MS TypeScript.

Вот мне интересно, есть ли языки, компилирующихся в JS и удовлетворяющие требованиям:

1. человекочитаемый выходной код
2. старый дизайн выходного кода (никаких остающихся на выходе ленивостей, алгебраиков, гигантских говнорантаймов, идиотского кода вроде f.call(null) и хуй-эр-пэ)
3. новая система типов
4. новый синтаксис
5. компактный новый язык

Coffeescript - [1, 2, 4]
TypeScript - [1, 2, 3]
Ur, Fay, Roy, Elm, Haxe, Agda, Idris - [3, 4, 5]
ClosureScript - [4, 5]
Erlang JavaScript compiler - [1, 2, 4, 5]
OberonJS - [1, 3, 4, 5]

Кто-нибудь ещё что-нибудь стоящее внимания знает из 100500 языков в списке?

Пока получается, что 2 плохо дружит с 5.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #1 : Июль 26, 2013, 06:23:06 am »
Так это, Влад, зачем компилировать код
VAR a : ARRAY 10 OF REAL;как
var a = RTL$.makeArray(10, 0);вместо
var a = new Array(10);?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #2 : Июль 26, 2013, 06:53:09 am »
Я там накатал ответ. Не по мелочам, а так, обзорно.
Y = λf.(λx.f (x x)) (λx.f (x x))

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #3 : Июль 26, 2013, 07:18:48 am »
Так это, Влад, зачем компилировать код
VAR a : ARRAY 10 OF REAL;как
var a = RTL$.makeArray(10, 0);вместо
var a = new Array(10);?

new Array(10) - не инитит элементы. Причем это надо даже для всяких INTEGER/REAL, не только для RECORD, иначе в рантайме оно пойдет в разнос (там будет жабаскриптовый "undefined").
Можно конечно заявить об undefined behavior при обращении к непроиниченному элементу... но не хочется. Поэтому все инитится, не смотря на то, что репорт молчит как всегда по поводу таких нюансов.
« Последнее редактирование: Июль 26, 2013, 07:20:23 am от vlad »

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #4 : Июль 26, 2013, 07:23:49 am »
Я там накатал ответ. Не по мелочам, а так, обзорно.

Я прикрутил модули, но их надо допиливать - работает только простейший сценарий импорта вышестоящего по тексту модуля.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #5 : Июль 26, 2013, 07:36:37 am »
Я там накатал ответ. Не по мелочам, а так, обзорно.

Я прикрутил модули, но их надо допиливать - работает только простейший сценарий импорта вышестоящего по тексту модуля.
Круто! Надо будет пощупать.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [OberonJS] Мнения
« Ответ #6 : Июль 26, 2013, 08:00:15 am »
По топику, у меня появилось ощущение, что смысловая связь между названием оригинальной  статьи и ее содержанием достаточно слабовата - что то типа мыслей в слух...

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #7 : Июль 26, 2013, 09:51:27 am »
По топику, у меня появилось ощущение, что смысловая связь между названием оригинальной  статьи и ее содержанием достаточно слабовата - что то типа мыслей в слух...

Вы имеете в виду название "OberonJS - отказать."?
Этот Andy Melnikov несколько лет пилит свой собственный язык HNC (для замены с++), и решил приспособить его для генерации яваскриптного кода. Но дл начала он стал интересоваться, какие есть ещё реализации разных языков для JS. Составил себе список требований из пяти пунктов, я ему посоветовал глянуть на OberonJS. Посмотрев, Melnikov его забраковал почему-то...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #8 : Июль 26, 2013, 10:05:27 am »
Kotlin'у он тоже отказал: http://nponeccop.livejournal.com/333825.html
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [OberonJS] Мнения
« Ответ #9 : Июль 26, 2013, 10:31:29 am »


Вы имеете в виду название "OberonJS - отказать."?
Этот Andy Melnikov несколько лет пилит свой собственный язык HNC (для замены с++), и решил приспособить его для генерации яваскриптного кода. Но дл начала он стал интересоваться, какие есть ещё реализации разных языков для JS. Составил себе список требований из пяти пунктов, я ему посоветовал глянуть на OberonJS. Посмотрев, Melnikov его забраковал почему-то...
Точно. Слабые логические связи,  странные требования, и еще более странная методика оценки.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [OberonJS] Мнения
« Ответ #11 : Июль 26, 2013, 12:21:24 pm »
http://nponeccop.livejournal.com/333439.html?thread=3092863#t3092863
"по итогам претензий"  можно оставить разбираться г-на  А. Мельникова самому  со своими "заскоками" не претендуя ни на его "честь или достоинство" уже после того, когда он начал говорить о качестве  создаваемого js - кода (после ваших , Алексей , разьяснений по поводу текущего статуса и направленности проекта)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #12 : Июль 26, 2013, 12:27:18 pm »
Точно. Слабые логические связи,  странные требования, и еще более странная методика оценки.

Ну хз, кто его знает, может он когда-нить сделает что-то своё в этом духе, лучше чем всё остальное...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: [OberonJS] Мнения
« Ответ #13 : Июль 26, 2013, 12:31:03 pm »
Kotlin'у он тоже отказал: http://nponeccop.livejournal.com/333825.html

Ну котлиновский компилятор и правда выдал какую-то жуть непонимабельную...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DddIzer

  • Гость
Re: [OberonJS] Мнения
« Ответ #14 : Июль 26, 2013, 12:40:28 pm »
Kotlin'у он тоже отказал: http://nponeccop.livejournal.com/333825.html

Ну котлиновский компилятор и правда выдал какую-то жуть непонимабельную...
а что разве создатели котлина ставили своей целью генерить конечный js- код "высокой понимабильности"?