mavka-ukr / mavka

Сучасна українська мова програмування
https://мавка.укр
Other
54 stars 4 forks source link

Перевірка типів #4

Open kohutd opened 1 year ago

kohutd commented 1 year ago

Проблема

Наразі Мавка не перевіряє типи. Це зроблено, щоб програми виконувались швидше.

Тим не менше, під час розробки функція перевірки типів може дуже добре допомогти.

Пропозиція додати прапорець до команди виконання мавки і назвати його "--увімкнути-перевірку-типів". Коли цей прапорець присутній, код буде виконуватись з перевіркою типів.

Приклад:

тест.м:

а число = "сонце сяє, вітер віє"

команда:

мавка --увімкнути-перевірку-типів тест.м

приклад результату:

Не вдалось зловити: Неможливо присвоїти значення "сонце сяє, вітер віє" (текст) змінній "а" (число) через несумісність типів.
harnyk commented 1 year ago

Питання 1. Наскільки глибокою має бути типізація?

Наприклад, чи існуватиме можливість для типу "список чисел", "список текстів", "дія, що має аргументом число і повертає строку"?

Якщо уявити дженерики, що оголошуються за допомогою оператора !(Т), то існуватимуть такі штуки:

а Список!(число) = Список()
а.додати("7")   ;;помилка

Питання 2. Автоматичний вивід типу.

Чи валідним буде наступний код?:

а = "п"   ;;чи тип автоматично визначиться як текст?
а = 7

Питання 3. Рефлексія

Чи буде механізм того, щоб дізнатися тип чогось в рантаймі?

а строка = "п"
б = тип(а)
друк(б)
harnyk commented 1 year ago

Питання 4. Типи полів структур що наслвідуються

Чи можна перевизначати тип поля в дочірній структурі?

структура Б
  оце текст
кінець

структура Д є Б
  оце число    ;;чи це припустимо?
кінець
kohutd commented 1 year ago
  1. Так, буде можливість робити Generics як в інших мовах. Так як на розкладці Ukrainian Unicode доступні символи <>, то дженеріки будуть реалізовані з великою ймовірністю саме через них. Ці дженеріки також мають перевірятись коли увімкнена перевірка типів.
  2. Хороше питання. Я думаю, що так. Якщо тип не вказано явно, то він буде підбиратись автоматично зі значення, але з можливістю його зміни.
  3. Рефлексія дуже зручний інструмент, тому вважаю, що вона має бути.
  4. Якщо перевірка типів увімкнена, тоді можливість перевизначати тип для поля в дочірній структурі має бути забороненою.
kant2002 commented 1 year ago

Зараз вуха JS торчать із Мавки, тому усі ігри із типами JS видно і у Мавці. Як писав у телезі

друк("b" + "a" + + "a"+ "a") // baNaNa

я так розумію без переверки типів це буде важко заборонити.

harnyk commented 1 year ago

й наразі будь-яка перевірка типів, якщо й можлива, то тільки в рантаймі. І це накладає певні обмеження.

Ну або треба писати компілятор

kohutd commented 1 year ago

Зараз вуха JS торчать із Мавки, тому усі ігри із типами JS видно і у Мавці. Як писав у телезі

друк("b" + "a" + + "a"+ "a") // baNaNa

я так розумію без переверки типів це буде важко заборонити.

Вуха пофіксаємо

kohutd commented 1 year ago

й наразі будь-яка перевірка типів, якщо й можлива, то тільки в рантаймі. І це накладає певні обмеження.

Ну або треба писати компілятор

В мене є ідея з компіляцією Мавки в JSON (так так, саме в нього), який можна буде інтерпретувати JS-ом. Але наразі так, рантайм