LINUX.ORG.RU

Я тут свой язык создал

 , , , ,


4

6

Разумеется под linux и с открытой лицензией.
https://github.com/Alexander-Goto/scarlet
На ютубе выпустил видео с информацией о том что и как.
https://www.youtube.com/watch?v=YS5iPMOsico



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

«Имя модуля должно начинаться со строчной латинской буквы» - это нарушает моё право на использование родного языка (русского)

Saakx
()

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

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

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

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

Если речь о scarlet.c то это не исходник, это временное представление скомпилированного компилятора, а исходники - https://github.com/Alexander-Goto/scarlet/tree/main/scarlet/src. Компилятор уже написан на scar (язык который компилирует).

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

core - это модуль встроенный в компилятор. С помощью скриптов (которые я не публиковал) и немного ручных манипуляций, он просто превращается в один большой файл, который затем вставляется в каждую создаваемую программу. Вот он в исходниках - https://github.com/Alexander-Goto/scarlet/blob/main/scarlet/src/ir/core/core.scar. Пока нет нормальных инструментов, но подразумевается, что программы создают временное представление на Си, а оно уже компилируется на машине конечного пользователя, адаптируясь под его железо, об этом сказано в видео.

Taetricus
() автор топика

документация и описания на уровне «мне срать на пользователей» :-) впрочем у многих так

