Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.72 MB
Время: 0.08 c
15-1266678959
GDI+
2010-02-20 18:15
2010.08.27
Интересно, когда андроиду можно будет просто сказать.


2-1271530750
[true]TRIx
2010-04-17 22:59
2010.08.27
массив pointer, обратиться к ячейке


8-1204713238
Vredinka
2008-03-05 13:33
2010.08.27
Ссылка на видео


15-1271094399
Юрий Зотов
2010-04-12 21:46
2010.08.27
Что будет, если...


2-1268982904
M@G30
2010-03-19 10:15
2010.08.27
Как хранить данные в TreeNode?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский