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, который я предложил как черновой, мне самому трашно не нравится. В общем, голову ещё есть над чем поломать.


D[u]fa   (2008-01-08 19:09:00) [21]

дык о том речь и идет. что как предлагает Владимир не объявлять локальные переменные. Я то знаю что мне надо, а вот компилятор телепатить будет что ли =)


Efir   (2008-01-08 19:05:00) [22]

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


D[u]fa   (2008-01-08 17:39:00) [23]

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

к примеру сделаю я:

i := 0;
и потом то то типа .....(i, sizeof(i));

и как он поймет что мне надо именно Integer тот что 4 байта?)

или придется отказаться от таких конструкций?


Vladimir Kladov   (2008-01-08 17:14:00) [24]

English (new) version of the SOL specification is available at:
http://kolmck.net/sf/SOL-EN-description.htm


Vladimir Kladov   (2008-01-08 17:03:00) [25]

Вставил ещё кусочек текста.

У современного поколения программистов отсутствие необходимости объявлять переменные способно вызвать страх уровня фобии. Причина, видимо, в том, что они с самого начала своей программистской карьеры оказались в ситуации чрезвычайно "скользкого паркета". В современных объектных языках вроде Object Pascal (Delphi) или C++ ситуация действительно такова, что стоит убрать правило, заставляющее объявить простые локальные переменные, и "ноги повиснут в пустоте" практически без опоры. Первопричина - в таких правилах определения областей видимости имён переменных, полей структур, при которой из одного только имени нельзя сказать, является ли оно локальной, глобальной переменной, параметром функции, константой, именем процедуры, метода объекта или полем класса (если текущая функция - это метод класса). И ничего нельзя сказать до тех пор, пока не будет обнаружено ближайшее сверху (в области видимости) объявление.

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

Но стоит в методе устранить всего лишь обращение к полям своего объекта "по умолчанию", и возможность обращаться к глобальным переменным без указания спецификации модуля (в виде МОДУЛЬ.ПЕРЕМЕННАЯ), и запретить опускать скобки при вызове процедуры или функции даже в случае отсутствия фактических параметров ( foo() ), и у нас остаются только именованные константы, локальные переменные и имена параметров, именуемые простыми (а не составными) идентификаторами. Константы легко выделить, например, соглашением об именовании их только в верхнем регистре (например PI, или INVALID_HANDLE_VALUE),  у параметров есть описание в начале функции, и остаются только локальные переменные. И зачем нам тогда их предварительно объявлять? "На память" о прошлых фобиях "скользкого пола"?


Vladimir Kladov   (2008-01-08 15:06:00) [26]

Просто вы не писали на Фортране. Отсутствие объявления - это то же объявление. Первое присаивание - чем хуже объявления? А я не вижу смысла и меня раздражают объвления заранее. Какой в них толк для простых переменных, за десятки строк от места использования?


Yhrik!   (2008-01-08 13:54:00) [27]


> Меня "вдохновляет" на отказ от объявлений

я меня пугает...
всё-таки мож добавить хоть какими-нибудь директивами препроцессора (хоть как-нибудь!), и при желании сообщение "не объявленная переменная", пусть даже ошибки не будет возникать.


Vladimir Kladov   (2008-01-06 21:19:00) [28]

Я не знаю как там в мумпсе, у меня изоляция данных (между потоками) - в одном адресном пространстве. (Т.е. это всё-таки потоки а не процессы). Поэтому передача большой порции данных из одного потока другому практически ничего не стОит. Данные остаются на месте, передаются sole-указатели и sole-деревья (сложные структуры можно "разобрать" на sole-дерево перед передачей, потом при приёке снова "собрать").

Что касается отладки, то например Вирт имеет по этому поводу очень интересное мнение. Он читает, что пошаговый отладчик чрезвычайно вреден, и именно отсутствие такой возможности приводит к написанию безошибочных программ, не нуждающихся в отладке. Мнение, вообще, несколько спорное. Но для многопоточного приложения, похоже, пошагоая отладка, и правда часто настолько затруднена, что пошаговый отладчик - как тот горшочек с мёдом: вроде бы и есть, а как бы уже и нет его.


misha_shar   (2008-01-06 16:08:00) [29]

Хотел высказаться по поводу организации потоков. По моему
принятая в описании схема правильна. Правда в терминах ОС это уже не
потоки а задачи. С моей точки зрения данные в потоке безусловно должны
быть локализованы. Такая схема применяется в MUMPSe и она себя

полностью оправдывает. Там есть команда JOB которая запускает поток.
А необходимые данные передаются как фактические параметры в процедуру.
В MUMPSe запуск потока и вызов процедуры почти ничем не отличаются.

Кстати по моему и локализовать данные можно тем же механизмом что и при
вызове процедуры в стеке. Вот только удобного механизма отладки потоков

