
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.30] |
![]() |
|
Страницы: (31) « Первая ... 4 5 [6] 7 8 ... 30 31 ( Перейти к последнему сообщению ) |
Сообщ.
#76
,
|
|
|
Цитата wormball @ Самый избитый пример, который приходит в голову - написание одного знака равенства вместо двух. Есть множество других примеров, про них написаны горы литературы. Главные ошибки в программах - это не ошибки с контролем типов, а ошибки в алгоритме, от них тебя никакой компилятор не избавит. Ну и зачем добавлять новые возможности для ошибок то?? С синтаксисом форта вообще можно суперецких ошибок наделать, ибо он неинтуитивен.. так что про == не надо тут. вот на PHP еще и === есть ![]() |
Сообщ.
#77
,
|
|
|
Можно, например, вот так: ![]() ![]() template<int D, int N> struct RomanDigitInfoGen { static const int m_Next = N; static const int m_SIdx = RomanDigitInfo<N>::m_SIdx + 1; }; template<> struct RomanDigitInfoGen<1, 0> {static const int m_Next = 0; static const int m_SIdx = 0;}; template<> struct RomanDigitInfo<1> : public RomanDigitInfoGen<1, 0> {;}; template<> struct RomanDigitInfo<4> : public RomanDigitInfoGen<4, 1> {;}; template<> struct RomanDigitInfo<5> : public RomanDigitInfoGen<5, 4> {;}; template<> struct RomanDigitInfo<9> : public RomanDigitInfoGen<9, 5> {;}; template<> struct RomanDigitInfo<10> : public RomanDigitInfoGen<10, 9> {;}; template<> struct RomanDigitInfo<40> : public RomanDigitInfoGen<40, 10> {;}; template<> struct RomanDigitInfo<50> : public RomanDigitInfoGen<50, 40> {;}; template<> struct RomanDigitInfo<90> : public RomanDigitInfoGen<90, 50> {;}; template<> struct RomanDigitInfo<99> : public RomanDigitInfoGen<99, 90> {;}; template<> struct RomanDigitInfo<100> : public RomanDigitInfoGen<100, 99> {;}; template<> struct RomanDigitInfo<400> : public RomanDigitInfoGen<400, 100> {;}; template<> struct RomanDigitInfo<500> : public RomanDigitInfoGen<500, 400> {;}; template<> struct RomanDigitInfo<900> : public RomanDigitInfoGen<900, 500> {;}; template<> struct RomanDigitInfo<999> : public RomanDigitInfoGen<999, 900> {;}; template<> struct RomanDigitInfo<1000> : public RomanDigitInfoGen<100, 999> {;}; Несколько покороче. Но что и с чем в этом списке связано - ты все равно должен указать. |
Сообщ.
#78
,
|
|
|
Цитата LuckLess @ С синтаксисом форта вообще можно суперецких ошибок наделать, ибо он неинтуитивен.. А С++ интуитивен? Недаром по нему килограммовые учебники пишут! Учебник по Форту, кстати, меньше по объёму раз в 5. Единственная интуитивная вещь в С++ - формулы, да и то потому, что мы все 10 лет проходили математику в школе. А в целом выучить Форт ничуть не сложнее, чем С++, я бы даже сказал, проще. Цитата Flex Ferrum @ Можно, например, вот так: Ну, а нельзя это, скажем, в две или три строчки уместить, без повторов? У меня, скажем, не было массива строк, я вместо него написал следующее: ![]() ![]() : digits s" I" s" IV" s" V" s" IX" s" X" s" XL" s" L" s" XC" s" C" s" CD" s" D" s" CM" s" M" ; : digit ( n -- a n ) >r digits 12 r@ - for 2drop next r> -rot >r >r for 2drop next r> r> ; Первая функция выдаёт все строки с римскими цифрами, а вторая просто выбрасывает все строки, кроме строки с определённым номером. Если заморачиваться с быстродействием, тогда, наверное, будет три строчки. А числа у меня вообще в виде массива. Можно ли на шаблонах объявить массив? |
Сообщ.
#79
,
|
|
|
Цитата wormball @ А С++ интуитивен? Недаром по нему килограммовые учебники пишут! ![]() ![]() C++ да - интуитивен, любой более менее так себе программист может прочитать не слишком навороченный код. Причем не РАЗБИРАТЬСЯ, а прочитать. Килобайтовые учебники пишут не потому, что он сложен, а потому, что он популярен, и эти учебники много кому интересно прочитать. |
Сообщ.
#80
,
|
|
|
Цитата wormball @ Ну, а нельзя это, скажем, в две или три строчки уместить, без повторов? А там как таковых повторов нет. Если не считать повторами определенные лексическо-синтаксические конструкции. |
Сообщ.
#81
,
|
|
|
Цитата wormball @ Ну, а нельзя это, скажем, в две или три строчки уместить, без повторов? У меня, скажем, не было массива строк, я вместо него написал следующее: Можно написать макросы, и будет очень коротко, только вот никакой нормальный С++ программист так делать не будет. |
Сообщ.
#82
,
|
|
|
Цитата LuckLess @ любой более менее так себе программист может прочитать не слишком навороченный код. Причем не РАЗБИРАТЬСЯ, а прочитать. Может быть, я плохой программист, только не встречал я на С++ "не слишком навороченного кода", который бы я мог понять с первого раза. Даже в учебниках примеры зачастую занимают две и больше страниц. На Форте из опыта чтения чужих исходников у меня было только основательное переделывание исходников ретрофорта с целью оптимизации по быстродействию и повышения функциональности, причём делал я это параллельно с изучением Форта как такового. И это не вызвало у меня больших трудностей: когда функция занимает одну строчку, сколь бы она ни была неинтуитивна, она понимается менее чем за минуту. Причём действительно понимается: фактически более половины функций я собственноручно переписал. Цитата LuckLess @ Килобайтовые учебники пишут не потому, что он сложен, а потому, что он популярен, и эти учебники много кому интересно прочитать. Видел я учебник по С++, сопоставимый по объёму с учебником по Форту. Прочитал я его и фактически ничего для себя не вынес. Цитата Flex Ferrum @ Если не считать повторами определенные лексическо-синтаксические конструкции. Именно это я за повторы и считаю. Цитата LuckLess @ Можно написать макросы, и будет очень коротко, только вот никакой нормальный С++ программист так делать не будет. Но почему?? Неужели мегабайтные исходники - это хорошо? |
Сообщ.
#83
,
|
|
|
Цитата wormball @ Именно это я за повторы и считаю. Ну ведь ты тоже должен определенное количество раз повторить конструкцию s" ...", где ... - это какая-то строка? |
Сообщ.
#84
,
|
|
|
Цитата Flex Ferrum @ Ну ведь ты тоже должен определенное количество раз повторить конструкцию s" ...", где ... - это какая-то строка? Ну да, но у меня одно слово, а у тебя - штук десять. Можно их до одного-двух сократить? |
Сообщ.
#85
,
|
|
|
Цитата wormball @ Можно их до одного-двух сократить? Можно. Макросом. |
Сообщ.
#86
,
|
|
|
Ответ давно ясен всем.
Самый гибкий и фичастый — Lisp. Самый энтерпрайзистый — Java. Самый красноглазистый — Perl. Самый красивый — Python. Самый дешевый — PHP. Самый системный — C. (Если бы не Lisp, был бы он по праву еще и самым универсальным.) Самый эзотеричный — Brainfuck. :)) Остальное, естественно, сами знаете, от кого. |
Сообщ.
#87
,
|
|
|
объединение ![]() ![]() ![]() |
Сообщ.
#88
,
|
|
|
Цитата Flex Ferrum @ Можно. Макросом. Если не сложно, можешь изобразить? Цитата Ho Im @ Ответ давно ясен всем. Если это шутка, то не очень удачная. Если нет - попрошу аргументировать. Здесь не мордобой по поводу "какой язык круче" (устал это повторять), а дискуссия о выразительных средствах в языках программирования. Цитата root2lexS @ объединение По принципу "не буду учить английский, пусть иностранцы русский учат"? |
Сообщ.
#89
,
|
|
|
Цитата wormball @ Если не сложно, можешь изобразить? ![]() ![]() template<int D, int N> struct RomanDigitInfoGen { static const int m_Next = N; static const int m_SIdx = RomanDigitInfo<N>::m_SIdx + 1; }; template<> struct RomanDigitInfoGen<1, 0> {static const int m_Next = 0; static const int m_SIdx = 0;}; #define RI(a,b) template<> struct RomanDigitInfo<a> : public RomanDigitInfoGen<a, b> {;}; RI(1,0) RI(4,1) RI(5,4) RI(9,5) RI(40,10) RI(50,40) RI(90,50) RI(99,90) RI(100,99) RI(400,100) RI(500,400) RI(900,500) RI(999,900) RI(100,999) #undef RI |
Сообщ.
#90
,
|
|
|
Позвольте вставить и мне свои 2 копейки, коллеги.
На мой взгляд, корректнее было бы обсуждать не идеальный язык, а идеальную среду программирования (ИСП). В качестве претендента на ИСП (для более узкого круга задач, а именно - программирование микроконтроллеров) предлагаю рассмотреть Algorithm Builder Может показаться что это слишком частный случай и такого рода решения не возможны для систем общего назначения. Маленький исторический экскурс: еще в доперестроечные времена в институте кибернетики в Киеве была разработана "похожая" система, без привязки к конкретной платформе и языку программирования. Называлось это - Р-технология. Теперь копейка номер 2 - о форте: Почти каждый фортер в начале своего познания Языка пробует сделать Свой Форт. Почему? - Это действительно очень просто! Что в этом хорошего? 1. Форт _действительно_ простой язык, и для изучения и для реализации. 2. Форт _действительно_ очень мощный язык - большинство пишет свой форт на форте же, хотя встречаются и извращенцы :) 3. Большинство пишущих успевает понять что "просто еще один форт" это хуже чем "один из фортов, поддерживающий стандарт/имеющий достаточное число библиотек + свои расширения", благо одно из основных его свойств - расширяемость! Что в этом плохого? - усилия таки распыляются и некоторое число несовместимых вариантов "вроде бы форта" появляется (лучше бы пара новых библиотек). Вобщем некая "детская болезнь". 2wormball: Хотелось бы увидеть у Вас в результате не очередной клон форта, а именно новую _удобную_ среду программирования, пусть даже она будет поддерживать только форт (для начала :) |