Как стать автором
Обновить

Комментарии 24

В чем смысл нового языка, который не вносит никаких новых концепций и абстракций? А уж тем более тащить что-то вроде сишных костылей с switch-case-break 50летней давности?

Если статья о том, как писать велосипедный ЯП в учебных целях, то нужно больше информации именно про внутреннее устройство языка и компилятора, это было бы интересней.
Про внутреннее устройство языка я написал до этого целый ряд статей :\
Добавьте в начало данной статьи абзац с упоминанием этого цикла статей, не все могут вспомнить о них. Сейчас статья выглядит самостоятельной, если читатель не догадается зайти в ваш профиль и взглянуть на другие публикации.
В чём смысл новой машины, если старая шестёрка ещё катается? Наверное, новый язык решает фатальный недостаток других языков. Скорее всего, суп удобнее кушать ложкой, а автору писать
class MyClass:
var a, b
proc Create, Free
func SomeFunction
end

вместо
interface MyClass{int a,b {get;set;}void Create();void Free();int SomeFunction();}.
Но это не про покупку новой машины, это про смену синей шестерки на красную — по факту выходит одно и то же.

Забавненько!


Циклы "while" и "until" отличаются только способом обработки условия. И, по всей видимости, оба являются циклом с предусловием (хотя в упомянутом Паскале — цикл "repeat...until" — это цикл с постусловием).
Цикл "for" явно Сишного вида, и значит — тоже цикл с предусловием...


А где же в "новейшем" языке цикл с постусловием?

until… end, условие проверяется после итерации

Т.е., условие мы пишем в начале цикла, а по факту проверяется оно в конце?


ИМХО: это будет путать программиста, привыкшего ставить условие там (в начале или конце), где оно должно проверяться.


Раз уж Вы решили дифференцировать циклы по истинности/ложности условия (while/until), то стоит добавить ещё 2 разновидности:
1) loop...while ( условие );
2) loop...until ( условие );
%-)


P.S.:
Замена "this->" на знак $ мне понравилась — приятный сахарок :)
Но выглядит лишним слово "end" после каждого "case" в операторе "switch"...

Ой, мы ему это еще в статьях об устройстве языка говорили :)
Хозяин – барин.

Да все будет, как руки дойдут… :)

Чтож, спасибо за минус тебе, неизвестный хабро-user, под моим можно сказать обещанием что-то допилить в моём хобби проекте.

Теперь об изменениях:
— Переделал until цикл, теперь вместо него цикл whilst — можно сказать, что это копия while, только с пост-условием.

Изменения залил на github.
Эра DSL языков на основе llvm объявляется открытой. Это прекрасно, но я думаю излишне говорить каждый раз об «открытии Америки».

Как автор ЯП, который посвятил этой теме много времени, можете прокомментировать, почему выбрали концепцию-со-сборщиком-мусора?


Меня (как системного программиста на С++ и С, внимательно наблюдающего за Rust), удивляет это направление )) Почему (особенно, учитывая эту великолепную статю), всё меньше людей задаются вопросами, как создать лучшуюю-RAII, или ещё-лучшую модель типов, или ещё-лучшие-zero-cost-abstractions, или ещё-лучший-хаскелл? ))

В отличии от других ЯП, таких как Python, Perl, JS, Ruby и т.д., сборщик мусора у моей ВМ реализован через метки, т.е. переменная помечается, как мусор сразу при объявлении. Сборщик мусора имеет на момент вызова готовый массив указателей на мусор в памяти.


Основная идея заключалась в том, что даже в нетипизированном языке сборка мусора должна лежать на плечах программиста и быть полностью ему подконтрольна. Используя gc() программист на 150% уверен где, когда и сколько памяти будет освобождено сборщиком мусора.
Также изначально затеивал такую архитектуру, как небольшую оптимизацию. Ведь сборщику мусора вообще не нужно напрягаться, чтобы исправно выполнять свою работу.

Для меня работа этого GC осталась загадкой. Мне интересно узнать взорвётся ли оно и если взорвётся то как именно если написать вот так:
for(x?=0; x<10; x++):
gc()
end


Или вот вызвали мы функцию, а в ней позвали gc — соберёт ли он весь мусор в проекте или только мусор внутри функции? Если первое — gc будет запрещено звать в любой библиотеке. Если второе, то можно и автоматически его звать при каждом выходе из скоупа.

В данном примере взорвется, т.к. в x?=0 — в х запихивается временная переменная.
Если написать var x = 0, либо x ?= new(0), то нет. Но затем для х нужно будет вызвать free().


gc() собирает весь мусор, который в т.ч. лежит в стеке.

А на этом языке можно будет написать AI, который бы проверял и исправлял расстановку «в отличии от» и «в отличие от», «также» и «так же», а заодно и запятых?
Вот тогда он был бы реально полезен автору.
  1. ИМХО. Я бы поменял местами $ и @. Например в Ruby и Crystal используются именно @ как замена конструкции this., а '$' чаще встречается именно в именах переменных.
  2. Вызвав Free, я удаляю значения из памяти даже если они используются в другом месте?
  3. Почему gc() пишется со строчной буквой, а Free() с прописной?
  4. Соглашусь с автором выше, ничего принципиально нового в языке не вижу. Как учебный язык ок, но, на мой взгляд, стоит добавить какую-нибудь изюминку.
  1. Лично мне больше нравится $ на месте this-> :)
  2. Ну да. На то это и Free, чтобы память освобождать.
  3. Можно писать с каких угодно букв. Язык не придирчив к этому.
  4. Как по мне, некоторые вещи, которые я реализовал являются весьма необычными, например поддержка многопоточности и всего необходимого для неё функционала прямо из коробки и без использования костылей… Но об этом я наглядно расскажу чуть позже, как найду время для написания очередной статьи.
    Нельзя же рассматривать плюшки языка, не описав перед этим синтаксис языка и базовые вещи. Так что эту статью можно считать вводной… Наверное...

2) С тем, что в последнее время получил развитие отказ от ручного управления памятью, выглядит очень опасно. Нужно как-то ограничить. Например разрешать вызов free только из контекста функции main, чтобы управление всегда происходило явно. Возможно, через контроллер, определяемый программистом на уровне приложения, а не библиотеки.


4) Тут я с вами категорически не соглашусь, сначала нужно дать что-то читателю, чтобы вызвать у него интерес. Тогда он и неинтересные части прочтет.

Горшочек, не вари!
Синтаксис мне напоминает по простоте питон с примесью веба, а по функционалу и оптимизации си-подобные языки. Можно здорово так экономить память со сборщиком мусора и в теории если правильно реализовать можно выжимать 130% из железа если не больше.
На данном этапе трудно говорить и что-либо обещать по производительности ЯП. Но с Си в плане производительности ему пока ещё тягаться не стоит.
имхо, при условии что код разделяется пробелами, end в каждом блоке выглядит лишним, лучше было бы как в python сделать
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории