LINUX.ORG.RU
ФорумTalks

Хочу сделать свой ЯП

 , ,


2

2

В общем пришла идея для повышения скила написать свой яп, основные особенности которого будут:

  • data class как в kotlin;
  • multimethod как в clojure;
  • синтаксис как в python;
  • модули как в python;
  • pre и post проверки как в clojure;
  • статическая типизация ближе к ml;
  • не lisp;
  • макросы на уровне ast;
  • threading/pipe оператор как в ml;
  • pattern matching как в scala;
  • null safety как в kotlin.

Пример кода:

from species import Bug

let Animal = class (name: String, age: Int):
    pre (name, age):
        name != "" and 0 <= age < 100

let sayName = method (animal: T) -> String:
    type(T)
sayName Animal (animal):
    pre (animal):
        animal.age > 10
    post (result):
        result |> length < 100
        
    "My name is ${animal.name}"
sayName Bug (bug):
    "Nope!"

let cow = Animal("Emma", 26)
sayName(cow) => "My name is Emma"

let bug = Bug("Jimmy")
sayName(bug) => "Nope!"

let test = method (x: Int, y: Int) -> Int:
    x > y
test true (x, y):
    x + y
test false (x, y):
    x - y
    
test(10, 20) => -10
test(20, 10) => 30
l
let fn = (a: Int, b: Int) -> Int:
    a * b
    
fn(2, 3) => 6

И я столкнулся с отсутствием нужных знаний. Кто что посоветует почитать и посмотреть по этой теме?



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

Возьми Common Lisp и напиши на нём за пару часов грамматику своего языка. Проблему-то нашёл.

Deathstalker ★★★★★
()

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

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

Смотри в сторону JVM или .NET, ибо с нуля неподъёмная работа для одного человека.

Пока думаю jvm или трансляция в js.

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

TaPL

Modern compiler implementation in ML

Пока думаю jvm или трансляция в js.

Давай сразу в WebAssembly

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

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

CYB3R ★★★★★
()

Скастуй den73 и вперед, сквозь тернии.

znenyegvkby
()

Не осилишь, бро. Для начала напиши хотябы компилятор си. Даже без стандарта. Просто компилятор. Начни с flex+bison+dragon book. 100% даже этого не осилишь, так что не грусти ;-)

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

Можно начать с интерпретатора.

Вполне подъёмная задача.

Я когда-то под калькулятор МК-61 разработал свой языки и осилил интерпретатор. Дя теста написал и запустил неа просчёт решение квадратного уровнения. Вычислило точно.

Был школотой лет 13, а компов домашних небыло...

Возможно всё, если работать, а не пи..еть.

Serg_HIS
()

«Компиляторы: принципы, технологии и инструменты»

Пусть название тебя не пугает, так как «Написание компиляторов охватывает такие области знаний, как языки программирования, архитектура вычислительных систем, теория языков, алгоритмы и технология создания программного обеспечения». То есть то что тебе нужно. Ну и копать в сторону «теория языков программирования и методы трансляции» (как-то так назывался предмет у меня в универе). Короче, от балды что-то придумывать — мало путного выйдет =)

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

Тем, что в голову не пришёл во время ответа.

Sadler ★★★
()

Нагуглите уж игру в 95 КБ и вы поймёте, что нужно сделать метаобъектный компилятор из с++ в Assembler. Профиты? Crysis в 3 МБ на процессорной графике без единого лага...

xwicked ★★☆
()

почитать и посмотреть по этой теме?

Н. Вирт Построение компиляторов. ©

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

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

ozzee
()

Тебе на esolangs.org для вдохновения, там подобных сумасшедших хватает, в том числе и я.

border-radius
()
Ответ на: комментарий от Serg_HIS

Интерпретатор в 105 байт? Ай не звезди... Это ж не 52, ппзу там не было.

P.S. Владею рабочими 61, 52 и трупешником БЗ-21. 61 даже юзаю с батарейками. Неплохо в своё время мозг вправлял... Да, судя по треду, не всем.

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

Трансляция в JS, конечно. Много времени на тупой рутине сэкономишь.

P.S. alalalalalalalal ;)

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

Интерпретатор в 105 байт? Ай не звезди... Это ж не 52, ппзу там не было

И не такое ещё с этой техникой вытворял (и не только с такой)

Serg_HIS
()

Кто что посоветует почитать и посмотреть по этой теме?

Dragon book. Дальше советую посмотреть на LLVM, .NET, JVM - сильно упрощает написание бэкенда. Касательно типизации и тайпчеккера рекомендую посмотреть на систему типов Haskell'а, она прекрасна. Ссылок о том, как работает хаскельный тайпчеккер может дать jtootf

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

flex+bison

С этим уже встречался.

dragon book

Гляну, спасибо.

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

Ещё один со своим языком… Остановись пока не поздно!

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

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

Такое видел только в nemerle и template haskell.

Ещё scala и elixir как минимум.

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

Я вижу, многие советуют здесь Dragon Book - ТС, не трать время, этот учебник сильно устарел.

Что сейчас вместо него?

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

Зачем нужны флексобизоны во времена пегов?

lgbt
()

Лучше дистрибутив с красивыми обоями сделай.

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

Неплохо в своё время мозг вправлял... Да, судя по треду, не всем.

Ну это зависит от желания и целей.

Мне хотелось большей гибкости добится как в настоящих компах. почти получилось.

105 для интерпретатора маловато конечно. Пришлось проводить тщательный отбор для того, чтобы оставить совершенно необходимые команды.

регистров - тоже не разгонишься...

ну быстродейсвте соответственно тоже не росло.

но первый свой интерпретатор у меня получился.

Скил прокачал и не остановился на этом.

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

Я выше написал.

Modern compiler implementation in ML

tapl

Только сейчас заметил, спасибо.

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

Кандидата наук сначала получи

alix ★★★★
()

let Animal =

Это ностальгия по Васику? ;)

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

Есть шанс, что ты гениальный программист.

Я знаю себе цену.

Еще есть шанс, что черепашка... много о себе думает.

С Turtle Graphics на паскакале - тоже знаком.

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

Наверняка найду ту бумажку с кодом, если её не выбросили в мукулатуру... Принципы работы помню, там всё просто, но вписаться в 105 шагов было самое сложное.

Serg_HIS
()
Ответ на: комментарий от border-radius

Если найду бамажку - то сосканю и выложу. Но просто могу рассказать принципы. детально.

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

Так, ну а сейчас-то ты кем себя считаешь?

Я себя считаю компетентным в вопросах этой темы.

А ты кем себя считаешь?

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