-
Notifications
You must be signed in to change notification settings - Fork 173
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Style guide #3
Comments
@ivan-pi wrote in #11 (comment): For example for the function that checks whether a character is a letter some of the possible names are:
I have discussed this particular issue with several people many years ago and we eventually converged towards the following compromise: https://www.fortran90.org/src/best-practices.html#naming-convention So in the above case, Let me know what you think. P.S. Some examples from current Fortran. No underscore: |
In general I agree with your suggested naming conventions and also the ones in Fortran Best Practices. To stay close to the standard, I think it's best if we avoid CamelCase. Specifically, for the ascii functions there are 11 functions starting with |
You are right, isalpha is 3 syllables.
I think the rules can be broken where it makes sense and we have a good reason. Otherwise if we have no reason then the rules provide a good consistent default.
…On Mon, Dec 16, 2019, at 5:18 PM, Ivan wrote:
`isalpha` contains three syllables.
In general I agree with your suggested naming conventions and also the
ones in Fortran Best Practices
<https://github.com/Fortran-FOSS-Programmers/Best_Practices>. To stay
close to the standard, I think it's best if we avoid CamelCase.
Specifically, for the ascii functions there are 11 functions starting
with `is`, some are short (`is_alpha`), but some are long
(`is_hex_digit`, `is_octal_digit`). I suppose it's easiest to just
follow the C library <https://en.cppreference.com/w/c/string/byte> and
get rid of the underscores and shorten the names to 7-8 characters
(`isalpha`, `iszdigit` - z is used in hexadecimal boz constants,
`isodigit` - o is used in octal boz constants).
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#3?email_source=notifications&email_token=AAAFAWE3XEAVNGIXF5BNKJLQZALGHA5CNFSM4J25FZ62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHAT2DY#issuecomment-566312207>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAAFAWCAIOCRTWMOKJEVFX3QZALGHANCNFSM4J25FZ6Q>.
|
I'm on the same page here. I like all lowercase with underscores universally. For short variable and procedure names, dropping the underscore is OK I think. It's nice to have a universal rule to follow (always use underscores to separate words), but for some short names I think it's OK to make an exception. I don't think the Standard being inconsistent ( In this specific case, even though |
Yes, I generally agree but for assertion-y stuff I think separating the verb with an underscore makes sense use fortran_stdlib, only: is_alpha => isalpha |
Automation of pedantryI think that we should also adopt solutions like Editorconfig, possibly findent cmake-format (if we use CMake) and clang-format (for any C code). Tools like these that integrate with IDEs and editors will help get everyone on the same page allowing them to focus on semantics and code rather than style and formatting. In addition, I've really been appreciating and enjoying pre-commit to codify conventions on a per-project basis, and help catch silly issues before developers even commit/push code. |
Yes, I agree with @zbeekman we should try to automate as much as possible (formatting, release notes, etc.). And rather use our time and effort to discuss the actual API, not how it is formatted. I agree that |
Should I get a vote, I also prefer more verbose but hopefully clearer names, and prefer lowercase and underscores universally: Regarding names of string functions/subroutines, I'd definitely prefer more verbose and explicit over the short and cryptic. Thus: |
@smwesten-usgs thanks for the feedback. Yes, I agree on the examples you gave that underscores look better. Here are some examples where no underscores I think look better (from NumPy and Matlab):
|
Just speculation, but I suspect the difference between the underscore usage between maxexponent and set_exponent is that max is already the name of a different intrinsic function. |
I agree, and for the record, I wasn't suggesting we pick whatever and let people rename through use association; Good names from the get-go are important. |
Can we make some choices about indentation and tabs vs spaces? My preference is indent all indent-able things by two spaces; never use tabs. We can codify this in an editor-config file. |
My preference is 4 spaces, no tabs. |
A quick note: I'm happy with 2 or 4 but with the 132 character line limit, you can start to run out of real estate pretty quickly with 4 spaces. |
I also propose to stick to 80 characters per line.
More importantly though we should figure out automatic formatting checks at the CI and provide instructions how developers can format the code before submitting a PR.
…On Sun, Dec 22, 2019, at 10:45 AM, zbeekman wrote:
A quick note: I'm happy with 2 or 4 but with the 132 character line
limit, you can start to run out of real estate pretty quickly with 4
spaces.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#3?email_source=notifications&email_token=AAAFAWCALED2B7ENIAUQTPLQZ6RUFA5CNFSM4J25FZ62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEHPV5RY#issuecomment-568286919>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAAFAWDCAOJSSZM3QLGLKE3QZ6RUFANCNFSM4J25FZ6Q>.
|
80 characters per line and 4 spaces?! That seems like there will be an awful lot of line continuations and leading blanks... |
Yes, I've been using 80 characters and 4 spaces in all my projects. But whatever we decide is fine with me. Here are my priorities for
How we format the files are low on my priorities list, so whatever makes us work together works for me. |
I generally use 4 spaces (same as Python and most C++ codes I've seen), but I also don't mind if we agree to use 2 and I agree with the points of @certik. Generally, I try to stick to an 80 character limit, but I am happy to break the rule if it makes the indentation nicer. |
OK, let's go with 4 then, and we could admonish users to be within 80 characters (or 100, or whatever) but enforce a hard limit of 132 during CI. I'm working on getting a style document updated with comments from here and an |
I generally use whatever the number of spaces created by emacs when I hit "tab". Note that the line length limit will probably get really long (10,000 characters) in the next standard, so debates over 80 versus 132 are a bit dated. Personally I prefer to be able to read a line of code in a terminal window without horizontal scrolling. But I think that most "style guides" include a lot of unnecessary "nanny" rules that don't matter that much. I think a rule like "a sequence of lines that form a block in Fortran should be indented compared to the code lines that delineate the block" is sufficient. Much more relevant (in my view) would be code style rules such as "do not use include lines", or "never use preprocessing directives", or "never use tools like configure, cmake, or spack" would be more useful and relevant to Fortran. |
@longb haha "never use tools like ... cmake" Sometimes there are necessary evils. I agree about reading things in the terminal. Thats the spirit of creating a limit. Concerning emacs, it's easy to setup to respect Here is what I have in my (use-package editorconfig
:ensure t
:after ws-butler
:init
(setq editorconfig-trim-whitespaces-mode
'ws-butler-mode)
:config
(editorconfig-mode 1)
;; Always use tabs for Makefiles
(add-hook 'editorconfig-hack-properties-functions
'(lambda (props)
(when (derived-mode-p 'makefile-mode)
(puthash 'indent_style "tab" props))))) |
I've started trying to capture this discussion in PR #42 |
I prefer 2 spaces to indent, and try (but sometimes fail) to stay within 80-character line length. This is not for compatibility reasons, but for the same reason as Python recommendation -- I work in terminals of similar width and don't like the lines to wrap around. I think consistency is more important than any specific style "rule". I also don't think we need style enforcement (just yet). A brief style guide with recommendations and common sense go a long way. |
Some style suggestions that are probably obvious, but seem to be violated in some user code:
Violating these leads to portability problems. |
Comparison with Python or Matlab does not seem relevant. In both cases, native code is very slow, and they have to resort to libraries for any reasonable performance. Most compiled languages don’t have native support for arrays. Fortran does.
On Jan 30, 2020, at 4:14 PM, Ondřej Čertík ***@***.***> wrote:
Indeed, the only reason we started with mean was because it was the simplest. More complicated functions will follow soon. Finally, yes, it could be easily computed by hand using sum and size, but other libraries have such functions also, such as NumPy's mean or Matlab's mean (for examples in other languages see #113).
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.
Bill Long longb@cray.com
Principal Engineer, Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9143
Cray, a Hewlett Packard Enterprise company/ 2131 Lindau Lane/ Suite 1000/ Bloomington, MN 55425
|
Interesting example, though the code for Welford’s method does not vectorize and would not perform well on modern processors. I tried a simple example of the direct code and your welford example:
program test_var
use,intrinsic :: iso_fortran_env, only: int64, real64
implicit none
real :: x(1000), v
integer(int64) :: t1,t2,t3
real(real64) :: rate
call random_number(x)
call system_clock(t1, count_rate=rate)
v = variance(x)
call system_clock(t2)
print *, v, (t2-t1)/rate, " sec for Welford method"
call system_clock(t2)
v = var(x)
call system_clock(t3)
print *, v, (t3-t2)/rate, " sec for simple method"
contains
function var(x) result (res)
real,intent(in) :: x(:)
real :: res
real :: M, S
integer :: i
M = sum(x)/real(size(x))
S = sum( (x-m)**2 )
res = S/real(size(x)-1)
end function var
function variance(x) result(res)
real, intent(in) :: x(:)
real :: res
integer :: i
real :: M, S, delta
M = 0.
S = 0.
do i = 1, size(x)
delta = x(i) - M
M = M + delta/real(i)
S = S + delta * (x(i)-M)
enddo
res = S/real(size(x)-1)
end function variance
end program test_var
The output on a generic Intel processor that has SSE registers:
ftn test.f90
./a.out
8.192101866E-2, 7.15724721261053416E-6 sec for Welford method
8.192101866E-2, 7.80853517877739328E-7 sec for simple method
As you can see, the “simple” method is faster.
Cheers,
Bill
On Jan 30, 2020, at 1:53 PM, Jeremie Vandenplas ***@***.***> wrote:
Well, the main argument against implementing mean(x) this way is that the meat of the computation is...
@longb I am not sure which way you meant. From your comment, it understand you are against the mean function because it is a simple one. First I implemented it with loops, that have been removed through the review (to help for the clarity of the code mainly (and it was a good thing IMO)).
Otherwise, the main goal is to develop a module with multiple statistical functions (mean, variance, median, ....) inside stdlib. A module about statistics without mean would make little sense to me. Would it?
I think that this submodule could serve as an example for other functions that will be include in stdlib_experimental_stats (it also served as spotting some issues, like how to return NaN), like computing the variance with the Welford 's method:
function variance(x
) result(res)
real, intent(in) ::
x(:)
real ::
res
integer ::
i
real ::
M, S, delta
M
= 0
.
S
= 0
.
do i = 1, size
(x)
delta
= x(i) -
M
M
= M + delta/real
(i)
S
= S + delta * (x(i)-
M)
enddo
res
= S/real(size(x)-1
))
end function
Is this a more sensible example, assuming that it would be extended to have an API compatible with sum (i.e., with dim and mask included)?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.
Bill Long longb@cray.com
Principal Engineer, Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9143
Cray, a Hewlett Packard Enterprise company/ 2131 Lindau Lane/ Suite 1000/ Bloomington, MN 55425
|
They do not do it for performance reasons, but for convenience reasons. If you look at NumPy's implementation: this is not more performing than doing it by hand in NumPy. So performance is not the reason why NumPy has the API. Rather, I suspect, the reason is that users like to use such a function. |
@longb The comparison to Python and MATLAB is quite relevant because it informs our API design. We share much of the target audience with those and some other languages. |
Welford's method takes care of two things. Possible numerical instability; it's a single pass algorithm. It's a choose your poison scenario as with most robust computation algorithms. Regardless of the examples we use, and implementation we finally decide on for a stdlib that is generally applicable, I also think a lot of people will appreciate a centralized statistics based module. More and more people are using Python and Matlab over Fortran, following their direction at this point is absolutely the way to go, and saves us a lot of effort too! Discussions about individual algorithms is key to developing the best choice in each case. If the choice of any one algorithm is a bottleneck in a user's code, hopefully they give us some feedback, but they are also free to roll their own version of that algorithm. |
If a statistic or any kind of numerical algorithm is to make it in the
stdlib, I think it should be highly optimized or not implemented at all
(since, as Bill Long said, Fortran has enough intrinsic to not need a
function for average). If the algorithm is sub-optimal and not using the
best vectorization possible then nobody will use it and it will be dead.
The whole point of using Fortran is that here compiler can optimize things
but many of these optimizations are not possible if the calculations are
closed behind calls to libraries. Simple procedures (such as mean)
particularly "feel" that penalty. More complicated ones, not so much. So
maybe that could be critera what makes it into stdlib numerical part? Is
the procedure simple enough that calling it would introduce a significant
penalty? After all, I believe what makes it into stdlib should be in the
end considered exemplary and the best way of doing things.
czw., 30 sty 2020 o 23:52 Leon Foks <notifications@github.com> napisał(a):
… Welford's method takes care of two things. Possible numerical instability;
it's a single pass algorithm. It's a choose your poison scenario as with
most robust computation algorithms.
Regardless of the examples we use, and implementation we finally decide on
for a stdlib that is generally applicable, I also think a lot of people
will appreciate a centralized statistics based module. More and more people
are using Python and Matlab over Fortran, following their direction at this
point is absolutely the way to go, and saves us a lot of effort too!
Discussions about individual algorithms is key to developing the best
choice in each case. If the choice of any one algorithm is a bottleneck in
a user's code, hopefully they give us some feedback, but they are also free
to roll their own version of that algorithm.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#3?email_source=notifications&email_token=AC4NA3LEUVDMBU4WOJ7G47DRANKZXA5CNFSM4J25FZ62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKM3Q7Q#issuecomment-580499582>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AC4NA3LB5BZLSAKZTXSQDSLRANKZXANCNFSM4J25FZ6Q>
.
|
Sorry for the spam, one more thought. There was an argument some time ago
along the lines "procedures should not be standarized/implemented if they
are simple to write". While I generally disagree with that statement, I
think numerical algorithms is where some exception needs to be made,
because Fortran excels in numerical computation (unlike in everything else)
and its syntax allow writing most things in the most easy and efficient
way. So I would dare to argue that numerical part should be the least focus
of the stdlib because it is the part that least needs "fixing". What do you
think?
pt., 31 sty 2020 o 01:04 Dominik Gronkiewicz <gronki@gmail.com> napisał(a):
… If a statistic or any kind of numerical algorithm is to make it in the
stdlib, I think it should be highly optimized or not implemented at all
(since, as Bill Long said, Fortran has enough intrinsic to not need a
function for average). If the algorithm is sub-optimal and not using the
best vectorization possible then nobody will use it and it will be dead.
The whole point of using Fortran is that here compiler can optimize things
but many of these optimizations are not possible if the calculations are
closed behind calls to libraries. Simple procedures (such as mean)
particularly "feel" that penalty. More complicated ones, not so much. So
maybe that could be critera what makes it into stdlib numerical part? Is
the procedure simple enough that calling it would introduce a significant
penalty? After all, I believe what makes it into stdlib should be in the
end considered exemplary and the best way of doing things.
czw., 30 sty 2020 o 23:52 Leon Foks ***@***.***> napisał(a):
> Welford's method takes care of two things. Possible numerical
> instability; it's a single pass algorithm. It's a choose your poison
> scenario as with most robust computation algorithms.
>
> Regardless of the examples we use, and implementation we finally decide
> on for a stdlib that is generally applicable, I also think a lot of people
> will appreciate a centralized statistics based module. More and more people
> are using Python and Matlab over Fortran, following their direction at this
> point is absolutely the way to go, and saves us a lot of effort too!
>
> Discussions about individual algorithms is key to developing the best
> choice in each case. If the choice of any one algorithm is a bottleneck in
> a user's code, hopefully they give us some feedback, but they are also free
> to roll their own version of that algorithm.
>
> —
> You are receiving this because you commented.
> Reply to this email directly, view it on GitHub
> <#3?email_source=notifications&email_token=AC4NA3LEUVDMBU4WOJ7G47DRANKZXA5CNFSM4J25FZ62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKM3Q7Q#issuecomment-580499582>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/AC4NA3LB5BZLSAKZTXSQDSLRANKZXANCNFSM4J25FZ6Q>
> .
>
|
To answer that, we need to have benchmarks.
And as a user, I feel the compilers are not doing their job if they can't inline functions like mean(). That is one of the motivations why I started LFortran, to try to fix such deficiencies. This is long term, obviously.
The idea of all the efforts that we are doing (J3 GitHub, stdlib, fpm, as well as new compilers) is to fix all the things that have been bothering us about Fortran. It's not going to get fixed overnight, but it will get fixed eventually.
…On Thu, Jan 30, 2020, at 5:05 PM, Dominik Gronkiewicz wrote:
If a statistic or any kind of numerical algorithm is to make it in the
stdlib, I think it should be highly optimized or not implemented at all
(since, as Bill Long said, Fortran has enough intrinsic to not need a
function for average). If the algorithm is sub-optimal and not using the
best vectorization possible then nobody will use it and it will be dead.
The whole point of using Fortran is that here compiler can optimize things
but many of these optimizations are not possible if the calculations are
closed behind calls to libraries. Simple procedures (such as mean)
particularly "feel" that penalty. More complicated ones, not so much. So
maybe that could be critera what makes it into stdlib numerical part? Is
the procedure simple enough that calling it would introduce a significant
penalty? After all, I believe what makes it into stdlib should be in the
end considered exemplary and the best way of doing things.
czw., 30 sty 2020 o 23:52 Leon Foks ***@***.***> napisał(a):
> Welford's method takes care of two things. Possible numerical
instability;
> it's a single pass algorithm. It's a choose your poison scenario as
with
> most robust computation algorithms.
>
> Regardless of the examples we use, and implementation we finally
decide on
> for a stdlib that is generally applicable, I also think a lot of
people
> will appreciate a centralized statistics based module. More and more
people
> are using Python and Matlab over Fortran, following their direction
at this
> point is absolutely the way to go, and saves us a lot of effort too!
>
> Discussions about individual algorithms is key to developing the best
> choice in each case. If the choice of any one algorithm is a
bottleneck in
> a user's code, hopefully they give us some feedback, but they are
also free
> to roll their own version of that algorithm.
>
> —
> You are receiving this because you commented.
> Reply to this email directly, view it on GitHub
>
<#3?email_source=notifications&email_token=AC4NA3LEUVDMBU4WOJ7G47DRANKZXA5CNFSM4J25FZ62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKM3Q7Q#issuecomment-580499582>,
> or unsubscribe
>
<https://github.com/notifications/unsubscribe-auth/AC4NA3LB5BZLSAKZTXSQDSLRANKZXANCNFSM4J25FZ6Q>
> .
>
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#3?email_source=notifications&email_token=AAAFAWGSWDMRIH7HII4ZMK3RANTLVA5CNFSM4J25FZ62YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKNAOYI#issuecomment-580519777>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AAAFAWH5IP3UTOPCQDK4XXTRANTLVANCNFSM4J25FZ6Q>.
|
Even simple routines should consider robustness not just speed; and in a perfect world avoid pitfalls users are not always considering, such as data conditioning. Are you more impressed by a compiler whose SUM() function returns the value of OUTLIER() on the first call or one that generates the last value calculated no matter where the OUTLIER() value is placed in the ARR() array? program testit
integer,parameter :: elements=10000000
real :: arr(elements)
real :: summary
real :: outlier=huge(summary)/10.0**30
integer :: i
arr=1.0
arr(1)=outlier
write(*,*)'biggest=',arr(1)
summary=0.0
do i=1,elements
summary=summary+arr(i)
enddo
write(*,*)'loop sum biggest first=',summary
write(*,*)'biggest first sum=',sum(arr)
summary=0.0
arr(1)=1.0
arr(elements)=outlier
do i=1,elements
summary=summary+arr(i)
enddo
write(*,*)'loop sum biggest last=',summary
write(*,*)'biggest last sum=',sum(arr)
end program testit Do you get this: or is "biggest first sum" 350282336. ? This is an artificial case, but reflects real-world errors that often happen in real-world problems. So I can easily imagine a MEAN() function that is a lot more substantial than just replacing a single line; |
There can be different versions of (All my production applications do not depend on the order of summation, but for some users that can be helpful, and in that case they can call such different method.) Anyway, this is not related to the style guide. Please open separate issues for that. And even better, let's start discussing and submitting PRs for all this functionality, so that we can get towards our goal sooner. |
In a general way, IMO the algorithms must be first robust and accurate (at least as mush as the intrinsic functions; see comment) for a vast majority of the cases available in the community (and not for a personal/specific case). What is the point to have a fast and very efficient algorithm that returns a wrong answer in some general cases? E.g., the "simple" method in comment is faster (while I think most of you could optimize the other one), but in many of my real cases this "faster" function may return a wrong answer. So, there is a trade-off between accuracy/robustness and efficiency, and this may vary depending on the real scenarios. We need to weight advantages and disavantages of both (e.g, I would be happy if the faster method is implemented but the spec should mention its limitations if its robustness is below the one of intrinsic functions). integer(int8) :: x(:,:)
print*, mean(x, x < 3) !dp result over integer(int8) :: x(:,:)
print*, sum(real(x,dp), x < 3) / real(count(x < 3, kind = int64), dp) If you are interested in the discussion about descriptive statistics and want to participate to it, please see #113 and #128 . I am sorry to have opened a discussion about utility/usefulness/efficiency of specific procedures ( |
Edit: I forgot we already have the STYLE_GUIDE.md. I will see to create a pull request once I have something. I've been using the Google C++ Style Guide lately, and found it very helpful to maintain clean code and refresh my memory on best practices. The table of contents is very practical to quickly locate the desired language feature. A few similar (project-specific) Fortran style guides are:
Other inspiration: |
Interesting lists. Particularly the CP2K and UK Met sites that actively advocate to avoid F2003 as being “too new”. This points out an important issue with coding style documents. It is needed to incorporate a scheme for constant updating as the underlying language changes. (It is also helpful to understand how CP2K gets to be so bug-ridden.)
Cheers,
Bill
On Feb 15, 2021, at 4:50 AM, Ivan Pribec ***@***.***> wrote:
Should we start a Wiki page for the style guide? I believe we have already converged to some common practices in the current stdlib modules.
I've been using the Google C++ Style Guide lately, and found it very helpful to maintain clean code and refresh my memory on best practices.
A few similar (project-specific) Fortran style guides are:
• @certik 's Fortran Best Practices
• DFTB+ Developers Fortran style guide
• CP2K Coding Conventions
• Object Modeling System Fortran 90/95 Coding Conventions from Colorado State university
• Fortran Coding Standards for JULES (UK Met Office)
• Fortran coding standard for FCM (UK Met Office)
Other inspiration:
• Boost Library Requirements and Guidelines
• PEP 8 -- Style Guide for Python Code
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or unsubscribe.
Bill Long longb@hpe.com
Engineer/Master , Fortran Technical Support & voice: 651-605-9024
Bioinformatics Software Development fax: 651-605-9143
Hewlett Packard Enterprise/ 2131 Lindau Lane/ Suite 1000/ Bloomington, MN 55425
|
Update of the specs for stdlib_sorting
Add general tester against intrinsic array slice
What's the current consensus on the space in an end block keyword, e.g. |
I think the consensus is to use |
renamed strings_format_string to string_format_string
I have just found a few unnecessary semicolons at the end of statements in Line 146 in 22c1be0
which may be a style issue for those who use both Fortran and C-like languages and hopefully be avoided by the use of some linters in future. |
Use this issue to discuss the code style for the stdlib.
The most widely supported elements of style will eventually be merged into the Style Guide for contributors.
The text was updated successfully, but these errors were encountered: