Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SOL (Соль) = Simple Objects Language


Страницы:   1 2 3 4 5 6 7 8

Vladimir Kladov ©   (2007-12-15 22:08:00) 

http://kolmck.net/sf/SOL=IdealSpade4Programmer.rar

Ну хорошо, пусть будет отдельная ветка.
Сразу ответ D[u]fa на
зачем каждый раз писать do, почему б нельзя объявить массив как arr[... , ..., ...]


Мы же пишем begin, и нормально. Анализ текста значительно упрощается. Дело даже не в компиляторе. Человеку тоже проще, если есть открывающая скобка блока. Есть ведь и эквиваленты, кому само слово DO не нравится (и END).

Массив не надо так объявлять. Я долго думал, почему. Например, во избежание непонимания того, что если есть объявление [3,3,3], то можно обратиться как [i,j] и получить элемент-масив из 3 элементов. Если можно объявлять только [3][3][3], согласитесь, такой проблемы вообще нет. В конце концов, ][ ничем не хуже , ,но видно этот "символ" лучше.

Спрашивайте ещё. Я пока пытаюсь "победить" многозадачность (точнее многонитевость). Изучил адовские рандеву, мониторы модулы-2, активные объекты эктив-оберона - ничего мне не нравится пока. И вообще. Механизм защиты CATCH, который я предложил как черновой, мне самому трашно не нравится. В общем, голову ещё есть над чем поломать.


AndreyRus   (2007-12-20 11:40:00) [121]


> С ростом объемов данных разницав быстродействии еще увеличивается.

:)


misha_shar   (2007-12-20 11:37:00) [122]

Насчет ссылок. Чтобы понять почему их нет. Надо немного разобраться
с системой управления данными в языке. Данные управляются с помощью
B-дерева. B-дерево это структура блоков в памяти или на диске. И к
логической структуре хранимых данных никакого отношения не имеет.
В это дерево можно записывать любые данные индексированые или нет
и вообще любые. B-дерево не вникает в содержимое данных. С увеличением
данных оно растет сбалансировано и все. Единственное требование
они должны быть поименованы и эти имена должны быть уникальны.
Дерево хранит даные выдает их по требованию и если их нет то
возвращает пустую строку или удаляет их по требованию. Причем
данные могут находится в различных местах и это место можем в
любой момент измениться. Поэтому адресная ссылка на данные бессмыслена.
Данные в дереве хранятся только те значение которым присвоено.
Пустые значения не хранятся.
Обработка ошибок. Обработка ошибок в MUMPSе в зачаточном состоянии.
Острой необходимости в ней нет. Во время исполнения встречаются
как правило только 2 ошибки. 1-<UNDEF> неопределенная переменная
эта ошибка может быть подавлена в параметрах языка. И <DIV> деление
на 0. Эта ошибка подавлена быть не может ее надо обрабатывать
с помощью обработчика ошибок. Обработчик сделан просто и со вкусом.
В системную переменную пишешь точку входа в обработчик ошибок и все.
При возникновении ошибки управление передается в эту точку. Писать
блоку try finale не в стиле MUMPSa так как программа может перейти
на любую строку а блоки это плохо переносят.
Насчет бытродействия. С и MUMPS языки с различными возможностями.
В С нет встроенной базы данных. А с любой другой С будет на порядки
медленней MUMPS. В рекламных материалах InterSystem приводится
сравнение MUMPS с Ораклом. Так они считают что на больших данных
Оракл в 200 раз медленнее. Но реклама есть реклама. Из моего опыта.
Как только появились персоналки у меня небыло реализации MUMPSa и я
написал бухгалтерию в Delphi в качестве базы использовав InterBase.
Быстодействие меня не устроило и я с помощью обработок на сервере
попытался его улучшить. Мне это удалось в 2 раза. Потом в Москве
Фетисов написал реализацию MUMPS. И я на ней переписал бухгалтерию.
Так вот без всяких оптимизаций мое приложение на одних и тех же
данных работало в 20 раз быстрее. С ростом объемов данных разница
в быстродействии еще увеличивается.


homm   (2007-12-20 10:47:00) [123]

> [28] misha_shar ©   (20.12.07 07:25)

Очень охото посмотреть на тесты производительности по сравнению с любым известным Вам языком.


D[u]fa   (2007-12-20 10:34:00) [124]

т.е ни одного проекта вы не назвали.. конкретногопроекта...

вобщем не стоит тему про SOL превращать в тему про MUMPS.


heilong   (2007-12-20 09:09:00) [125]

А лично мне нравиться идея написания компилятора для SOL, только вот на сколько производительным будет сгенерированный код? мне кажется это еще вопрос открытый.


