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)

Напиши на питоне интерпретатор своего яп в этот твой питон.

И я столкнулся с отсутствием нужных знаний

Проблема не в знаниях а в изобретательности. Давно бы уже кодогенератор себе сделал. У меня, вот, есть такая штука для php: копируешь поля класса, запускаешь скрипт, он тебе делает getter'ы и setter'ы. В принципе можно из этого можно сделать костыль, который делает всё это автоматом. Таким образом получили бы новый подвид пыха - LPHPwC - lazy php with crutches.

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

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

Senior Language Architect? :D

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

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

Но ты на меня не отвлекайся больше, продолжай обсуждение по существу топика. Хоть бы книжку какую ТС-у присоветовал, он о них спрашивал... )

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

Захожу поугорать над клоунами местными

Ну как бы ты автоматически тоже клоун, как только здесь что-то пишешь.

продолжай обсуждение по существу топика

По существу топика я уже всё сказал. На примере того, что описано в зацепившем тебя посте.

Сейчас создам отдельную тему для клоунов, которые думают что под древние калькуляторы люди от безинтернетья не могли творить «чудеса» :)

Тебя закастую.

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

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

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

Sociopsih ★☆
()

Дельфи нужно откапывать, вот что. Хочу vcl с qt внутри

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

Вот не надо ляля. The Produkkkkt только о сжатии и думали, этот ваш kkkrieger тормозил там, где aaa игруха с более жирной шейдераме графике летала

TooPar
()

Давай так. Пиши свой ЯП и IDE, прикрутишь OpenGL и я весь твой буду писать на нем движок для игр.

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

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

Оно работает только на одной из стадий конопелятора.

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

При том подходе грузится проц сильнее, если часть сгрузить на видюшку, то получится увеличение размера до 200-300 МБ, но сохранится турбореактивность ассемблера. Похоже против него только проприетарщики. Эта игруха просто пример работы ассемблера и всё.

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

Ничо не понял. За счет чего будет увеличение размера на 250МБ? Какой у них подход? Чем у них проц занимается, что можно сгрузить на видюшку?

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

Вот не надо ляля. The Produkkkkt только о сжатии и думали, этот ваш kkkrieger тормозил там, где aaa игруха с более жирной шейдераме графике летала

Я думал ты хоть что-то читал о ней, исходя из твоего сообщения...

Компактный размер файла достигается благодаря тому, что все необходимые игровые ресурсы — текстуры, модели, геометрия уровня — не хранятся в виде готовых объектов, а генерируются в реальном времени методом процедурного текстурирования. Полигональные сетки моделей формируются из простых геометрических фигур, которые затем модифицируются для достижения желаемой формы. Музыка и звуки также синтезируются «на лету» и воспроизводятся виртуально-аналоговым синтезатором V2 Synthesizer System[13] собственной разработки Farbrausch.

По словам разработчиков, игра занимала бы 200—300 Мбайт, если бы использовалось традиционное хранение предварительно подготовленных игровых ресурсов в виде отдельных файлов.

На PIV она уже не тормозила. Таким образом Doom 3 будет иметь характеристики:

процессор 1.5 0.5 ГГц или лучше,
384 100 Мб RAM (512 200 Мб RAM для Mac)
, 64 8-16 Мб видеокарта
, 2 0.3  ГБ места на диске
, 8x CD-ROM.

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

Про процедурную генерацию я в курсе, но как она могла порождать тормоза? Оно ж один раз делается, у них даже прогрессбар на это был. А вот рендерилось оно как-то криво. У меня как раз P4 Prescott 2.4 в то время был. Тормозило

TooPar
()

И регекспы как в perl'е не забудь. Такие же быстрые, в смысле.

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

Простое окно на Delphi 300-400 КБ, Простое окно на C++ - 24-30КБ, простое окно на Ассемблере 4-5КБ. Везде одни тупые школьники и не говори...

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

Простое окно на Delphi 300-400 КБ, Простое окно на C++ - 24-30КБ, простое окно на Ассемблере 4-5КБ. Везде одни тупые школьники и не говори...

Насчёт остальных я не знаю, но ты - точно тупой школьник. Посмотри сначала почему Doom3 весит столько, сколько он весит. Там основная масса - ресурсы игры. Как это связано с твоими 30Kb на простое окно?

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

Все ненавистники ассемблера - проприетарщики...
Программа 3-4 КБ - более менее
Программа 30-40 КБ - мусорные инструкции
Программа 300-400 КБ - заси*ание мозгов хомячкам.
Если нет мусорных инструкций - скорость возрастает в разы, соответственно требования к процу падают ЧТд. Школьники они такие школьники, а Doom3 просто пример.

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

Мы просто забудем про время разработки, тестирования и отладки, правда?

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

Все ненавистники ассемблера - проприетарщики...
Программа 3-4 КБ - более менее
Программа 30-40 КБ - мусорные инструкции
Программа 300-400 КБ - заси*ание мозгов хомячкам.

Я хотел бы увидеть SQL-сервер в 3-4Kb.

hateyoufeel ★★★★★
()

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

Статью на лурке про NIH/фатальный недостаток.

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

Статью на лурке про NIH/фатальный недостаток.

У меня nih праведный, я его ни для чего не буду использовать.

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

nih праведный
не буду использовать.

Да у тебя просто каноничнейший NIH «чтобы было».

cipher ★★★★★
()
4 декабря 2016 г.

Наверное, ты уже видел мои темы про Яр, но всё равно присоединяйся. По твоим пунктам:

  • структа - аналог data class, насколько я его понял (структура с сахарком)
  • да, и ещё лучше
  • синтаксис как в бейсике скорее (на питоне не писал, но его синтаксис кажется мне опасным - убираешь пару пробелов и смысл меняется)
  • модули более-менее продуманы, не знаю, как в питоне, но думаю, что неплохие
  • pre и post проверки - не знаю, тчо это
  • статическая типизация проще чем в ml (без вывода типов). Потом можно добавить. Пока что и без этого хватает чем заняться, и я не уверен, что слишком продвинутый вывод типов - не во вред.
  • не лисп снаружи
  • макросы на уровне ast планируются попозже
  • не знаю, что такое pipe
  • pattern matching пока не планируется - пока не понимаю, как сделать его достаточно гибким
  • что-то типа null-safety будет

Описание языка здесь

По нему есть ещё куча вопросов, но сейчас я занялся реализацией того, что тут написано.

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

а синтаксис сделать сменным.

ох лол. Не было печали...

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