LINUX.ORG.RU

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

 ,


2

10

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

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

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

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

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


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

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

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

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

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

Выполняется за 0.39s (в PyPy3 0.10s)

Это должно быть в первом абзаце...

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

Это курсач?

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

Да вот неправда. Я пишу и на Swift, и на Go, и на D. И все поделия прекрасно работают, везде есть сообщества. Gravity прикольный проект как OOP замена lua, где у lua сильной стороной является jit (lua-jit, это отдельный проект), т.ч. если у Gravity/Wren появится jit компилятор, то эти языки пойдут в продакшен, другой вопрос у кого. Не у Гугла, конечно, а в мелком и среднем бизнесе, где есть задачи вынести логику из Си кода в часто изменяемый код, ну тут есть еще v8, duktape, у v8 очень мощный jit, но и сборка v8 (жирность) это не для каждого проекта, в этом плане и duktape тоже очень переспективный проект. Ты просто в жизни не занимаешься интересными проектами и поэтому живешь тока «менйстримом», ты даже шевелиться не станешь, пока язык не будет с автокомплитом во всяких там IDEA, знаем мы таких программистов - их большинство (95%).

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

playX ★★ Школьник

По крайней мере ты не пытаешься создать второй эпол))))

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

Диплом — эт ты мощно задвинул. Создатели SO/OO/LO много лет пилили поддержку документов MSO, и до сих пор встречаются глюки.

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

сборка v8 (жирность) это не для каждого проекта

да вроде не сложно там собирать... есть инструкция.

там гораздо печальнее что они API ломают на каждый чих - вот это реально бесит, а ещё с потоками там всё не гладко

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

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

Так и заменить: на «implement».

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

Если она называется не f(), что в общем логично, коль скоро язык к математике имеет весьма отдалённое отношение, то function getSomethingUseful или что-то подобное - выглядит вполне удобочитаемо. А если справитесь с автоматическим выводом типов, то даже float писать не нужно будет. Посмотрите на синтаксис языка Crystal - он сделан лаконичным, удобным и при этом не мозолит глаза лишними значками. ИМХО имеет смысл ориентироваться на простой и мощный синтаксис Crystal или Swift, но уж никак не на то уродство которое придумали для ржавчины.

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

Хочется скобочек?

Да Онотоле упаси, оставь лучше отступы. Впрочем, даже они не придадут этому всему смысла.

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

Молодец, очень круто для твоего возраста, да и просто круто, так держать!

Я бы акцентировал внимание на полноценных параллельных потоках и поддержке вычислений на GPU, тогда это будет уже далеко не учебный язык. А если ещё добавить какой-нибудь компактный бинарный протокол обмена данными между копиями одной программы, запущенными на разных вычислительных нодах - вполне возможно, что сможешь догнать и перегнать Julia (возможно, протокол на базе udp с избыточностью/автокоррекцией при наличии проблем соединения).

Вообще сейчас столько языков, которые мало что (чаще - ровынм счётом ничего не) дают в плане уникального функционала, что вот как раз в этой нише места свободного - дофига. Т.е., возможно, имеет смысл забить на реализацию каких-то модных фишек, сделать язык весьма ортогональным, но при этом занять уникальную нишу «лучшего языка для быстрых распределённых вычислений»: благодаря «обезжиренному» протоколу обмена между вычислительными нодами, включающему multicast-вещание для конфигурирования нод и благодаря отличной поддержке, например, топовых GPU от NVidia. Последнее гарантированно обеспечит Вам настолько светлое будущее, насколько Вы этого сами пожелаете.

Главное при разработке языка не впадать в нездоровый академизм: например, именно это сделало из самого перспективного ЯП на рынке, Julia, вечно недоделанный проект со странными тормозами и выжиранием памяти в самых неожиданных местах и постоянными breaking changes. Я верю в то, что Julia рано или поздно станет намного популярнее R и Python для data science, но... возможно, при этом julia сможет использовать Neo разработки низкоуровневой платформы распределённых вычислений? ;)

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

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

Т.е. я бы не сказал, что Crystal «такой же как все». Если он позволяет при кратно меньших усилиях писать код, который работает почему-то даже быстрее кода на Rust - значит, язык самобытен и уникален, у него есть своя сфера применения. Например, Crystal как нельзя лучше подходит для написания микросервисов людьми без мощного бэкграунда в Си/Си++ и подобных языках.

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

