zx-90 / kartarika

Program language based on russian.
GNU Lesser General Public License v3.0
8 stars 2 forks source link

Приветствую! #2

Open perfolenta opened 2 years ago

perfolenta commented 2 years ago

я так понимаю, еще нет продукта, который можно взять и сразу использовать? хотел посмотреть, попробовать язык, но компилировать проекты написанные на C не пробовал с досовских времен... :) хотелось бы просто запускать интерпретатор картарики из командной строки... сам я тоже разрабатываю язык программирования Перфолента.Net, поэтому интересуюсь всеми проектами русскоязычных компиляторов и интерпретаторов...

zx-90 commented 2 years ago

Добрый день. Да, пока в процессе. И думаю в этом году не выпустим. За новостями можно следить тут: https://vk.com/public197948706

perfolenta commented 2 years ago

подписался на страничку, буду следить... то что разработка языка процесс не быстрый, я хорошо знаю... я уже более 10 лет свою Перфоленту разрабатываю... и другие разработчики русских языков программирования, с кем я познакомился, тоже годами их пишут... в моём редакторе кода сейчас есть поддержка языков Перфолента.Net, РусФокс и OneScript... хотел ещё Гонец добавить, но его автор так на контакт и не вышел... когда у Вас появится минимально рабочая версия интерпретатора, добавлю поддержку Картарики в свой редактор кода... что бы русские языки распространились нам надо друг друга поддерживать, создавая положительный информационный фон...

zx-90 commented 2 years ago

10 лет... Я в августе 2019 начал писать, так что у Картарики только 3 года с хвостиком. Насчёт интерпертатора небольшая поправочка, мы сразу компилятор пишем, а если есть желание добавить поддержку в редактор кода, то можно документацию на стандарт почитать: https://github.com/zx-90/kartarika/blob/master/doc/standard/draft_current.md Документ формализован, поэтому читается трудновато, и, возможно, небольшие изменения будут внесены. Но, тем не менее, я попытался максимально подробно описать, что же будет в компиляторе версии 0.1.

perfolenta commented 2 years ago

3 года с хвостиком как раз соответствуют версии 0.1... у меня дело примерно к версии 0.5 приближается :)) документацию я прочитал, но если нет возможности писать и запускать код, то начинать какие-то работы по интеграции рановато... Кстати, пока у Вас ранняя стадия и можно легко менять язык, можно обсудить некоторые моменты, над которыми я тоже в своё время долго думал... Например, наименования простых типов: 1) у вас есть тип Буль, но в большинстве существующих массовых русских языков программирования этот тип называется Булево... думаю Вам для совместимости тоже его следовало бы так назвать... 2) не вижу простого типа Дата (или ДатаВремя)... 3) над именем для без знаковых целых чисел я тоже долго голову ломал... тип Счётное увидел впервые у вас, такое имя мне в голову не приходило :))... вроде бы и хорошее имя, но не полностью соответствует смыслу... считать можно и со знаком... у меня это битовый тип (тип для поразрядных, побитовых операций), я так и назвал его Бит8, Бит16 и т.д. 4) тип Дробное, тоже вроде интересно выглядит, но меня ещё в советское время приучили к названиям Вещественное и Двойное вещественное, поэтому я назвал типы Вещ и ДВещ... хотя Дробное мне тоже нравится... 5) интересно почему синонимы Целое и Счетное 32 разряда, а дробное 64?
Я не призываю делать как у меня или как у всех, но согласитесь, что стандартизация важна для того, что бы люди начали использовать Ваш язык... поэтому сам стараюсь придерживаться названий, которые уже прижились в других русских языках программирования... у меня есть ориентиры язык 1С и язык 1С:Исполнитель, т.к. на них написаны миллионы строк кода и существуют сотни тысяч программистов... стараюсь брать ключевые слова оттуда, если там есть аналоги... Можете познакомиться с названиями моих типов здесь: http://promcod.com.ua/Article.asp?code=20190718114009000135 И еще есть неплохое описание языка 1С:Исполнитель: https://1cmycloud.com/console/help/executor/2.0/docs/

zx-90 commented 2 years ago

