RUBasic

ARbasic

«Вообще же, всё написанное должно быть удобочитаемо и удобопонимаемо, а это — одно и то же.»
Аристотель. IV век до н.э.

ARbasic

ARbasic es un lenguaje de programación educativo para argentinos de todas las edades, escrito íntegramente en español.
ARbasic это учебный язык программирования для аргентинцев любого возраста, написанный полностью на испанском языке.
Correo de contacto: arbasic.utn@gmail.com

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

Общее

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

Настоящий инженер-программист должен:

  • Знать, как работает компьютеры, сети и т.п.
  • Обладать инженерным мышлением.
  • Уметь выбирать инструменты для решения конкретной задачи.
  • Уметь писать понятный, читаемый и оптимальный программный код.
  • Видеть задачу в целом, уметь анализировать и рассуждать на уровне задачи и на других, более высоких, уровнях.

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

Сочетание парадигм:

  • процедурной
  • структурной
  • функциональной
  • объектной

Операторы

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

Условный

si - если

osino - иначе, а если нет, то

osino si

fin

Цикл

por desde hasta paso en + mientras - условие

volver - выход изнутри тела цикла

continue - переход к следующей итерации цикла

por a desde 1 hasta 12 paso 2 mientras c <= 3
    . . .
fin

бесконечный цикл можно записать многими способами, самый простой - просто с заданием переменной цикла: por a

если шаг опущен, он автоматически принимается равным +1

переменная цикла может быть инициализирована где-то до начала цикла

если её начальное значение опущено (нет desde), оно как и у всех переменных = 0, или ""
если переменная цикла не числовая, а строковая, то она может быть буквой (большой или маленькой) и  тогда возможно пробегание её по алфавиту языка. При этом шаг - целочисленный, любой, границы - начало и конец алфавита.

цикл по выборке из массива (сечению, срезу):

por a en m[2:34:2]
    . . .
fin

можно совместить с проверкой условия
Как сделать то же самое по многомерным массивам?

Конец блока

fin (конец любого блока)

Переход

ira (pasara) - только для начального уровня. с опцией отключения использования!

метка - имя

Функция

funion(a; b; c)
    . . .
    volver d

fin

volver - выход c возвратом значения

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

Каждый оператор - на отдельной строке. Точно так же как в пошаговом описании алгоритма.

Отступы - не обязательны. В IDE - настройка типа отступа и их автоматическая расстановка - по команде. И точно так же - удаление всех отступов.

Свёртка блоков.

Выключение видимости комментариев.???

Можно так же как в С или Pascal использовать ключевое слово для основной программы - для удобства восприятия кода и для обработки внешних параметров.

program()

volver - выход в любом месте c кодом возврата

fin

Препроцессор???

definir - именованное определение фрагментов кода

incluir - включение в код в данном месте именованного фрагмента или текста из заданного файла.

Правильные комментарии!   // - строчные (до конца)  // .... // - блочные
автокомментирование - для операторов end еще для чего-то - неявного

Можно вообще автоматом комментировать все структуры с включением простого счетчика (цикл 001, цикл 002, конец цикла 002)?

оператор "+" - для склейки строк и одномерных массивов, и оператор "=" - для результата

Логика

==
>>
<<
>=
<=
<> или ><

y no o - логика
В логику - скобки
True и false - сделать именными целочисленными константами, равными как в С 0 и "не 0" или 0 и 1?
Функции возвращают true, false

"...." - строка и одиночный символ

экранирование спецсимволов - как в С

Массивы и переменные

Все строки - UTF-8 с возможностью преобразования в ASCII и получения кодов ASCII

Склейка строк.

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

Выборки из строк и массивов - как срезы в питоне: фактически просто циклы по массиву типа foreach и т.п.

Кстати, идея отрицательных величин индексов при работе с выборками из массивов и строк - очень хороша. Стоит её продумать и развить. (для движения наоборот - с конца, для начала с конца и т.п.)
Точно так же - по многомерным массивам.

Базовые типы, сложные типы, составные типы - классы.

Типизацию!

Число(символ) - строка - массив[1] - массив[n] Типизация вверх?
Временная типизация с возможностью свертки вниз?
Произвольная скачущая типизация (на указателях)?

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

ent - 8 B (при необходимости - переход в dent)

dent - 16 B

flot - 8 B (при необходимости??? - переход в dflot)

dflot - 10 B

texto - символьный/строковый, по 4 Bytes (разжатый тип, строка-массив) или в сжатой кодировке UTF-8 с динамической конвертацией в зависимости от задачи. Или можно сразу при вводе конвертировать в 4-байтовые массивы и только при выводе превращать обратно в UTF-8. С динамическим размером, с постоянным контролем длины.

Если мы делим два целых и записываем в flot - получаем всё: с десятичной частью. Если пишем в ent - только целую часть.

Функции преобразования применимы как к чему угодно.

Функции возвращают значение, преобразованное к данному типу.

ent(c), где с - символ - получим код символа.

texto(e), где e - целое число, получим символ в UTF-8 с соответствующим кодом.

Вопрос: что делать с переменной с явно заданным типом? Можно ли менять её тип?

Сложные разнотипные массивы? Списки? Структуры?
Простая реализация динамики и сложности элементов - с внутренним контролем и т.п.
Массивы любых сложных переменных, структур и т.п. - через  внутренние указатели.
Ну а там - и до классов недалеко...
И везде - разумная динамика и внутренние преобразования и контроль!
В конце концов, можно сразу закладывать классы самопроверяющихся "умных" динамических типов переменных с максимально простым интерфейсом.

Классы (простые)?

Можно использовать специальную библиотеку для работы с указателями. Не напрямую как в C, а через функции с проверкой - для безопасности.

В функциях - короткоживущие переменные. Только?
Динамические массивы и строки - в дополнение к динамической типизации.
Передача любых типов переменных: строк, массивов. Как передавать? Ссылкой или копией?

Функции - употребимы везде - так же как переменные и константы.
Все - для корректной рекурсии!

Массивы (строки - в том числе, в кодировке ASCII и в UTF-8 - по умолчанию!) с прямой и обратной (отрицательной) индексацией. С возможностью срезов? При этом строковый массив UTF-8 - с автоматической конвертацией из 4-х байтного массива в стандартную UTF-8 строку и обратно - при необходимости.

Оператор определения длины массива/строки.

Стек - в стандартной реализации: создание, чтение, запись, удаление? запрос заполненной глубины?. Может быть 2 типов LIFO и FIFO.
Возможен возврат в универсальную переменную ошибки кодов ошибок.

Универсальный обработчик ошибок: 3 специальные переменные - код ошибки, подробная информация об ошибке и текстовое сообщение.

Редактор - подсветка, автозавершение кода, окно подсказок и справки
Номера строк,
Новый код - выделение
Свертка блоков - с комментариями.
Метки строк

Кроссплатформенность - через интерпретатор, в том числе, и для браузера - js - только с базовой (учебной библиотекой).
Для полноценного функционала и расширенных библиотек нужен либо полный интерпретатор под каждую платформу, либо компилятор. Однако, вопрос повышения производительности пока не стоит.

Найти удобный язык с библиотеками или просто библиотеки и подключить их или пересобрать для нас.
Просто обертки.

___________________________________________________________

El agua de la vida (ADV)

Как-то включиться в существующий школьный метеорологический проект Карлос Пас?
Метеостанции в школах! Официальные метеостанции!
Чтобы были нормальные прогнозы!
И уровни воды на мостах, плотинах и в других важных местах!
Метеосистема долины Punilla с озёрами и реками! Уровни, осадки, температуря, загрязненность воздуха, влажность... Подключение частных метеостанций - выбраковка результатов.
Сайт проекта.
Разбиение проекта на элементы - подпроекты.
Большой молодежный гидрометеорологический исследовательский проект Наша Вода или Вода Жизни. "Та вода, которую мы пьем".
Школы городков долины: исследование родников, рек, ручьев, систем сбора воды, подачи. Отслеживания уровня воды - водомерные посты. Отслеживание течения воды. Состояние воды в реках и озерах, её загрязненность. Растительность. Животный мир. Загрязненность сливаемой воды. Возможно даже связь с экологической полицией?!
Сам район водосбора - по границы водораздела. Его география, почвы, природная зона, геологическая подоснова.
Промышленность района, сельское хозяйство. Объекты критичные для состояния воды.
Изучение районов водосбора: география, самой системы забора, очистки, подачи воды, установка водомерных реек, и т.п. Установка метеостанций и датчиков, анализ информации, доклады... Изучение истории проекта, людей, его делавших...

. . .

Поделиться:

Комментарии:
Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать rubasic.ru, вы соглашаетесь на использование файлов cookie.
Понятно