LINUX.ORG.RU

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

 ,


2

10

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

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

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

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

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


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

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

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

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

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

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

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

А мне нравится огнелис, и браузер я писать нихочу, буду ЯП пилить

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

Если ты в самом деле написал всё это сам (да хотя бы только половину), тебе следует найти общеполезный проект и работать над ним. Пока ты зарываешь свой талант в землю.

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

Пусть лучше зарывает, чем мы очередной системдэ получим.

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

Суть такая к простым текстовым обрабатываемым (и не очень) текстам придумываем названия, иерархии и схему данных. Пишем обработчики, которые перегоняют данные из одного вида в другой. Пишем приложение, которое опрашивает эти программы-обработчики на предмет того, что они умеют, что им надо и помогает связывать их в классический unix конвеер.

Было уже, Google Wave называлось, но чёто не взлетело. Думаю, чтобы взлетело нужно продумать архитектуру и сделать всё проще, чем было в Google Wave.

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

Да то - веб служба, а я хочу чтобы всё было просто, тупо, на текстовых потоках и локально. Как-нибудь упорюсь еще раз и сделаю уже прототип для ЛОРа.

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

ты даже шевелиться не станешь, пока язык не будет с автокомплитом во всяких там IDEA, знаем мы таких программистов - их большинство (95%)

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

Так что знаем и мы «таких программистов». Переливают из пустого в порожнее.

А если и появится ЯП с революционными идеями, то под него за пару лет инфраструктуру не хуже джавы поднимут. А пока я вижу только один «элитизм» альтернативно одаренных.

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

Я еще помню. Эх, комп бы мне нормальный в те времена, да интернет..

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

локально

А если я хочу со смартфона читать, а потом на ноут пересесть? Мне вручную это всё синхронизировать? Такая вещь должна быть в интернете, минимум на личном VDS.

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

34k

Я что‐то не понял.

Src:\rust\Neo ζ (ls -recur |? Extension -eq ".rs" | % { cat $_.FullName } | measure-object -Line).Lines
5550
Src:\rust\Neo ζ (ls -recur |? Extension -eq ".neo" | % { cat $_.FullName } | measure-object -Line).Lines
151

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

Src:\rust\Neo ζ (ls -recur |? Extension -eq ".rs" | % { cat $_.FullName } | measure-object -Line).Lines
Src:\rust\Neo ζ (ls -recur |? Extension -eq ".neo" | % { cat $_.FullName } | measure-object -Line).Lines

Что это?

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

Не знаю, что именно считает PowerShell на венде и что в твоем фрагменте обозначает Neo, но я считал так:

$ find NeoParser -type f -name \*.rs | xargs cat | wc -l
8734
$ find NVM -type f -name \*.rs | xargs cat | wc -l
26742

На самом деле там 35k строк.

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

Э, SLOC посчитай теперь. Хотя все равно дохера. Будем надеяться, что это не копипаста.

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

А если я хочу со смартфона читать, а потом на ноут пересесть?

А что именно ты хочешь синхронизировать?

Мне вручную это всё синхронизировать?

Зачем? Всегда можно сделать скрипт, который делает это за тебя. Пишешь что-то, что получает нужные тебе данные, система его подхватывает и распихивает полученные данные кому надо. Те, в свою очередь уже сами думают, что с ними делать.
Например, список контактов есть на стационарном пк, у них есть определённый формат, есть скрипты, которые новые контакты добавляют, ну и всякие программы, которым они нужны. Запиливание синхронизации будет заключаться добавлении скрипта в котором будет wget и адрес, откуда надо взять данные (ну + авторизация) и информация о том, что это за данные (типа «foror.sync_emails_list») и с чем они совместимы (типа «common.sync_emails_list, json.string_array, ...»). Система опросит скрипты не предмет того, что они передают и когда запустится синхронизация ей нужен будет какой-нибудь common.sync_emails_list, система скажет «да, есть такой скрипт, который это выдаёт», тебя спрашивают, надо ли этот скрипт дёргать, ты такой «ок, всегда его дёргайте» и всё, скрипт будет скармливать json твоему синхронизатору контактов, а держать их можно хоть на ЛОРе, или на гитхабе, или под кроватью, или вообще хоть где. Так же можно все эти скрипты синхронизировать. Тупо добавил git pull и дёргай его каждый раз.

Такая вещь должна быть в интернете

Тебе ничего не мешает получать любую информацию из сети.

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

А если и появится ЯП с революционными идеями, то под него за пару лет инфраструктуру не хуже джавы поднимут.

А прикинь-ка несколько таких идей, которые, по-твоему, заставят «мировое сообщество вкупе с лидерами индустрии» за пару лет поднять инфраструктуру «не хуже джавы» )

...но синтаксис? Да как-то пох

ок, делаем синтаксис настраиваемым, один из вариантов - скобочки ))

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

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

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

Идея стоящая надо делать, а то эти теоретики из W3C только теоризируют да корпоративные бюджеты пилят, а кто-то должен сделать.

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

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

crutch_master ★★★★★
()

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

А что критиковать то? Ну сделал и сделал, поздравляю. Цели то какие?

loz ★★★★★
()

шах и мат растодрочеры

anonymous
()

Более того, ты даже не указываешь Dominik Inführ (вместе с его проектом), как автора большей части кода что ты использовал.

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

Затравили, негодяи.

Не тrавите гения!

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

Ничего, к сентябрю как раз допилит и внедрит в родную школу. И будут 8-классников учить пузырьковой сортировке на Neo

Crocodoom ★★★★★
()
Ответ на: комментарий от playX
-    let mut dtn = *ctxt.dtn.borrow();
+    let mut ntn = *ctxt.ntn.borrow();

-        if !glob.ty.reference_type() {
+        if !glob.typ.reference_type() {

-                            subtype: subtype,
+                            subtyp: subtyp,

-                let types: Vec<String> = val.params
+                let typs: Vec<String> = val.params

-            IfCondType(ref ty) => {
-                format!("`if` expects condition of type `bool` but got `{}`.", ty)
+            IfCondType(ref typ) => {
+                format!("`if` expects condition of type `bool` but got `{}`.", typ)

Глубокие изменения, да.
Ладно, всё уже ясно.

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