Pull to refresh

Comments 48

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

Про него не был в курсе. Обязательно ознакомлюсь с ним. При быстром ознакомлении у него схожие задачи. Очень интересно. Спасибо!

Интересно почему назвали BAYRELL?

Без поддержки IDE вероятность взлёта кроме как лично для вас, примерно равна нулю.

Если вы в проект своему работодателю кастомный язык прикрутили, то жалко этого работодателя. Фактически дважды на деньги его поставили.

Если же лично для себя, то супер. Очень хороший способ поглубже погрузиться в нижние уровни. Главное вовремя вынурнуть.

Это сейчас как хобби проект. Я выпустил публичный альфа релиз, и решил поделится с сообществом. Может кто согласится мне помочь.


Я согласен, что в мире и так много языков, а здесь еще один. И практическая значимость языка на данный момент, довольно странная и не понятная.


Я сейчас планирую исследования в области визуального программирования. Для этого мне нужен язык, который я смогу свободно менять и управлять.


Например, я думал создать програмку, которая делать расчет roi, каналов эффективности в маркетинге. Тянуть данные из метрики, аналитики, Adwords, директа, коллтрекинга, и сводить их в единой системе. Да такие сервисы уже есть, например roistat. Но мне всегда нравился Excel и Access своей элегантностью, где за вечер — два можно создать простую систему.
У меня знакомый написал на Access за 3 дня срм для своей компании, и спокойно работал на ней.


Вот что-то подобное я планирую делать, провести исследования в области визуального программирования для облачных систем.

А я думал, что вы кросс-языковый ЯП придумали (ну или транслятор хотя бы)…
Про визуальное программирование: luna-lang.org

На мой вкус штука сейчас безумно кривая, но мб в ней можно найти полезных концептов

Интересная статья.

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

Что касается вашего языка, я обязательно возьмусь за его обучение когда у меня появится время после изучения других 19 языков для тех, кто недавно только начал программировать и хочет без лишних трат у себя дома изучить основы программирования за 24 часа.

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

А я бы посоветовал всем молодым программистам изучать основы, и не поддаваться волнам модного хайпа :) Часто они проходят, не оставляя следа. Хотя, иногда, и могут оставить после себя крупинки чего-то полезного.
Привет Хабр! Меня зовут Ильдар. Мне 29 лет. Программирую с 2003 года

— Привет, меня зовут Вася, мне 30 лет и я не программирую уже 10 дней!
— Здравствуй, Вася. Похлопаем Васе

У меня было желание добавить Python


Чтобы было?

Неужели Вы были так привязаны к хостингу, который поддерживал только PHP, что были вынуждены разрабатывать собственный язык? Или это было всего лишь поводом?


Если хостинг с прибитым PHP был необходим, то не проще ли было написать свой конвертер PHP <-> JS, чем писать целый язык?


А если ограничение хостинга было всего лишь поводом, то подобное можно было бы реализовать, помимо предложенных решений (NodeJS, ...), на котлине, он и хорош как язык для бакенда, и транслируется в JavaScript.


Его синтаксис поддерживает те принципы, которые Вы описали в разделе "Принципы функционального программирования".


Асинхронность реализуется через корутины:


val user = getUser(name)
val postsCountAsync = async { getUserPostsCount(user.id) }
val commentsCountAsync = async { getUserCommentsCount(user.id) }
println("Постов: ${postsCountAsync.await()}, комментариев: ${commentsCountAsync.await()}")

В данном коде запросы количества постов и количества комментариев будут выполняться параллельно и асинхронно.


Неизменяемость структур данных реализуется через неизменяемые коллекции и неизменяемые переменные (val). Функции высших порядков присутствуют.


Цепочки вызовов можно реализовать схожим образом:


val user = User().apply {
        setName('John')
        addEmail("john@example.com")
}

В отличии от BAYRELL Language, для этой функциональности котлину не требуется специальный синтаксис, т.к. apply это всего лишь функция, которая принимает на вход лямбду.


Данный комментарий меня побудило написать ощущение того, что для описанных требований уже существует как минимум один язык (не считая отсутствия возможности трансляции его в PHP)

