Форум: "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