Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » Общие вопросы по РЯП » Язык Кантор


Язык Кантор

Сообщений 1 страница 30 из 37

1

Юрий написал(а):

Вот у меня, например, с Freeman-ом очень много похожих целей. Но пути к цели довольно разные. Я, наверное, от трёх человек получал предложение присоединиться к их проекту. И отвечал: «Нет, спасибо, у меня своё видение».

Ну, по результатам общения с вами я сделал главное: добавил в Кантор все понравившиеся идеи. :D

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

Это всё -- в тему о заслугах и признании. Юрий, в настоящий момент вы самый влиятельный русский по степени влияния на проект. Вы разделяете мою трактовку заимствований?

Юрий написал(а):

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

В ваших словах есть противоречие. Соратник -- на то и соратник, что разделяет понимание пользы проекта без промывания мозгов. Я так и написал об этом в вакансиях: бегать за каждым и что-то доказывать никто не будет. Или есть внутренняя заинтересованность, или это не соратник.

2

http://www.cantorsys.com/p/languagefeatures.html

3

где прогресс?
какие планы?
как принять участие в проекте?
что делать?

4

Прогресс -- "как только, так сразу", планы -- после получения финансирования, принять участие -- стать евангелистом, для начала совместной работы нужно поговорить по Skype (vapaa_mies) или встретиться IRL в Питере.

5

Freeman написал(а):

планы -- после получения финансирования

По-моему тут есть странность в логике: планы нужны ДЛЯ получения финансирования. Иначе непонятно, что именно финансируют (какие затраты, когда результаты).
Говорить по скайпу мне не разрешает религия. Потому что Skype - это бинарник, а я к себе на машину бинарники не ставлю, только сборка из исходников.
До Питера я не доеду, потому что далеко и смысла мало, при наличии шифрованной почты, IPFS и всего такого.
А чтобы быть Евангелистом, нужно прочитать откровение. Ну, чтобы знать, что именно проповедывать. Вы же откровение не выписываете (может быть Ваша цивилизация - дописьменная?)

Отредактировано Лис (2017-04-19 13:21:02)

6

Лис написал(а):

По-моему тут есть странность в логике: планы нужны ДЛЯ получения финансирования. Иначе непонятно, что именно финансируют (какие затраты, когда результаты).

В условиях полного отсутствия денег я не могу ничего планировать, поэтому все мысли о будущем считаю мечтами и не даю бесплодных обещаний, чтобы не выглядеть брехуном. На разработку нужен "условный миллион" рублей и "условный год" трудозатрат, по окончании будет работающий прототип-интерпретатор, позволяющий писать на Канторе, демонстрирующий его возможности и преимущества, на основе которых можно строить дальнейшие планы захвата мира. Сейчас проект находится на завершающем этапе НИОКР (R&D) и может финансироваться грантом или бизнес-ангелом. Составление бизнес-плана на данном этапе объективно невозможно. Детали "условного года" и "условного миллиона" обсуждаемы и являются предметом переговоров. Наверное, это нужно как-то отразить на сайте, но пока не придумал, как.

Лис написал(а):

Говорить по скайпу мне не разрешает религия.

В таком случае вы не подходите на роль евангелиста. Тут тоже всё недвусмысленно: в условиях ограниченности ресурсов я поставлен перед выбором, писать код или документацию. Я выбрал код, поскольку документацию можно проговаривать голосом, а облекать ее в письменную форму сможет кто-то другой. Можете считать это сектой, но я придерживаюсь метафоры спецоперации.

Кандидат в евангелисты должен сказать примерно следующее: "Блог и форум прочитал, PE Tool собрал, XX часов видео просмотрел, хочу сделать то-то и то-то, есть такие-то вопросы, как мы можем их обсудить, чтобы я смог приступить к работе?", -- то есть подразумевается внутренний интерес и инициатива снизу. Всё прочее многократно опробовано и не работает. Письма писать -- троллей кормить: за 2 года вещания видео я продвинулся намного дальше, чем за 12 лет без видео. В Рунете всё равно ничего никому не докажешь.

Несмотря на солидный возраст и трудности с реализацией, по части теорий Кантор до сих пор не устарел и по-прежнему находится впереди будущих стандартов C++ и даже языка SLang Евгения Зуева и Алексея Канатова, как показала конференция в Ростове-на-Дону. Можете верить, можете нет, доказать ничем не могу. По учебнику Зуева в 1992-м году я ООП учился, он не первый день языками занимается и даже в цюрихской ETH работал.

7

Freeman написал(а):

Я выбрал код, поскольку документацию можно проговаривать голосом, а облекать ее в письменную форму сможет кто-то другой

М.б. программы для записи текста по голосу?

8

А в чём и куда вы продвинулись?  Хотелось бы услышать совет. Тут на днях пришла идея. Вроде отличная идея, но на её развитие нужны средства, время и люди.  Считаю что идеями надо делиться с людьми, что бы их неукрали.

9

MihalNik написал(а):

М.б. программы для записи текста по голосу?

Попробуйте, отпишитесь о результатах.

Павиа написал(а):

А в чём и куда вы продвинулись?

Проговоренные темы, нужно проговорить. Насчитал 24 пункта -- это на целый год, если по 2 лекции в месяц.

10

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

11

utkin написал(а):

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

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

12

Если речь идёт о замыканиях и лямбдах "вообще", то они нужны для сокращения текста программы. Специально для Дельфистов: procedure of object - это своеобразный частный случай замыкания. Теперь спросите себя, зачем нужны procedure of object и каково было бы без них.

13

utkin написал(а):

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

Думал-думал над ответом, потом полез смотреть примеры и внезапно родил внеочередной этюд.

Практический смысл смысл замыканий в Канторе такой же, как операторов в Паскале: как не выйдет писать на Паскале, не используя операторы, так не выйдет писать на Канторе, не используя замыкания. Возможно, моя трактовка в качестве замыканий любых локальных функций, а не только функций от переменных является не совсем правомочной. Готов выслушать аргументы против.

С лямбдами не так однозначно, они будут уточняться по мере развития итераторов и объектной алгебры. На данный момент лямбда -- итератор, а без итераторов в Канторе не обойтись, они вместо циклов...

Короче, замыкания и лямбды в Канторе -- не прикрученные сбоку красоты, а органичная часть языка, заменяющая другие концепции. Избыточности тут нет.

14

А не лучше типо такого?
http://www.programmersforum.ru/showthread.php?t=308477

Сообщение от karetuu 
Написать подпрограмму нахождения элементов двумерного массива целых чисел размера 6х4 которые находятся в промежутке [-10,9], вычислить количество и произведение этих элементов.

Код:
var 
  a:=MatrRandomInteger(6,4,-50,50);
begin
  a.Print(5);
  Println('Числа в промежутке [-10,9] :');
  var b:=a.Rows.SelectMany(x->x).Where(x->(-10<=x)and(x<=9));
  b.Println;
  Println('Их количество =',b.Count);
  Println('Их произведение =',b.Aggregate(1,(p,x)->p*x));
end.

15

Практический смысл смысл замыканий в Канторе такой же, как операторов в Паскале: как не выйдет писать на Паскале, не используя операторы, так не выйдет писать на Канторе, не используя замыкания.

Пока не прослеживается.

Готов выслушать аргументы против.

Замыкания увеличивают связность кода. Если Вы боритесь за чистоту идеи, то это осложняет разработку информационных систем командной программистов и может являться источником трудноотлавливаемых логических ошибок проектирования. Пример который Вы приводите (на Scheme) синтетический. Он показывает возможность применения, но не показывает практического смысла такого использования. Я не понимаю почему там просто нельзя написать x-1, вместо того чтобы городить огород из не очевидных вызовов функций.
Сам код:

