LINUX.ORG.RU

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

 , , , ,


4

6

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



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

Да я согласен.

У меня последний вопрос:
а что мы будем делать с этим языком, если у него нет библиотек?
Ну, например, я же даже сайт не могу при помощи него написать, потому что не видел библиотеки для работы с HTTP-запросами, ответами, заголовками и что там ещё бывает…

CGI не предлагать

Кстати, а как получить переменную окружения в этом языке?

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

Ты вообще видел качество статей на Хабр?

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

Интерактивность иногда полезна для объяснений. Это статически, и не требует сервера, так что отлично размещается на каком-нибудь netlify

Ты вообще видел качество статей на Хабр?

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

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

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

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

в питоне я могу переменные на китайском использовать

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

Современно и перспективно интегрироваться в китайские сообщества и пользоваться софтом написанном на иероглифах.

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

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

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

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

Тогда нужно больше примеров на github.

Со временем сделаю.

Скорость только в 2 раза быстрее Питона

Скорость на число дробилке, которая даже промахов кэша не делает (т.е. самый худший случай)! Само собой в реальных приложениях такого не будет. Узкие места можно оптимизировать, либо написать на другом языке. В том числе в видео я указал, что планирую создать второй язык, который тесно интегрируется со scar, при этом статически типизированный, похож на scar и имеет высокую производительность. Написать компилятор для такого язык будет сильно проще, поскольку он будет очень узко направлен, не будет поддерживать большое количество фичь и пере-использовать то, что есть в scar.

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

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

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

Если где-то и публиковать статью, то там где её могут найти и прочитать. А хостинг статических сайтов - это место где твою статью никто, кроме тех кому ты дал ссылку, не найдёт и не прочитает! Я потом поищу есть ли альтернатива хабру, но мне кажется, что они монополисты без конкурентов.

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

Прямо на гитхабе надо было и писать.

Статью??? Гитхаб точно не для этого!

И не в формате html, а в md

В html написана документация и эта документация в html как раз таки для читаемости! Я последний раз достаточно давно пользовался markdown на гитхабе, но тогда не было возможности вставлять ссылки на части документа и нельзя было создавать текст с определённым цветом, в документации примеры кода используют подсветку синтаксиса. Я сделал подсветку синтаксиса для редактора kate и в нём есть возможность экспортировать код в html и я активно этим пользовался при написании примеров кода для документации.

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

циклическая зависимость это неотъемлемое свойство жизни

apply/eval это буквально формальное «пояснение» неформальной семантики ядра языка

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

и без циклического определения у тя всяко всегда будет вылазить телео - а будет ли это асм али ся(который тащит за собой асм pdp-11/6 |pdp-6 если придерживаться исторической эволюции реализации)

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

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

Ты пробовал собирать пакет с циклицеской зависимостью? Когда он ссылается сам на себя? Речь про это в контексте, а не про жизнь, и бла-бла.

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

т.е. потрачена версионность приводящая к «закрытой темнице с ключом в нейже» и полное доверие к бинарной поставке?!

так ща редко вообще кто собирает изначальный бинарь ручной трансляцией в машкод целевой

т.е ты вообще о чём?

у тя что твой доверенный(упавший с идеального мира) Скомпилятор которому ты веришь а остальным бинарям неа.

но даже в этом случае тебе нужна оська в составе твоего Скомпилятора - и привет ты переизобрёл Юникс

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

а что мы будем делать с этим языком, если у него нет библиотек?

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

Кстати, а как получить переменную окружения в этом языке?

@core.env_vars - ассоциативный массив где имя переменной - ключ, а значение соответственно - значение. Пример:
@core.env_vars[«XDG_RUNTIME_DIR»] - вернёт значение переменной XDG_RUNTIME_DIR.

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

может сам тут на лоре найдёшь «десятилетней» выдержки комментарий мой с ссылкой на rago(первоавтора)(?!) c его hex0->hex1 ....

как раз как пример самораскрутки

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

ps: при том что бинзакладки в бинпакетах более палевны и менее универсальны чем закладки в cpu c их «спецэфектами » интерпретации машкода

