Здравствуйте, Ночной Смотрящий, Вы писали:
НС>А, синтаксический оверхед? Знакомо. Но есть нюанс — написание контроллеров в реальных проектах занимает 0.1% времени.
Не знаю о каком оверхеде идет речь. код F# в несколько раз короче и выразительней C#. И кто му же более однозначный за счет отсутствия void(по сути это тип означающий некую неопределенность результата).
НС>И? Можешь привести пример разницы в результирующем IL?
Предлагаете мне провести сравнительный анализ кода компиляторов. Очевидного для вас мало?
НС>Ну так расскажи про опыт.
хелоуворд опыт.
Здравствуйте, varenikAA, Вы писали:
НС>>А, синтаксический оверхед? Знакомо. Но есть нюанс — написание контроллеров в реальных проектах занимает 0.1% времени. AA>Не знаю о каком оверхеде идет речь. код F# в несколько раз короче и выразительней C#.
Вот прям в несколько раз? И короче — это далеко не главная характеристика языка.
НС>>И? Можешь привести пример разницы в результирующем IL? AA>Предлагаете мне провести сравнительный анализ кода компиляторов. Очевидного для вас мало?
Ну значит я прав — религия.
НС>>Ну так расскажи про опыт. AA>хелоуворд опыт.
Здравствуйте, ути-пути, Вы писали:
I>>typeof NaN === 'number' это валидная вещь, все по спеке Double, где NaN является числом.
УП>А в спеке случайно нет, что черное — это белое?
Тебе ктото запрещает открыть спецификацию IEEE 754 ? Все языки, которые реализуют Float, double итд реализуют одно и то же.
The standard defines:
arithmetic formats: sets of binary and decimal floating-point data, which consist of finite numbers (including signed zeros and subnormal numbers), infinities, and special "not a number" values (NaNs)
Здравствуйте, ути-пути, Вы писали:
УП>В твоей цитате это лишь специальное значение, а никак не число.
Ты попутал понятие типа и значения. Тип — float, а значение — NaN.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
УП>
УП>В твоей цитате это лишь специальное значение, а никак не число.
В том то и дело, что значение. А тип определяет конкретный язык программирования. Например, язык С# и функция такого вида
void F(double x) {
...
}
Очевидно, что бы передать NaN надо вызвать так F(Double.NaN)
Соответственно, здесь обнаруживаем ровно ту же проблему — в C# NaN является значением типа Double, а следовательно и числом.
Товарищи решили прикрыться фиговым листочком и переопределили оператор сравнения, т.е. NaN == NaN всегда будет false.
О ужос! И это C# !!!!1111
Здравствуйте, ути-пути, Вы писали:
УП>·>Ты попутал понятие типа и значения. Тип — float, а значение — NaN. УП>Я попутал? "NaN является числом" я написал?
Ты из контекста выдрал и решил заняться буквоедством?
typeof NaN === 'number' это валидная вещь, все по спеке Double, где NaN является числом.
По-моему это очевидно, что человек хотел сказать, что тип значения NaN — число.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, ·, Вы писали:
·>Ты из контекста выдрал и решил заняться буквоедством?
·>По-моему это очевидно, что человек хотел сказать, что тип значения NaN — число.
Так косноязычие в технических дисциплинах может привести к проблемам. Почему-то в спеке, которую он процитировал, такого бреда нет.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, ути-пути, Вы писали:
УП>·>Ты из контекста выдрал и решил заняться буквоедством? УП>·>По-моему это очевидно, что человек хотел сказать, что тип значения NaN — число. УП>Так косноязычие в технических дисциплинах может привести к проблемам. Почему-то в спеке, которую он процитировал, такого бреда нет.
Человек писал не спеку, а сообщение в форум.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, Ikemefula, Вы писали:
I>Странно, почему тогда пишешь длинно, пространно, да буквами, а не зипованым бинарным кодом?
Что тут странного? Я не евангелист,насильно не собираюсь идеи насаждать.
Если даже от многобукв столько негатива, то что будет когда я кодом начну выражаться?
Здравствуйте, varenikAA, Вы писали:
AA>Что тут странного? Я не евангелист,насильно не собираюсь идеи насаждать. AA>Если даже от многобукв столько негатива, то что будет когда я кодом начну выражаться?
Здравствуйте, ути-пути, Вы писали:
I>>В том то и дело, что значение.
УП>А кто писал, что не число — это число?
В ЯП не бывает просто значений. Они всегда какого то типа в т.ч. NaN.
То есть, NaN это такое же значение, как и все остальные в Double — 64 бита плавающая запятая, то есть это Double, т.е. число. Технически. Но для этого значения переопределены некоторые операции. Вот и все.
Вот малюсенький пример (посчитать среднее время между соседними событиями лога):
сколько кода займет такое на вашем ЯП?
Желательно как и здесь в виде скрипта
#r "nuget: FSharp.Data, 3.3.3"open FSharp.Data
open System
open System.IO
type RzLog = CsvProvider<"log.csv", ResolutionFolder=__SOURCE_DIRECTORY__, HasHeaders=true>
let path fn = Path.Combine(__SOURCE_DIRECTORY__, fn)
let data = RzLog.Load(path "log.csv")
let rows = data.Rows
let report y =
rows
|> Seq.filter (fun e -> e.DateTimeOffset.Year = y)
|> Seq.sortByDescending (fun e -> e.DateTimeOffset)
|> Seq.map (fun e -> e.DateTimeOffset)
|> Seq.pairwise
let ts s =
s
|> Seq.averageBy
(fun (a: DateTimeOffset, b: DateTimeOffset) ->
let c = a - b
c.TotalMinutes)
let ms s =
s
|> Seq.map
(fun (a: DateTimeOffset, b: DateTimeOffset) ->
let c = a - b
c.TotalMinutes)
let one s =
s
|> Seq.map
(fun (a: DateTimeOffset, b: DateTimeOffset) ->
let c = a - b
c.TotalMinutes > 1.)
for i in [ 2019 .. 2021 ] do
let t = report i |> ts
let min = report i |> ms |> Seq.min
let max = report i |> ms |> Seq.max
let dt = report i |> one |> Seq.countBy (id)
let (a, b) = dt |> Seq.head
let (c, d) = dt |> Seq.skip 1 |> Seq.head
printfn $"{i} {t} {min} {max} {(a, b)} {(c, d)}"let byH =
report 2020
|> Seq.filter
(fun (a, b) ->
Seq.contains a.DayOfWeek [ DayOfWeek.Saturday; DayOfWeek.Sunday ]
|> not
&& a.Hour > 6
&& a.Hour < 22)
|> Seq.map (fun (a, b) -> (a.Hour, (a - b).TotalMinutes))
|> Seq.groupBy (fun (a, b) -> a)
|> Seq.map (fun (a, b) -> (a, b |> Seq.averageBy (fun (a, b) -> b)))
|> Seq.sortBy (fun (a, b) -> a)
for h in byH do
printfn $"{fst h} {Math.Round(snd h)}"