(define (make-adder n)       ; возвращает замкнутое лямбда-выражение

Фактическое определение именованной функции.  Посмотрите на синтаксис работы Scheme это классическое присвоение имени лямбдам, что превращает их в обычные именованные функции.
Если переменная важна, что требует хранить  свое значение, значит ее нужно выделить в обычный объект класса со стандартными геттером и сеттером. Смысл синтаксического сахара? Объект же будет универсален, потому что уменьшает сцепляемость отдельных блоков кода между собой.  Практическая необходимость не очевидна.

На данный момент лямбда -- итератор, а без итераторов в Канторе не обойтись, они вместо циклов...

Я плохо понимаю Вас. Итератор это способ доступа к элементу коллекции (кортежа, объекта, контейнера). Цикл это один из способов генерации итератора типа "индекс", но не итератор сам по себе (а индекс в данном случае будет итератором для некоторых структур данных). Например, дерево нельзя обойти циклом, поскольку ветви не обязаны иметь индексы. Вы можете написать реализацию деревьев, ветви которых будут иметь индексы, но это будет именно внутренняя реализация. Концепция деревьев не предусматривает индексы в принципе. Поэтому я немного путаюсь в Вашей терминологии.

На данный момент лямбда -- итератор

Аналогично с циклами. Лямбда не обязана быть итератором. Непонятно почему именованная функция не может быть итератором. От этого вообще одни плюсы - лямбда должна быть вот прям inline, а именованая функция может быть у черта на куличках - в другом модуле/файле, на другом диске, в Интернете и т.д.
Я Вам предлагаю написать на Вашем языке простую практическую программу. Например, Угадай число. Смысл игры прост - система загадывает число от 1 до 100, у пользователя 10 (в некоторых вариантах 5) попыток угадать число. При каждом неправильном ответе система выдает: Больше или Меньше. Напишите, а мы проанализируем плюсы Ваших идей.

В массовом программировании важна не чистота концепций, важен результат.

Этим руководствовался и язык Си. Как мы знаем количество способов выстрелить себе в ногу  позволяет проводить  олимпиады на эту тему :).

16

utkin написал(а):

Итератор это способ доступа к элементу коллекции (кортежа, объекта, контейнера).
[...]
Лямбда не обязана быть итератором. Непонятно почему именованная функция не может быть итератором.

Я не смогу вам ничего объяснить, если вы не читаете определений или не пытаетесь их понять. Именованная функция не может быть итератором, поскольку в Канторе нет ссылок на код.

Как написано по ссылке, итератор -- это пошаговая функция особого вида, похожая на запрос SQL. При ее выполнении, как и при исполнении запроса SQL, формируется курсор -- виртуальный контейнер, описываемый выражением итератора, доступ к которому выполняется пошагово, через некую функцию fetch. Вызовы fetch повторяются до тех пор, пока не будет достигнут конец курсора. В этом сходство итераторов с циклами --  в пошаговости. Поскольку, как и в SQL, выражение итератора может быть сколь угодно сложным, итератор является заменой любым циклам, а не только for. Используя в выражении ключевое слово prior, в Oracle описывают обход деревьев (конструкция connect by/start with), в Канторе будет как-то аналогично.

17

with
  make_adder[int n, x] = x + n;
  add1 partial make_adder[1];
  sub1 partial make_adder[-1];
return
  add1[10], sub1[10]; // возвращает (11, 9)

Что же тогда addr1 и sub1 если как не именованные функции? Имеют имя, входящие параметры и возвращают результат. Утиная типизация говорит мне что передо мной чистой воды именованная функция, даже если Вы назовете ее по-другому. Роза пахнет розой, хоть розой ее назови, хоть нет. Это ее Шекспир давно обнаружил :). Это самый что ни на есть именованный код.

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

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

18

utkin написал(а):

Что же тогда addr1 и sub1 если как не именованные функции?

Вы снова не читаете, что написано. Тут НЕТ итератора, поскольку нет ключевых слов from и by. Тут простые именованные функции. О чем статья в блоге?  :angry:

Собственно, почему я не составляю БНФ

Если я потрачу кучу времени на БНФ и спецификацию языка, читать ее будут так же, как и остальной блог, попутно требуя доказать или опровергнуть то, чего там нет. Спецификация же будет многократно меняться по мере реализации внутреннего представления. Посчитал разумным ничего не публиковать, чтобы потом бесконечно не доказывать, что ты не верблюд. Уж лучше пусть ругают за ненаписанное, чем за написанное.

19

Собственно поэтому Вас никто и не понимает :). Пишите уже программу, пока все голословно и не ясно. И потом Вы уклоняетесь от ответа. Вы пишите, что именованного кода в Канторе нет (то есть вообще без привязки к итераторам). Когда я Вам показываю Ваш именованный код, Вы говорите что я не читаю первоисточник :). Так не пойдет. Не выдумывайте правила по ходу игры.

20

utkin написал(а):

Вы пишите, что именованного кода в Канторе нет

Покажите цитату.

21

Именованная функция не может быть итератором, поскольку в Канторе нет ссылок на код.

Функция и есть ссылка на код.

22

utkin написал(а):

Функция и есть ссылка на код.

Ссылка на код -- это функция, засунутая в переменную, как в JavaScript-овом замыкания из Википедии:

Код:
var myClosure = function outerFunction() {
  // ...
}

Таких ссылок в Канторе нет, засунуть функцию в переменную нельзя. А обычные функции -- это просто объявления, как и в любом другом языке.

23

Именованная функция не может быть итератором, поскольку в Канторе нет ссылок на код.

Функция и есть ссылка на код.

24

utkin написал(а):

Функция и есть ссылка на код.

Ссылок на код не существует.

25

Что же тогда функция? Это и есть код. А имя функции это ссылка на нее.

Ссылка на код -- это функция, засунутая в переменную,

Ничего подобного.  Любое имя это ссылка. Функции в переменные не засовываются :). Физически в объект могут помещаться только ссылки на функции. Просто так дешевле. Возьмите класс - там таблицы методов (то есть карта ссылок на функции). То что для Вас имя функции внутри преобразовывается в адрес в таблице. Играть терминами можно бесконечно долго, но любое имя это ссылка.
Я по-прежнему жду программу Угадай число....

26

Freeman написал(а):

Ссылок на код не существует.

Тогда и вызываемых функций тоже не существует, а только встраивание/интерпретация (полукомпиляция на ходу).
Либо же речь про специфическое определение, что, как в некоторых языках, ссылка это не указатель и т.п. особенности.
Спрашивалось же про то, что есть именованный (самодокументированный) код, а есть нет и зачем нужен второй.

utkin написал(а):

Функции в переменные не засовываются .

В принципе, можно, но смысл сомнителен.

27

а только встраивание/интерпретация

А интерпретация это прямая обработка ссылок и есть фактически.

В принципе, можно, но смысл сомнителен.

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

28

Насколько я понял - подразумевается не прямая ссылка, а именно как раз оболочка.

29

Freeman написал(а):

Как написано по ссылке, итератор -- это пошаговая функция особого вида, похожая на запрос SQL.

Вслед за utkin, я не понял, как итератор может заменить цикл. Мне кажется, вы не совсем правильно применяете термин "итератор". В тех контекстах, где я встречал это слово, оно означало объект с методом "получить следующий". При этом объект может быть безымянным, не существовать и т.п., но тогда есть некий его суррогат. Т.е. так скажем, полный цикл состоит из "просто безконечного цикла", "итератора" и "условия завершения". Запись i:=1 to 10 в Паскале сочетает итератор и условие завершения, хотя объекта итератор нет. Соответственно, одного итератора недостаточно для замены цикла.

Тут ваша претензия к utkin-у, что он не прочитал ваше определение итератора, не вполне правомочна. Естественно ожидать, что вы используете общеизвестные термины в их общеизвестном смысле. Если это не так, или даже если термин неоднозначен и вы взяли какое-то 2 или 3 по общепризнанному словарю редкое значение, то это недоразумение, но никак не основание для "наезда" :)

Подобная вашим "итератором" (буду их ставить в кавычки) вещь - это series, правда, в стандарт их не взяли. Моё личное мнение - циклы лучше (если мы говорим о практике). Также они чем-то похожи на функции высшего порядка (map, reduce и т.п.)

Отредактировано budden (2017-05-17 22:14:00)

30

По поводу ссылка на код не ссылка на код. Спорить не буду как автор сказал так пусть и будет. Но всё же если вы будете делать делегирование, виртуальные методы, в конце концов сигналы и слоты. Или любое место где есть позднее связывания кода у вас появятся ссылки. И вполне естественно что функция есть метка или же ссылка. Метка если для её ссылки адрес вычисляется через оператор если нет оператрра а напрямую подставляется то это ссылка.

А вот с циклом и бегунком(со счётчиком) согласен - они не циклы. Цикл у вас уровнем выше for, foerch, prior.


Вы здесь » Ремесло программиста » Общие вопросы по РЯП » Язык Кантор