misha_shar   (2007-12-20 07:25:00) [126]

Я с 70г работаю на MUMPSe и только ему я бы даверил общее
управление всей электростанцией. Более надежной и простой системы
в мире не существует. Объем кода на MUMPSe может быть в зависимости
от задачи меньше на порядок. И его намного легче сопровождать.
А вот обработку прерываний от атомного блока я бы вынужден написать на
С в QNX системе. Потому что нет реализации MUMPSa в реальном времени.
Эта система разделения времени. Она очень надежна и хорошо обслуживает
много пользователей. Но это проблемы конкретной реализации а не языка.
Теперь более подробно о конструкциях языка. И язык С и PASKAL это
типизированые языки а MUMPS нетипизированый язык.
И подходить к ни с одними и теми же мерками нельзя.
Это 2 разных мира. Объект это модель и она должна существовать
прежде всего в голове. И на разных языках описание оъекта будет
выглядеть по разному. И бессмыслено в нетипизированом языке искать
описание объекта. Его описания там нет. Но это не значит что нет
объектов. Они есть. В MUMPSe объект это дерево. Любой объект должен
обладать 3 мя свойствами.
1,Локализовать переменые внутри объекта.
2.Обеспечить наследование.
3.обеспечить полиморфизм.
Всеми этими свойствами деревянная структура обладает от рождения и
никаких дополнительных ухищрений не требует. Правда в дереве нет
методов. Но это не проблема. Каждому дереву можно по имени сопоставить
модуль с программами обработки. Хотя в MUMPSe я никогда этого не
делаю за ненадобностью. Программы обработки я пишу всегда для
выполнения определенных функций над любым деревом.
Теперь по поводу программ. В MUMPSe я работаю всегда в определенной
области. Каждая область локализует данные и программы. В каждой
области они свои за исключением общей библиотеки. То что в Pascale
называется модулем (Unit) в MUMPSe называется программой. Хотя
точнее было бы назвать это блоком кода. То что в Pascale программы
и фунцкции здесь точки входа. В принципе в блок можно войти с
любой строки кода. Один и тотже программный блок может
использоваться поразному и как программа и как функция и как
продолжение программы(если точка входа не имеет передаваемых параметров).
Все зависит каким образом вы к этому блоку обратились.
Если по команде DO то это программа, если внутри команды SET то это
функция, если по команде GO то это продолжение вашей программы.
Все зависит от конкретной потребности.
Теперь о том что вы первый раз о нем слышите. Вообще то
незнание это не аргумент. И если все (в том числе я) работают
на Windows это не значит что это хорошая операционная система.
Более того это плохая ОС. Этот язык распространен в США где и
был разработан, в Англии, Австралии, Бразилии и других странах СНГ.
В Союзе существовало общество MUMPS которое возможно существует
и до сих пор.Это собщество сегодня вращается вокруг представительств
InterSystem в Москве и Хабаровске. На MUMPSe активно работали
в Москве, Ленинграде,Воронеже,Новосибирске,Томске,Хабаровске
,Владивостоке. Издаются книги. Не распостранен язык из за
безобразного менеджемента. Но к достоинствам языка это не
имеет никакого отношения. Язык конечно имеет недостатки но они
все устранимы при правильном подходе. Где используется MUMPS.
Все военные госпитали США по всему миру работают на этой системе.
Хотя реализованных проектов на нем очень много. Я сам разрабатываю
систему бухгалтерского учета с 80годов. Сейчас уже 5 версий этого
комплекса у нас функционирует.У меня серверная часть
написана на MUMPSe. Есть заказчики которых мы необслуживаем
уже много лет а они до сих пор работают на этой системе и она
надежно функционирует.


AndreyRus   (2007-12-20 00:20:00) [127]


CACHE

O subj я ранее читал достаточно много, концепция мне очень понравилась, хотя в живую я с ним не встречался. Проблема его нераспространенности, равно как и SOL в том, что я писал ранее...


D[u]fa   (2007-12-19 19:37:00) [128]

misha_shar, назовите крупный проект созданный на нем, просто язык с 60 годов... а слышу первый раз от вас здесь =)


Vladimir Kladov   (2007-12-19 19:21:00) [129]

