Re[2]: стоит создать ЯП?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 11.10.23 06:52
Оценка: +1
Здравствуйте, Sm0ke, Вы писали:

S>Я действительно хочу учавствовать в разработке нового ЯП!


Тогда давай начнёшь с определения целей.

1. Общая направленность — системный, прикладной на какой-то класс задач.
2. Процедурный, функциональный, что-то посредине.
3. Управление памятью: ручное (как в C, C++), автоматическое полностью (как в Java, C#), на владении ссылками (Rust), смешанное.
4. Уровень фиксации типизации — статическая, динамическая.
5. Уровень жёсткости типизации. Например, насколько разрешён integral promotion и по каким правилам.

Ответы желательно развёрнуто. Это только для разгона, после этого можно будет выходить на второй круг.

S>Си++ хорош, но слишком переусложнён. Его стандартники делают с ним, то что хотят они — и это не всегда чего хотим мы.

S>Когда методы определяются внутри самого класса, то класс постепенно разрастается и превращается в монстра великана.
S>Мне кажется более наглядным, когда в программе данные определяются отдельно от действий над ними.

Для большинства это менее наглядно, но пусть. Что-то похожее есть в Rust с его impl-ами для типа. Смотрел это? Какие впечатления?

S>Я предлагаю создать свой язык вместе. У меня есть идеи, чтобы их обсудить.

S>Фичи языка:
S>*- Ячейка — это может быть: локальная переменная, параметр функции, свойство модуля, и т.д.

Смущает термин "ячейка", но пусть.

S>*- Возможность работать с типом, как со значением. Тип такой ячейки будет $type

S>*- Имена системных типов начинаются к примеру с символа $ (но это можно указать в конфиге, как и другие начальные символы).

Неееет!!!! Это однозначный путь к бардаку. Хватит нам и споров snake_case/CamelCase/mixedCase. Ты представляешь себе, что будет, если ты будешь подключать файл из одного такого режима к проекту с другим режимом?
Разрабатывая язык, сразу рассчитывай на то, что на нём будут писать что-то на миллион строк и половина авторов будут условными индусами, которым похер на всё, кроме зарплаты.
Подобные элементы синтаксиса обязаны быть жёсткими и безальтернативными!

S>Таким образом добавление системных типов не будет конфликтовать с уже написанным пользовательским кодом.


Для такого давно придумали пространства имён. Но редкие конфликты с автоматической переделкой — не проблема.

S>*- Императивный кусок кода помещается в фигурные скобки и имеет тип $seq (sequence).


Тогда надо сразу сказать, что будет в неимперативных кусках.

S>* По сути sequence — это как лямбда без параметров.


Только с автозахватом из внешнего контекста? Уточни.

S>Символ восклицательный знак после ячейки с функцией — применить её к последующему выражению (просто чтобы не писать круглые скобки if_first([])).


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

S>if_first — выполняет sequence каждого условия до тех пор, пока не встретит первое правдивое, и тогда выполнит sequence действие из значения пары.

S>if_each — будет проверять все условия, даже после того как встретит правдивое.

S>Такая штука ведь нагляднее, чем городить огород из if else if else ?


Да. Но сравнимо с тем, если будет явное elif.

S>Функцию вывода на консоль или в файл можно сделать чтобы она принимала sequence. Так она итератором будет вычислять элементы $seq — выражения, и выводить их результат, пока не они не закончатся, или не возникнет ощибка вывода / исключение, при которой оставшиеся выражения не будут вычислены.


Пока что вижу закос под пачку современных языков — что-то среднее между Zig и Ruby.

S>Запятая — разделитель опциональный.


Вместо LF или вообще? Надо уточнить.

S>coords = #struct ( x y )


Я бы делал, что есть набор слов, которые по умолчанию опознаются как ключевые (например if, while, func), а если нужно их сделать идентификаторами, то поставить, например, $ впереди.

S>Ячейка результата вызова функции #ret


По-моему, этот подход в основном признан менее удачным, чем явное return как оператор.

S>Ведь структуры передаются по указателю, как и прочие значения системной категории _compound


Это плохо. Например, математики тебя побьют. struct complex { float real, imag; } — во многих ABI передаётся в двух регистрах. Это эффективно. А ты предлагаешь откатиться обратно.

S>Все категории типов (значение $cat) произрастают из базовой _any, включённой во все типы по-умолчанию.

S>Категория — это просто категория, она не хранит в себе данных. Каждый тип может принадлежать своему набору категорий.
S>В программе можно проверить их принадлежность. Это может быть полезно при динамической типизации.

Интерфейсы или типажи (traits)? Есть причина вводить новое слово для того же?

S>Категории можно использовать как обычные значения в программе, их сравнивать, использовать как ключ в $map.

S>Ведь тип $cat пренадлежит категории _map_key

Вообще обычно говорят более математически — hashable или linearly orderable.

S>Собственно нужны ли категории и шаблоны в языке — под вопросом.


Нужны. Только продумать надо.

Итого
У тебя нет killer feature. Без неё это не выйдет за пределы одного условного диссера.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.