Немного непонятно, почему версия 0.1 должна соответствовать именно 3 годам. Это зависит от того, что включает в себя версия 0.1 и от того насколько интенсивно язык разрабатывается... Документацию по Перфоленте я тоже посмотрел, хотя и по диагонали. Насчёт ранней стадии, все-таки не всё прям уже будет легко менять. По крайней мере, Лексер и Парсер написаны почти полностью. Куча юнит-тестов написана. Семантический анализатор надеюсь в этом году или в январе закончу. Останется только генератор, но там пока не знаю насколько всё будет легко или сложно. Впрочем, имена переменных не сложно исправить, готов обсудить. Что касается ориентиров, то хочу немного про них рассказать, чтобы был понятен ход моих мыслей. Никому ничего не навязываю. Во-первых, я больше на C++/C#/Java ориентируюсь. Знаю, что это не русскоязычные языки программирования (ЯП), но всё же самые популярные языки в мире. Что касается 1С, то её синтаксис вызывает у меня уныние. Хотя знаю, что очень многие русские ЯП ориентируются на 1С, но я как раз хочу отойти от этих стандартов. В этих стандартах (для русских ЯП) есть некоторые устаревшие правила (то что было оправдано в 80-е, но не сейчас) и есть некоторые правила, которые пришли к нам из английского, но не очень удобны в русском ЯП. Поэтому, у меня сложилось несколько общих правил при создании ЯП. Я их, правда, не оформлял в какой-то список или статью, но думаю, это будет полезным. В частности, для меня очень важно отсутствие необходимости переключения раскладок (по крайней мере, если пишешь на русском). То есть, например, доступ к элементу массива будет таким массив.5, а не массив[5], также важно отсутствие фигурных скобок, знака доллара, решетки и т.п. Я не только про 1С сейчас, но в некоторые русские ЯП эти символы пробиваются. Ещё есть такая дилема: слова в русском языке длинные, а сокращения в ключевых словах раздражают. Как выход ищу самые короткие слова, которые могут подойти по смыслу. Отсюда функция превращается в метод, переменная в поле ну и так далее. Теперь по пунктам:

  1. Фамилия математика [Джордж] Буль короче, чем Булево [число].
  2. До типа Дата пока не дошел. Дело в том, что в Windows и в Linux дата и время имеют разные форматы, надо изучать и прорабатывать эту тему. Кстати, в связи с последними событиями в мире, больше ориентируюсь на Linux, так как непонятно насколько доступна будет проприетарная Windows. А Linux с открытым исходным кодом и кроме того, на её основе написано неколько русских ОС.
  3. Тип Счётное. Может быть не самое удачное название, но тип Бит тоже не считаю удачным, так как операции над битами в Картарике можно проводить и над знаковыми и над беззнаковыми числами. Над числами с плавающей точкой нельзя, но также можно добавить.
  4. Слово Дробное короче, чем Вещественное. Кроме того, в процессорах Intel и совместимых по-умолчанию вещественные числа по умолчанию - 80-битные, есть процессоры, где числа с плавающей точкой 128-битные. Возможно и их буду добавлять. Поэтому названия Float и Double, или Вещественные и ДвойныеВещественные сейчас больше сбивают и являются историческими названиями.
  5. Просто Целые и счетные чаще всего 32-х битные используются. 64 бита часто это слишком много. А в числах с плавающей точкой наоборот: 32-битные очень неточные при вычислениях, поэтому берут 64-битные. Но, в принципе, можно и приравнять. Взять всё по 64 бита или по 32.
perfolenta commented 2 years ago

Немного непонятно, почему версия 0.1 должна соответствовать именно 3 годам.

это я просто пошутил в сравнении со своей ситуацией... конечно, версию 0.1 можно выпускать от 1 дня до бесконечности :)))

Во-первых, я больше на C++/C#/Java ориентируюсь.

т.к. Перфолента основана на .Net я тоже во многом на C# ориентируюсь, что то в Питоне подсмотрел, что то в Котлине и т.д., но в выборе ключевых слов, имен стандартных классов и их методов ориентируюсь на уже распространенные русские языки программирования, что бы люди не отметали язык из-за того, что его прям с нуля надо учить... вот сейчас 1С делает новый язык 1С:Исполнитель и меня бесит, что они плохо соблюдают преемственность по именам со старой 1С... новые имена у них ни чем не лучше, а совместимость в мозгах теряется... проблема в том, что новый язык у них пишут люди не писавшие на 1С...

В частности, для меня очень важно отсутствие необходимости переключения раскладок

я тоже за этим слежу, но как выяснилось совсем избежать переключения раскладок не возможно... зато у меня в редакторе кода многие значки, которые есть только в английской раскладке можно набрать просто удерживая Ctrl и это оказалось очень удобно, раскладку переключать стало не нужно... По типам, почитав ваш ответ, я бы все же рекомендовал сделать Булево, а остальное можете оставить как есть, т.к. мой вариант тоже спорный (а аналогов в других русских языках нет), и может быть я его еще тоже пересмотрю... Счётный точно не возьму, а вот над Дробным задумался... хороший вариант, кроме одного нюанса, у меня ещё есть тип Число, соответствующий Decimal... он как бы тоже дробный, но в данном случае Число мне нравится намного больше...

