Тесто-типизированный язык
От: νsb Казахстан  
Дата: 28.11.22 21:21
Оценка:
Пришла тут в голову забавная на мой взгляд идея. Берём динамически типизированный язык вроде жаваскрипта. Пишем код. Пишем тесты. Прогоняем тесты. И вот тут запоминаются все типы, которые приходили и уходили в функцию. После этого функцию нельзя вызывать с другими типами. Будет ошибка компиляции.

Я немного сумбурно это расписал, но постарался выразить главную идею. Типы объявляются опосредованно, через тесты.

Как вам такая идея — взлетит?
Re: Тесто-типизированный язык
От: rosencrantz США  
Дата: 29.11.22 01:05
Оценка:
Здравствуйте, νsb, Вы писали:

νsb>Как вам такая идея — взлетит?


Не взлетит, в тестах типы-моки всё испортят.
Re: Тесто-типизированный язык
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.11.22 01:16
Оценка: +3 :))) :))) :))
Типы-моки можно принудительно кастовать к интерфейсам. А интерфейсы — не испортят.

Но заставить нас писать вам тесты у вас всё равно никак не получится. Не писали и писать не будем.
Re[2]: Тесто-типизированный язык
От: rosencrantz США  
Дата: 29.11.22 01:26
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Но заставить нас писать вам тесты у вас всё равно никак не получится. Не писали и писать не будем.


Расстрелять всех к чёртовой матери
Re[3]: Тесто-типизированный язык
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.11.22 01:32
Оценка:
R> Расстрелять всех к чёртовой матери

Расстрелять надо проповедников тестирования.
А в живых надо оставить только адептов доказательного программирования.
Re: Тесто-типизированный язык
От: vaa  
Дата: 29.11.22 01:34
Оценка:
Здравствуйте, νsb, Вы писали:

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


νsb>Я немного сумбурно это расписал, но постарался выразить главную идею. Типы объявляются опосредованно, через тесты.


νsb>Как вам такая идея — взлетит?


Не то? https://clojure.org/guides/spec

Ранее мы упоминали, что clojure.spec.test.alpha
предоставляет инструменты для автоматического тестирования функций.
Когда у функций есть спецификации, мы можем использовать проверку,
чтобы автоматически генерировать тесты, которые проверяют функцию
с использованием спецификаций.

☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Тесто-типизированный язык
От: rosencrantz США  
Дата: 29.11.22 01:35
Оценка: +1 -1 :)
ЭФ>А в живых надо оставить только адептов доказательного программирования.

Адепты доказательного программирования — это типа вот эти ребята, которые не осилили тесты писать?
Re[5]: Тесто-типизированный язык
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.11.22 01:36
Оценка:
R> Адепты доказательного программирования — это типа вот эти ребята, которые не осилили тесты писать?

Разные. Но поскольку расстреливать вы собрались всех, то начнём это делать с проповедников тестирования.
Re[6]: Тесто-типизированный язык
От: rosencrantz США  
Дата: 29.11.22 01:43
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

R>> Адепты доказательного программирования — это типа вот эти ребята, которые не осилили тесты писать?


ЭФ>Разные. Но поскольку расстреливать вы собрались всех, то начнём это делать с проповедников тестирования.


О, наверно просто контекста не хватило. Я против тех, кто не пишет тесты, прикрываясь теорией. Если кто-то вместо "иди в жопу со своим тестированием" скажет: "иди в жопу со своим тестированием, я сейчас всё на типах выведу" — я только за. Обычно против тестов гонят убогие, которые просто не осилили.
Re: Тесто-типизированный язык
От: LaptevVV Россия  
Дата: 29.11.22 05:19
Оценка:
νsb>Как вам такая идея — взлетит?
Зачем такие сложности?
Проще сразу типы писать.
Берем Dart — и пишем
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Тесто-типизированный язык
От: Буравчик Россия  
Дата: 29.11.22 06:17
Оценка:
Здравствуйте, νsb, Вы писали:

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


Так функция и не вызовется с другими типами, если код не менять.
А если код менять, то и типы могут поменяться, и предыдущие типы нам не важны.

Ну и непонятно, что дальше-то что с этими типами делать, какая задача решалась?

Похожий подход используется в тестировании — сравнение результатов предыдущих и последующих запусков (канонизация тестов, сравнение скриншотов).
Best regards, Буравчик
Re[2]: Тесто-типизированный язык
От: νsb Казахстан  
Дата: 29.11.22 06:52
Оценка:
Здравствуйте, Буравчик, Вы писали:

Б>Так функция и не вызовется с другими типами, если код не менять.


Не понял. У нас типы выводятся в момент компиляции файла.

Грубо говоря у нас есть файл, в нём код и в нём же тесты. Мы сначала запускаем интерпретатор, который игнорирует типы. Этот интерпретатор прогоняет все тесты в этом файле и во время каждого вызова функции запоминает типы значений, которые эта функция принимала и возвращала. А также, видимо, типы переменных.

Эта запомненная информация где-то сохраняется и представляет из себя типизированную сигнатуру функции.

Простой пример:

function f(n) {
  let result;
  if (n == 0) {
    result = 1n;
  } else {
    const f1 = f(n - 1);
    result = BigInt(n) * f1;
  }
  return result;
}
tests {
  assert(f(0) == 1);
  assert(f(3) == 6);
}


Тут мы прогнав тесты видим, что функция вызывается с параметром типа number и возвращает BigInt при всех выполнениях. То бишь после выполнения куда-то записывается что-то вроде
function f(n: number): BigInt {
  let result: BigInt;
  if (n == 0) {
    result = 1n;
  } else {
    const f1: BigInt = f(n - 1);
    result = BigInt(n) * f1;
  }
  return result;
}


и теперь её из другого файла нельзя будет вызвать со строкой или null-ом, будет ошибка компиляции.

Наверное можно даже не просто number выводить, а что-то вроде uint8. Или вообще конкретный тип, от 0 до 3 в данном примере. Типа нужен факториал со значениями побольше — пиши тесты на значения побольше.

Б>Ну и непонятно, что дальше-то что с этими типами делать, какая задача решалась?


Проверять при использовании в других файлах.
Re: Тесто-типизированный язык
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.11.22 08:25
Оценка:
Тебе надо мотивацию выписать.
Зачем это нужно, и какие преимущества даст.

Программного кода придётся писать больше,
потому что размер тестов больше, чем размер указания типа.
И это плохо. Чем-то это должно компенсироваться.

Чем же?
Re: Тесто-типизированный язык
От: zx zpectrum  
Дата: 29.11.22 13:35
Оценка:
νsb>Типы объявляются опосредованно, через тесты.
Погодите-ка, это разве не очередная вариация design by contract?
Re: Тесто-типизированный язык
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 29.11.22 14:27
Оценка:
Здравствуйте, νsb, Вы писали:

Лучше всего сделать кодогенерацию на TS. Вернее заглушки, которые внутри вызывают метод JS
и солнце б утром не вставало, когда бы не было меня
Отредактировано 29.11.2022 15:22 Serginio1 . Предыдущая версия .
Re[2]: Тесто-типизированный язык
От: νsb Казахстан  
Дата: 29.11.22 15:05
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Тебе надо мотивацию выписать.

ЭФ>Зачем это нужно, и какие преимущества даст.

ЭФ>Программного кода придётся писать больше,

ЭФ>потому что размер тестов больше, чем размер указания типа.
ЭФ>И это плохо. Чем-то это должно компенсироваться.

ЭФ>Чем же?


Тесты писать всё равно надо. Поэтому в данном случае это влияния не имеет.

Чем хорошо: меньше писанины. А также для уточнения типов придётся писать больше тестов, эдакая мотивация программистам писать тесты на все возможные значения на входе и на выходе.

Чем плохо — пока не знаю. Есть вероятность, что тестов придётся писать слишком много.

Если тесты недетерминированные, то будут недетерминированные типы. Но в принципе это в любом случае нехорошо. Плюс можно тесты сделать детерминированными, убрав любые источники случайности.
Отредактировано 29.11.2022 15:06 vsb . Предыдущая версия .
Re[3]: Тесто-типизированный язык
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 29.11.22 19:55
Оценка:
νsb> Тесты писать всё равно надо.

Но не всем надо. Кому-то надо "раз-раз и в продакшен".

νsb> эдакая мотивация программистам писать тесты


Или мотивация выбирать другие инструменты,
которыми проще пользоваться из-за того, что не надо писать тесты.
Re[2]: Тесто-типизированный язык
От: flаt  
Дата: 30.11.22 10:28
Оценка:
Здравствуйте, vaa, Вы писали:

vaa>Не то? https://clojure.org/guides/spec


Здесь по функциям генерируют тесты — это у много кого есть. ТС предлагает по тестам генерировать типы параметров функций (сигнатуры подставлять).

Идея забавная, но утопичная. Хотя, для TypeScript подошла бы, там и так типы держатся на хрупком компиляторе.
Re[3]: Тесто-типизированный язык
От: CreatorCray  
Дата: 01.12.22 10:41
Оценка:
Здравствуйте, ?sb, Вы писали:

?sb>Чем плохо — пока не знаю. Есть вероятность, что тестов придётся писать слишком много.
Например тем, что пока всё тестами не покроешь написанное тупо запустить не получится.
Кстати а сами тесты как будут определять что в них куда передавать можно? Курица и йайцо вырисовывается.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Тесто-типизированный язык
От: νsb Казахстан  
Дата: 01.12.22 13:52
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>?sb>Чем плохо — пока не знаю. Есть вероятность, что тестов придётся писать слишком много.

CC>Например тем, что пока всё тестами не покроешь написанное тупо запустить не получится.

Ну и хорошо, test driven development и всё такое.

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

CC>Кстати а сами тесты как будут определять что в них куда передавать можно? Курица и йайцо вырисовывается.


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