В какие языки Kotlin умеет транслироваться, помимо JavaScript?

Только в JavaScript и то только потому, что JavaScript является подобием байткода для браузеров. Трансляция в другие языки, на мой взгляд, не нужна, т.к. если нужно использовать код, написанный на котлине, в компилируемом языке, то можно скомпилировать его в библиотеку. А если же есть потребность использования его в интерпретируемом языке, то значит к программе не предъявляются жесткие требования по производительности, и можно использовать микросервисную архитектуру. Или же так же как для компилируемых языков, использовать библиотеку

В теории во все, которые могет LLVM.
То что при трансляции X-lang для LLVM он сначала превращается в IR, совсем не говорит о том что существуют средства превращающие IR обратно в X-lang.

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

Изначально я хотел шаблонизатор php -> js, WebAssembly, а получил функциональный язык с шаблонизатором -> php, js

В статье не хватает более детального разбора синтаксиса.

К примеру, почему используется ключевое слово `lambda`? Это разве не добавляет многословности?

Ещё было бы интересно узнать, с какими проблемами столкнулись при разработке компилятора и как их решили.

Спасибо за комментарий.


Детальный разбор синтаксиса, я напишу в документации. И так пост большой получился. А так согласен, интересно было бы. Можете ознакомится с примером CRUD List.


Слово lambda, это как static. Есть статические функции, есть обычные. Только lambda говорит о функциональном стиле. Сейчас синтаксис на стадии осмысления. Возможно что-то уберу в будущем. Сделаю лаконичнее.


Разработку компилятора, еще не начинал делать. Но смотрю в сторону WebAssembly и LLVM. Как сделаю, обязательно поделюсь опытом.

А чем статические функции отличаются от обычных?

Видимо, речь о статических методах?

Да статические методы, они же статические функции. В ООП, функция должна принадлежать к какому-то классу. А язык ООП.

Статические методы это функции в пространстве имен класса. Такого понятия как статические функции не припомню.

BAYRELL -> PHP -> C/C++
BAYRELL -> JS -> C/C++
Нам нужен еще один язык который будет транслироваться в BAYRELL. И желательно с синтаксисом С :)

Как по мне, фатальный недостаток в действии.

UFO just landed and posted this here

Честно говоря, по принципам ФП у меня есть некоторые вопросы к вашему языку.


Во-первых, я правильно понимаю, что вывода типов в BAYRELL нет?


Во-вторых, судя по этому фрагменту:


Document document = msg->isSuccess() ? msg.response : null;

в языке нет сумм-типов и сопоставления с образцом. Это так?

Типы есть. При объявлении переменной нужно указать явно тип. Приведение типов тоже есть, но оно задается в ручную.


Пока так. Это связано с тем, что транслятор пока, не умеет анализировать все файлы, строить зависимости между используемыми файлами, и объявленными в них типами. Да и IDE нужно, чтобы типы показывать и отлаживать.


В будущем сделаю для транслятора проверку и автоматическое приведение типов.

UFO just landed and posted this here
Свои фреймворки создавал как и многие, язык еще нет, респект автору. :-)
Тоже хотел бы попробовать создать что-то более высокоуровневое.

Круто было бы объяснять машине то что я хочу, примерно так как пишем
спеки на разработку.

Спасибо :)


Я думал про визуальный UML, который конвертируется в код.

История стара, как мир, собственно в сам uml вкладывали такую функциональность, в visual studio была глубокая поддержка этого, но оно не заработало от слова вообще. Визуальное программирование имеет такое огромное количество ограничений, что не справляется почти ни с какой задачей, больше чем вывести поле из базы без какой либо логики.

У меня такие идеи:


Можно попробовать развиваться в сторону проектирования базы данных мышкой.
Создать возможность конвертировать UML диаграмму классов в ORM, CRUD api и схему базы. С поддержкой миграции. и с возможностью наполнить эту базу мышкой данными. Я создавал свои ORM, и понимаю как это сделать в конструкторе.


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


