введение

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Сообщение Bonart » 12.10.2007 08:24:39

Deepthroat писал(а):Ну в РНР это просто - конкатенация обозначается точкой, а плюсом - сложение.

Кстати, это правильно. Конкатенация - это НЕ сложение и обозначать ее плюсом - грубая ошибка разработчика для языка, претендующего на статическую типизацию.
alexs писал(а):Я сказал - обычному пользователю - значит это не программы

книжек худжожественных и не очень у меня гораздо больше чем программ (исходников)

Предлагалась UTF-8 качестве кодировки для текстов программ "идеального" языка.
"Обычный пользователь" чаще всего имеет дело с файлами настройки, HTML/XML/CSS, для художественной литературы - FB2, даже форматы офисных документов переводят на текстовую основу. Во всех этих форматах (текстовых!) независимо от языка читателей ASCII-символов полным-полно (теги, пунктуация), а значит UTF-8 и здесь экономит объем.
alexs писал(а):то почему сразу не объявить её тип? мы всё равно далем операцию - почему останавливаемся на пол пути?

Вот посмотри на оператор:
i := n + 10

Сначала определяется тип результата (n+10). Если тип n - число, то он совпадает с типом n, иначе будет сгенерирована ошибка.
Затем, если переменная i уже определена, то ее тип сравнивается с типом результата (n+10) и если они разные - генерируется ошибка.
Если же переменная i не определена, то она определяется как переменная того же типа, что и результат (n+10) и инициализируется значением выражения (n+10).
Преимущества такого подхода - текст программы становится лаконичнее, не теряя прозрачности. Облегчается модификация программы - если изменить тип n, то тип i поменяется автоматически.
Но если это необходимо, то никто не мешает указать тип переменной или выражения явно:
i:Integer = n + 10

i := (n + 10):Integer


alexs писал(а):что я хочу получить?

Ошибку при компиляции. Ибо нет типа с множеством значений, включающим символы и числа с определенной для него операцией сложения.
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение alexs » 12.10.2007 09:11:03

Bonart писал(а):Но если это необходимо, то никто не мешает указать тип переменной или выражения явно:

ты приводиш идильный случай
ситация посложении
есть процедура - 30-40 строк кода
гдето посреди кода объвялем ип переменной
чуть ниже несколько раз её используем
через месяц смотрим на этот исходник
видим нижнее использование перменной - а какой у неё тип?
сейчас в паскале- я просто смотрю в секцию описания - (она всегда находится в одном месте) - и вижу тип
согласно твоей логике - мне надо перелопатить кучу кода - вникнуть в него чтобы найти первое вхождеие перменной и её объявление
удобство твоего метода только для первого написания кода - для сопровождения этого кода - это абсолютно неприемлемо

т.е. ты предлагаеш ввести особенности языков типа php И т.п. на которых пишутся мелкие заплатки - по принципу 1 раз написал, выполнил и выбросил. Для этого оно может и подходит
но если занимаешся серьёзными проектами и их сопровождением - к качеству исходников применяются совершенно другие требования.

насчёт строк UTF8 или UTF16/32 - я ратую за быстродействие операций с этими объектами
в строке utf8 без полного разбора строки ты не можеш сказать где кончается символ и начинается другой
ты не можеш сдалть операцию s[1], s[32] и т.д.
для этого нужны вызовы функций с разбиением на символы
в случае UTF16/32 эти операции - это простое обращение процессора к определённому участку памяти - 1 маш. команда

разница в скорости просто громадная

Bonart писал(а):Ошибку при компиляции. Ибо нет типа с множеством значений, включающим символы и числа с определенной для него операцией сложения.

ещё раз повторюсь - зачем изобретать все эти лишние знаки операций и дополнительные правила - можно просто один раз объявить тип переменной при её описании - это проще и понятнее.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3923
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Bonart » 12.10.2007 10:24:18

alexs писал(а):видим нижнее использование перменной - а какой у неё тип?
согласно твоей логике - мне надо перелопатить кучу кода - вникнуть в него чтобы найти первое вхождеие перменной и её объявление

удобство твоего метода только для первого написания кода - для сопровождения этого кода - это абсолютно неприемлемо

Неправильная постановка вопроса.
Правильная: а какой ДОЛЖЕН быть у нее тип?
Если компилятор ругается на ошибку с типами, то он выведет тип ошибочной переменной и место, где она определена.
Если тебе надо, чтобы переменная была определенного типа, но тебя ломает искать место, где она определена - вставь явное требование типа выражения:
write (i:Integer)

И если i вдруг окажется не Integer - то будет ошибка компиляции, далее см. выше.
Наконец, в хорошей IDE после успешной компиляции тип переменной можно подсвечивать при наведении на нее мышкой.
alexs писал(а):Сейчас в паскале- я просто смотрю в секцию описания - (она всегда находится в одном месте)