У вас есть бенчмарки, доказывающие, что код мампса ничем не хуже по скорости кода С# хотя бы (считая что С# вдвое уступает С++)? Да читал я описание. Есть проекты размером больше 100 000 строк? Никаких дедлоков нет, исключения обрабатываются, один ажур спложной? Вы сами положа руку на сердце доверите программе на мампсе управление атомной электростанцией? (Я даже и Аде не доверяю, посл более близкого знакомства. Хм, софт для ракеты Ариан-5 был на Аде, а взорвалась она все-таки, в основном не столько из-за софта, правда, но в конечном счёте из-за него, родного). Вот не могу я поверить, что ЯП моей мечты давно существует, но все почему-то пользуются чем угодно, только не им. О Мампсе от вас первый раз услышал. Так не бывает. Если язык так хорош, как вы говорите, все уже давно выкинули бы на помойку и С/C++ и все #-языки, и Паскаль/Модулу/Оберон, и писали бы себе на мампсе. И не придумывал бы D, Java и прочая с ними.


misha_shar   (2007-12-19 17:16:00) [130]

Об'ект по вашему это не структура? Типов данных там действительно нет
в базовом языке хотя в объектах эта галиматья вся есть.  Дерево само
является структурой причем любой и динамически изменяемой. Когда я
разрабатываю приложение я проектирую дерево а затем навешиваю
программы обработки. Какого типа переменная неважно. Важно чтобы
там были данные и их можно было обработать. Хотел бы я знать какие
вычисления на MAMPSe нельзя сделать? Указатели в языке есть и они
реализованы косвенным синтаксисом и передачей параметров по имени.
Где вы там обнаружили файлы для меня загадка.


Vladimir Kladov   (2007-12-19 15:35:00) [131]

дело не в том что он интерпретатор компилятор тоже есть. Ну и что? В MUMPS нет нормальных структурных типов данных, модулей (файлы - это ещё не модули), указателей, ОО, шаблонов, ... . Я посмотрел примеры кода. Бэйсик это. Модерн, но Бэйсик. Или у вас есть сведения, что он может использоваться для эффективных вычислений?


misha_shar   (2007-12-19 11:56:00) [132]

А зря там много интересного.
MUMPS исторически был создан как язык интерпритатор. И в таком
виде существует до сих пор. Это связано с тем что некоторые конструкции
языка не поддаются компиляции в принципе. Таких конструкций 2.
Это косвенный синтаксис и команда XECUTE. В остальном все остальное
прекрасно компилируется. Последняя реализация языка это CACHE фирмы
InterSystem. В этой реализации применяется компиляция промежуточного
P-кода. Называть этот язык скриптовым у меня язык не поворачивается.
Это мощный развитый компактный язык программирования. Который на много
превосходит и С и Pasсal.  На этом языке построена бала операционная система
DSM-11. И язык выполнял все функции как языка так и операционной системы.
Это язык будущего. И вот почему.  В язык встроена
иерархическая база данных и она является неотемлемой частью этого языка.
База построена как B-дерево. (Кнут.3-том). Такое дерево строится на диске
и в оперативной памяти. Все переменные являются  деревьями на
B-дереве в памяти. При старте Cache оно создается при стопе все уничтожается.
Управление переменными осуществляет B-деревом в памяти. В любой момент
любая переменная создается и в любой момент удаляется. Никаких сборщиков
мусора и других обслуживающих программ не надо. Библиотека встроенных
функций состоит из 12 штук. Так возможностей у ней больше чем у библиотеке
в  Pasсal. Там кстати давно есть и функция аналогичная Parse. Но возможностей
у нее больше. Так как она может применяться как в правой так и в левой части.
И вырезать может любое поле. Изобретать свой язык не познакомившись
с MUMPSom это по моему идти в неверном направлении по давно
пройденному пути. Не нравится язык. Посмотри какие команды реализованы.
Как сделано управление переменными. Какая библиотека встроенных функций.
Я лично считаю что в MUMPSе самая развитая система управления данными.
Не имеющая аналогов в других языках. Команды NEW,KILL,ZKILL,SET,MERGE.
Есть книга по CACHE - Вольфганг Кирстен и др. Постреляционная
СУБД Cache 5 Об'ектно-ориентированая разработка приложений. Перевод с
английского.


Vladimir Kladov   (2007-12-18 20:50:00) [133]

S1 := 'Ятакидумал';
if S = S1 then

Вот в этом примере всё очень однопроходно. Я к Delphi  C/C++ отношусь именно как к навороченному макроассемблеру. Я от него уже не хочу ничего, спасибо за то, что уже есть. Но стало маловато.


Vladimir Kladov   (2007-12-18 17:14:00) [134]

А в Delphi получается, что типизированная константа - это вовсе и не константа даже

Ну да, при определённых настройках компилятора им можно присваивать значения.
А если используется модуль в котором такая константа должна использоваться как переменная, то настроки придётся включать для всего проекта. Глупость какая-то.


Vladimir Kladov   (2007-12-18 17:09:00) [135]

Basically, Mumps has only one data type: string, although it does allow integer and floating point computations as well as logical expressions.Мне кажется, дальше читать уже не надо. Меня скритовые языки не интересуют.


Sapersky   (2007-12-18 16:20:00) [136]

А в Delphi получается, что типизированная константа - это вовсе и не константа даже

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

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

Вы слишком многого хотите от компилятора, это же не C++ с его многопроходным монстром. И для эмуляции IFDEF вполне достаточно первого случая, хотя удобнее, конечно, не строки, а Boolean.


misha_shar   (2007-12-18 07:39:00) [137]

-------------------------------------
А если уже говорить о надёжности, то я сюда вкладываю очень много. Прога не должна зацикливаться, потоки не должны портить друг другу данные и влезать в dead-lock (а если влезли то должен быть способ распутать). Объекты должны сами себя убивать, а куча должна быть дефрагментирующаяся, чтобы прога могла работать практически вечно без перезапуска из-за сильной фрагментированности кучи. Но сборщик мусора мне не нужен, в его классическом варианте. Желательно максимум проверок отнести на этапы компиляции. Нужно средство тестирования, которое автоматически проведёт все нужные тесты после изменений (а не только те, про которые автор то бишь я в частном случае соизволил вспомнить после серии исправлений). Нужна параноидальность языка, избавляющая от параноидальности (или наоборотнедальновидности) программера, в общем. И при этом чтобы просто и без особых заморочек. Да, и ещё, всё это должно продолжать надёжно работать в условиях использования сторонних либ, написанных на довольно ненадёжном но увы распространённом С. Вы где-нибудь такой язык встречали? Вот и я не встречал.
--------------------------
А я встречал. И это уже давно работает. Все эти идеи давно реализованы
еще 70г. И сейчас существует и живет язык в котором это реализовано.
Велосипед изобретать можно но там это сделано лучше. Язык называется
MUMPS. Система в которой он реализован Cache даже продается книга
по этой системе на русском языке. В Москве есть представительство InterSystem. И на нем работают люди уже много лет Нет проблем с переменными в этом языке никаках. Все данные реализованы в виде дерева либо в памяти либо на диске. О возней с переменными в этом языке заниматься не приходится вообще. Надо записал в любую переменную надо прочитал из любой если там нет данных то возвращается пустая строка где надо удалил переменные. По завершению задачи все локальные переменные удаляются. Потоков тоже нет. Но есть многозадачность с поморщью команды JOB запускается подпрограмма. Все переменные всегда изолированы. Обмен осуществляется стандартными средствами. Блокировка переменных в языке команда LOCK. Это самый компактный и самый мощный язык.


D[u]fa   (2007-12-17 22:12:00) [138]

да ифдефы достанут кого угодно... но вот что б компилятор был нам обязан искать такое... лично для меня фантастика =)


Vladimir Kladov   (2007-12-17 21:40:00) [139]

Delphi так и делает, если константы нетипизированные.
Если бы этого было достаточно, мы бы не использовали {$IFDEF}. И в любом случае, слишком жёсткое ограничение. Типизированные константы - конёк Паскаля. И вообще-то, должно быть так, что константа - она и есть константа, типизированная она или не типизорованная. А в Delphi получается, что типизированная константа - это вовсе и не константа даже. А просто проинициализированная переменная. А, например, вот так:
const S = 'ABCDEF';
procedure TForm1.Button1Click(Sender: PObj);
var S1: String;
begin
 if S = 'Ятакидумал' then
 begin
   ShowMessage( 'Привет0' );
 end;
 S1 := 'Ятакидумал';
 if S = S1 then
 begin
   ShowMessage( 'Привет1' );
 end;
end;

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

А что, если это выражение, вызывающее функции? Я описываю класс функций, которые компилятор обязануметь посчитать на этапе компиляции. Остальные - в силу интеллекта, а эти - обязан.

Как меня достали эти IFDEF'ы, вы бы знали... С ними чтение кода превращается в какой-то кошмар. На оптимизацию положено столько труда, и всё из-за несовершенства языка. Код мог бы быть намного короче, яснее, понятнее. Да даже те же асм-вставки выглядели бы яснее и понятнее. Согласитесь, условная компиляция в Delphi - это просто костыль для хромого. Препроцессор для языка, который изначально вроде бы в препроцессоре и не нуждался. (Как бы).


Sapersky   (2007-12-17 19:20:00) [140]

Если требуется действительно ветвление на этапе компиляции, то при наличии хорошего компилятора, вполне должно быть достаточно обычного оператора "DO IF" с анализом в условии значений констант и константных выражений: качественный компилятор не должен генерировать код для ветвей, условие на которых вообще никогда не выполняется.

Delphi так и делает, если константы нетипизированные.


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо