Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

SOL (Соль) = Simple Objects Language   Найти похожие ветки 

 
vpbar ©   (2007-12-23 17:53) [80]

>>homm ©   (23.12.07 17:48) [79]
Прочитайте. Весьма любопытно.

> Vladimir Kladov ©   (23.12.07 17:41) [76]
> > Не надо шаблонов? Может и не надо.
>

Это вы с кем беседуете?


 
homm ©   (2007-12-23 18:46) [81]

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

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


 
homm ©   (2007-12-23 18:56) [82]

> [81] homm ©   (23.12.07 18:46)

Прошу прощения. Впредь постараюсь воздержатся от коментариев, пока не прочту хотябы пару экранов :)


 
vpbar ©   (2007-12-23 19:07) [83]


Это девочка Маша. Маша урониля мячик.  Маша сходи туда -
 сюда.


О чем это я... Предлагаю все -таки подумать о том, чтобы переменные объявлялись. Это вполне просто и естественно. В человеческой речи обычно выделяется первое упоминание об обьекте. Так почему бы и Соль не сделать так.
К тому же homm ©   (23.12.07 18:46) [81] прав. Какие в Соль  есть методы сказать что это новая переменная с тем же именем, а не присваивание старой.
Допустим у нас есть переменная XXX = 10.
Ниже мы хотим новую переменную, причем почему-то приходим к такому же имени (ну бедная фантазия, например, при сходном назначении переменных)
XXX=100.
И все. Компилятор посчитает что это присваивание. Тип совпадает - ошибок нет. Но мы будем полагать что у нас другая переменная. А про ту XXX которая выше ма забудем, до той поры пока не заотлаживаемся до сыта. Или ради простоты нужно заставить программиста помнить все переменные.


 
Vladimir Kladov ©   (2007-12-23 20:00) [84]

Допустим у нас есть переменная XXX = 10.
Ниже мы хотим новую переменную, причем почему-то приходим к такому же имени (ну бедная фантазия, например, при сходном
назначении переменных)
XXX=100.
И все. Компилятор посчитает что это присваивание.

И чем жта ситуация отличается от случая, когда переменная XXX объявлена выше? И там, и там - присваивание.

Кстати, я же не запрещаю объявлять. Пожулуйста, берите и объявляйте:
X;
Чем не объявление? Но объявить другую переменную X во вложенном блоке таким же способом уже нельзя, компилятор заругается.


 
Vladimir Kladov ©   (2007-12-23 20:03) [85]

А, кстати, выложил версию. Всё, что добавил, касается забытого и чуть не утраченного про инициализацию всех переменных, особенно указателей, так же перенёс в краткое описание про явное напоминание о присваивании LOOP- и SOLE-указателю (тоже ведь забыл), и решил "упростить" конструкцию присваивания значения указателю на массив:
P = M[ 6 TO 10];

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


 
ANTPro ©   (2007-12-23 20:52) [86]

> [85] Vladimir Kladov ©   (23.12.07 20:03)
> P = M[ 6 TO 10];

Basic? Почему не P=M[6..10]; ?


 
vpbar ©   (2007-12-23 20:56) [87]

>>Vladimir Kladov ©   (23.12.07 20:00) [84]
Хм. то есть запрещено перекрывать определения. В принципе тоже вариант встречается. Со своими +-
ЗЫ. просто любопытно. Вы знаете Xerion и nemerle?


 
homm ©   (2007-12-23 21:00) [88]

> [86] ANTPro ©   (23.12.07 20:52)
> > P = M[ 6 TO 10];
>
> Basic? Почему не P=M[6..10]; ?

Смотри внимательнее, это не объявление, это операция присвоения указателю P участка массива M с элементами от 6 до 10.


 
vpbar ©   (2007-12-23 21:00) [89]

>>ANTPro ©   (23.12.07 20:52) [86]
А какая разница. Просто по желанию создателя диапазано в Соль описываются имено так. a TO b


 
ANTPro ©   (2007-12-23 21:41) [90]

> [88] homm ©   (23.12.07 21:00)

Я вижу.

> [89] vpbar ©   (23.12.07 21:00)

Как в бейсике. Ну или похоже.

Я пока еще не читал осоль может, что-то не правильно понял. Но не стоит стили нескольких языков смешивать.


 
homm ©   (2007-12-23 22:27) [91]

http://kolmck.net/sf/Geometry_vs_Cosmology.htm

Владимир, спасибо большое за материал. Описание соли (соля?) я так и не дочитал, но наткнулся на эту статью. Равномерность расширения правда застявляет задуматься, правда не опровергая на прямую БВ. От строк о вечности и равномерном развитии вселенной и правду на душе спокойнее стало :)


 
Vladimir Kladov ©   (2007-12-24 15:31) [92]

Кому не нравится TO, можно писать to. Можно ещё и эквивалент придумать. Только не ".." - сильно смахивает на опечатку при попытке написать число с ПТ. Я бы взял ->, но очень не хочется (догадаётесь сами, почему).

А что меня за отсутствие типа Boolean не ругает никто? Я для чего проект языка выставил на обозрение - чтобы не получилось как у Вирта, всё сам придумал, ни с кем не посоветовался, а потом в языке остаются перлы типа with, большего приоритета and/or, чем <, > и всякое такое. Я, кстати, думал, как же ввести boolean не вводя его в язык. Вот придумал, кажется: запрет на приведение типов с меньшим диапазонам к большему, и диапазонов с разным шагом, неявно, без преобразующей функции. Ещё подумаю над этим, но, кажется, этого должно хватить. Преобразуюзую можно на шаблонах сделать, как бы общую для всех (точнее, набор: обрезающие, выставляющие при выходе за диапазон ноль, со специальным параметром по умолчанию, генерирующие исключение, ... ).

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


 
homm ©   (2007-12-24 15:35) [93]

Мне вот не нравится бесконечное множество типов.
Вернет ли истину сравнение типов, один из которы  от 5 до 10, а второй не определе (т.е. число по умолчанию)


 
vpbar ©   (2007-12-24 19:19) [94]


> Vladimir Kladov ©   (24.12.07 15:31) [92]



> Я для чего проект языка выставил на обозрение

Да кто же Вас знает.


> А что меня за отсутствие типа Boolean не ругает никто

А чего ругать, в С его вот тоже нет. И ничего. А у вас вообще типов всего ничего числа да указатели, так что отсутствие boolean вполне в тему.
Хотя тут вопрос.

x=2;
y=2.5;
IF (x>y)==(x/y) THEN ...

- такое работать будет? Или нужно задавать операцию (функцию) "-" для этих типов.
А такое?

a=0;
b=1;
c=0;
IF a*b+c THEN...


 
vpbar ©   (2007-12-24 19:38) [95]

IF a*b+c THEN. судя по этому "Арифметические с целыми числами не являются циклическими." работать не должно (или невсегда будет). Хотя было бы интересно, можно было бы упростить и исключить AND и OR

Если Вы все же выложили описание языка для критики, то продолжу.
Цитатах текст их SOL=IdealSpade4Programmer вчерашней версии.


Переменная-массив так же может быть присвоена переменной-
массиву подходящей размерности.

Спроверкой совместимости типов элеметов, разумеется? А как с приведением типов. Есть ли механизм описанния явного приведения типа для элементов массива .
Вы конечно говорите что "8. Приведение типа. Никогда и ни при каких обстоятельствах. Раз уже все атомарные типы данных эквивалентны, и по сути, являются числами с плавающей точкой, то и приведение типа не требуется." но в Vladimir Kladov ©   (24.12.07 15:31) [92] заново придумаваете запрет на приведение и упоминаете о какой то "преобразующей функции". В этом контексте под приведением понимать преобразующую функци.
Т.е.
TYPE Bit = 0 TO 1;
TYPE Bits = [10]Bit;
TYPE Arr = [10]Integer;
B:String; A:Arr;
....
A=B // так  вроде нельзя. Запрет на приведение типов к большему диапазону
Цикл делать?

Допускается присваивать  динамическому массиву массив статический (но не наоборот).

А почему бы не присваивать статический массив динамическому? Или придется явно копировать. Опять цикл.

PS. Так есть приведение типов или нет?


 
vpbar ©   (2007-12-24 19:44) [96]


>  Вот придумал, кажется: запрет на приведение типов с меньшим
> диапазонам к большему,

Еще.
Т.е. так нельзя
Y=0.4;
X=1;
...
Y=X;
Оригинально. Обычно наоборот. Если больший диапазон приводится к меньшему- то явно. Дабы понимать что может быть потеря точности (в SOL - ислючение).


 
homm ©   (2007-12-24 20:24) [97]

> [95] vpbar ©   (24.12.07 19:38)
> Допускается присваивать  динамическому массиву массив статический
> (но не наоборот).
> А почему бы не присваивать статический массив динамическому?

