LINUX.ORG.RU

Выпустил первую версию своего вроде как ЯП: Neo

 ,


2

10

Уже месяц с лишним пилю и пилю язык программирования, до этого был интерпретатор, потом стэковая vm и вот наконец вышло что то готовое!

И так в чем суть? Neo - язык программирования, синтаксис схож на синтаксис java и c#

Что в нем есть?

  • Трейты
  • Сруктуры
  • Генерики
  • Треды(Threads, не очень понимаю как правильно перевести)
  • JIT компилятор
  • Сборщик мусора
  • Классы

    Чего нету, но будет позже:


  • Взаимодействие с ФС(Открытие файлов, запись и чтение)
  • FFI с Растом и Си( Есть функция loadFunction что может загрузить функцию из Си, но это костыль)

    Исходники можно найти здесь
    скриншо..примеры можно посмотреть здесь, но пока что там не все возможности языка показаны

    Что о производительности?
    объектный тест фибоначи выполняется за 5.98s (в PyPy3 5.90s).

    Neo точно работает на двух платформах: macOS/ OS X и Linux другие не проверялись

    В общем жду адекватной критики и советов что добавить, а что изменить
★★

Чем это лучше какого-нибудь gluon?

t184256 ★★★★★ ()

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

Пригоден разве что для твоего собственного развлечения.

Deleted ()
Ответ на: комментарий от Deleted

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

playX ★★ ()

А бесконечный цикл на нём сколько времени занимает?

anonymous ()

В общем жду адекватной критики и советов что добавить, а что изменить

Синтаксис - говно

ya-betmen ★★★★★ ()

Треды(Threads, не очень понимаю как правильно перевести)

Дословно. Нити.

AnDoR ★★★★★ ()
Ответ на: комментарий от playX

Минус языков «для обучения» в том, что они тратят время, выделенное для обучения, ничего не давая взамен (относительно мейнстрима). Время на продуктивное обучение в день ограничено, после чего начинаешь прокрастинировать, а практическое применение языка «для обучения» бесмысленно, т.к. по производительности, оптимизациям и богатству библиотек он очень сильно проигрывает мейнстримным.

Это только развлечение для тебя и твоих единомышленников (если есть). Сможешь сделать/придумать киллер-фичу относительно остальных - другое дело.

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

Deleted ()
Ответ на: комментарий от Deleted

У меня достаточно легко все же «внедрять» туда классы и функции если глянуть сюда и хочу сделать «отдельный крейт» для такого что бы можно было биндить функции из раста

playX ★★ ()
Последнее исправление: playX (всего исправлений: 1)
Ответ на: комментарий от playX

Все сокращения типа fn, impl и прочее заменить на полные слова если иначе парсить сложно или в идеале ваще выкинуть чтобы не мозолили глаза. var в агрументах функций нужен чуть менее чем никак. Тип возвращаемого значения функции стоит так же указывать через двоеточие, она же уже промаркирована через fn, какой смысл вводить новый значок?

ya-betmen ★★★★★ ()

Трейты
Сруктуры
Классы

Чем отличаются структуры от классов, и зачем нужны последние при наличии трейтов? 🤔

Crocodoom ★★★ ()
Ответ на: комментарий от ya-betmen

Я больше ориентировался на Раст во время написания, но да, некоторые кейворды я заменю, и кстати, ведь `->` прямо точно указывает что функция возвращает, а function f(): float мне если честно не очень привычно, да и как можно impl заменить, слишком уж длинно будет писать `implementation`

playX ★★ ()
Ответ на: комментарий от Crocodoom

В моем понимании структуры это легковесный класс, так же классы можно наследовать, у меня в примере classes.neo показаны все трюки и с структурами такое не сделаешь

playX ★★ ()
Ответ на: комментарий от playX

function f(): float мне если честно не очень привычно

Но : это одна клавиша а -> это две, и единообразие важнее личных привычек.

слишком уж длинно будет писать `implementation`

Длинные служебные слова за программиста пишет иде.

Ах да, явно нужны неймспейсы, иначе будет как с пыхом.

ya-betmen ★★★★★ ()
Последнее исправление: ya-betmen (всего исправлений: 1)
Ответ на: комментарий от ya-betmen

Мне пока не до неймспейсов, сейчас что бы использовать что то из другого файла надо натравить компилятор на директорию с нужными файлами, но уже делаю include и import

playX ★★ ()

внезапный вопрос - в чём идея языка ?

MKuznetsov ★★★★★ ()
Ответ на: комментарий от MKuznetsov

Пока ни в чем, просто обучаюсь, но хочу прикрутить к нему OpenGL и написать какую нибудь простую игрулю

playX ★★ ()
Ответ на: комментарий от playX

Не слушай его. Он ничего не смыслит в обучении

cvv ★★★★★ ()

У меня одного 500 на весь сайт gitlab?

ados ★★★★★ ()
Ответ на: комментарий от ya-betmen

Но : это одна клавиша а -> это две

Длинные служебные слова за программиста пишет иде.

/0

anonymous ()

Раз тебе это интересно — пили, разумеется. Неосуществлённые желания рождают чуму.

Однако я бы, если бы меня таки понесло в системное программирование, скорее, поработал бы над системной библиотекой одного из уже существующих языков, например, D. Языков, мне кажется. и так уже наплодили довольно много...

hobbit ★★★★★ ()
Ответ на: комментарий от playX

да и что нового можно придумать в наше время?

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

system-root ★★★★ ()
Ответ на: комментарий от system-root

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

playX ★★ ()
Ответ на: комментарий от playX

да и что нового можно придумать в наше время? Все языки друг на друга похожи чем то

Вот никогда не знал толи завидовать таким, толи сожалеть. Энергии море, а кругозора/мозгов - ноль.

anonymous ()
Ответ на: комментарий от anonymous

Объектный Фибоначчи

В общем на ~2 секунды медленнее PyPy3

pypy3 test.py  3.67s user 0.03s system 99% cpu 3.714 total
./neo samples/fib.neo  5.90s user 0.01s system 99% cpu 5.952 total

playX ★★ ()

оптимизация хвостовой рекурсии есть? Если нет, то в топку

anonymous ()

Исходники можно найти здесь

Да ты жесткий школьник.

да и что нового можно придумать в наше время?

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

//Правила -> код
"(dight+dight)" -> (a,b) {return a+b);
"`from` s+s(s->s),...","%from where %where" -> (t1,t2,id1,id2) {return {from:t1+","+t2, where: t1+"."+id1+" = "+ t2+"."+id2}
/*Шаблон:
1 + 2 = (1+2)
select * from users+msg(id->id_user)
//Выхлоп
1 + 2 = 3
select * from users,msg where users.id = msg.id_user
*/
Делается просто, на любой скриптоте, нужно для метапрограммирования на всяком дерьме.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от playX

И как ты планируешь обрабатывать это событие в коде?

Aswed ★★★★★ ()
Ответ на: комментарий от anonymous

Это не нужно если язык не функциональный

Aswed ★★★★★ ()

Или вот еще, true unix-way программируемый на чём угодно текстовый редактор. Суть простая: есть базовое консольное приложение, которое делает не много: выводит содержимое текстовых буферов (с раскраской, прокруткой и т.д.), делает окна, в которые эти буфера выводит, передаёт клавиатурный ввод и информацию о том, где он имел место быть на стандартный ввод других процессов (которые, возможно сам и запускает или в fifo). Потом читает fifo или стандартный выхлоп процессов и делает, что они говорят: модифицирует текстовые буферы, прокручивает их, создаёт/меняет окна. Если бы такая программа просто делала хорошо вот это всё, было бы охрененно. Потому что то, что сейчас есть - куча ржавых комбайнов.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)

Еще есть одна штука, которой нет и некому написать. Система стандартных форматов для текстовых данных. Если тебе не чем заняться, можно запилить, а потом просунуть в качестве диплома в шараге или на олимпиадах/выставках школьного творчества. Преподы будут визжать.
Суть такая к простым текстовым обрабатываемым (и не очень) текстам придумываем названия, иерархии и схему данных. Пишем обработчики, которые перегоняют данные из одного вида в другой. Пишем приложение, которое опрашивает эти программы-обработчики на предмет того, что они умеют, что им надо и помогает связывать их в классический unix конвеер.
Пример - читалка для лора. Есть куча скриптов, которые получают «сырые» страницы тредов и списка тредов, парсят их, спрашивают, какой тред надо и выдают что там, собственно написано. Обсуждаемое приложение будет связывать все эти скрипты тому, какие они типы данных выдают и получают. Такой-то @Autowired спринга на стандартных потоках. Профит в быстрой разработке сложных систем и реюзабельности компонентов. Например, в читалку можно засунуть не только ЛОР, можно легко сделать im, который локально будет собирать всю почту, сообщения форумов, vk, телеги, скайпов, вайберов и джаберов.

crutch_master ★★★★★ ()
Ответ на: комментарий от playX

Вот 2 популярных в наше время проекта:

https://marcobambini.github.io/gravity/

https://github.com/crystal-lang/crystal

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

А ты не думал использовать для своих целей разработки нового языка LLVM, ведь многие вещи типа JIT можно гораздо быстрее и удобнее написать почти как на фреймверке?

menangen ★★★★★ ()
Ответ на: комментарий от menangen

Gravity

Смотрел и тыкал, но там Сишка, а ее я плохо знаю.

Crystal

Слышал, но не тыкал

для своих целей разработки нового языка LLVM

В планах прикрутить Cranelift(Cretonne, тоже JIT) который написан так же на расте

playX ★★ ()

Зная твои предыдущие поделки (например браузер с хардкоженной homepage, лол), не думаю, что там у тебя что-либо осмысленное.

Metaeblanuje ()
Ответ на: комментарий от Metaeblanuje

А пройти по ссылке и посмотреть на исходники не судьба? Что бы JIT и GC написать осмысление как раз нужно

playX ★★ ()
Ответ на: комментарий от crutch_master

Здраствуйте. Я, Кирилл. Хотел бы чтобы вы сделали игру, 3Д-экшон суть такова...

anonymous ()
Ответ на: комментарий от menangen

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

anonymous ()
Ответ на: комментарий от menangen

Хотя есть надежда, что астероидом расхерачит цивилизашку, тогда с нуля может напишут чего получше через 500 лет.

anonymous ()
Ответ на: комментарий от playX

Для того чтобы копипастить код из очередного «Write you a programming language» - не, не нужно.
Возможно ты и правда всё это сам написал, тогда я могу лишь приклонится перед твоей мудростью и отступить.

Metaeblanuje ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.