Что касается 1С, то её синтаксис вызывает у меня уныние.

Перфолента по синтаксису очень далеко ушла от 1С, но сохраняет возможность писать "по одинэсовски"... я старался сделать универсальный синтаксис... и как я выяснил на подопытных кроликах, это удобно для 1сников, они начинают писать по одинэсовски, а потом постепенно подхватывают новые возможности языка...

То есть, например, доступ к элементу массива будет таким массив.5, а не массив[5], также важно отсутствие фигурных скобок, знака доллара, решетки и т.п.

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

Отсюда функция превращается в метод, переменная в поле ну и так далее.

у меня можно писать как Функция и Процедура, так и Метод, по желанию пишущего... а переменные и поля я различаю, поля у объектов, а переменные у методов... в 1С есть только переменные, у вас только поля, а у меня и то и другое имеет свой отдельный смысл...
спасибо за общение!!! я с удовольствием продолжу в таком духе, если вы не против...

perfolenta commented 2 years ago

мне кажется в вашей документации упущен ещё один важный момент... как компилятор различает литералы типов Целое и Счетное, Целое 64 от Целое8 и т.д. например: стат метод Запустить() Целое: поле Радиус = 0.0 повторить пока Радиус меньше 10.0: Радиус = Радиус + 1.0 Радиус какого типа? А какого типа 10.0 и 1.0? Понятно, что дробное, а какое дробное? У меня сначала тоже так было, но когда я стал писать реальные программы, оказалось, что использовать функции приведения типа в данном случае очень громоздко, особенно в длинных арифметических выражениях, в которых участвуют переменные разных типов и при вызове методов с большим количеством числовых параметров разного типа... в результате пришлось добавить в язык "Символы типа для литералов числовых типов.", как показано на той странице на которую я вам ссылку выше давал...

zx-90 commented 2 years ago

спасибо за общение!!! я с удовольствием продолжу в таком духе, если вы не против... Я только ЗА. Не думаю, что сойдёмся во всём, но по крайней мере можно много интересных подчерпнуть от общения. Как говорится, в споре рождается истина.

но как выяснилось совсем избежать переключения раскладок не возможно... зато у меня в редакторе кода многие значки, которые есть только в английской раскладке можно набрать просто удерживая Ctrl и это оказалось очень удобно... Частично согласен, но я, пожалуй, немного по другому попробую сделать. Немного изменю свои правила: добавлю сокращения ключевых слов для выражений. Больше будет бш, меньше будет мш или как-то так. Посмотрим, что получится. Кстати, насчёт удержания Ctrl, тоже где-то видел подобную идею в русских ЯП. И в каких-то советских компьютерах тоже была такая кнопка, которая по такому же принципу преключала раскладки. Но я от такого варианта пока откажусь, так как это не реализованно во многих текстовых редакторах.

я бы все же рекомендовал сделать Булево Возможно переименую в Булево, интересный вариант. Ключевое слово Счётный мне самому не нравится, но лучше пока ничего не подобрал. Насчет Decimal и Float не подскажу. Есть, конечно, неколько вариантов, но мне кажется, Вам не подойдет. Десятичный, Фиксированный, Плавающий и т.д. Они длинноватые, Ваши варианты все равно лучше.

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

у меня можно писать как Функция и Процедура, так и Метод, по желанию пишущего... Использовать несколько вариантов для одного и того же. Пожалуй, возьму это на вооружение. Главное, не сильно этим увлекаться.

мне кажется в вашей документации упущен ещё один важный момент... как компилятор различает литералы типов Целое и Счетное, Целое 64 от Целое8 и т.д. Это в пункте 5.1. Описано. поле Радиус = 0.0 // Радиус типа Дробное 10.0 и 1.0 тоже типа Дробное. Если необходимо Дробное32, то надо явно написать преобразование: поле Радиус = Дробное32(10.0) Преобразование типов в Картарике во многих случаях только явное будет.

zx-90 commented 2 years ago