Чукча либо не писатель, либо не читатель :)


 
vpbar ©   (2007-12-24 20:35) [98]


> homm ©   (24.12.07 20:24) [97]

Да. Точно. Прошу прощения. Не о том прочитал. :( Просто язык необычен, что такие очевидные весчи не воспринимаются.


 
Vladimir Kladov ©   (2007-12-24 20:40) [99]

Есть проверка. Кстати из того, что X=0.4 и Y=1 еще не следует, что Y диапазон меньше (т.е. что оно целое). Тем более, если компилятор видит дальше Y=X, то он прекрасно понимает, что 0.4 так же является допустимым значением для Y, т.е. оно уже дробное. Он должен учесть все присваивания, если нет объявления явного диапазона.

Выложил 15 версию и заодно начало сравнительной таблицы (разумеется, все критерии подобраны специально так, чтобы представить SOL в самом выгодном свете, по сравнению со всеми языками. Моё мнение в принципе не может быть объективным:) ): http://kolmck.net/sf/SOL%20vs%20others.htm

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

Дописал в версии 15 про тип "булев". Нет такого типа, есть более строгое правило: запрет на неявное присваивание большего диапазона к меньшему (но чуть чуть сложнее, так что в итоге и булев к вещественному неявно не привести).

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

Кстати, ответы на большинство вопросов есть в кратком но не самом кратком описании.


 
Vladimir Kladov ©   (2007-12-24 20:43) [100]

А которых (ответов) нету, я буду дописывать. Краткое описание должно превратиться в полную (но не водянистую) спецификацию, в конечном итоге.

Вот ведь странно: сделаешь, чтобы := было, будут Сишники ругать, сделаешь чтобы = - паскалисты. И так, и так чтобы было сделаешь - все недовольны. Форма != (<>) содержанию. Это разные вещи.


 
homm ©   (2007-12-24 20:45) [101]

> http://kolmck.net/sf/SOL%20vs%20others.htm

Понравился параметр «наличие каких-либо средств в языке» :) Это что? :)


 
Vladimir Kladov ©   (2007-12-24 20:52) [102]

Там же заголовок у таблицы есть Распараллеливание потоков вычислений (процессов)


 
alex   (2007-12-25 14:36) [103]

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

D, Scheme, Lisp, Ocaml, Haskell - хотя бы с ними ознакомиться надо.


 
Vladimir Kladov ©   (2007-12-25 15:36) [104]

С D ознакомился до того как начал: мертворождённый недоСи. Прочие являются функциональными языками программирования и императивному не имеют практически никакого отношения. Сорри.

Теперь о баранах. Вот такая мысль насчёт циклов.

1) Переменную можно менять в цикле. Но синтаксис должен быть особый. 2 варианта:
i LOOP = выражение;
CONTINUE i LOOP = выражение;

Тогда уже точно видно, что программер прекрасно понимает, что он меняет переменную цикла. И компилятор соглашается. Иначе - ошибка.

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

Всё: проблема неверного использования, которой все запрещатели так боялись исключена.

Я обновил таблицу. Поправил там, кое-чего дописал. Если у кого-то есть глубокий опыт возни с Явой или С#, просьба подсказать, что вместо ? ставить напротив (про Аду и PL/1 я уж сам как-нибудь).


 
alex   (2007-12-25 18:16) [105]

Вообще-то D - это скорее облагороженный С++, ну да ладно. О вкусах не спорят.
Scheme, Lisp - не являются чистыми функциональными языками. На них можно писать и в императивном, и в функциональном стиле. При этом они (по крайней мере, Схема) хорошо соответствуют принципу простоты.
А почему императивность, кстати? В значительной мере случаев функциональный подход дает более простые и наглядные решения.
И, наконец, эти (и многие другие) языки интересны своими особенностями, независящими от парадигмы. В Хаскеле, к примеру, нет никаких шаблонов, есть статическая типизация и тем не менее нет никакой необходимости делать несколько реализаций одного алгоритма для данных разных типов.


 
Vladimir Kladov ©   (2007-12-25 19:07) [106]

Это не та простота, которая мне нужна. Я, например, не перевариваю много скобок. После двух вложенных скобок у меня уже глаза разбегаются. Но дело не в скобках. Мне это просто непонятно. Я сдал экзамен по Лиспу лет 15 назад на 4, и уже через месяц забыл всё. И он мне до сих пор не понадобился. Значит, не нужен.

