LINUX.ORG.RU
ФорумTalks

Как насчёт такого ЯП?

 ,


0

1

Перепробовав D, Rust и C на одном и том же коде, реализовав один из алгоритмов на Cuda и найдя крайне геморным перенос его на OpenCL, я до сих не чувствую себя удовлетворённым.

Захотелось языка, в котором можно, написав один код, скомпилировать его как для CPU, так и для Cuda, так и для OpenCL. При этом платформа и устройство запуска управлялось бы переменными окружения.

Помимо этого хотелось бы таких свойств языка:

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

  2. Имя функции = её входящие и исходящие переменные. Т.е. например вызов scaled_down_image(image) означает что на вход функции подаётся изображение, а на выходе мы получаем уменьшенное изображение в переменной scaled_down_image (если нет присваивания)

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

  4. Отсутствие как класс в языке такого понятия как «указатель». Компилятор сам решает передать структуру по значению или по указателю. Явно указатели могут быть указаны только в отдельном разделе для связи с другими ЯП.

  5. Автоматическая сериализация данных. Из-за пункта 4 одна и та же структура легко может быть перекомпилирована в структуру без указателей и таким образом сериализована. Если же речь идёт о циклических структурах, то будет использована относительная адресация.

  6. Явное указание в заголовке функции на используемые системные вызовы. Сбалансированные вызовы такие как open/close не указываются. Например если функция считывает файл в переменную, то указывается не open, read, close, а только read. Примерно так:

    file_data(filename; read);

А вопрос мой состоит в том, нет ли этого всего уже где-нибудь?

★★★★★
Ответ на: комментарий от FishHook

Это как? Я же должен знать на этапе проектирования будут ли у меня сайд-эффекты на переменной или нет

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

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

Для этого есть пространства имён.

В языке в котором имена переменных задаются исходя из имени типа? У меня есть переменная с именем image, которая приобретает это имя потому что хранит данные типа image - тут всё правильно? Если эта же переменная помещена в неймспейс, она по прежнему обязана содержать в себе имя типа, или как это вообще работает?

Тут я не понял, что вы имеете в виду.

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

Эту концепцию я уже уточнил про себя

понятно, что это троллинг, ну нельзя же так жирно, камрад

FishHook
()

хочется новых ощущений

Купи себе моноколесо.

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

Пока на D, потому что есть неплохая затравка от проекта neparsy.

Но выложу я наработки языка скорее всего уже после переписывания их на самом себе.

unDEFER ★★★★★
() автор топика

Добавил в профиль ссылку на ЖЖ. Там постараюсь раз в неделю публиковать отчёт о ходе разработки языка. Пока написал первый отчёт.

unDEFER ★★★★★
() автор топика

Решил поступить нетипично (по крайней мере для себя) и создать репозиторий проекта в самом начале разработки:

https://github.com/unDEFER/nika

Пока почти готов лексический анализатор и программа печатает все числа из example.nika

unDEFER ★★★★★
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)