-
А которых (ответов) нету, я буду дописывать. Краткое описание должно превратиться в полную (но не водянистую) спецификацию, в конечном итоге.
Вот ведь странно: сделаешь, чтобы := было, будут Сишники ругать, сделаешь чтобы = - паскалисты. И так, и так чтобы было сделаешь - все недовольны. Форма != (<>) содержанию. Это разные вещи.
-
-
Там же заголовок у таблицы есть Распараллеливание потоков вычислений (процессов)
-
Может стоит сначала познакомиться с другими языками программирования? Те, что представлены в таблице - это малая толика существующих (и успешно применяющихся), а, кроме того, почти все являются близкими родственниками.
D, Scheme, Lisp, Ocaml, Haskell - хотя бы с ними ознакомиться надо.
-
С D ознакомился до того как начал: мертворождённый недоСи. Прочие являются функциональными языками программирования и императивному не имеют практически никакого отношения. Сорри.
Теперь о баранах. Вот такая мысль насчёт циклов.
1) Переменную можно менять в цикле. Но синтаксис должен быть особый. 2 варианта: i LOOP = выражение; CONTINUE i LOOP = выражение;
Тогда уже точно видно, что программер прекрасно понимает, что он меняет переменную цикла. И компилятор соглашается. Иначе - ошибка.
2) Переменная имеет после выхода из цикла то значение, которое должна иметь. Но использовать её вне цикла можно только 2 способами: - в выражениях, на чтение, - для организации следующего цикла (или внутри следующего цикла).
Всё: проблема неверного использования, которой все запрещатели так боялись исключена.
Я обновил таблицу. Поправил там, кое-чего дописал. Если у кого-то есть глубокий опыт возни с Явой или С#, просьба подсказать, что вместо ? ставить напротив (про Аду и PL/1 я уж сам как-нибудь).
-
Вообще-то D - это скорее облагороженный С++, ну да ладно. О вкусах не спорят. Scheme, Lisp - не являются чистыми функциональными языками. На них можно писать и в императивном, и в функциональном стиле. При этом они (по крайней мере, Схема) хорошо соответствуют принципу простоты. А почему императивность, кстати? В значительной мере случаев функциональный подход дает более простые и наглядные решения. И, наконец, эти (и многие другие) языки интересны своими особенностями, независящими от парадигмы. В Хаскеле, к примеру, нет никаких шаблонов, есть статическая типизация и тем не менее нет никакой необходимости делать несколько реализаций одного алгоритма для данных разных типов.
-
Это не та простота, которая мне нужна. Я, например, не перевариваю много скобок. После двух вложенных скобок у меня уже глаза разбегаются. Но дело не в скобках. Мне это просто непонятно. Я сдал экзамен по Лиспу лет 15 назад на 4, и уже через месяц забыл всё. И он мне до сих пор не понадобился. Значит, не нужен.
Хотел бы я посмотреть на редактор html, наприсанный на lisp'е. Нет такого? Точно не нужен. Потому и императивность. Иди туда, потом сюда. Если здесь камень, поверни назад, повтори всё сначала. Это то, что я понимаю. И не надо мне никаких Лиспов. Пусть на ФЯ пишут те, кому это надо. По мне, так это вообще write-only код. (Читабельность - нулевая).
Я в курсе, что идеи, заложенные в Хаскел (теория категорий) настолько сложны, что нужно специальное мат. образование, чтобы понять. Проверять не решаюсь, хотя математик по образованию. Бэйсик - вот идеал простоты, а не Лисп. Поймёт любой, напишет каждый второй инженер.
--------------------- Так, я обновил большой текст (насчёт обработки исключений, и про циклы). Средние обновлю завтра уже.
-
И, кстати, я же уже придумал функцию FUNCTION. Значит, всегда можно написать функцию-компилятор с любого языка, хоть С, хоть хаскел, и просто вставлять в код. Самое что ни на есть тесное взаимодействие, вплоть до компиляции во время компиляции самого исходного текста. (А текст на нужном языке вставляется многострочной строковой константой).
-------------- Ещё раз поправил Что-то много в большом тексте осталось устаревших конструкций и описаний, по объявлениям функций прошёлся на этот раз.
-
а мне непонятна прелесть объявления переменных присвоением.
в одном месте написал myvar = 10, в другом mivar = 11. ошибся типа. и потом столетиями ошибку ищем. или я не так понял ?
да и "Оператор присваивания в выражении" не настолько уж великое зло, как кажется. почему ж лишать "if (i=somefunc()) ?"
в пнях еще кажется для этого даже спец-опкоды ввели, настолько удобно.
-
> [108] GMax (25.12.07 21:36) > в пнях еще кажется для этого даже спец-опкоды ввели, настолько > удобно.
Ага, ввели и никому не сказали :)
-
myvar = 10, в другом mivar = 11 такие вещи решаются просто. Даже если вы используете нотепад вместо редактора, который должен предлагать подсказки. Если после второго присваивания вы так и будете использовать mivar, то ошибки и нет. А если нигде больше не она не упоминается, компилятор предупреждает, что mivar присвоена, и не используется. А если вы употребили неверное имя в выражении а не в левой части присваивания, то это уже не предупреждение, а ошибка: переменная не инициализирована.
По мне, делать где-то там наверху (да даже и в том же блоке) кучу деклараций - бессмысленно. Когда вы читаете текст, туда-сюда не набегаешься. И никто не запрещает переменные "объявлять". Пишете в начале все присваивания начальных значений - вот вам блок объявлений.
-
Да, обновил про unsafe-маркер, и средние описания. Теперь там про циклы тоже есть.
Думаю, что компиляцию надо делать в простой код на С. Одна беда: поддержки исключений в нём как-то не очень чтобы наблюдается. Надо что-то замутить эдакое, чтобы результат был более-менее платформенно-независимый. Идеи есть (кроме использовать C++)?
-
>>Vladimir Kladov © (26.12.07 16:10) [111] Java :) или Forth. А вообще поддержка исключений есть в Windows (Linux и прочее вроде тоже) и аппаратно должна поддерживаться. А обернуть это можно хоть на асемблере.
-
Компиляторы С есть для всех платформ и даже не платформ (FPGA). JIT-код из простого C-кода сделать проще, чем наоборот. Потому что внутри Ява недалеко ушла от Форта. Стековая машина в принципе не подходит для представления кода на не-стековых машинах (хотя обратное верно). Потому и С.
Я знаю, что поддерживается аппаратно. На PC. Но PC - не единственная платформа. Меня не интересует получить код только для PC и заточить компилятор для одной платформы. Пожтому ассемблер даже не рассматривается.
-
-
да при чём тут асм вообще, ПЦ в частности и Win32 тем более? Надо же генрировать платформенно-независимый C-код на выходе. Как работать с SEH на асме, я давно знаю.
-
>>Vladimir Kladov © (26.12.07 20:09) [115] Владимир, я это "Компиляторы С есть для всех платформ" тоже знаю "Но PC - не единственная платформа" и это тоже. Если можно было бы генерировать платформенно-независимый С-код, то зачем всякие Java. Писали бы на С, если он такой кросплатформеный. (Хотя можно, конечно #ifdef и вперед). Да и реализовывать исключения , имхо, придется для конкретных платформ.
Вообщем, прошу прощения, что лезу. В дальнейшем буду только читать.
-
homm © (25.12.07 21:39) [109] >> [108] GMax (25.12.07 21:36) >> в пнях еще кажется для этого даже спец-опкоды ввели, настолько >> удобно. >Ага, ввели и никому не сказали :) RTFM :-) kol.pas USE_CMOV правда введен все же с P6, поэтому Кладов не рекомендует... вплоть до неподержки в будущем языке ;-)
-
>Vladimir Kladov © (26.12.07 16:05) [110] >>myvar = 10, в другом mivar = 11 >такие вещи решаются просто. Даже если вы используете нотепад вместо >редактора, который должен предлагать подсказки. Если после второго >присваивания вы так и будете использовать mivar, то ошибки и нет.
а если ошибка случилась два раза ? например через copy/paste ? или еще каким способом ? в длинных текстах вполне легко такое случайно сделать.
короче, это к неоспоримым достоинствам нельзя отнести мне кажется
-
в висуал бэйсике есть подобное, но это можно отключить директивой, которая указывает, что нужно все переменные строго объявлять
|