Проснись, Нео, ты обосрался.

a1batross ★★★★★ ()

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

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

То что ты пытаешься сейчас делать, деликатно называется «социальной инженерией». Почему бы тебе самому не реализовать свои замечательные идеи, тыжпрограммист, а не школьник?

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

Только Юлия несмотря ни на что уже стала стандартом де факто в нейронауках.

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

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

Чуть не подавился.

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

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

Crocodoom ★★★ ()

Сделай хотя бы, чтоб паника в программе не приводила к панике всего (интерпретатора?)

[ecko@work NVM]$ RUST_BACKTRACE=1 cargo run --release samples/files.neo
    Finished release [optimized] target(s) in 0.03s
     Running `target/release/neo samples/files.neo`
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', libcore/result.rs:945:5
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::panicking::default_hook::{{closure}}
             at libstd/sys_common/backtrace.rs:71
   2: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:227
             at libstd/panicking.rs:475
   3: std::panicking::continue_panic_fmt
             at libstd/panicking.rs:390
   4: rust_begin_unwind
             at libstd/panicking.rs:325
   5: core::panicking::panic_fmt
             at libcore/panicking.rs:77
   6: core::result::unwrap_failed
   7: neo::stdlib::read_file_to_ptr
   8: <unknown>
fatal runtime error: failed to initiate panic, error 5
Aborted (core dumped)

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

Сделаю, пока руки не дошли

интерпретатора

JIT Компилятор

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

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

А, и да, что бы files.neo заработал надо в папке проекта создать test.txt, я зыбал его в коммит запихнуть, а сейчас времени нету :(

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

В данном случае работа с файлами мне не интересна совсем. Я просто ковырял примеры.

А вот то, как он обрабатывает ошибки — интереснее :)

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

Тогда стоит заглянуть сюда ну и конечно в основном репозитории ошибки ловятся

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

И ты всё это написал в одниночку? За сколько времени?

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

Чуть больше месяца, JIT писал не с нуля, но и он не идеален, буду прикручивать Cranelift ибо моя подделка не очень то и кроссплатформенна(только Linux и OS X поддерживаются), в частности интересовался данной статьей

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

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

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

Я ЯП еще месяца три назад писать хотел, тогда был написан первый интерпретатор на Dart'e, по сути парсер полная копия оттуда, хотя потребовалось «воссоздавать» некоторые конструкции в расте

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

Если сделать соответствующие оговорки, то можно скастовать это почти к чему угодно.

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

34k строк за три месяца - тоже неплохо. Почти 400 строк в день, да.

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

Если тебе и правда 14, то ты большой молодец. Главное, не останавливаться. Если захочешь углубиться в тему высокоуровнего дизайна ЯПов, погугли вывод типов. Там хитрые алгоритмы бывают, но как же они облегчают жизнь. Про низкоуровневое ты похоже и сам найдёщь. А вообще, на будущее: обнаружь проблему и реши её. Воспроизведение - это круто, но не очень.

Если, конечно же тебе на самом деле 14. Если 18 или больше, то всё плохо.

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

Мы просто забыли, сколько у нас было свободного времени в 14 лет летом.

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

Ну, З месяца назад еще была весна. Но лично я даже на каникулах не смог бы выдавать по 400 строк сравнительно отлаженного кода в день 3 месяца подряд :)

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

Но лично я даже на каникулах не смог бы выдавать по 400 строк сравнительно отлаженного кода в день 3 месяца подряд

Ты просто устаревшая модель.

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

А вот и стахановцы, рекордсмены текстового редактора, подоспели.

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

Весной было легко, уроков по 5-6

Ты всю ночь кодишь? Или 400 строк за 4 часа у тебя производительность? Ой-вей.

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

Не всю ночь, + проект давно спланирован, оставалось по сути перенести код с дарта, написать JIT и самым сложном было именно написание компилятора и на него ушло больше всего времени

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

рекордсмены текстового редактора, подоспели.

Ну да, можно и 4000 строк, но такая фигня получается...

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

Чувак, напиши уже нам браузер, а то слоупоки из мозиллы задолбали. Думаю к осени управишься. Заранее спасибо.

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