я не встречал, а проблема серьезная.


Vladimir Kladov   (2008-01-02 11:11:00) [30]

С Новым Годом!
В новой версии описания вводится принцип синтаксического нигилизма: теперь блоки могут оформляться в 4 разных стилях: SOL, Ада-Оберон, Алгол-Паскаль, Си-Ява-Ди. Но это всё синтаксический сахар. Главное: пришлось добавить понятие параметризованного типа. Правда, ограничился одним параметром (тоже типом) Понадобилось чтобы можно было определить List(Data) от произвольного типа Data. Кажется, это называется статический полиморфизм типов. Ну лишь бы работало, как называется - не важно.

Большое описание стало великовато, разбил на 2 части. В принципе, сейчас и краткое вполне подробно, достаточно для основного значкомства:
http://kolmck.net/sf/SOL%20-%20short%20(but%20not%20very%20short)%20description.htm

(в архиве оно тоже есть).


Vladimir Kladov   (2007-12-28 16:58:00) [31]

Если я не ошибаюсь, в чистом C так сделать нельзя всё-таки. Но объявлять можно в блоке, а не только в начале функции. И при этом (что глупо, и точно приводит к ошибкам, создавать новую переменную с таким же именем). Хотя я могу и приврать: давно на С серьёзно не работал.


D[u]fa   (2007-12-28 13:44:00) [32]

хоть на СИ и не пишу, но мне в нем нравится что можно объявить переменную и сразу присвоить ее..


Vladimir Kladov   (2007-12-27 18:53:00) [33]

Меня "вдохновляет" на отказ от объявлений опыт самого успешного языка всех времён - Фортрана. Я сам писал на Фортране, и чесное слово - никаких проблем из-за того, что не надо было объявлять простые переменные (массивы надо было, конечно) - не было вообще. Было только правило присвоения типа переменным по умолчаню: всё, что начинается на I,J,K,L,M,N - целые, прочие - вещественные. Раз у меня таких правил нет, нужны немного другие. Вот я и ввожу - тип переменной - по тому что ей присваивается, какими операциями с ней манипулируют, в каких случаях она используется.


Vladimir Kladov   (2007-12-27 15:28:00) [34]

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

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

С циклами, я так понял, возражений нет: параметр цикла в функции может быть только параметром функции и использоваться на чтение, но внутри цикла может быть присвоен тремя способами:
i LOOP = выражение;
CONTINUNUE i LOOP = выражение;
BREAK i LOOP = выражение;

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

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


D[u]fa   (2007-12-27 09:08:00) [35]

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


GMax   (2007-12-26 23:46:00) [36]

>Vladimir Kladov ©   (26.12.07 16:05) [110]
>>myvar = 10, в другом mivar = 11
>такие вещи решаются просто. Даже если вы используете нотепад вместо >редактора, который должен предлагать подсказки. Если после второго >присваивания вы так и будете использовать mivar, то ошибки и нет.

а если ошибка случилась два раза ? например через copy/paste ? или еще каким способом ? в длинных текстах вполне легко такое случайно сделать.

короче, это к неоспоримым достоинствам нельзя отнести мне кажется


GMax   (2007-12-26 23:42:00) [37]

homm ©   (25.12.07 21:39) [109]
>> [108] GMax   (25.12.07 21:36)
>> в пнях еще кажется для этого даже спец-опкоды ввели, настолько
>> удобно.
>Ага, ввели и никому не сказали :)
RTFM :-)  kol.pas USE_CMOV
правда введен все же с P6, поэтому Кладов не рекомендует... вплоть до неподержки в будущем языке ;-)


vpbar   (2007-12-26 20:39:00) [38]

>>Vladimir Kladov ©   (26.12.07 20:09) [115]
Владимир, я это "Компиляторы С есть для всех платформ" тоже  знаю  "Но PC - не единственная платформа" и это тоже.
Если можно было бы генерировать платформенно-независимый С-код, то зачем всякие Java. Писали бы на С, если он такой кросплатформеный. (Хотя можно, конечно #ifdef и вперед).  
Да и реализовывать исключения , имхо, придется для конкретных платформ.

Вообщем, прошу прощения, что лезу. В дальнейшем буду только читать.


Vladimir Kladov   (2007-12-26 20:09:00) [39]

да при чём тут асм вообще, ПЦ в частности и Win32 тем более? Надо же генрировать платформенно-независимый C-код на выходе. Как работать с SEH на асме, я давно знаю.


vpbar   (2007-12-26 19:45:00) [40]

>>Vladimir Kladov ©   (26.12.07 18:20) [113]
Вот и я о том, что лучше С зверя нет. В данном случае, в качестве промежуточного языка.  А поддержку исключения и в С вроде можно сделать вон в асме http://www.wasm.ru/article.php?article=Win32SEHPietrek1делают же.


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

Наверх

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