зы. rago был первым хопом(на ряду с рядом других) вот этого крутецкого https://en.wikipedia.org/wiki/Bootstrapping_(compilers)#cite_note-8

Primary source(дословная копия оригинала из 2002) : https://github.com/smtlaissezfaire/bcompiler

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

сори если уже выше было ( ну али есть какой обзор «scar in 5minute or less»)

основная киллер фича СделанноУВас!?

т.е его отличия скажем от t3x в чём например?

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

Забавно, я вчера разбирая завалы старых файлов, наткнулся как раз на t3x.

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

vbcnthfkmnth123 дурью мается.

Чтобы собрать компилятор gcc, нужен компилятор Си++.

Чо-то это его не смущает.

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

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

Статью??? Гитхаб точно не для этого!

Никто же не просит «Войну и Мир» писать. Просто проявить элементарное уважение к посетителям ресурса, как делают другие авторы, например автор v-lang. При том у него есть полноценный сайт с документацией. Но ничего, потрудился на гитхабе не только краткое описание дать (приведённое выше), но и документацию.

Он уважает людей и, соответственно люди к нему хорошо относятся.

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

Чтобы собрать компилятор gcc, нужен компилятор Си++.

Это не верное утверждение. Не верное, потому что неполное.

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

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

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

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

Если нет, то в чем этот пафос. По факту, на практике, а не в теории, чтобы собрать пакет с gcc, нужен рабочий компилятор с++.

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

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

Есть как минимум один дистрибутив, который ставит себе это целью.

в чем этот пафос

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

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

Если есть дистрибутив, то в нём есть пакеты. Если есть пакеты, на них можно жаловаться.

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

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

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

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

т.е. арг ровно не научный а популярный

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

селфхостинг это ошибка

прям гранит

Один джентельмен другому: в париже дикие люди - не могут даже английский

не понятно это жир или искряняя незамутнёность - аж завидно

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

селфхостинг это ошибка

прям гранит

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

И таки да, в одном из смыслов - ошибка.

Он не виноват, что вы понимаете неправильно.

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

И вот тут мы переходим к самому интересному.

Для сборки работающей копии scarlet из релизного архива не потребуется компилятор scarlet:

https://github.com/Alexander-Goto/scarlet/blob/060f483798abffef1261418a4dc288fcd9b82772/release/0.1/build.sh

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

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

под его чёткую пакетную задачу ему нужен DAG

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

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

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

Но автор запихал в гит фактически двоичный дамп в текстовом виде. Если бы там был тупо hexdump и утилита которая из него делает бинарник - принципиально ничего бы не поменялось.

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

Зачем? Чтобы что?

Автор ушёл от существующих языков, чтобы реализовать своё видение в новом языке

Но какого-то фига он должен писать на Си, потому что какие-то анонимы на форуме так сказали? Что он ещё должен? Денег хоть не должен?

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

Добавил на github краткое описание языка и ещё один пример.

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

сори если уже выше было ( ну али есть какой обзор «scar in 5minute or less»)

Ну прям на пять минут нет, но видео (ссылка на которое в посте) всего 17 минут.

основная киллер фича СделанноУВас!?

Добавил на github краткое описание фич. https://github.com/Alexander-Goto/scarlet

т.е его отличия скажем от t3x в чём например?

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

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

Зачем?

Чтобы образовалась пара текстов с одинаковым смыслом, но на разных языках (билингва, параллельная)

Чтобы что?

Чтобы лингвисты будущего смогли расшифровать мёртвый текст

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

Расскажите, пожалуйста, как работает управлению памятью.

Как избегается возникновение циклов между объектами в куче?

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

Если бы там был тупо hexdump и утилита которая из него делает бинарник - принципиально ничего бы не поменялось.

Мог бы и двоичный дамп запихать, да. Почему бы и нет.

Я, например, непосредственно двоичные файлы компилятора в git кладу. Мог бы класть и промежуточное представление на ассемблере, но двоичный файл занимает 120 кБ, в то время как код на ассемблере – около 1700 кБ.

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