Не забудь еще посмотреть во все вышестоящие секции, а также во все интерфейсы подключенных модулей. Одно место -
идеальный случай программы без процедур и библиотек.
Далее - совеременная теория и практика программирования рекомендуют определять переменные максимально близко к месту их использования, совмещать описание с инициализацией, иметь для них минимально необходимую область видимости.
Паскалевская секция переменных с область видимости в целую подпрограмму и без инициализации - каменный век.
В той же Аде, например, счетчик цикла определяется и инициализируется в самом операторе цикла и не виден за его пределами. В Паскале же надо еще в секцию переменных вписывать.
alexs писал(а):т.е. ты предлагаеш ввести особенности языков типа php И т.п. на которых пишутся мелкие заплатки - по принципу 1 раз написал, выполнил и выбросил. Для этого оно может и подходит

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

PHP - бестиповой язык с многочисленными неявными преобразованиями данных в рантайме. Все глюки с типами там вылезают во время исполнения, в том числе через полгода после релиза.
Я предлагаю строгую статическую типизацию - все глюки с типами неминуемо приводят к ошибке компиляции.
Так что не надо необоснованных наездов. PHP терпеть не могу.
alexs писал(а):насчёт строк UTF8 или UTF16/32 - я ратую за быстродействие операций с этими объектами

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

ты не можеш сдалть операцию s[1], s[32] и т.д.

для этого нужны вызовы функций с разбиением на символы

в случае UTF16/32 эти операции - это простое обращение процессора к определённому участку памяти - 1 маш. команда



разница в скорости просто громадная

Ты невнимательно меня читал. Для обработки строк в памяти предлагалось строго 2 байта на символ. Для файлов с текстами программ - UTF8.
alexs писал(а):ещё раз повторюсь - зачем изобретать все эти лишние знаки операций и дополнительные правила - можно просто один раз объявить тип переменной при её описании - это проще и понятнее.

Какие лишние знаки операций? Не понял.
"Проще и понятнее" пообъявлять типы десятка вспомогательных переменных, а потом потребовалась смена типа исходных - и давай менять все ручками. Ситуаций когда по логике вычислений переменный A должен быть такой же тип как у переменной Б полным-полно. Но в Паскале программист все равно должен сначала посмотреть тип Б, а потом приписать его А. Мартышкин труд получается - программист делает лишнюю работу.
Зачем для КАЖДОЙ переменной объявлять тип, если в абсоюлютном большинстве случаев с этим спокойно справится компилятор? По такой логике можно к каждому оператору ассемблерные вставки делать, дабы увеличить эффективность трансляции. А то неизвестно, в какие инструкции переведется тот или иной оператор?
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение alexs » 12.10.2007 13:37:53

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

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

я привожу ситуацию для нормального исходника: нормальные процедуры на 1-1.5 экрана (:-)) ты видиш начало и конец блока - ты всегда видиш секцию объявлений.

Насчёт IDE - тоже не довод - точно также это справедливо и для моего случая.

Десятки вспомогательных перменных - это ты чересчур - если у тебя такая ситуация - это уже системный глюк.
и кто тебе мешает их объявлять общим скопом -
var
i1,i2, i3 .. i10000 :inteeger;
это вобще минимум изменений.

Ещё по типизации - люди почемуто боятся создавать свои перечисляемые типы. Вот ты говорищ - что приходится менять тип переменных - это решается просто
делаеш свой перечисляемый тип:
type
TSomeType1 = 1..10;
TSomeType2 = (tOne, tTwo);

и везде используеш их объявления
если прошиб с типом - то менять приходится только описание типа.

Bonart писал(а):Ты невнимательно меня читал. Для обработки строк в памяти предлагалось строго 2 байта на символ

тут приношу извинения - невнимательно дочитал конец топика.

хотя размер символа в целях оптимизаци можно делать кратным слову процессора. Но это не ак существенно - главное чтобы размер символа был постоянен.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3923
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Bonart » 12.10.2007 14:06:17

alexs
alexs писал(а):Глобальные перменные - это плохой стиль - если от них нельзя отказаться - то по карйней мере надо формировать компактный блок содержащий их (например отдельный модуль)

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

Еще как довод - это значит что в моем случае описанной тобой проблемы нет.
alexs писал(а):Вот ты говорищ - что приходится менять тип переменных - это решается просто

В большинстве случаев границы не известны на этапе компиляции, а значит нет возможности применять перечислимые типы. А вот float или Int64 вместо integer могут потребоваться легко.
alexs писал(а):Десятки вспомогательных перменных - это ты чересчур - если у тебя такая ситуация - это уже системный глюк.

Алгоритм Брезенхейма - переменных уже с десяток. И это не сложный случай.
alexs писал(а):var i1,i2, i3 .. i10000 :inteeger;

А в моем случае можно вообще обойтись без таких объявлений :) Компилятор все выведет сам.

Итог: ни одного указанного тобой недостатка предложенная схема не имеет.