на беглый взгляд *.scar - какой-то Си-шником недонюханный питон. Из киллер фич скобку { можно ставить, можно не ставить и наслаждайтесь ключевым словом let..

идея-то языка в чём ?

MKuznetsov ★★★★★
()

Тут нет метациклического интерпретатора - так не пойдёт :D

Напомнило про Hare - там более все проработано и автор Drew DeVault

Отсутствие HelloWord-а чтобы нельзя было по-быстрому прикинуть что за язык минус в карму. Ссылка на видео, вместо доков - второй минус. Итого - «Потрачено» :(

necromant ★★
()
Ответ на: комментарий от MKuznetsov
- Ты хакер?
- Ну да. 
- Банкомат взломать сможешь?
- Конечно, возьму кувалду и ноутбук, пойду, расхреначу и взломаю.
- А ноутбук тебе зачем?
- А какой же я хакер без ноутбука?

Какой же он программист без своего языка программирования?

LongLiveUbuntu ★★★★★
()

Циклическая зависимость в виде того что компилятор твоего языка написан на твоем языке это плохо.

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

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

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

Циклическая зависимость в виде того что компилятор твоего языка написан на твоем языке это плохо.

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

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

«Как будешь решать?»

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

Даже тут какой-то stevejobs (которого, правда, забанили) и то постоянно вылезал, и говорил, что «не надо переписывать пакеты в стиле пакетного менеджера дистрибутива, если они ставятся пакетным менеджером языка разработки».

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

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

На ютубе выпустил

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

amd_amd ★★★★★
()

Self-hosted это хорошо.

А вот что нет вообще никакого описания ни в треде, ни в ридми - это плохо.

Исправляйся.

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

Ты ещё спроси, как установить пакетный менеджер без пакетного менеджера.

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

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

сделать нового человека, не имея парочки человек

Из динозавра, например из крокодила. Это многое объясняет в поведении некоторых окружающих.

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

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

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

Тебе ещё предстоят удивительные открытия, что компилятор Си++ написан на Си++, компилятор Go – на Go, Паскаля – на Паскале, а CL – на CL.

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

Я в курсе. Но нужно не повторять чужие ошибки, а учится на них. Зачем создавать дополнительные сложности для сборки пакетов?

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

Действительно. Разрабатывать язык программирования и применять его на практике - ошибка. Гораздо лучше разрабатывать и не применять.

wandrien ★★★★
()

Для ЛЛ:

fn main() {
     let digits_len = get_digits_len()
     let secret_num = get_secret_num(digits_len)
     loop(0, fn (attempts) {
          let attempts          = attempts + 1
          let variant           = get_variant(digits_len)
          let [box bulls, cows] = get_bulls_and_cows(variant, secret_num)
          if bulls == digits_len {
               println("You win! Number of attempts - " ++ attempts.to_string())
               [breaker null]
          } else {
               show_bulls_and_cows(bulls, cows)
               attempts
          }
     })
}

fn get_digits_len() {
     println("Enter the number of digits (4-10):")
     let digit_num = read_cli_line()
     if digit_num.null?()
          fail("Failed to read from command line interface.")
     else null

     let digit_num = parse_int(digit_num, 10)
     if digit_num.type() == "core.int" && digit_num.in_range?(4, 11)
          digit_num
     else {
          println("The number of digits must be greater than 3 and less than 11.")
          get_digits_len()
     }
}

fn get_secret_num(digits_len)
     get_secret_num__helper(digits_len, "", "0123456789")

     fn get_secret_num__helper(digits_len, secret_num, remain_digits) {
          let digit_idx  = (rnd() >> 1) % remain_digits.len()
          let one_digit  = remain_digits[digit_idx]
          let secret_num = secret_num.append(one_digit)
          if secret_num.len() == digits_len
               secret_num
          else get_secret_num__helper(digits_len, secret_num, remain_digits.delete(digit_idx, digit_idx + 1))
     }

fn get_variant(digits_len) {
     println("Your variant:")
     let variant = read_cli_line()
     if variant.null?()
          fail("Failed to read from command line interface.")
     else null

     if variant.len() == digits_len && uniq_and_digits?(variant)
          variant
     else {
          println("The variant must contain unique decimal digits in the number you specified earlier.")
          get_variant(digits_len)
     }
}

fn uniq_and_digits?(string)
     string.foldl([byte_array 0b00].repeat(10), fn (qtys, char)
          if char.digit?()
               new (qtys)[char.to_int() - '0'.to_int()] => _ + 0b01
          else [breaker false]
     ).all(false, _ < 0b02)

fn get_bulls_and_cows(variant, secret_num)
     variant.foldl_kv([box 0, 0], fn (state, idx, digit) {
          let [box bulls, cows] = state

          if digit == secret_num[idx]
               [box bulls + 1, cows]
          else [box bulls, cows + if digit.in?(secret_num); 1 else 0]
     })

fn show_bulls_and_cows(bulls, cows)
     (bulls.to_string() ++ (if bulls == 1; " bull, " else " bulls, ") ++ cows.to_string() ++ (if cows == 1; " cow." else " cows.")).println()
vbr ★★★★★
()
Ответ на: комментарий от frunobulax

Не, ну сам деле! Одна задача - сделать интерпретатор, для которого можно составить программу «Привет, мир!» или, скажем, решение квадратного уравнения…

И гораздо более сложно - сделать компилятор и полноценный язык, на котором собственно можно написать этот компилятор…

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

Ты не поверишь, но 180% современных питонопроектов именно так и подразумевают всё устраивать.

А вообще, ничего удивительного. С помощью apt можно установить, например, rpm. Или nix, guix, и прочее. Полистай репы на досуге.

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

nichego ne meshaet ispolzovat strochnie latinskie bukvi s russkim yazikom

vbr ★★★★★
()

Я правильно понял, что ты сначала пишешь программу, после наполовину её собираешь, а на компьютере отдельного пользователя, полусобранная программа «дособирается» под конфигурацию его железа?

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

Я участвовал в этом голосовании до того, как опубликовал язык. (Проголосовал за 100% 😁)

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

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

Это же не значит, что нужно каждый раз цепочку с нуля проходить, чтобы Автокад запустить.

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

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

apt_install_lrzsz ★★★★
()

Если взглянуть пример не сильно всматриваясь, то кажется, что написано на Расте. Влияние Раста очевидно. Но не ясно, чем этот язык лучше. В чём смысл его создания?

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

Нет. Достаточно целеустремлённый человек поймёт, что компилятор целиком сразу он не осилит. И сначала напишет FASM (ассемблер на ассемблере).

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

Влияние Раста очевидно.

Это вроде бы мой 12 язык и он испытал влияние предыдущих моих языков, а также Haskell и немного go. Раст влияние не оказывал.

В чём смысл его создания?

Кратко - я создал язык под свои потребности, подробнее указано в видео (ссылка на которое в посте).

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

в видео

А где текстовое описание? Для тех кто хочет сказать, что язык - говно, но не хочет тратить время на видосики.

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

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

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

отсутствие автоматической конвертации целого в вещественное

Неправда.

  1. Там есть внутренний алфавит из ASCII, кириллицы и беларусіцы;

  2. Там есть модель многопоточности на синтаксическом уровне (in, out переменные, канал);

  3. Там есть компиляция в Си (ну, мне так показалось), это позволяет запустить язык на процессоре Эльбрус.

Сперва добейся!

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

Для таких людей планировалась статья на хабре, но меня забанили за то, что написал свои подписчикам про свой язык и дал ссылку на видео. Обращение в администрацию с извинениями не помогло, ответили что то в роде «Скажи спасибо что аккаунт не удалили. Пёс!».

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

Значит невнимательно слушали. ОЧЕНЬ невнимательно!

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

Кратко - я создал язык под свои потребности

Хорошо. Тогда нужно больше примеров на github. А то будет как у большинства других авторов, на языках которых написано только две программы: рассчёт факториала и чисел Фибоначчи.

По видео. Скорость только в 2 раза быстрее Питона - как-то не круто, тем более, если язык компилируется в си. Можно было сделать язык со статической типизацией, содержащий динамический тип, если нужна гибкость. Такое есть в C#, если не ошибаюсь.

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

планировалась статья на хабре

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

у яндекса специальный сервис есть:
https://sourcecraft.site/

Saakx
()
Последнее исправление: Saakx (всего исправлений: 4)
Ответ на: комментарий от Taetricus

Для таких людей планировалась статья на хабре

Прямо на гитхабе надо было и писать. И не в формате html, а в md, чтобы удобно было читать.

Kogrom ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.