введение

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

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

Сообщение 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
долгожитель
 
Сообщения: 4053
Зарегистрирован: 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
долгожитель
 
Сообщения: 4053
Зарегистрирован: 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;

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

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

Сообщение alexs » 12.10.2007 14:13:41

Bonart писал(а):это значит что в моем случае описанной тобой проблемы нет

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

Bonart писал(а):При полном отказе от глобальных для подпрограммы переменных будет слишком много параметров у большинства процедур.

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

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

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

P.S.
все остальные притихли - слушают как камни летают? :lol:
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Deepthroat » 13.10.2007 00:00:03

нормальных (функциональных для оператора) програм нет
есть небольшие поделки - тыкалки мышкой.
если оператора заставить работать в них постоянно - то оператор скорее застрелит разработчика чем булет работать в ТАКОЙ программе. тоже и по PHP, и Perl

Т.е. у Вас возникает желание застрелить разработчика этого форума, движка этого сайта, а также разработчиков, эдак, двух третих (больше?) сайтов в интернете. Вы видели много сайтов, использующих движки на Pascal, C++? Для интернета сейчас реальной альтернативы языку PHP (в редких случаях - Perl, Java, ASP) нет. Уж не потому ли, что он такой убогий? Эх, не ходят сюда Web-программисты...

А застрелить разработчиков приложений для мобильных телефонов? Причем всех разработчиков. И КПК'шников туда же (.NET, как никак).

То, что у программ интерфейс неудобный (а оператор во внутреннее устройство не вникает вообще, не так ли), это еще не говорит об ущербности языка. И как интерфейс связан с указателями? Неужели без использования указателей сложно сделать хороший удобный интерфейс?!

почему сразу не объявить её тип? мы всё равно далем операцию - почему останавливаемся на пол пути?
и ещё - зачем плодить сущности сверх меры? из-за того что искуственно отказываемся от одной полезной вещи необходимо изобретать столько городулек?

Согласен.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Сообщение ev » 13.10.2007 00:46:44

Для интернета сейчас реальной альтернативы языку PHP (в редких случаях - Perl, Java, ASP) нет.

ну почему же... сейчас становятся популярными некоторые новые языки (например, Ruby on Rails)...
хотя, стоит заметить, пока % не пхп сайтов относительно мал (имхо)

Уж не потому ли, что он такой убогий?

а тут все просто... веб языки довольно простые и бесплатные
поэтому и развелось полно программистов
поэтому и сайты часто ломают (в коде ошибка на ошибке)
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение alexs » 13.10.2007 01:19:12

Deepthroat
Может я конечно не прав
но
1. Мне не довелось увидить сколь нибудь нормально работающей полноценной десктопной программы на жабе и ей подобных (и это не из-за отсутсвия опыта) :-(, что заказной софт для организаций, что софт, распространяемый с дровами и т.п.
2. Ситуация с Net - это вобще не показатель - тут надо смотреть не на язык, а на фирму стоющую за ним. Кстати - надеюсь что с этим маразмом произойдут улучшения - гугел кажется по последним новостям вышел на тропу война за КПК и смртафоны
3. Ситуация с PHP - это в большей стпени отголоски бума доткомов. В итоге первая волна доткомов накрылась, но оставила после себя кучу программистов и "програмеров" веб морд. причём вторых больше. Если будет желание потрепатся на эту тему - то тут надо открывать отдельную ветку.
4. Без указателей трудно работать с большими объёмами данных.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Padre_Mortius » 13.10.2007 12:43:00

alexs писал(а):Мне не довелось увидить сколь нибудь нормально работающей полноценной десктопной программы на жабе и ей подобных


Novell Netware 5 и Novell Netware 6. Полностью весь десктоп написан на яве, включая установщик. Работает (или работал) нормально, но медленно.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение alexs » 13.10.2007 16:25:52

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

Сообщение Deepthroat » 13.10.2007 18:18:01

Ломают не только сайты, но и программы, которые есть ради чего ломать (например, для обхода лицензионных ограничений). И ломают всё, независимо от языка, на котором это написано.

Про медленно, согласен - это критерий, и еще какой. Указатели помогают сделать "быстро", но приводят к усложнению кода и недостаточной кроссплатформенности.

а тут все просто... веб языки довольно простые и бесплатные

А еще они кроссплатформенные! А почему? Потомучто нет в них платформенно-зависимых примочек типа управления памятью. И еще потомучто они интерпретируемые, что позволяет обходиться без кросскомпиляции, которая все равно всегда направлена на целевую платформу. А в случае в Web эта кроссплатформенность, достигаемая без усложнений, дорогого стоит.

То, что без указателей трудно работать с большими объемами данных, это есть. Но тут вопрос в наличии библиотек, реализующих удобные средства для работы с большими объемами данных. Никто не запрещает использовать динамические массивы, ansistring. В паскале есть TStream, TStrings, TStringList и т.д. А в нелюбимом Вами PHP есть ассоциативные массивы.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Сообщение ev » 13.10.2007 18:43:03

Ломают не только сайты, но и программы, которые есть ради чего ломать (например, для обхода лицензионных ограничений). И ломают всё, независимо от языка, на котором это написано.

взломы разные... взлом для убирания ключика регистрации - это совсем не то, что взлом ради получения базы клиентов...
так что не надо путать разные случаи ;)

кстати, защита веб сайта на пхп (на предмет лицензирования) сводится к использованию продукта zend encoder - а это в принципе можно назвать в некоторой мере компиляцией в байт код...

А еще они кроссплатформенные! А почему?

не все, вспомним хотя бы ASP.NET :)

А в нелюбимом Вами PHP есть ассоциативные массивы.

почему в нелюбимом? :)
имхо пока один из самый популярных веб-языков
Последний раз редактировалось ev 13.10.2007 20:15:03, всего редактировалось 1 раз.
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Сообщение alexs » 13.10.2007 18:56:23

ev
Это наверное меня имели ввиду :-)
Просто я противник интерпретаторов - считаю что этот путь не самый правильный.

Deepthroat писал(а): Указатели помогают сделать "быстро", но приводят к усложнению кода и недостаточной кроссплатформенности.


Я честно говоря с трудом представляю платформу в которой указателей нет (в смысле железную платформу)

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

Сообщение ev » 13.10.2007 20:25:59

для каждой задачи - свое решение

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

но далеко не все можно сделать на вебе... например все та же обработка больших массивов данных.. или, вот например, никто не стремится написать демодулятор v32 на пхп :) даже если кто-то сможет, будет интересно будет узнать нафига :lol:

задач очень много, и предлагаю не зацикливаться на офисных приложениях

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

а вот какие указатели и как с ними жить уже лучше обсуждать в соответствующей теме ;)
ev
долгожитель
 
Сообщения: 1763
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Пред.След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru