Змінюй хід війни! Допомагай ЗСУ!

А вот вам и новый язык. Зацените. Можно ругать.

  • Автор теми Автор теми batu
  • Дата створення Дата створення
Есть такая статья Пола Грэма «Разрушение стереотипов», в которой описан его опыт использования языка Lisp (ещё одного функционального языка программирования) в новой компании. В ней он использует аналогию, которую он назвал «Парадокс Blub».

В ней говорится примерно следующее:

Если любимым языком у программиста является язык Blub, который находится где-то посередине «спектра мощности», то он может сравнить его только с языками, которые находятся в нижней части спектра. Он может взглянуть на язык COBOL и сказать: «Как кто-нибудь что-нибудь может делать на этом языке — у него же нет функции X. — X присутствует в языке Blub.» Тем не менее, для программиста будет непростой задачей просмотреть другую часть спектра. Если он начнет изучать языки, которые находятся в верхней части спектра, то они покажутся ему «непонятными», так как программист на языке Blub думает «на языке Blub» и, скорее всего, не видит полезности разнообразных функциональных возможностей более мощного языка программирования. Само собой разумеется, что это по индуктивности наводит на мысль о том, что, чтобы иметь возможность сравнивать все языки, надо поместить себя на верхушку спектра мощности. Моё мнение, что функциональные языки, по определению, ближе к вершине спектра мощности, чем императивные.

Одной из причин того почему «массы» не используют язык Haskell, является то, что люди считают, что их язык делает «всё, в чем они нуждаются». И конечно он делает, потому что они думают «на языке Blub». Языки программирования — не технология — это образ мышления. И если вы не думаете на языке Haskell, вам будет трудно увидеть полезность языка Haskell — даже если язык Haskell предоставит вам возможность писать приложения лучше за короткий промежуток времени.

Будем надеяться, что эта статья помогла вам сломать в себе парадокс Blub. Даже если вы еще не способны «думать на языке Haskell», я надеюсь, что вы, по крайней мере, осведомлены об ограниченности ваших рамок мышления, продиктованных вашим текущим «любимым» языком программирования, и что у вас теперь есть стимул для их расширения путём изучения чего-нибудь нового. Если вы предались изучению функционального языка программирования (для достижения лучшего взгляда на спектр мощности), то я убежден, что язык Haskell — это ваш лучший выбор.



Как чисто фунциональный да. Хотя мне Lisp больше понравился по чистоте синтаксиса. Я предлагаю нечто более интересное. И по синтаксису тоже. Надо только въехать в концепцию реализации. Я здесь пару слов скажу, а то в основном людям лень читать длинное.
Концепция реализации заключается в возможности изменять значения, а так же добавлять функционал в конкретный объект. Замечу, что добавление функционала это и создание новых свойств и операторы. Делается это обычно в фигурных скобках. Хотя это не обязательно. Допустимы и круглые (но тогда объекты необходимо разделять запятой) и квадратными (тогда объекты допускают параллельное вычисление). Так в цикле
For I:=0 To N
{ Dim L:=0: Integer
Name=: "Цикл демонстрационный"
L+:=I
}
Оператор For тоже является объектом класса For. Здесь то, что в фигурных скобках является реализацией этого объекта и состоит в том, что мы добавляем в этот объект свойство L. Как и любой объект этот объект может иметь свойство Name и этому свойству присваивается значение "Цикл демонстрационный". Вот заметим отличие. Значения свойств присваиваются последовательностью знаков "=:". Далее, к новому свойству L суммируется значение I. И для этого присвоения применяется знак ":=". Этот оператор "L+:=I" представляет собой фунциональное наполнение объекта.
Заметим, что этот объект класса For и с именем "Цикл демонстрационный" можно будет найти как в оттранслированном виде и использовать для анализа при сопровождении и оптимизации, а в тексте программы можно из него выйти по имени оператором Exit "Цикл демонстрационный".
Т.е. на вид реализация ничем не отличается от обычного создания формы с присваиванием значения ее размеров.
New F: Form {Size=:20;150 }

Хотя это коренным образом отличается от такого варианта.