Хотел бы я посмотреть на редактор html, наприсанный на lisp"е. Нет такого? Точно не нужен. Потому и императивность. Иди туда, потом сюда. Если здесь камень, поверни назад, повтори всё сначала. Это то, что я понимаю. И не надо мне никаких Лиспов. Пусть на ФЯ пишут те, кому это надо. По мне, так это вообще write-only код. (Читабельность - нулевая).

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

---------------------
Так, я обновил большой текст (насчёт обработки исключений, и про циклы). Средние обновлю завтра уже.


 
Vladimir Kladov ©   (2007-12-25 20:41) [107]

И, кстати, я же уже придумал функцию FUNCTION. Значит, всегда можно написать функцию-компилятор с любого языка, хоть С, хоть хаскел, и просто вставлять в код. Самое что ни на есть тесное взаимодействие, вплоть до компиляции во время компиляции самого исходного текста. (А текст на нужном языке вставляется многострочной строковой константой).

--------------
Ещё раз поправил Что-то много в большом тексте осталось устаревших конструкций и описаний, по объявлениям функций прошёлся на этот раз.


 
GMax   (2007-12-25 21:36) [108]

а мне непонятна прелесть объявления переменных присвоением.

в одном месте написал myvar = 10, в другом mivar = 11. ошибся типа. и потом столетиями ошибку ищем.  или я не так понял ?

да и "Оператор присваивания в выражении" не настолько уж великое зло, как кажется.
почему ж лишать "if (i=somefunc()) ?"

в пнях еще кажется для этого даже спец-опкоды ввели, настолько удобно.


 
homm ©   (2007-12-25 21:39) [109]

> [108] GMax   (25.12.07 21:36)
> в пнях еще кажется для этого даже спец-опкоды ввели, настолько
> удобно.

Ага, ввели и никому не сказали :)


 
Vladimir Kladov ©   (2007-12-26 16:05) [110]

myvar = 10, в другом mivar = 11
такие вещи решаются просто. Даже если вы используете нотепад вместо редактора, который должен предлагать подсказки. Если после второго присваивания вы так и будете использовать mivar, то ошибки и нет. А если нигде больше не она не упоминается, компилятор предупреждает, что mivar присвоена, и не используется. А если вы употребили неверное имя в выражении а не в левой части присваивания, то это уже не предупреждение, а ошибка: переменная не инициализирована.

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


 
Vladimir Kladov ©   (2007-12-26 16:10) [111]

Да, обновил про unsafe-маркер, и средние описания. Теперь там про циклы тоже есть.

Думаю, что компиляцию надо делать в простой код на С. Одна беда: поддержки исключений в нём как-то не очень чтобы наблюдается. Надо что-то замутить эдакое, чтобы результат был более-менее платформенно-независимый. Идеи есть (кроме использовать C++)?


 
vpbar ©   (2007-12-26 17:29) [112]

>>Vladimir Kladov ©   (26.12.07 16:10) [111]
Java :) или Forth.
А вообще поддержка исключений есть в Windows (Linux и прочее вроде тоже) и аппаратно должна поддерживаться. А обернуть это можно хоть на асемблере.


 
Vladimir Kladov ©   (2007-12-26 18:20) [113]

Компиляторы С есть для всех платформ и даже не платформ (FPGA). JIT-код из простого C-кода сделать проще, чем наоборот. Потому что внутри Ява недалеко ушла от Форта. Стековая машина в принципе не подходит для представления кода на не-стековых машинах (хотя обратное верно). Потому и С.

Я знаю, что поддерживается аппаратно. На PC. Но PC - не единственная платформа. Меня не интересует получить код только для PC и заточить компилятор для одной платформы. Пожтому ассемблер даже не рассматривается.


 
vpbar ©   (2007-12-26 19:45) [114]

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


 
Vladimir Kladov ©   (2007-12-26 20:09) [115]

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


 
vpbar ©   (2007-12-26 20:39) [116]

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

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


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

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


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

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

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

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


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

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


 
Vladimir Kladov ©   (2007-12-27 15:28) [120]

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

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

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

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

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



Страницы: 1 2 3 4 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.73 MB
Время: 0.082 c
15-1266110372
CSS
2010-02-14 04:19
2010.08.27
Глюки в Win7


3-1240576232
Гарик
2009-04-24 16:30
2010.08.27
Пользователи в Oracle


2-1267290282
котэ
2010-02-27 20:04
2010.08.27
Работа с реестром Windows


2-1270885260
roman2
2010-04-10 11:41
2010.08.27
Координаты точки


15-1264606970
имя
2010-01-27 18:42
2010.08.27
Поселок "Речник"