Здравствуйте, <Аноним>, Вы писали:
А> Чушь какая. Это тьюринг-полный язык, пусть и узкоспециализированный. Что с того, что в языке нет ввода/вывода? Он от этого менее языком не становится. Синтаксис есть, семантика есть, любой алгоритм в рамках этой семантики выразить можно — значит, сугубо по определению — это есть язык.
На это тебе попросят показать спецификацию этого языка. А когда ты это сделать не сможешь, тебе скажут, что язык без спецификации — это недоразумение.
G>> Поэтому глупо их противопоставлять.
А> Ага, ага, а ещё C++ и C-препроцессор — это тоже всё один язык. И GNU autotools — конечно же тоже часть языка C++, как же без этого.
Дык это части одного языка. На них есть спецификация. Они стандартизованы.
А> Если они не дураки, то прекрасно поймут, о чём тут речь идёт. Не дураки ведь пользуются только строго формальными определениями.
Боюсь, они вообще ничего не поймут. Да и задачи у них другие.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, <Аноним>, Вы писали:
А> Сдаётся мне, что у вас очень серьёзные пробелы в образовании.
На этом сайте разговоры о компетенции собеседника, темболее в таком тоне, запрещены. Для анонимов сразу идет бан по IP. Так что просьба воздержаться от подобных наездов.
От себя сказу, что у меня лично нет сомнений в том, что Гапертон понимает что такое метапрограммирование на шаблонах С++ и что из себя пердставляет "язык шаблонов", т.е. рекурсивное воплощение шаблонов. Про Александруску он наверно тоже слышал. Так что не стоит переводить треминологический спор (бессмысленный и беспощадный) в "сам дурак".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Аноним, Вы писали:
А> Сдаётся мне, что у вас очень серьёзные пробелы в образовании. Семантика есть — значит это язык.
Не стоит вот так собеседнику говорить про "пробелы" — это проигрышно для вас, даже если бы у вас было хорошее образование. Хотя бы потому, что кроме семантики, у языка синтаксис еще должен быть. У вашего "языка темплейтов" своего синтаксиса нет, он есть у С++. Какая досада.
А> Скажите, вы, случайно, не гуманитарий? Уж больно у вас гуманитарские представления.
Нет, к сожалению для вас я закончил профильный факультет МГУ (ВМиК), и достаточно хорошо представляю себе как поведение дипломной комиссии, так и что такое язык программирования. Уж не хуже выпускников мухосранских и московских "технических" вузов третьего эшелона, точно.
А> В формальном определении понятия "язык программирования" нет ни слова о том, куда должны быть подшиты страницы с описанием этого самого языка, чтобы он считался "самостоятельным" языком. Если можно выделить замкнутую семантику — то она и будет самостоятельным языком, чисто формально, а про всё остальное пусть волнуются гуманитарии, и желательно — где либо подальше от программирования.
Язык задается описанием синтаксиса (без этого вы ай-ай-ай — не то что транслятор не напишете — вы вообще не сможете вообще понять, текст на вашем "языке" написан, или нет) и семантики (которую вообще нельзя однозначно задать не имея синтаксиса языка). Если вы способны дать отдельное изолированное описание этой пары — вы действительно описали отдельный язык.
G>>Это во первых. А во вторых — если экзаменуемый не дурак, то он прекрасно поймет, что имеют в виду, когда просят противопоставить функциональный язык императивному на примере сравнения с С++. А> А я вот — не пойму. Я что, дурак?
Не знаю, не знаю. Вас просят противопоставить нечто языку С++ — подразумевая весь С++, включая шаблоны и прочее. Вы же берете часть С++, и противопоставляете его всему С++. И как это понимать? Вы — дурак? Или вы чего-то не знаете? Или вы просто ошиблись сгоряча, не поняв вопрос?
G>> Уж разумеется, речь идет совсем не о "языке темплейтов С++" как примере функционального языка для сравнения с С++. А> "Разумеется" — это только для гуманитариев. Я же — computer scientist, я математик, и мнение гуманитариев мне до лампочки.
Как у нас любит говорить VladD2 — "очередное бездоказательное утверждение"
Ого-го какие нешуточные бои развернулись!))) Все же программисты- люди увлеченные)))) И как кто-то тут правильно заметил, мозги у меня, может и не прополоскались, но уж точно офигели от всего этого объема информации! за 5 лет учебы не "постигала" так много так быстро
А позвольте поинтересоваться, вы все занимаетесь непосредственно написанием прог по жизни? или есть просто любители?
Здравствуйте, VladD2, Вы писали:
VD>XSLT сомнительно. Там циклы, переменные и даже расширения (стандартом описанные) скриптовые.
Ну и что? Расширения — только функции; минимальная интеграция с внешним миром, так сказать. Переменные неизменяемые. Как следствие — возможны ленивые вычисления (уж не знаю, реализованы ли они на самом деле). Каждый шаблон можно вполне рассматривать как функцию result-tree-fragment = f (nodeset, nodeset, ...). С использованием EXSLT брюки превращаются: nodeset = exslt:node-set(result-tree-fragment). Насколько я успел понять из здешних флеймов (гы, нехилый у меня источник самообразования ), всего этого достаточно, чтобы обозвать язык чисто функциональным. Да, кстати, ООП там также не пахнет.
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR> меня встревожила фраза "OCaml чуть чуть устарел" by geniepro. Подожду, может он ответит, что он имел ввиду под ней.
Вообще-то я вовсе не предлагаю списывать Окамл со счетов... ;о)
Просто у меня лично сложилось такое впечатление — по сравнению с Хаскеллем и Немерле Окамл действительно выглядит несколько архаично — ну так он и старше (вроде бы)...
Ну хорошо, какие сейчас новости в мире Окамля? (Кроме F#)
Какие новые идеи появляются сейчас у создателей Окамля?
Может быть, я не прав, и действительно Окамл развивается дальше? Или всё-таки он уже остановился в развитии, а следовательно — устарел?
Здравствуйте, geniepro, Вы писали:
G>Ну хорошо, какие сейчас новости в мире Окамля? (Кроме F#)
Да, революционных изменений в языке давно не было, периодически выходят новые релизы с багфиксами и т.п. Правда, в последнем релизе основательно переделали Camlp4 — народ возмущался. Но, с другой стороны, отсутствие экспериментальных расширений системы типов в каждом релизе не делает язык устаревшим, скорее он становится пригоднее для реальных проектов. G>Какие новые идеи появляются сейчас у создателей Окамля? Recent publications of project Gallium
Здравствуйте, lomeo, Вы писали:
G>> Можно провести простейшие тесты, в которых анализатор строгости в Хаскелле позволяет сгенерировать более быстрый код, чем даже в Си (пример — функция Аккермана).
L> Что то не верится. Си всё таки считай ассемблер и есть. L> Приведи, пожалуйста.
module ack
import StdInt
ack :: Int Int -> Int
ack m n | m == 0 = n + 1
| n == 0 = ack (m-1) 1
| otherwise = ack (m-1) (ack m (n-1))
Start = ack 3 11
Haskell:
ack :: Int -> Int -> Int
ack m n | m == 0 = n + 1
| n == 0 = ack (m-1) 1
| otherwise = ack (m-1) (ack m (n-1))
main = print (ack 3 11)
F#:
let rec ack (m:int) (n:int) : int =
if m = 0 then n + 1 else
if n = 0 then ack (m-1) 1 else
ack (m-1) (ack m (n-1))
let st = System.DateTime.Now
let h = ack 3 11
let ft = System.DateTime.Now
let t = time ft - time st
do System.Console.WriteLine ("ack 3 11 = {0} & time is {1}\n", h, t)
C:
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
int ack (int m, int n)
{
if (m == 0) return n + 1; else
if (n == 0) return ack (m - 1, 1); else
return ack (m - 1, ack (m, n - 1));
}
void main(void)
{
DWORD st, ft;
int m;
st = GetTickCount();
m = ack (3, 11)+1; // Единица здесь прибавляется, а затем убавляется ниже, для того,
// что бы шаловливый оптимизатор не заоптимизировал программу слишком сильно
// и не вызвал ack до обоих вызовов GetTickCount (есть такой глюк)
ft = GetTickCount();
printf("%d\n\nTime is %ld msec\n", m-1, (ft-st));
}
C#:
using System;
using System.Collections.Generic;
using System.Text;
namespace Ackerman
{
class Program
{
static long Time(DateTime t)
{
return (((t.Hour * 60) + t.Minute) * 60 + t.Second) * 1000 + t.Millisecond;
}
static int Ack(int m, int n)
{
if (m == 0) return n + 1; else
if (n == 0) return Ack(m - 1, 1); else
return Ack(m - 1, Ack (m, n - 1));
}
static void Main(string[] args)
{
DateTime st, ft;
st = DateTime.Now;
int a = Ack(3, 11);
ft = DateTime.Now;
Console.WriteLine("Ack(3, 11) = {0} time = {1}", a, Time(ft) - Time(st));
}
}
}
Scheme:
(module a mzscheme
(define (ack m n)
(cond ((= m 0) (+ n 1))
((= n 0) (ack (- m 1) 1))
(else (ack (- m 1) (ack m (- n 1))))))
(define t (current-milliseconds))
(define a (ack 3 11))
(printf "(ack 3 11): ~s in ~s~n" a (- (current-milliseconds) t))
)
(require a)
С программой на Scheme вообще-то в данном примере не совсем короректная ситуация — я не знаю, как указать компилятору использовать тип int32. Боюсь, здесь используется стандартный подход — пока результат влезает в определённую машинную разрядность (в DrScheme, по-моему, 64 бита), числа хранятся и оперируются в этом виде (int64), а как только выходит за пределы этих 64 бит, вычисления идут уже с BigInt.
Даже если разрядность компилятором в данном случае ограничена типом int64, то вот уже как минимум полуторократное замедление программы по сравнению с другими — ведь там везде расчёты с типом int32... То есть производительность получается примерно на уровне C#...
В программах на С# и Scheme ещё идёт и проверка на выход за пределы диапазона целых чисел, тогда как в других языках её нет — это тоже замедляет расчёты.
Здравствуйте, VladD2, Вы писали:
VD2> Это все сказки. Практика она однозначно показывает, что добиться производитльности которую обеспечивают строгие, статически-типизированные, компилируемые языки на Хаскеле невозможно. И виной тому ленивость.
Ленивость можно подавить и будет это не сложнее, чем явное указание ленивости в строгих языках.
VD2> Что до скорости, то Common Lisp и Scheme могут компилироваться только в JIT-манере. Плюс языки динамически типизированные без вывода таипов. По этому в них приходится явно задавть повсеместно типы чтобы получить хотя бы похожую на С-шную прозводительность.
Был такой язык Self — весь из себя динамический. Вряд ли есть язык более динамический, чем Self...
Сановцы, разработчики Self'а, смогли создать для него компилятор, генерирующий код всего в 1.7 раза медленнее, чем у лучших (на тот момент) компиляторов Си. Они в своих исследованиях выяснили, что теоретически можно добиться отставания в скорости всего на треть. А потом начали делать Яву...
VD2> Ни Common Lisp, ни Scheme не поддеживают ООП на уровне языка. Для CL есть MOP — но это стандарт (которых похоже так и не реализуется одинаково всеми) на макро-библиотеку.
"Библиотека — это язык, пытающийся вырваться на свободу..."
Ну какая разница — встроено в язык или реализовано в виде библиотеки типа CLOS?.. Главное, что использование того же CLOS'а для лисперов выглядит совершенно естественно, так, как буд то это часть языка, а не какая-то левая библиотека. К тому же CLOS входит в стандарт Common Lisp'a, а значит её таки можно считать частью языка...
Здравствуйте, konsoletyper, Вы писали:
K>Здравствуйте, <Аноним>, Вы писали:
А>> Я в сторону Nemerle не шуганусь ни за какие коврижки,
K>Почему?
Эх, не хотелось бы мне участвовать в очередном флейме, но не могу удержаться от цитаты:
______________________
Алан Перлис однажды заметил: “Язык, освоение которого не позволяет найти новые подходы к программированию, не заслуживает изучения”.
______________________
Разве Немерле даёт что-то новое, чего не давал бы какой-нибудь другой язык? Он только комбинирует в себе кучу разных идей...
Есть ли в Немерле своя "национальная идея"?
Здравствуйте, Дм.Григорьев, Вы писали:
ДГ>Ну и что? Расширения — только функции; минимальная интеграция с внешним миром, так сказать. Переменные неизменяемые. Как следствие — возможны ленивые вычисления (уж не знаю, реализованы ли они на самом деле). Каждый шаблон можно вполне рассматривать как функцию result-tree-fragment = f (nodeset, nodeset, ...). С использованием EXSLT брюки превращаются: nodeset = exslt:node-set(result-tree-fragment). Насколько я успел понять из здешних флеймов (гы, нехилый у меня источник самообразования ), всего этого достаточно, чтобы обозвать язык чисто функциональным. Да, кстати, ООП там также не пахнет.
Ну, и как быть с циклами? Разве в чистых ФЯ они могут быть?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, geniepro, Вы писали:
G>Ленивость можно подавить и будет это не сложнее, чем явное указание ленивости в строгих языках.
Пока что я наблюдаю обратное. Надобность в линивости появляется редко и если она нужна, то есть тысяча спосбов ее зполучить.
G>Был такой язык Self — весь из себя динамический. Вряд ли есть язык более динамический, чем Self...
Он и сейчас есть. Развите Смолтока.
G>Сановцы, разработчики Self'а,
Чё? А орлы из Ксерокс-Парка не обидятся на присвоедие их разработок Сану?
G> смогли создать для него компилятор, генерирующий код всего в 1.7 раза медленнее, чем у лучших (на тот момент) компиляторов Си.
Это чушь. Может отдельные оперкции он и мог скопилировать в 1.7 раза медленее, но вот с его пототипной природой хрена два можно было реально быстрый код порождать.
G> Они в своих исследованиях выяснили, что теоретически можно добиться отставания в скорости всего на треть. А потом начали делать Яву...
... и сделаои ее типобезопасной... и теперь код на яве отстает всего на треть (в лучшем случае).
VD2>> Ни Common Lisp, ни Scheme не поддеживают ООП на уровне языка. Для CL есть MOP — но это стандарт (которых похоже так и не реализуется одинаково всеми) на макро-библиотеку.
G>"Библиотека — это язык, пытающийся вырваться на свободу..."
Ага. А демогогия — это искуство мыслить творчески.
G>Ну какая разница — встроено в язык или реализовано в виде библиотеки типа CLOS?..
Огромная. Она не является вастью языка. Более того она является другим языком, так как это макро-библиотека. Я вот на Немерле могу сэмулировать С++, но ведь от этого Немерле С++-ом ведь не станет. Или станет?
G> Главное, что использование того же CLOS'а для лисперов выглядит совершенно естественно,
Главно, что о нем даже не слышно. А мои попытки скомпилировать CLOS-примеры окончились не чем, так как все три скаченные мной компилятора/интерпретатора ругались на этот код, но в разных местах.
G> так, как буд то это часть языка, а не какая-то левая библиотека. К тому же CLOS входит в стандарт Common Lisp'a, а значит её таки можно считать частью языка...
Незнаю как в стандарт, я такого вообще не видел, вот в реализации он что- очень разные "входит". Столь разный, что плакать охота.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Gaperton, Вы писали:
А>> Скажите, вы, случайно, не гуманитарий? Уж больно у вас гуманитарские представления. G>Нет, к сожалению для вас я закончил профильный факультет МГУ (ВМиК), и достаточно хорошо представляю себе как поведение дипломной комиссии, так и что такое язык программирования. Уж не хуже выпускников мухосранских и московских "технических" вузов третьего эшелона, точно.
Ну, я не могу понять... Ну, этого орла мы забаним по IP, так он один фиг из под прокси видимо лезит. Но тебя то если забанят, то уже на долго. Неужели нельзя не реагировать на подобные провакационные выпады в той же манере?
В общем, в этот раз я сделал вид, что не заметил, но на будующее, просьба просто молчать если хочется ответить гадость.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.