New F: Form
Size:=20;150
В первом варианте значения свойств Size будут сохранены в формате представления объекта класса Form и соответственно с этими значениями будет создан. Во втором примере эти значения будут присвоены командами Move при выполнении.
Здесь продемонстрирована реализация объектов первого уровня создаваемым синтаксисом языка. Реализация понятий и логического представления осуществляется в других скобках, и реализацию значений см. документ.
 
Одной из причин того почему «массы» не используют язык Haskell, является то, что люди считают, что их язык делает «всё, в чем они нуждаются». И конечно он делает, потому что они думают «на языке Blub». Языки программирования — не технология — это образ мышления. И если вы не думаете на языке Haskell, вам будет трудно увидеть полезность языка Haskell — даже если язык Haskell предоставит вам возможность писать приложения лучше за короткий промежуток времени.

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

Собственно, разрабатывать что либо, вам никто не запрещает, просто может оказаться так, что это уже давно изобретено до вас и вы просто потеряете время. Lisp - это очень плохой пример. Освойте на начальном уровне Haskell, например для начинающих могу посоветовать
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
. Некоторые недостатки процедурной парадигмы и ООП вам известны, видите ли вы недостатки в ФП и в чем? Что позволяет ваш язык, что не позволяет реализовать ФП?

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

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

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

Возможность и эффективность решения это разные вещи. Вы, должны были слышать о недетерминированых задачах, о неразрешаемых..Или о не предсказуемости логического разбора. Так вот это все может случиться. Я у себя предусмотрел двойственную природу объекта. Возможны одновременно два вида реализации логическая и императивная. Так что я не сотворял себе кумира в виде фунционального или логического программирования. Все в руках программиста.
Да. И возможность распараллеливания у функциональных языков и практическая реализация этого распараллеливания это разные вещи.

А почему никто не вспомнил, что в куче языков это нормальная возможность? Возьмите жабаскрипт - там любому объекту, в том числе и чужому, пороженному неведомым мне классом, я могу докрутить любые методы и свойства. В перле тоже самое...
Может в чем-то ошибся? Приведи примерчик
 
Может в чем-то ошибся? Приведи примерчик
Т.е.? Вы не знаете как в джаваскрипте к конкретному объекту добавить произвольный метод и свойство? Ндя... Вы меня разочаровали, уж основные языки в разных областях надо было изучить.
Жабаскрипт:
var obj1 = new Object();
var obj2 = new Object();

obj1.my_width = 68;
obj2.my_height = 652;

obj1.get_my_width = function()
{
return this.my_width;
}

obj2.get_my_height = function()
{
return this.my_height;
}

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

Я вам указал, что все особенности вашего языка уже реализованы в ФП. С ФП вы не знакомы, я еще раз настоятельно рекомендую это сделать. А то боюсь следующим вашим трактатом будет архитектура универсального вычислителя.

Да. И возможность распараллеливания у функциональных языков и практическая реализация этого распараллеливания это разные вещи.

Опять же, как вы можете делать выводы не имея представления об ФП?

Вы приводили в качестве достоинства своей концепции возможность распараллеливания циклов. Что бы вы понимали, эта самая примитивная возможность уже с десяток лет доступна даже в С/С++

#pragma omp parallel
{
#pragma omp for
for(int i = 0;i<N;i++)
{
val += sin(float(i)) * cos(float(i)) + tan(float(i));
}
}

Расширяйте свой круг знаний, находите недостатки в существующих парадигмах и устраняйте их, вот конструктивный путь, иначе - это шаманство.
 
Останнє редагування:
Мне не нравится сам тон. Даже неприятно отвечать. Ребята, ну скромнее. Отвечу коротко, ибо надоело. Думаю будет непонятно, ночто б не молчать. В jave все свойства. У меня есть разница. Свойства и методы, это разные вещи. Это принципиально!!! И дело не только в том, что можно сделать, но и насколько эффективно. Задумался какой ценой, сделано ото, что ты привел как пример? А это как раз динамическое присвоение. У меня его нет.
С ФП знаком где-то с 82-83 года.. Как вышла книга про Lisp. Познакомьтесь с Prolog. Там тоже много интересного. На пример вообще нечего ответить. А что отвечать? У меня это общая концепция группирования объектов, а здесь частный случай. Так вы про группирование так и не прочитали? Хотели бы что б я сделал так же? Или к чему пример? Разговариваю как с глухими. Говорю почитай и пойми разницу.. Но чуствую вопли в никуда. Начинает надоедать.
 
Мне не нравится сам тон. Даже неприятно отвечать. Ребята, ну скромнее. Отвечу коротко, ибо надоело.

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

С ФП знаком где-то с 82-83 года.. Как вышла книга про Lisp. Познакомьтесь с Prolog. Там тоже много интересного. На пример вообще нечего ответить. А что отвечать?

В этих языках нет реализации многих концепций современной ФП: рекурсивных типов данных, типов классов, монад, моноидов... Поэтому в настоящее время общепринято в качестве стандарта ФП рассматривать Haskell. Нет, вы конечно можете закрыть глаза на мировой опыт, но тогда не вижу смысла в обсуждении, пишите для себя и радуйтесь.


У меня это общая концепция группирования объектов, а здесь частный случай. Так вы про группирование так и не прочитали? Хотели бы что б я сделал так же? Или к чему пример? Разговариваю как с глухими. Говорю почитай и пойми разницу.. Но чуствую вопли в никуда. Начинает надоедать.

Я вам задал три четких вопроса:
Какова актуальность решаемой вами задачи?
Какова связь с существующими парадигмами?
Какова новизна полученных результатов?
Это те вопросы, которые вы в первую очередь должны были осветить в своем трактате, что бы не только читатель, но покрайней мере вы понимали, каково преимущество использования вашего языка.

Я пока ничего нового не увидел. Побольше примеров.
 
Видимо читать большой документ тяжело. Я говорил что язык можно изучить за 2-3 дня. Сейчас я это сделаю. Тогда будет яснее. Побудило меня к этому описание лексики языка Haskell. Сами убедитесь насколько мой подход проще. Представление языка Lada будет сделано тремя-четырьмя короткими постами. Не формально. Формальные определения в документе. После каждого попрошу задавать вопросы. Пост первый о правилах написания текста. Напомню, что это не обязательно программа. Просто документ.
Итак:
1. Текст состоит из объектов-знаков. Каждый знак (как и любой объект) имеет свои свойства, и потому может выглядить по разному. Ну, шрифт, цвет и прочая фигня.
2. Текст может содержать текст. Т.е. допускается вложенность текста. Это, может быть прямая речь или то, что мы в программировании называем текстовая строка. А по большому счету это то, что мы хотим как-то выделить как самостоятельную смысловую единицу. Текст выделяется открывающей и закрывающей текстовой скобками « и » соответственно. С этой точки зрения сам документ можно считать текстом в котором текстовые скобки по умолчанию отсутствуют. Например, «Каждый охотник желает знать, где сидит фазан». Более наглядно в документе. См. пример 1.2.

3. Имена. Имена могут быть просто словом т.е. конкатенацией букв (и только букв) от 1 до 40, и названием. Название, это любая совокупность знаков в именных скобках. Знак «"» назовем именной скобкой.
Примеры имен:
Вася
"Большая перемена"
"Б№;«"»%"

Единственная проблема, как отличить одну объект-букву (или знак) от слова или значения этого знака. Ее необходимо взять в текстовые кавычки (или скобки), например, так «A». Несмотря, на то, что таким способом выделяется группа текст, вполне естественно считать единственную букву в группе просто буквой. Именно так можно в тексте определить знак открывающий или закрывающей текстовых (именных и других скобок) скобок просто заключив их в текстовые скобки « и » . Напомню, текст допускает вложения.



Ну, вроде совсем чепуха. Но, уже есть на что обратить внимание. Вот рассмотрим слово «Вася». Это, понятна лексема. Т.е. самостоятельный объект состоящий из объектов-букв (со своими свойствами). Или допустим в тексте встречается такое значение 3,14. Это же не просто конкатенация объектов-цифр, а объект-значение. Эти новые объекты появились в результате лексического анализа и обладают собственными свойствами как и любой объект (в том числе и могут обладать значением свойства Name).
Для начала достаточно. Единственно, что замечу для всех этих объектов необходимо иметь текстовые средства для изменения их свойств (и функционального наполнения) и это средство называется реализация. Никого не удивишь тем, что редактировать свойства объектов-букв можно редактором (кнопочками и прочими делами редактора). Это очевидно, но у меня это частный случай общего подхода к редактированию объектов. О котором позже. Первично представление объекта и его реализация.

PS. Знаки "перевода строки" и прочие, должны иметь собственное графическое представление. Будучи заключенными в текстовые скобки их обработка исключена.
 
По сути свойства и методы добавляются явочным порядком. "Извините, что обломал кайф императору" (с) ;)

Кстати да, я бы сюда добавил еще LUA скрипты, в котором добавление свойств и методов уже инстанцированному объекту это стандартная ситуация.

Вот пример на LUA скрипте:
Код:
local obj1 = { x=1; };   -- создали новый объект obj1 у которого есть свойство x и присвоили этому свойству 1

local obj2 = { y=2; };  -- без коментариев - второй объект

obj1.mySubObj = obj2; -- создали у готового объекта свойство mySubObj и присвоили ему объект obj2

obj1.myNewFunc = function(param1, param2) return param1+param2; end -- добавили в существующий объект новую функцию

по сути классов вообще нет, можно создавать пустой объект и наполнять свойствами после создания:
Код:
local obj1 = { };

obj1.x = 1;

obj1.myNewFunc = function()
   for i=0,3 do
      print(string.format("Hello world! %i", i));
   end
end

obj1.mySubObj = {};
obj1.mySubObj.y=1;

так что никакой проблемы нет
 
Останнє редагування:
Давайте не разгоняться в глубину.. Начнем с простого.. Вот по последнему посту все понятно? Оставим пока все крутое.. Разберемся с тем, что и как мы пишем.. Что это такое.. как там с объектами.. Постепенно.. Не спеша.. Если вдумчиво отнесетесь, то дальше материал пойдет легче.. Ведь не сложно... Вопросы только по моему посту.. Плиз.. Потому как это простое и есть основа..
 
Элементарно, Ватсон! Допустим предметная область описание насекомых, которые засушиваются и складываются в ящики..Ну и, вся эта кухня постоянно пополняется новыми экспонатами, появляются новые классы насекомых, и размещаются они в ящичках-полочках (простите импровизирую. Не знаю как это происходит). И все это надо отслеживать. Причем одному получить, и посмотреть, другому.... Вообщем база данных типа..
Так вот вы представили как будет выглядить программа на любом из C. Java будет не совсем удобной на могй взгляд.. Представьте сколько мозго..бки уйдет на выбор формата хранения..а сколько радости доставит добавление нового класса... И загрузку и хранение.. И сама система управления.. Это ж как то надо представить визуально.. Сортировать, редактировать..
В системе Lada будет достаточно составить библиотеку классов и все.. Редактирование универсальное. Формат универсальный.. Создание новых объектов и их описание универсальное. Даже обучать никого не надо. Создал класс Бабочек.. и заполняй документ объектами.. А потом сохрани.. Тут встречается неразрешимая проблема в других языках.. Один объект обладает свойством, которого нет в классе. Так и хрен с ним.. Мы создаем объект этого класса и добавляем (а можем и удалить.. Так, например, пингвин принадлежащий классу птиц, не имеет свойства "летать".) ему недостающее свойство, которое присуще только этому объекту!!! И присваиваем этому свойству значение. И вся система продолжает работать как ни в чем не бывало.

Я все никак не могу понять идеологию языка. Вот мы взяли и создали документ, создали в нем библиотеку объектов, целую кучу объектов и все их прописали в редакторе. А что с ними потом делать? Как программа организована (для примера в С - функция main), если как вы писали выше тут нет приложений. Мне лично куча объектов, хранящихся в файле не очень интересна, пока я не понимаю как ими пользоваться.
 