Визуальное создание HTML интерфейсов. Сейчас это технология хорошо отработана в конструкторах типа тильда. А если верстать на основе компонентов, где их можно компоновать, и менять их свойства. А сами компоненты свободно распространять на гитхабе, например. То вот он конструктор получается.


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


И понимаю, что все мышкой сделать не получится, но упростить какие-то вещи. В yii2 есть генератор CRUD. Очень сильно помогает.


Думаю начать с чего-то подобного, а потом видно будет, как развивать дальше.

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

А как называется ваш конструктор и фреймворк?

https://pmforesight.ru/
Но он пропиетарный, мы сами разрабатываем платформу и сами же на ее основе внедряем проекты.
9 лет назад это был low coding crud & gui генератор, но требования к его функциональности превратили его в лоумышинг и норм так кодиг фреймворк.

вы встроили в язык html (шаблоны), на мой взгляд sql также хорош для работы
с данными как html для структуры, не лишнее ли это звено — ORM?

специализированные языки (html,sql,css) хороши без надстроек в виде орм

Я имею ввиду простое ORM, без излишек. Желательно обертку, чтобы sql отправлять, и приятный синтаксис для базовых sql запросов.


Что-то в виде:


OrmQuery q = new OrmQuery()
    -> query ("select * from table_name where id=:id", { "id": 5 } )
;
OrmResult res = await provider -> execute(q);

или:


OrmQuery q = new OrmQuery()
    -> select ( "users", "*" )
    -> where ( "id=:id", { "id": 5 } )
    -> offset ( 0, 10 )
;
OrmResult res = await provider -> execute(q);

От ORM самое главное сделать запрос к базе и преобразовать результат в модели страницы для рендера.

История стара, как мир, собственно в сам uml вкладывали такую функциональность, в visual studio была глубокая поддержка этого, но оно не заработало от слова вообще. Визуальное программирование имеет такое огромное количество ограничений, что не справляется почти ни с какой задачей, больше чем вывести поле из базы без какой либо логики.
Имхо, UML-системы годятся только для DSL, так как внутренняя логика у ЯП общего назначения слишком сложна для графического представления. Вот если такой DSL, плюс работа с БД, плюс возможно ORM (и все это мышкой) — то будет интересно, но сначала надо определиться с предметной областью.

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

Так ЯП общего назначения потому и сложны так, что для каждой предметной области свои требования по возможностям и функциям. Поэтому и DSL общего назначения пока популярных нет. А уж тем более UML для них.
Имхо проще взять одну предметную область, но очень популярную, и запилить UML-DSL для нее. А там уже видно будет…

Сделать такую работу — это очень круто для саморазвития и достойно уважения, но есть вопросы:
Раз вы обладаете такими фундаментальными знаниями в программировании, то почему вы продолжаете верстать сайты на бесплатной цмс, а не занимаетесь более серьезными делами, такие компетенции редки и высоко ценятся.
JetBrains потратили 10 лет и более $100 млн на разработку котлина огромной командой, я предвзято не верю, что один интузиаст по вечерам за пару месяцев может сделать хоть сколько то пригодный язык программирования. Вы хотели привести пример crud, но этого недостаточно, на уровне "hello word" любой яп и любой фраемворк прекрасен, а как только нужно сделать что-то посложнее, то сразу одни препятствия.

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

Сам задаю этот вопрос каждый день. Я живу в городе с населением в 200тыс и тут работы для IT специалистов мало. По удаленке я нашел работу только по сайтам. Вот так и живу, делая сайты, зарабатывая деньги, и параллельно развивая проект.


А так да, согласен. Одному сложно. Я прикинул TODO лист, что нужно сделать, и очень большой объем работ получился. И это не считая работ по визуальному конструктору.


Потому и написал на хабре, может найду единомышленников или инвесторов, чтобы собрать команду.


А какие еще есть варианты как развивать свою идею?

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

Я бы даже больше сказал, что эта статья в резюме — это уже билет на senior-место. Поэтому считаю, что автор не прав насчет удаленки.
Sign up to leave a comment.

Articles