У меня тоже есть некоторые вопросы.

  1. Видили ли этот список русскоязычных ЯП? http://compiler.su/entuziasty-razrabotchiki-kompilyatorov-i-ikh-proekty.php По-моему на сегодняшний день наиболее полный список, хотя там есть и англоязычные ЯП, но которые созданы русскими разработчиками. Ну и вообще неплохой сайт по копиляции.

  2. Вопрос об инфраструктуре. Как у Вас с ней. Мне пока рановато на этот вопрос отвечать, ну или на все вопросы будет просто ответ нет. Я считаю, что инфраструктура важнее чем сам язык. Вот тут совсем небольшой мой пост по этому поводу https://vk.com/public197948706?w=wall-197948706_8 И вопросы соответстветствующие:

    • Есть ли комерческие продукты на языке Перфолента (заработавшие хотя бы один рубль)?
    • Есть ли коммерчески успешные проеты (доход больше чем затраты)?
    • Есть ли сообщество разработчиков на данном языке?
    • Какие есть библиотеки для языка? С учетом платформы ДотНет, вопрос какая часть библиотеки ДотНет была переведена на русский?
    • В каком направлении планируется развитие? Игры, мобильные приложения, работа с сетью, разрабботка сайтов и т.д. Потому что в зависимости от этого соответствующие библиотеки и надо развивать в первую очередь.
perfolenta commented 2 years ago

1) Этот список я видел, но тогда там еще не было Перфоленты :) Сейчас пробежался по всему списку и понял, что реально рабочие русские языки в списке 1С, OneScript и Перфолента, а остальные либо заморожены, либо их сайты больше не открываются, либо они находятся в начальных стадиях разработки... англоязычных конечно больше рабочих, но меня интересуют именно русские... 2) - коммерческих продуктов пока нет, т.к. версия Перфоленты все еще не преодолела рубеж 0.5 (к новому году хочу выпустить 0.5, по этой же причине я почти не рекламировал язык, только пара статей на Инфостарте). Однако, я активно использую Перфоленту у своих клиентов при выполнении их рабочих задач (большинству из этих клиентов все равно на чем программа написана, поэтому они даже не знают, что она на Перфоленте)

zx-90 commented 2 years ago

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

По поводу библиотек и общей инфраструктуры. Я думаю, что как раз на общую инфрастуруктуру неплохо было бы сделать акцент для всех русскоязычных ЯП. Например, можно было бы написать утилиту для перевода интерфейсов библиотек между УанСкрипт/Перфолентой/Картарикой. Чтобы если, например, ты перевел часть C# библиотек на русский, можно было потом в Картарике этот перевод использовать. Или библиотеки из Перфоленты подключать в Картарике. А я в свою очередь хочу библиотеки, написанные на C в Картарику добавлять и также интерфейс дальше можно в Перфоленту переводить, если Вам интересны библиотеки с незащищенным кодом (или как это правильно в ДотНет называется). Правда, что касается картарики, то вариант подключения сторонних библиотек я собираюсь в версии 0.2 реализовывать. А это будет через год минимум... Если хотите, можете подумать насчёт кооперации с 1Script. Например, возможность запускать их скрипты у Вас.

Да и ещё вопрос исходный код Перфоленты открытый или закрытый? Я, по крайней мере, его не нашел.

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

perfolenta commented 2 years ago

Спасибо, удача это как раз то, что мне сейчас необходимо! :)

Например, можно было бы написать утилиту для перевода интерфейсов библиотек между УанСкрипт/Перфолентой/Картарикой.

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

с УанСкриптом у Перфоленты очень высокая совместимость и по коду (код портируется с минимальными доработками) и по вызову из одного языка другого и обратно... вот тут можно почитать http://promcod.com.ua/Article.asp?code=20211210023810008537 Ещё с языком РусФокс хорошая совместимость, но он бесперспективный, т.к. основан на FoxPro, который Майкрософт давно забросила... код на C# и VB подкючается к Перфоленте элементарно, т.к. они тоже основаны на Net... можно написать dll на Перфоленте и использовать в программах на C# или VB без проблем, и наоборот тоже... Код написанный на Rust, C и C++ тоже можно из Перфоленты запускать, но только если хорошо знаешь сигнатуру функции, что бы правильно её описать на Перфоленте, примерно так:

&ИмпортМетода("embed.dll"){ .EntryPoint="sum", .CharSet=CharSet.Auto, .CallingConvention = CallingConvention.Cdecl, .SetLastError=True} Функция Сумма(Зн1 тип Бит32, Зн2 тип Бит32) тип Бит32 КонецФункции

Если Картарика будет компилироваться в C подобный код, и вызовы функций будут по стандарту CallingConvention.Cdecl, то и код на Картарике из Перфоленты можно будет вызывать... а код на Перфоленте из Картарики можно будет вызывать либо экспортируя из Перфоленты сишные функции, либо с помощью специальной библиотеки типа wwDotNetBridge... в общем, работать и работать :)))