Добрый вечер, Бойко! «Рефал ведь слабо типизированный язык…»
Распространённая терминологическая ошибка, перепутана слабая и динамическая типизация. Сильно типизированный язык — язык, запрещающий неявные преобразования. Слабо типизированный язык — язык, разрешающий неявные преобразования. JavaScript — слабо типизированный язык, поскольку в нём можно сложить строку с числом. А Рефал — сильно типизированный язык, в нём нет неявных преобразований. Число 0 может сопоставиться только с образцом 0, а не '0' (character) или "0" (составной символ). А с тем, что Рефал — динамически типизированный, я не спорю. Есть зачаток статической типизации в Рефале Плюс — форматы функций, но это только зачаток. Ликбез по типизациям: https://habr.com/ru/post/161205/ Хорошая статическая типизация для Рефала даже первого порядка — интересная задача. Надеюсь, когда-нибудь решу. Статическая типизация Рефала обсуждалась в этой рассылке в незапамятные времена (KOI8-R): https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0005.html https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0007.html https://mazdaywik.github.io/direct-link/refal-botik-ru/refal/0222.html «А избежание необходимости усложнений Рефала, на мой взгляд, можно постичь, если реализовать небольшое его подмножество в виде библиотеки на ANSI C.» ИМХО тут надо брать пример с Lua. С уважением, Александр Коновалов -----Original Message----- From: Boyko Bantchev boykobb_AT_gmail.com [mailto:refal@botik.ru] Sent: Sunday, December 1, 2019 12:52 PM To: Александр Гусев <gusev_aleksa...@mail.ru>; refal@botik.ru Subject: Re: Нужна ли "Ленинская простота" в Рефале? > ... Если ещё немного усложнить язык - получится Хаскелл, зачем тогда Рефал? Получить Haskell или вообще язык с системой типов Hindley–Milner из Рефала не то что с небольшими усложнениями, а вообще нереально ожидать. Рефал ведь слабо типизированнъй язык, тогда как с Hindley–Milner-овскими языками как раз наоборот. И механизмы сопоставления у Рефала и у Hindley–Milner-а совсем разные. У каждого свои преимущества. А избежание необходимости усложнений Рефала, на мой взгляд, можно постичь, если реализовать небольшое его подмножество в виде библиотеки на ANSI C. Это даст, с одной стороны, компилятор, интерпретатор и REPL этого минимального и совсем простого Рефала для непосредственных применений, в том числе для изучения, обучения и всяких хобби занятий. С другой стороны, через интерфейс к ANSI C будет обеспечена возможность сочетать программирование на Рефале с программированием на почти любом другом языке. На этих других языках, а не в самом Рефале, и будут реализоваться все желательные языковые расширения. И то, и другое увеличило бы, помимо прочего, практическую доступность Рефала. Зависимости от операционной системы, например, вообще не будет — одна реализация языка на все системы, где есть C. Ещё одна возможность — реализовать тот самый небольшой Рефал в виде библиотеки на JavaScript, что обеспечило бы применимость и в вебприложениях, и (через Node) во многих других. Может, я что-то упускаю из вида, но именно такой путь развития Рефала мне кажется очень перспективным.