суббота, 8 февраля 2020 г.

Прошу прощения

    Не смотря на то, что я почти закончил версию 0.2(осталось доделать только каналы, на подобии того как они сделаны в go), я все больше сталкиваюсь с тем что различные вещи начинают меня смущать:
  • Мне не хватает нормального ООП.
  • Мне не нравится что данными из модулей можно манипулировать. Я сам это часто использую, но почти всегда это связанно с компенсацией того, что в язые нет полноценного ООП.
  • Хотелось бы чтобы требования групп проверялись во время компиляции, а из-за особенностей языка это не возможно.
  • Я постоянно упираюсь в особенности языка Си. Мне постоянно хочется вернуться на LLVM IR.
  • Мне не хватает гибкости cine, постоянно приходится делать какие то builtIn вещи в компиляторе или использовать код на Си.
  • Мне не нравится работа с ошибками в cine.
  • Хотя изначально я делал язык в том числе ради производительности и во многих местах где надо было выбрать производительность или удобство, я выбирал производительность, сейчас бы я принял другие решения. С годами мне удобство стало важнее. Не говоря о том, что можно не выбирать ведь по сути 95% времени программы работает 5% кода и эти 5% просто можно оптимизировать (если есть подходящие инструменты).
    Подумав я понял, что бессмысленно продолжать это безумие. И решил писать новый язык с нуля.
    Прошу прощения за то, что отнял время у всех тех кто уже начал изучать язык.
    Через некоторое время я удалю этот блог и git аккаунт.
    Но напоследок мне захотелось узнать производительность программ написанных на cine.

понедельник, 13 января 2020 г.

Пауза

    В статьях которые я пишу для этого блога, я старался в начале давать информацию о простых вещах, затем постепенно переходить к более сложным. Статья которая должна быть в место этой статьи, рассказывала бы о том, что очень сильно измениться в версии 0.2, поэтому нет смысла писать такую статью, но и писать следующие статьи без указанной статьи - бессмысленно. Поэтому я до выхода версии 0.2 (планирую выпустить до 5 февраля), не буду писать статьи. Если вы один из тех кто активно начал изучать язык и у вас есть вопросы, вы можете написать мне на почту - 0.cine.developer@gmail.com, или в телеграмм taetricus.13.

среда, 8 января 2020 г.

Функциональный типы

    Функциональный тип - тип данных значением которого является функция.

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

суббота, 4 января 2020 г.

Операторы break, continue, return

    Оператор break прекращает работу операторов for, parse, mif, case. Чтобы прервать работу одного из выше указанных операторов, нужно что бы break находился в коде принадлежащем прерываемому оператору. Если написать просто break, то прервётся работа оператора который был объявлен самым последним, если нужно прервать работу нескольких операторов, то после break нужно указать количество  прерываемых операторов, то есть если написать break 1, то это тоже самое что и просто break. Чтобы прервать все операторы которым принадлежит break, можно просто написать break all.

пятница, 3 января 2020 г.

Циклы


    Цикл - повторение одного и того же кода несколько раз. Для реализации цикла в cine используется два оператора - for и parse.

понедельник, 30 декабря 2019 г.

Операторы ветвления

    Операторы ветвления - операторы выполняющие код в зависимости от каких либо условий. В этой статье будет рассмотрено три оператора: if, mif, case. Все три оператора используются в коде функции.

суббота, 28 декабря 2019 г.

Функции и константы встроенные в язык, синтаксический сахар, приоритеты в правилах и выражениях

    Функции встроенные в язык:
select(a, b, c)
    a, b, c - выражения. a возвращает тип Bool, если a равен true то вычисляется выражение b и его результат является результатом вызова select, если a равен false то вычисляется выражение c и его результат является результатом вызова select. Особенность select в том, что вычисляется только одно из выражений, если попытаться самому реализовать такую функцию, то при передаче a, b, c все выражения будут вычислены ещё до вызова функции.


Переменные, константы, вызов функций

    Переменная - изменяемые данные имеющее имя.
    Константа - неизменяемые данные имеющее имя.
    Чтобы объявить в коде функции переменную или константу, нужно написать имя переменной или константы, затем ":=" для переменной, ".=" для константы, а затем выражение возвращающее значение, это значение и содержит в себе данные которым будут являться переменной или константой.

среда, 25 декабря 2019 г.

вторник, 24 декабря 2019 г.

понедельник, 23 декабря 2019 г.

Код ревью

    После публикации моей статьи на habr, я начал получать огромное количество писем на разные контакты (не только в ЛС хабра) и даже на те контакты которые я нигде не указывал(но найти их не сложно). Некоторые люди начали использовать cine и писать на нём программы(просто поэкспериментировать и по изучать язык, даже не смотря на то, что туториалов ещё маловато). И вот сегодня я получаю в ЛС хабра сообщение, в котором человек написал на cine обработчик комментариев для своего сайта(тоже ради прикола). Я решил сделать код ревью его кода и написать статью для тех, кто уже начал писать на cine. Я буду приводить код человека который мне написал, а затем напишу что не так и затем код который я написал. Так же я залил на google drive оба проекта.

воскресенье, 22 декабря 2019 г.

Перечисления

    Перечисления - способ создания уникальных числовых констант. Отдельную константу я буду называть вариантом перечисления. Каждый созданный вариант имеет тип UInt64, имеет случайное значение отличное от 0, а также не бывает двух вариантов с одинаковым значением. Вспомним про магазин из предыдущей статьи. Предположим раньше магазин торговал только городскими велосипедами, а теперь решил начать торговать ещё шоссейными и горными, мы конечно можем добавить новый член типа имеющий тип [UInt8], но слайсы занимают гораздо больше места, а также медленнее работают чем числа встроенные в язык. Поэтому лучше создать новый член типа с типом UInt64 и создать для него варианты перечисления.