Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Coffee++ (Рождение легенды) (https://javascript.ru/forum/offtopic/59326-coffee-rozhdenie-legendy.html)

Mаxmaxmаximus 06.11.2015 00:05

Coffee++ (Рождение легенды)
 
Репозиторий транслятора https://github.com/Maxmaxmaximus/coffeepp

Да, такое будет название у нового языка). Ршил я тут написать сахар для С++ а ля кофескрипт, и назвать его coffee++, вот сижу синтаксис придмываю, зацените ка, что думаете? и что думаете на счет идеи в целом? Так же предлагаю тут обсуждать развитие языка и начать с синтаксиса.

п.с. coffee++ можно будет транслировать в С++ а С++ в asm.js через транслятор emscripten, а по скольку виртуальная машина emscripten позволяет работать и с файлаими и с тактами и с сокетами прям в браузере, то все это будет уметь и coffee++, да собственно он будет уметь все то что умеет С++.

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


cyber 06.11.2015 00:24

мне кажется у тебя слишком много свободно времени:lol:

Mаxmaxmаximus 06.11.2015 00:29

cyber, совсем нет, завтра дедлайн но я лучше буду голодать чем не заниматься любимым делом. я не раб.

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

То ест например вот здесь, блок уже кончился, или там внизу еще что-то есть?



То есть приходится либо прокручивать либо думать либо смотреть, а хочется чтобы для глаза зацепка была
обычно эта зацепка о конце блока это собсна }

в принципе при иденации такой зацепкой может являтья внизу открытие нового блока либо же собсна конец файла, но это не так заметно и очевидно как }




я думаю что подбное все е должно решаться на уровне подсветки синтаксиса, то есть должны рисоваться вот эти линии редактором, чтобы визуально было что код влево сместился и мы вышли из блока, так же мне кажется если линии тянутся высоко вверх то они должны быть как-то подписаны штоле я хуй знат.
чтобы ты такой печатаешь а у тебя вверху показывается что ты в блоке
[class Cat] [private]

ты курсор влево переместил, вышел из блока приват а он тебе [class Cat]
ты еще раз влево переместил а он тебе [global] ну или типа того


Так же конец блока может тупо подсвечивться полосочкой вбок типа (тут хреного видно)


Mаxmaxmаximus 06.11.2015 01:25

бесит что в С++ вначале идет тип а потом имя, человек интутитвно проговаривает вначале имя, а поом уже думает че функция вернет.

он вначале думает имя переменной а потом уже думает какого она будет типа!! К тому же посмотрите как у меня выглядит функция main




Всем функциям если тип не задан автоматически подставляется void а этой функции int
Так же эта функция если ничего не возвращаетсчя автоматически возвращает 0

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

cat1 Cat(11, 'Ашот')

так же у меня можно писать
cat1 = Cat(11, 'Ашот')

это идентичные записи

а в С++ это выглядит как бредовый нелогичный ад:
Cat cat1(11, 'Ашот')


Да да мы создаем обьект а потом его типа вызываем как функцию и передаем туда параметры.
большей ахинее нигде не видел)

cyber 06.11.2015 01:26

Цитата:

Сообщение от Mаxmaxmаximus
совсем нет, завтра дедлайн но я лучше буду голодать чем не заниматься любимым делом. я не раб.

Если бы ты занимался чем то полезным я еще могу понять, но ты страдаешь фигней)

Mаxmaxmаximus 06.11.2015 01:34

Цитата:

Сообщение от cyber
но ты страдаешь фигней)

То есть coffeescript никому не полезен и его создатели занимаются фигней)? я верно понял мысль?
То есть создание синтаксического сахара на С++ ни кому не полезно и является фигней???))) ты в своем уме?

l-liava-l 06.11.2015 02:05

Цитата:

совсем нет, завтра дедлайн но я лучше буду голодать чем не заниматься любимым делом. я не раб

cyber 06.11.2015 10:25

Цитата:

Сообщение от Mаxmaxmаximus
То есть coffeescript никому не полезен и его создатели занимаются фигней)? я верно понял мысль?