Похоже, что ТС никогда не держал в руках документ-ориентированной СУБД. Например Лотус Домино. Он бы сильно удивился тому, как там работают с документами.
 
Похоже, что ТС никогда не держал в руках документ-ориентированной СУБД. Например Лотус Домино. Он бы сильно удивился тому, как там работают с документами.
Я смотрю тут уже манечка считать себя самым образованым, а собеседника самым тупым. Ничего плохого не вижу в том, что чего-то не знаю. Плохо, это когда нет желания узнать. Это я к тому, что возьми и удиви. Что сказать то хотел?
А теперь по базам данных в Lada. Таблицы это фактически группа объектов одного класса, в которой каждый столбец (домен) это свойства, а каждая строка - объект.
Отсюда следует интересная деталь. Так как при создании БД рекомендуется нормализация, то в этой формулировке можно рекомендовать нормализацию классов. По тем же принципам.
По языку продолжать не буду, пока не увижу что предыдущий пост усвоен.
 
Я смотрю тут уже манечка считать себя самым образованым, а собеседника самым тупым. Ничего плохого не вижу в том, что чего-то не знаю.

Помоему этот пост говорит достаточно о ТС чтобы не воспринимать в серьез ни его, ни его "язык". Да я почитал доки, это чтото с чемто (всмопнился сауспарк где сумасшедший "ученый" создавал существа с четырьмя жопами).
 
Помоему этот пост говорит достаточно о ТС чтобы не воспринимать в серьез ни его, ни его "язык". Да я почитал доки, это чтото с чемто (всмопнился сауспарк где сумасшедший "ученый" создавал существа с четырьмя жопами).
Да. Я, наверное, закрою тему. Это не для здесь. Всем, кто хоть пытался, спасибо.
 
А теперь по базам данных в Lada. Таблицы это фактически группа объектов одного класса, в которой каждый столбец (домен) это свойства, а каждая строка - объект.

Это называется object-relational mapping и реализовано даже для императивных языков.

Batu, ну правда же, пока ни одной действительно революционной концепции озвучено не было. Все, что мы пока узнали о LADA, есть в уже существующих языках программирования.

Забейте на неконструктивную критику, но для тех, кому действительно интересно, постарайтесь написать некий "elevator pitch", отвечающий хотя бы на три вопроса, предложенных Orshansky:

- актуальность решаемой вами задачи;
- связь с существующими парадигмами;
- новизну полученных результатов.

По одному-двум предложениям на вопрос.
 
Я смотрю тут уже манечка считать себя самым образованым, а собеседника самым тупым. Ничего плохого не вижу в том, что чего-то не знаю. Плохо, это когда нет желания узнать. Это я к тому, что возьми и удиви. Что сказать то хотел?
А теперь по базам данных в Lada. Таблицы это фактически группа объектов одного класса, в которой каждый столбец (домен) это свойства, а каждая строка - объект.
Отсюда следует интересная деталь. Так как при создании БД рекомендуется нормализация, то в этой формулировке можно рекомендовать нормализацию классов. По тем же принципам.
По языку продолжать не буду, пока не увижу что предыдущий пост усвоен.
Плять. Ты уж извини малость окуел. Тебя который раз подряд тыкают носом в то, что ничего нового, интересного и полезного ты не изобрел. С примерами, объяснениями и даже кусками кода. А ты выебуешься на тему "усваивайте мои посты".

Да. Я, наверное, закрою тему. Это не для здесь.
Да куда уж нам, сирым... А кстати, для "где"? Неужели в Кащенко уже есть интернет в каждой палате? :D

Краткое резюме: нихуя нового не изобретено. ТС имеет примитивное представление об области, основы которой он собрался потрясти. Академические умствования являются не более чем "постной..." (с).
 
Кстати

В феврале-марте в универе на мех-мате буду проводить семинары. Для обсуждения. Уровень обязателен.

Вас не пугает, что на семинаре-обсуждении вам будут задавать такие же вопросы?
 
Кстати на семинар я бы сходил :). ТС Когда? и Где?
 
Назад
Зверху Знизу