Чтобы образовалась пара текстов с одинаковым смыслом, но на разных языках (билингва, параллельная) Чтобы лингвисты будущего смогли расшифровать мёртвый текст

Это уже совсем отборная шиза пошла…

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

Неаргументированное оскорбление участников дискуссии.

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

Просто проявить элементарное уважение к посетителям ресурса, как делают другие авторы, например автор v-lang.
Он уважает людей и, соответственно люди к нему хорошо относятся.

Это шутка? Я про V знаю очень давно и в первые я о нём услышал когда разгорелся скандал, когда автор языка сказал, что будет делать язык и описал фичи которые в нём будут, собирал донаты на его создание, а выпущенный язык не соответствовал тому описанию которое он изначально давал. Ох как в те времена к нему и к его матери «хорошо относились» и как все говорили о том как он «уважает людей».
Если что, я к нему отношусь нейтрально, возможно он действительно хотел сделать тот язык который описывал, но не смог и создал другой, который в последующем и развивал. Но приводить в пример автора V, ну это какой то тролинг.

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

Ранее в комментариях вам не нравилось что у меня документация в html, а теперь говорите что у автор V документация на github есть, не находите противоречия?
Ну и раз вы мне приводите в пример автора V, то внимательно посмотрите на то, как выглядел репозитарий V в начале, а не через 7 лет - https://github.com/vlang/v/tree/d32e538073e55c603992b5b65ebc837b01c28576. Там никакой документации нет! По вашей же логике я проявил примерно в бесконечность раз больше уважения чем автор V, но почемуто вы мне его приводите в пример. Не надо так!

P.S. Краткое описание добавил.

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

Расскажите, пожалуйста, как работает управлению памятью.

В языке используется подсчёт ссылок. Счётчик ссылок есть не у всех данных, а только у тех которые используют кучу (и то не у всех). Во время компиляции происходит определение в каком месте какие данные используются последний раз (в рамках одной функции или глобальной константы), например:

fn (array) {
     foo(array) # это не последнее использование array
     bar(array) # вот последнее использование array
}
Если какие либо данные не используются последний раз, то к счётчику ссылок добавляется единица, если последний раз, счётчик не меняется. Тот кто непосредственно использует данные, должен уменьшить счётчик ссылок и при необходимости освободить память (в примере функция foo уменьшит счётчик на еденицу, но точно не освободит данные, функция bar освободит данные если счётчик ссылок равен единице, иначе просто уменьшит счётчик на единицу.
Такой механизм также позволяет определять, можно ли модифицировать память на куче или нет, если счётчик ссылок 1 - можно, 0 - данные глобальной константы, не доступны для модификации, в том числе и для изменения счётчика ссылок. Под капотом многие данные модифицируются в место создания новых данных например:
let array   = [array 1, 2, 3]         # счётчик ссылок 0, так как данные известны во время компиляции
let array_1 = new (array)[0] <= rnd() # оператор new узнаёт счётчик ссылок, видит что он не равен 1, значит нужно создать новый массив и заменить значение элемента с индексом 0 на значение которое возвращает функция rnd()
let array_2 = array_1.replace(2, 7)   # функция replace узнаёт счётчик ссылок, видит что он равен 1 (поскольку array_1 нигде больше не используется), значит просто можно пере-использовать память из array_1
array_2.println()                     # функция выведет на экран массив и освободит его
Уточню что _1, _2 используется для наглядности, scar поддерживает variable shadowing, нижеприведенный код делает тоже самое.
let array = [array 1, 2, 3]
let array = new (array)[0] <= rnd()
let array = array.replace(2, 7)
array.println()

Как избегается возникновение циклов между объектами в куче?

Я подозреваю что речь идёт о зацикливании счётчиков ссылок, его не возникает поскольку на уровне языка никаких ссылок нет, а всё воспринимается как значение. Те код:

let array = [array a, b, c]
array.append(array).println()
выведет [array a, b, c, [array a, b, c]], а не зациклится.

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