т.е ты еще не один проект не довел до релиза ;)

kobezzza 06.11.2015 11:20

Цитата:

То есть создание синтаксического сахара на С++ ни кому не полезно и является фигней???))) ты в своем уме?
Дык есть современные аналоги C++: Rust, D (т.к. GC там опциональный) и Swift как минимум.

Mаxmaxmаximus 06.11.2015 11:26

kobezzza, у тебя есть их компилятор в asm.js? А у меня есть компилятор С++ в asm.js уже сейчас. Я планирую закончить этот язык через месяц и уже юзать в продакшене и писать на нем юишку.

п.с. покумекав с пасонами решиил по дефолту сделать поля приватными а не публичными, вот кусок переписки:

Цитата:

Ну да да, я так же думал, это логично, но те новички которые будут изучать язык будут дивиться че это функции не видятся. Но я подумал ДА ССАТЬ НА ТАКИХ С БОЛЬШОЙ ГОРЫ! По умолчанию должно быть все ПРИВАТНЫМ! И ТОЧКА! И должно быть что то веское чтобы заставить тебя опубликовать их, ты ЯВНО ДОЛЖЕН ЗАХОТЕТЬ это сделать, ПРИОТКРЫТЬ дверь. К тому же, не все методы подготовлеы для наследвоания и перекрытия, многие из них могут быть частью реализации или иметь возможность менять свои названия и ты ЯВНО ДОЛЖЕН ЗАХОЕТЬ СКАЗАТЬ ЧТО МОЛ Вот этот метод я открываю для наследования, делаю протектед, он не будет менять ни название ни параметры, можете его наследовать и оверрайдить.

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

kobezzza 06.11.2015 11:40

Цитата:

kobezzza, у тебя есть их компилятор в asm.js?
дык, ECMScripten компилит из LLVM, а не из С++, т.е. любой язык умеющий компилится в LLVM может подойти и Rust и Swift это умеют.

Mаxmaxmаximus 06.11.2015 12:09

Вот пример нового вариванта синтаксиса


Mаxmaxmаximus 06.11.2015 13:16

Цитата:

Сообщение от kobezzza
Rust и Swift это умеют.

У emscripten есть классы С++ для работы с api их виртуальной машины и рантайм окружения (например браузера). Есть ли эти классы для других языков? Есть ли блоки выделенные идентацией а не фигурными скобками в других языках?

kobezzza 06.11.2015 13:43

Цитата:

Сообщение от Mаxmaxmаximus (Сообщение 394765)
У emscripten есть классы С++ для работы с api их виртуальной машины и рантайм окружения (например браузера). Есть ли эти классы для других языков? Есть ли блоки выделенные идентацией а не фигурными скобками в других языках?

Ну как бы там без проблем моно юзать C++ классы, а вообще я намекнул, что перед тем как что-то городить неплохо было бы посмотреть как у других, но дело твое :)

cyber 06.11.2015 14:00

Для тех кто в танке, объясните в 2х словах, что деалает asm.js , компилит c++ в js?

loljs 06.11.2015 14:16

Цитата:

Сообщение от cyber (Сообщение 394777)
Для тех кто в танке, объясните в 2х словах, что деалает asm.js , компилит c++ в js?

Глупо было бы. Это подмножество js который компилится в байткод, или типа того.

loljs 06.11.2015 14:21

Цитата:

Сообщение от cyber (Сообщение 394777)
Для тех кто в танке, объясните в 2х словах, что деалает asm.js , компилит c++ в js?

Вот точный ответ по ходу

A. Because of the directive prologue, a JavaScript engine can immediately recognize asm.js code at compile-time and immediately compile it to assembly language, with no need to ever run the code through an interpreter.

http://asmjs.org/faq.html

Mаxmaxmаximus 06.11.2015 14:37

cyber, это подмножество яваскрипта которое типа быстро выполняется потому что там нет динамических типов и разрешена только работа с битовым массивом, работа с числами и бинарные операторы. строки запрещены.

