![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SOL (Соль) = Simple Objects Language
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, который я предложил как черновой, мне самому трашно не нравится. В общем, голову ещё есть над чем поломать.
Vladimir Kladov (2008-07-07 16:56:00) [1]Я ещё посмотрел (спустя полгода), и в отличие от предыдущих набросков, изменений практически нет. Единственное, что надо бы выкинуть слово PUBLIC (всё публичное по умолчанию), и оставить HIDDEN, и писать его всё-таки перед каждым объявлением чего-либо скрытого. И вернуться к варианту, когда легальный доступ к скрытому идёт через составное имя HIDDEN. Типа MyObject.HIDDEN.Field1. Немножко меняется IMPORT, всё остальное пока так же. Еще есть смысл для конкатенации строк использовать оператор ',', а не ||. Или как вариант, или всегда. А так - в общем мне самому понравилось. Специально надолго отложить, чтобы самому этот сумбур попытаться воспринять как с листа.
А делать можно именно как компилятор в код на паскале, Си, С# - без особой разницы. Для большей скорости отладки можно делать паскаль-код, и подсовывать его Delphi-компилятору, а для конечной сборки делать выход, к примеру, на Си. Компилятор, который сразу делает маш-код - не самоцель. В общем, это явзык высокого уровня следующего порядка высокости, после Си или Паскаля, можно даже считать его case-средством.
Vladimir Kladov (2008-07-07 16:48:00) [2]Сокращать запись - себе дороже. Программу пишут один раз, а исправляют и подправляют, да и читают просто - десятки и сотни раз. Ну и зачем себе сложности устраивать? Посмотрите, как код пишется в C# - все пишется полностью и без никаких with. При этом при наборе текста чаще всего достаточно вообще одну буквц набрать, и наиболее подходящее имя высвечивается туту же, остаётся только enter нажать. Куда уже короче?
Смысл не в самой короткой записи, а в самом надёжном коде (и при том достаточно эффективном - хотя бы за счёт константых функций, т.е. выполнении на этапе компиляции значительной части проверок), я так понимаю. Вот этот фокус со вставкой строк на языках SQL и прочая - ни в каком C# даже близко не лежало. Может, там что другое предлагается, но я пока не нашёл, хотя немножко программировать на нём попробовал.
zldo (2008-07-07 10:41:00) [3]все хорошо в меру, но его отсутствие сделает синтаксис для такой замечательной возможности ООП как инкапсуляция громоздким...
Может быть ввести некоторые ограничения и особую фому записи? Например сделать невозможность вложенности этого оператора, а внутри его тела использовать специальную форму доступа с полям допустим что-то в духе:
LongLongTitle = object
field1,
field2,
и т.д.
и обращение
with LongLongTitle do
begin
.field1 = .field2
.field2 = myvariable
end;
т.е. не создавать оператором "область видимости" для переменных а дать возможность программисту делать сокращенную запись.
Vladimir Kladov (2008-07-02 15:53:00) [4]with способен только запутать, но никак не упростить. Кто видел, тот знает.
zldo (2008-07-02 14:48:00) [5]У современного поколения программистов отсутствие необходимости объявлять переменные способно вызвать страх уровня фобии.
То есть как я понял оператора with тоже не будет?
Не скажется ли такой подход на читаемости кода для случая если используются сложные вложенные структуры?
lse (2008-03-21 20:45:00) [6]Здравствуйте, Владимир.
Как успехи на поприще разработки нового языка программирования ?
DmitrtyAx (2008-01-19 02:54:00) [7]Владимир!! Успехов! Очень долго читал, и пока только общие впечатления - настоящая поэма! Правда основание слишком широкое - мультиплатформенность при всех заявленых опциях... Огромное количество библиотек для разных процессоров, отладка на виртуальной машине(ах)... Библиотеки под разные ОС... По сравнению с этим KOL - это совсем небольшой проект.
Вместе с тем, очень надеюсь, что появится первая реализация, которую можно будет поторогать руками.
Завтра продолжу читать, а то у нас тут уже семь утра...
Vladimir Kladov (2008-01-17 21:22:00) [8]Обновил. Добавилась параметризация модуля. Одной числовой константой всего, но лчно мне хватит.
Vladimir Kladov (2008-01-16 16:39:00) [9]Нет, не выброшу. Это можно сказать треть всех инноваций. Кстати, я язык переименовал. Хоть я и стремился сделать как можно проще (и надеюсь, что это вышло почти), надёжность дороже. Константные функции дают очень много, в том числе для надёжности. Ведь вычисление происходит (в случае константного аргумента) - во время компиляции, а не во время выполнения Недостаток времени выполнения в том, что до вычисления, при котором всё ломается, во время тестирования, может и не дойти. А если константа - вычислится всегда.
misha_shar (2008-01-16 16:05:00) [10]Выброси константные функции и всего то делов. В простом языке это не надо. Надо будет заведу переменную и вычислю.
speller (2008-01-14 13:54:00) [11]И хотя я уже к Дельфям не прикасаюсь чаще раза в пол года, стараюсь иногда заглядывать сюда по старой памяти. Владимир, я просто восхищен вашим трудолюбием и количеством наработок! Моё уважение. Желаю успехов в ваших начинаниях! )
Vladimir Kladov (2008-01-13 17:59:00) [12]Сложно потому только что я лично не писал до сих пор полных компиляторов с полных ЯВУ, в основном ассемблерами баловался (правда, один раз в молодости месяца за 3 получился рабочий компилятор с подмножества С в П-код, но это можно объяснить только невероятной наглостью: я же не знал что это так сложно). А так, в принципе, ничего сверх-сложного. Вполне сравнимо с Паскалем и наверняка проще С++. Пока пишу синтаксический анализатор. Даже 4 нотации не так сложны, как можно было бы подумать. Сейчас впереди вижу одну больую сложность: надо как-то реализовывать вычисление константных функций на этапе компиляции, т.е. фактически как бы компилировать код, вызывать его на выполнение, и результат использовать всё ещё в компиляторе. Получается, что эта часть компилятора - сама платформо-зависимая (код ведь должен быть выполнимым на той же платформе где запущен сам компилятор). Для полной платформо-независимости можно сделать свой П-код, специально для этого этапа, и эмулятор П-машины. Это если что.
D[u]fa (2008-01-13 10:42:00) [13]так много полезностей (судя по таблице), мне кажется сложно все это будет реализовать...
зы. имхо конечно
Vladimir Kladov (2008-01-11 22:25:00) [14]Не получилось сразу обновить. Сейчас только обновил.
Vladimir Kladov (2008-01-11 19:42:00) [15]Я думаю, вы меня поймёте лучше, если 7 лет подряд будете писать толькона С/C++/Java/JScript, потом лет 7 подряд толькона Паскале, а потом снова попробуете что-нибудь написать на С/C++. Становится невозможно не только писать, но и прочитать - проблема. Я же не заставляю учить ВСЕ4 варианта синтаксиса. Наоборот, делается конвертер, и каждый изучает только тот вариант, который ему ближе. Открываете чужой модуль в редакторе, а он автоматически перестроен к вашей любимой нотации.
Я обновляю. Also english version of a comparison SOL vs others available now: http://kolmck.net/sf/SOL_vs_others-EN.htm
Из последних изменений: [+] и другие знаки в квадратных скобках - для операций с массивами, аналогично (+) и т.п. - для переопеределённых операций. Кроме шаблонов функций. Дальше: тип результата :NIL для процедуры, т.е. функция, ничего не возвращающая, описывается явно. Дальше: все перегруженные функции должны иметь номер версии. Не перегруженные тоже могут иметь номер версии.
Да, запретил для безблочных вариантов цикла и IF вариант с пустым оператором. С пустым блоком - можно. И язык переименовал: Safe Objective Language. А то на Simple уже немножко не дотягивает. Но пока достаточно простой всё ещё.
Yhrik! (2008-01-10 21:41:00) [16]
> Просто вы не писали на Фортране
Ну... на Васике писал, на 1с и т.п.
Ладно, переживём отсутствие предупреждений на не объявленные переменные. В крайнем случае, можно lint написать.
Прочитал описание (пока недостаточно внимательно). Очень неплохо. Хотя немного напрягло большое количество вариантов синтаксиса. Трудно для освоения, но это тоже не беда. :)) Да! кстати, это нарушает правило "50.Не путайте привычность с читаемостью" (Ален И. Голуб. С и С++ Правила программирования М:Бином 1996). Думаю лучше основной синтаксис привести в наиболее читаемый вид. В перспективе подготовить рекомендации по оформлению текстов программ.
А в целом достойно.
Желаю Вам Владимир творческих успехов.
Vladimir Kladov (2008-01-09 15:46:00) [17]sizeof бывает нужен в языках с адресной арифметикой. В SOL нет адресной арифметики, вообще. Некоторые вещи могут казаться странными. Отсутствие деклации типа данных - это совсем не то же самое, что в JScript, когда переменная принимает тот тип, какой захочется. Это не вариант но формально - что-то вроде него. Казалось бы, могут возникнуть проблемы если одной и той же переменной присваивать и строку, и число. Но - не возникнут. Потому что агрегаты (массивы, структуры) - всё-таки отличаются от простых переменных. И объявлять их (хотя бы размерности массивов или число размернойстей) - придётся. А с числовыми - пусть компилятор выберет лучшее представление. Я вобще думаю для простого варианта компилятора рассмотреть штуки 4 целых форматов (int64, int32, uint8, uint1), и пару-тройку вещественных (flt32, flt64, flt80), и этим обойтись пока. Лучше сделать упор на возможность разрабатывать свои "классы" чисел, чтобы можно было делать программ для нестандартных процессоров (типа 4-битных контроллеров).
Сегодня опять "придумал" фишку. На этот - как однозначно "победить" проблемы возможного недопонимания переопределённых операций над структурными типами и массивами. Надо писать A = A [+] B; И всё - проблема исчезла. Вот почему, например, Вирт не хотел в Обероне переопределять арифметику: он не желал получить проблем с двусмысленностью. Всё, двусмысленности нет. (Разумеется я предусматриваю исключение для функций-шаблонов, в которых параметры не доопределены).
Про 4 нотации читали уже? Я сегодня выкладываю новую версию описания. Хорошо, что написание кода синтаксического разбора ещё не очень далеко продвинулось. Ещё кое-что уточняется, мелочи вроде Ptr1 SOLE = LOOP Ptr2; появляются (точная спецификация вида указателя которому и от которого присваивание идёт).
homm (2008-01-09 11:42:00) [18]> [135] D[u]fa (09.01.08 10:53)
> опять ж как он узнает размер?
кто он? Компилятор? Он возьмет размер достаточный для твоих нужд. Если нужды определить проблематично, то берется тип по умолчанию, в описании это есть.
D[u]fa (2008-01-09 10:53:00) [19]собсно и?)
sizeof это константа, которую компилятор и вычисляет(в делфях я имею ввиду)
ну если намек идет на то, что не юзать его то к примеру вызову без него... опять ж как он узнает размер?
homm (2008-01-09 00:11:00) [20]> [131] D[u]fa (08.01.08 17:39)
> к примеру сделаю я:
>
> i := 0;
> и потом то то типа .....(i, sizeof(i));
>
> и как он поймет что мне надо именно Integer тот что 4 байта?)
> [77] Vladimir Kladov © (23.12.07 17:46)
> Что такое sizeof, зачем он вообще нужен и с чем его едят
> в языке, в котором размером данных занимается компилятор
> и самый нижний уровень программирования?