чтобы asm.js код работал и в браузерах его не поддерживающих он имеет обратную совместимость. например все int переменные там при присваивании на всякий случай еще рах округляются типа q = (2+3)|0
чтобы УЖ ТОЧНО ИНТОМ СТАТЬ. в браузерах же в которых asm.js поддерживается, этот код вообще не интерптитируется а попадает в специальный транслятор этого кода в ассемблер. то есть операция округления там не выполняется, он воспринимает это просто как синтаксис такой на указание типа int.

такой код может легко скомпилироваться в ассемблер и выполняться в процессере. придумали транслятор С++ в такой код. Транслятор называется Emscripten. Он эмулирует окружение С++ вроде файловой системы, видеокарты, монитора (canvas) и.т.п.

Покольку у плюсов синтаксис говенный то я начал писать сахар для С++ похожий синтаксисом на coffeescript, и назвал его coffee++

Можно будет писать на красивом coffee++, транслировать в С++ и компилировать в asm.js и запускать в браузере супербыстрый код. А можно и просто писать на coffee++ , транслировать в С++ и просто сомпилировать под винду например) и писать десктопные проги.


А позже я и свой компилятор напишу сразу в asm.js, просто пока в этом смысла нет раз есть Emscripten

cyber 06.11.2015 14:56

Mаxmaxmаximus, а какие браузеры поддерживаю asm?

Mаxmaxmаximus 06.11.2015 15:22

Цитата:

Сообщение от cyber
а какие браузеры поддерживаю asm?

вот эти http://caniuse.com/#feat=typedarrays

cyber 06.11.2015 15:29

Mаxmaxmаximus,
не плохо)

Mаxmaxmаximus 06.11.2015 15:42

cyber, но по моему asm.js поддерживается воообще везде где есть ES3

просто именно Emscripten использует кучу (виртуальную оперативку) котораяя является ArrayBuffer. НО как я понял его можно эмулировать обычными массивами для старых IE.

Mаxmaxmаximus 06.11.2015 15:46

Цитата:

Сообщение от cyber
т.е ты еще не один проект не довел до релиза

ЧТОбы довести юишку до релиза мне надо написать её на асм, а для этого надо выучить С++ а он убогий по этому придется написать за месяц сахар для него) все просто.

юишку я уже используя как года 2 в работе) и переписывал раза 4 уже, вот пятый раз буду переисывать на coffee++

kobezzza 06.11.2015 15:56

Цитата:

cyber, но по моему asm.js поддерживается воообще везде где есть ES3
именно азм.js, т.е. оптимизации и т.д. умеет тока ФФ и Edge

Mаxmaxmаximus 06.11.2015 16:47

Цитата:

Сообщение от kobezzza
умеет тока ФФ и Edge

Ну и стоит уточнить что эвристики ВСЕХ браузеров раз в 10 ускоряют просто код написаный в стиле asm даже без поддержки asm как такового.

loljs 06.11.2015 16:52

Цитата:

Сообщение от Mаxmaxmаximus (Сообщение 394814)
Ну и стоит уточнить что эвристики ВСЕХ браузеров раз в 10 ускоряют просто код написаный в стиле asm даже без поддержки asm как такового.

Можешь бенчмарки привести?

Mаxmaxmаximus 06.11.2015 16:58

А вот как убого тот код выглядил бы на С++


Mаxmaxmаximus 06.11.2015 16:59

loljs, вот тут http://javascript.ru/forum/offtopic/...tml#post394106

cyber 06.11.2015 17:06

Mаxmaxmаximus,
1. Добавь using namespace std;
2. мне нравятся геттеры и сеттеры в C# , если уже и пилишь свой велосипед то посмотри в как там сделанно
https://msdn.microsoft.com/en-us/library/bb384054.aspx

Mаxmaxmаximus 06.11.2015 17:30

Цитата:

Сообщение от kobezzza
умеет тока ФФ и Edge

хром по твоему не умеет)?


Mаxmaxmаximus 06.11.2015 17:33

Цитата:

Сообщение от cyber
Добавь using namespace std;

это плохой тон

Цитата:

Сообщение от cyber
2. мне нравятся геттеры и сеттеры в C# , если уже и пилишь свой велосипед то посмотри в как там сделанно

Приведи пример использования геттеров а не функций типа getName и setName например?

Mаxmaxmаximus 06.11.2015 17:36

Цитата:

Сообщение от cyber
если уже и пилишь свой велосипед

ты сообще по ходу не разбираешься в программировании, какой велосипед че ты несешь ахинею? Приведи мне пример когда кто-то изобретал бы этот велосипед (чтобы твоя метафора про велосипед была верна а не чушью). Велосипед значит уже был изобретен а человек заного создает, НО НИЧЕГО ПОДОБНОГО ЧЕЛОВЕК НЕ СОЗДАВАЛ РАНЬШЕ, тогда при чем тут эта метафора про велосипед??? Ты мозг то включай прежде чем посты отправлять ляля)

Либо приводи пример предыдущего "велосипеда", либо признавай при всех что сморозил ахинею, ждемс:

kobezzza 06.11.2015 17:42

Цитата:

хром по твоему не умеет)?
Нет. Они просто улучшили работу с побитовыми операторами и т.д. что улучшело скорость, но именно ASM.js - т.е. отключение GC и AOT они не делают.

Mаxmaxmаximus 06.11.2015 17:44

kobezzza, на чем основано это утверждение? и почему тогда у асм.js лисы и у v8 скорости равны?

kobezzza 06.11.2015 17:45

Цитата:

Сообщение от Mаxmaxmаximus (Сообщение 394834)
kobezzza, на чем основано это утверждение?

На изучении данного вопроса и ответов самих разработчиков V8. Не хочешь - не верь.

Цитата:

v8 скорости равны?
Демки UnrealEngine у мя в хроме даже не открываются от тормозов, а лисе летают.

Mаxmaxmаximus 06.11.2015 17:45

Цитата:

Сообщение от kobezzza
Не хочешь - не верь.

- тебя спросили источник информации
- не хочешь не верь

Л - логика

почему тогда у асм.js лисы и у v8 скорости равны?

kobezzza 06.11.2015 17:49

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

UPD: да, вроде как с 41 версии хрома в новом TurboFan сделали.

Mаxmaxmаximus 06.11.2015 22:23

kobezzza, ну то есть хром вообще никак не реагирует на директиву use asm он просто быстро работает как и лиса в режиме asm) кстати в лисе asm отключать директиву не меняя код не пробовал, над попробовать.

ruslan_mart 06.11.2015 22:28

Цитата:

Сообщение от Mаxmaxmаximus
Coffee++

А Coffee# будет? :)

Mаxmaxmаximus 06.11.2015 22:36

Ruslan_xDD, ну я щас пишу удобный AST билдер ковеподобного кода, я реально пока спал придумал его, он и феноминально быстрый и удобный с точки зрения добавления новых вещей) особенно как оказалось легко парсить блоки выделеные идентацией. я просто в цикле дерево наполняю где количество отступов каждой строчки кода является уровнем в ложенности когда оно уменьшается я просто достаю конструкию из стека и помещаю её в древо уже заполненых конструкций, а в предыдущем своем ast билдере я натыкаясб на какую то конструктию делал просмотр вперед где же там она закончится считая открывающие и закрывающие скобочки.

в общем парсить такую красоту вообще одно удовольсьвие, и я потом урок запилю как свой синтаксис кофеподобный запилить.

а да, пишу транслятор на Coffescript) а потом можно угарнуть написать его на Coffee++ самом)) и производителдьность взлетит, и в браузере так же будет выполняться. А потом можно уже потихоньку выпиливать Emscripten и напрямую генерировать asm.js, хотя я не знаю как это делается если честно, ведь транслировать с языка на язык несравнимо легче чем в "байткод" да к тому же еще и описаный млять на диалекте другого языка)


Часовой пояс GMT +3, время: 17:11.